harperdb 4.2.0-rc.2 → 4.2.0
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 +6 -8
- package/bin/harperdb.js +24 -24
- package/bin/lite.js +19 -19
- package/dependencies/linux-x64/nats-server +0 -0
- package/dependencies/nats-server.zip +0 -0
- package/launchServiceScripts/launchInstallNATSServer.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +16 -16
- package/launchServiceScripts/launchNatsReplyService.js +16 -16
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +16 -16
- package/npm-shrinkwrap.json +317 -317
- package/package.json +7 -7
- package/resources/auditStore.d.ts +8 -0
- package/server/jobs/jobProcess.js +16 -16
- package/server/threads/threadServer.js +19 -19
- package/utility/scripts/restartHdb.js +16 -16
package/bin/harperdb.js
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var uk=Object.create;var Kc=Object.defineProperty;var lk=Object.getOwnPropertyDescriptor;var _k=Object.getOwnPropertyNames;var dk=Object.getPrototypeOf,fk=Object.prototype.hasOwnProperty;var a=(e,t)=>Kc(e,"name",{value:t,configurable:!0});var Re=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Fe=(e,t)=>{for(var r in t)Kc(e,r,{get:t[r],enumerable:!0})},gN=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of _k(t))!fk.call(e,n)&&n!==r&&Kc(e,n,{get:()=>t[n],enumerable:!(s=lk(t,n))||s.enumerable});return e};var P=(e,t,r)=>(r=e!=null?uk(dk(e)):{},gN(t||!e||!e.__esModule?Kc(r,"default",{value:e,enumerable:!0}):r,e)),te=e=>gN(Kc({},"__esModule",{value:!0}),e);var ON=T((Rde,AN)=>{var Ek=require("fast-glob"),{statSync:ym,existsSync:Im,readFileSync:hk,writeFileSync:mk}=require("fs"),{spawnSync:pk,spawn:Sk,execFileSync:gde}=require("child_process"),{isMainThread:Tk}=require("worker_threads"),{join:bi,relative:RN}=require("path"),{PACKAGE_ROOT:Ns}=A(),{tmpdir:gk,platform:Rk}=require("os");require("source-map-support").install();var Ak=["resources","server","dataLayer","components"],Wc="ts-build",wm,Ok=__filename.endsWith("tsBuild.js");if(Ok){if(Tk){let r;try{ym(bi(Ns,Wc)),r=!0}catch{}if(r)for(let s of Ek.sync(Ak.map(n=>n+"/**/*.ts"),{cwd:Ns})){let n=0,i=0;try{n=ym(bi(Ns,s)).mtimeMs-5e3,i=ym(bi(Ns,Wc,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),wm=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),wm=!0;if(wm){let s=bi(Ns,"node_modules/.bin/tsc");Rk()==="win32"&&(s+=".cmd");let n=pk(s,{cwd:Ns});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=bi(gk(),"harperdb-tsc.pid"),o;if(Im(i))try{process.kill(+hk(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=Sk(s,["--watch"],{cwd:Ns,detached:!0,stdio:"ignore"});mk(i,c.pid.toString()),c.unref()}}}}let e=AN.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(Ns)&&!s[0].includes("node_modules")){let i=RN(Ns,s[0]),o;i.startsWith(Wc)?o=bi(Ns,RN(Wc,i)):o=bi(Ns,Wc,i);let c=bi(o,r),u=c+".js";if(Im(u))return u;if(c.includes(".")&&Im(c))return c}return t(r,s,n)}}});var A=T((Nde,HN)=>{"use strict";var es=require("path"),Nk=require("fs"),{relative:Ade,join:Ode}=es,{existsSync:bk}=Nk;function yk(){let e=__dirname;for(;!bk(es.join(e,"package.json"));){let t=es.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(yk,"getHDBPackageRoot");var yi=yk(),NN="js",x_=NN,Ik="harperdb-config.yaml",wk="defaultConfig.yaml",Ck="hdb",bN=`harperdb.${x_}`,yN=`customFunctionsServer.${x_}`,Lk=`restartHdb.${x_}`,Lm="HarperDB",F_="Custom Functions",k_="Clustering Hub",$_="Clustering Leaf",Dk="Clustering Ingest Service",Pk="Clustering Reply Service",Mk="foreground.pid",Uk="hdb.pid",vk="data",Bk={HDB:Lm,CLUSTERING_HUB:k_,CLUSTERING_LEAF:$_,CLUSTERING_INGEST_SERVICE:Dk,CLUSTERING_REPLY_SERVICE:Pk,CUSTOM_FUNCTIONS:F_,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},Hk={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},qk={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},Gk={harperdb:Lm,"clustering hub":k_,"clustering leaf":$_,"custom functions":F_,custom_functions:F_,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},Fk={CLUSTERING_HUB_PROC_DESCRIPTOR:k_,CLUSTERING_LEAF_PROC_DESCRIPTOR:$_},Cm={HDB:es.join(yi,"server/harperdb"),CUSTOM_FUNCTIONS:es.join(yi,"server/customFunctions"),CLUSTERING_HUB:es.join(yi,"server/nats"),CLUSTERING_LEAF:es.join(yi,"server/nats")},xk={HDB:es.join(Cm.HDB,bN),CUSTOM_FUNCTIONS:es.join(Cm.CUSTOM_FUNCTIONS,yN)},kk={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:es.join(yi,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:es.join(yi,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:es.join(yi,"launchServiceScripts/launchUpdateNodes4-0-0.js")},$k={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},IN="support@harperdb.io",Vk="customer-success@harperdb.io",wN=1,Yk=4141,CN="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",Kk="https://www.harperdb.io/product",Wk=`For support, please submit a request at ${CN} or contact ${IN}`,LN=`For license support, please contact ${Vk}`,Qk="None of the specified records were found.",jk="hash attribute not found",Jk=`Your current license only supports ${wN} role. ${LN}`,zk="Your current license only supports 3 connections to a node.",Xk="127.0.0.1",Zk=1,e$=/^\.$/,t$=/^\.\.$/,r$="U+002E",s$=/\//g,n$="U+002F",i$=/U\+002F/g,o$=/^U\+002E$/,a$=/^U\+002EU\+002E$/,c$="d",u$=999999,l$="*",_$="--max-old-space-size=",d$="system",f$="__hdb_hash",E$=".harperdb",h$=".hdb",m$="keys",p$="hdb_boot_properties.file",S$=".updateConfig.json",T$="SIGTSTP",g$=24,R$=6e4,A$=448,O$="blob",N$="trash",b$="database",y$="schema",I$="transactions",w$=".count",C$="id",L$="PROCESS_NAME",DN={SETTINGS_PATH_KEY:"settings_path"},PN=require("lodash"),D$={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},P$={HDB_PATH_KEY:"HDB_INTERNAL_PATH",HDB_AUTH_HEADER:"hdb_auth_header",HDB_USER_DATA_KEY:"hdb_user",CHUNK_SIZE:1e3,MAX_CHARACTER_SIZE:250},M$={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},U$={JOB_TABLE_NAME:"hdb_job",NODE_TABLE_NAME:"hdb_nodes",ATTRIBUTE_TABLE_NAME:"hdb_attribute",LICENSE_TABLE_NAME:"hdb_license",ROLE_TABLE_NAME:"hdb_role",SCHEMA_TABLE_NAME:"hdb_schema",TABLE_TABLE_NAME:"hdb_table",USER_TABLE_NAME:"hdb_user",INFO_TABLE_NAME:"hdb_info"},v$={JOB_TABLE_HASH_ATTRIBUTE:"id",NODE_TABLE_HASH_ATTRIBUTE:"name",ATTRIBUTE_TABLE_HASH_ATTRIBUTE:"id",LICENSE_TABLE_HASH_ATTRIBUTE:"license_key",ROLE_TABLE_HASH_ATTRIBUTE:"id",SCHEMA_TABLE_HASH_ATTRIBUTE:"name",TABLE_TABLE_HASH_ATTRIBUTE:"id",USER_TABLE_HASH_ATTRIBUTE:"username",INFO_TABLE_ATTRIBUTE:"info_id"},Dr="hdb_internal:",B$={CREATE_SCHEMA:Dr+"create_schema",CREATE_TABLE:Dr+"create_table",CREATE_ATTRIBUTE:Dr+"create_attribute",ADD_USER:Dr+"add_user",ALTER_USER:Dr+"alter_user",DROP_USER:Dr+"drop_user",HDB_NODES:Dr+"hdb_nodes",HDB_USERS:Dr+"hdb_users",HDB_WORKERS:Dr+"hdb_workers",CATCHUP:Dr+"catchup",SCHEMA_CATCHUP:Dr+"schema_catchup",WORKER_ROOM:Dr+"cluster_workers"},H$={ATTR_ATTRIBUTE_KEY:"attribute",ATTR_CREATEDDATE_KEY:"createddate",ATTR_HASH_ATTRIBUTE_KEY:"hash_attribute",ATTR_ID_KEY:"id",ATTR_NAME_KEY:"name",ATTR_PASSWORD_KEY:"password",ATTR_RESIDENCE_KEY:"residence",ATTR_ROLE_KEY:"role",ATTR_SCHEMA_KEY:"schema",ATTR_SCHEMA_TABLE_KEY:"schema_table",ATTR_TABLE_KEY:"table",ATTR_USERNAME_KEY:"username"},q$="060493.ks",G$=".license",F$={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},J={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup"},x$={CSV:".csv",JSON:".json"},k$={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},$$={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Qc={};Qc[J.INSERT]=J.INSERT;Qc[J.UPDATE]=J.UPDATE;Qc[J.UPSERT]=J.UPSERT;Qc[J.DELETE]=J.DELETE;var we=Object.create(null);we[J.DESCRIBE_ALL]=J.DESCRIBE_ALL;we[J.DESCRIBE_TABLE]=J.DESCRIBE_TABLE;we[J.DESCRIBE_SCHEMA]=J.DESCRIBE_SCHEMA;we[J.READ_LOG]=J.READ_LOG;we[J.ADD_NODE]=J.ADD_NODE;we[J.LIST_USERS]=J.LIST_USERS;we[J.LIST_ROLES]=J.LIST_ROLES;we[J.USER_INFO]=J.USER_INFO;we[J.SQL]=J.SQL;we[J.GET_JOB]=J.GET_JOB;we[J.SEARCH_JOBS_BY_START_DATE]=J.SEARCH_JOBS_BY_START_DATE;we[J.DELETE_FILES_BEFORE]=J.DELETE_FILES_BEFORE;we[J.EXPORT_LOCAL]=J.EXPORT_LOCAL;we[J.EXPORT_TO_S3]=J.EXPORT_TO_S3;we[J.CLUSTER_STATUS]=J.CLUSTER_STATUS;we[J.REMOVE_NODE]=J.REMOVE_NODE;we[J.RESTART]=J.RESTART;we[J.CUSTOM_FUNCTIONS_STATUS]=J.CUSTOM_FUNCTIONS_STATUS;we[J.GET_CUSTOM_FUNCTIONS]=J.GET_CUSTOM_FUNCTIONS;we[J.GET_CUSTOM_FUNCTION]=J.GET_CUSTOM_FUNCTION;we[J.SET_CUSTOM_FUNCTION]=J.SET_CUSTOM_FUNCTION;we[J.DROP_CUSTOM_FUNCTION]=J.DROP_CUSTOM_FUNCTION;we[J.ADD_CUSTOM_FUNCTION_PROJECT]=J.ADD_CUSTOM_FUNCTION_PROJECT;we[J.DROP_CUSTOM_FUNCTION_PROJECT]=J.DROP_CUSTOM_FUNCTION_PROJECT;we[J.PACKAGE_CUSTOM_FUNCTION_PROJECT]=J.PACKAGE_CUSTOM_FUNCTION_PROJECT;we[J.DEPLOY_CUSTOM_FUNCTION_PROJECT]=J.DEPLOY_CUSTOM_FUNCTION_PROJECT;var V$={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},Y$={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},MN={HDB_ROOT_KEY:"HDB_ROOT",SERVER_PORT_KEY:"SERVER_PORT",CERT_KEY:"CERTIFICATE",PRIVATE_KEY_KEY:"PRIVATE_KEY",HTTP_SECURE_ENABLED_KEY:"HTTPS_ON",CORS_ENABLED_KEY:"CORS_ON",CORS_WHITELIST_KEY:"CORS_WHITELIST",LOG_LEVEL_KEY:"LOG_LEVEL",LOGGER_KEY:"LOGGER",LOG_PATH_KEY:"LOG_PATH",LOG_ROTATE:"LOG_ROTATE",LOG_ROTATE_MAX_SIZE:"LOG_ROTATE_MAX_SIZE",LOG_ROTATE_RETAIN:"LOG_ROTATE_RETAIN",LOG_ROTATE_COMPRESS:"LOG_ROTATE_COMPRESS",LOG_ROTATE_DATE_FORMAT:"LOG_ROTATE_DATE_FORMAT",LOG_ROTATE_ROTATE_MODULE:"LOG_ROTATE_ROTATE_MODULE",LOG_ROTATE_WORKER_INTERVAL:"LOG_ROTATE_WORKER_INTERVAL",LOG_ROTATE_ROTATE_INTERVAL:"LOG_ROTATE_ROTATE_INTERVAL",LOG_ROTATE_TIMEZONE:"LOG_ROTATE_TIMEZONE",LOG_DAILY_ROTATE_KEY:"LOG_DAILY_ROTATE",LOG_MAX_DAILY_FILES_KEY:"LOG_MAX_DAILY_FILES",PROPS_ENV_KEY:"NODE_ENV",SETTINGS_PATH_KEY:"settings_path",CLUSTERING_PORT_KEY:"CLUSTERING_PORT",CLUSTERING_NODE_NAME_KEY:"NODE_NAME",CLUSTERING_ENABLED_KEY:"CLUSTERING",ALLOW_SELF_SIGNED_SSL_CERTS:"ALLOW_SELF_SIGNED_SSL_CERTS",MAX_HDB_PROCESSES:"MAX_HDB_PROCESSES",INSTALL_USER:"install_user",CLUSTERING_USER_KEY:"CLUSTERING_USER",MAX_CLUSTERING_PROCESSES:"MAX_CLUSTERING_PROCESSES",SERVER_TIMEOUT_KEY:"SERVER_TIMEOUT_MS",SERVER_KEEP_ALIVE_TIMEOUT_KEY:"SERVER_KEEP_ALIVE_TIMEOUT",SERVER_HEADERS_TIMEOUT_KEY:"SERVER_HEADERS_TIMEOUT",DISABLE_TRANSACTION_LOG_KEY:"DISABLE_TRANSACTION_LOG",OPERATION_TOKEN_TIMEOUT_KEY:"OPERATION_TOKEN_TIMEOUT",REFRESH_TOKEN_TIMEOUT_KEY:"REFRESH_TOKEN_TIMEOUT",CUSTOM_FUNCTIONS_ENABLED_KEY:"CUSTOM_FUNCTIONS",CUSTOM_FUNCTIONS_PORT_KEY:"CUSTOM_FUNCTIONS_PORT",CUSTOM_FUNCTIONS_DIRECTORY_KEY:"CUSTOM_FUNCTIONS_DIRECTORY",MAX_CUSTOM_FUNCTION_PROCESSES:"MAX_CUSTOM_FUNCTION_PROCESSES",LOG_TO_FILE:"LOG_TO_FILE",LOG_TO_STDSTREAMS:"LOG_TO_STDSTREAMS",RUN_IN_FOREGROUND:"RUN_IN_FOREGROUND",LOCAL_STUDIO_ON:"LOCAL_STUDIO_ON",STORAGE_WRITE_ASYNC:"STORAGE_WRITE_ASYNC"},K$=PN.invert(MN),W$={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},y={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",ROOTPATH:"rootPath",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority"},UN={settings_path:DN.SETTINGS_PATH_KEY,hdb_root_key:y.ROOTPATH,hdb_root:y.ROOTPATH,rootpath:y.ROOTPATH,server_port_key:y.OPERATIONSAPI_NETWORK_PORT,server_port:y.OPERATIONSAPI_NETWORK_PORT,cert_key:y.TLS_CERTIFICATE,certificate:y.TLS_CERTIFICATE,private_key_key:y.TLS_PRIVATEKEY,private_key:y.TLS_PRIVATEKEY,http_secure_enabled_key:y.OPERATIONSAPI_NETWORK_HTTPS,https_on:y.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:y.OPERATIONSAPI_NETWORK_CORS,cors_on:y.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:y.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:y.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:y.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:y.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:y.LOGGING_LEVEL,log_level:y.LOGGING_LEVEL,log_path_key:y.LOGGING_ROOT,log_path:y.LOGGING_ROOT,clustering_node_name_key:y.CLUSTERING_NODENAME,node_name:y.CLUSTERING_NODENAME,clustering_enabled_key:y.CLUSTERING_ENABLED,clustering:y.CLUSTERING_ENABLED,max_http_threads:y.THREADS,max_hdb_processes:y.THREADS,server_timeout_key:y.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:y.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:y.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:y.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:y.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:y.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:y.LOGGING_AUDITLOG,disable_transaction_log:y.LOGGING_AUDITLOG,operation_token_timeout_key:y.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:y.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:y.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:y.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:y.HTTP_PORT,custom_functions_port:y.HTTP_PORT,custom_functions_directory_key:y.COMPONENTSROOT,custom_functions_directory:y.COMPONENTSROOT,max_custom_function_processes:y.THREADS,log_to_file:y.LOGGING_FILE,log_to_stdstreams:y.LOGGING_STDSTREAMS,local_studio_on:y.LOCALSTUDIO_ENABLED,clustering_port:y.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:y.CLUSTERING_USER,clustering_enabled:y.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:y.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:y.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:y.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:y.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:y.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:y.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:y.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:y.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:y.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:y.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:y.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:y.CLUSTERING_NODENAME,clustering_tls_certificate:y.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:y.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:y.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:y.CLUSTERING_TLS_INSECURE,clustering_tls_verify:y.CLUSTERING_TLS_VERIFY,clustering_loglevel:y.CLUSTERING_LOGLEVEL,clustering_republishmessages:y.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:y.CLUSTERING_DATABASELEVEL,customfunctions_network_port:y.HTTP_PORT,customfunctions_tls_certificate:y.TLS_CERTIFICATE,customfunctions_network_cors:y.HTTP_CORS,customfunctions_network_corsaccesslist:y.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:y.HTTP_HEADERSTIMEOUT,customfunctions_network_https:y.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:y.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:y.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:y.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:y.HTTP_TIMEOUT,http_threads:y.THREADS,threads:y.THREADS,http_session_affinity:y.HTTP_SESSIONAFFINITY,http_compressionthreshold:y.HTTP_COMPRESSIONTHRESHOLD,http_cors:y.HTTP_CORS,http_corsaccesslist:y.HTTP_CORSACCESSLIST,http_headerstimeout:y.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:y.HTTP_KEEPALIVETIMEOUT,http_timeout:y.HTTP_TIMEOUT,http_port:y.HTTP_PORT,http_secureport:y.HTTP_SECUREPORT,customfunctions_processes:y.THREADS,customfunctions_root:y.COMPONENTSROOT,localstudio_enabled:y.LOCALSTUDIO_ENABLED,logging_file:y.LOGGING_FILE,logging_level:y.LOGGING_LEVEL,logging_root:y.LOGGING_ROOT,logging_rotation_enabled:y.LOGGING_ROTATION_ENABLED,logging_rotation_compress:y.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:y.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:y.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:y.LOGGING_ROTATION_PATH,logging_stdstreams:y.LOGGING_STDSTREAMS,logging_auditlog:y.LOGGING_AUDITLOG,logging_auditretention:y.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:y.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:y.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:y.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:y.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:y.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:y.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:y.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:y.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:y.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:y.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_secureport:y.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:y.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:y.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:y.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:y.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:y.ROOTPATH,databases:y.DATABASES,storage_path:y.STORAGE_PATH,ignorescripts:y.IGNORE_SCRIPTS,mqtt_network_port:y.MQTT_NETWORK_PORT,mqtt_websocket:y.MQTT_WEBSOCKET,mqtt_network_secureport:y.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:y.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:y.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:y.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:y.AUTHENTICATION_CACHETTL,authentication_enablesessions:y.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:y.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:y.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:y.COMPONENTSROOT,tls_certificate:y.TLS_CERTIFICATE,tls_privatekey:y.TLS_PRIVATEKEY,tls_certificateauthority:y.TLS_CERTIFICATEAUTHORITY};for(let e in y){let t=y[e];UN[t.toLowerCase()]=t}var Q$={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},j$={csv_file_load:"csv_file_load",csv_data_load:J.CSV_DATA_LOAD,csv_url_load:J.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},J$={CLUSTERING_PAYLOAD:"clustering_payload",DELEGATE_THREAD_RESPONSE:"delegate_thread_response",CLUSTERING:"clustering",SCHEMA:"schema",CLUSTER_STATUS:"cluster_status",JOB:"job",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",USER:"user",RESTART:"restart"},z$={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},X$={VERSION_DEFAULT:"2.2.0"},Z$={DEVELOPMENT:8192,DEFAULT:512},eV={IDENTIFY:"identify",AUTHENTICATE:"authenticate",AUTHENTICATE_OK:"authenticated",AUTHENTICATE_FAIL:"authenticate_fail",CONNECTION:"connection",CONNECT:"connect",CATCHUP_REQUEST:"catchup_request",CATCHUP_RESPONSE:"catchup",CONFIRM_MSG:"confirm_msg",ERROR:"error",DISCONNECT:"disconnect",SCHEMA_UPDATE_REQ:"schema_update_request",SCHEMA_UPDATE_RES:"schema_update_response",RECONNECT_ATTEMPT:"reconnect_attempt",CONNECT_ERROR:"connect_error",MESSAGE:"msg",VERSION_MISMATCH:"version_mismatch",DIRECTION_CHANGE:"direction_change"},tV={1e3:"SUCCESSFUL_SHUTDOWN",1001:"CLOSE_GOING_AWAY",1002:"CLOSE_PROTOCOL_ERROR",1003:"CLOSE_UNSUPPORTED",1005:"CLOSE_NO_STATUS",1006:"CLOSE_ABNORMAL",1007:"UNSUPPORTED_PAYLOAD",1008:"POLICY_VIOLATION",1009:"CLOSE_TOO_LARGE",1010:"MANDATORY_EXTENSION",1011:"SERVER_ERROR",1012:"SERVICE_RESTART",1013:"SERVER_BUSY",1014:"BAD_GATEWAY",1015:"HANDSHAKE_FAIL",4141:"LICENSE_LIMIT_REACHED"},rV={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},vN={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},sV=Symbol("metadata"),nV="__clustering__",iV=Object.values(vN),oV=15984864e5,BN={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},aV=PN.invert(BN),cV={GET_CLUSTER_STATUS:"GET_CLUSTER_STATUS",CLUSTER_STATUS_RESPONSE:"CLUSTER_STATUS_RESPONSE",ERROR_RESPONSE:"ERROR",ADD_USER:"ADD_USER",ALTER_USER:"ALTER_USER",DROP_USER:"DROP_USER",HDB_OPERATION:"HDB_OPERATION",ADD_NODE:"ADD_NODE",UPDATE_NODE:"UPDATE_NODE",REMOVE_NODE:"REMOVE_NODE",HDB_USERS_MSG:"HDB_USERS_MSG",HDB_WORKERS:"HDB_WORKERS",HDB_TRANSACTION:"HDB_TRANSACTION"},uV=111,lV=`\r
|
|
3
|
-
`,
|
|
4
|
-
`}a(qn,"createLogRecord");function Zc(e){Bn&&QN(e),en&&process.stdout.write(e)}a(Zc,"logStdOut");function W_(e){Bn&&QN(e),en&&process.stderr.write(e)}a(W_,"logStdErr");function QN(e){vV(),pa?ho.appendFileSync(pa,e):Jc.log(e)}a(QN,"logToFile");function Mm(){try{ho.closeSync(pa)}catch{}pa=null}a(Mm,"closeLogFile");function vV(){if(!pa){try{if(!zc)debugger;pa=ho.openSync(zc,"a")}catch(e){Jc.error(e)}setTimeout(()=>{Mm()},DV).unref()}}a(vV,"openLogFile");function K_(...e){ir[nr]<=ir.info&&Zc(qn("info",e))}a(K_,"info");function Um(...e){ir[nr]<=ir.trace&&Zc(qn("trace",e))}a(Um,"trace");function Xc(...e){ir[nr]<=ir.error&&W_(qn("error",e))}a(Xc,"error");function vm(...e){ir[nr]<=ir.debug&&Zc(qn("debug",e))}a(vm,"debug");function jN(...e){ir[nr]<=ir.notify&&Zc(qn("notify",e))}a(jN,"notify");function JN(...e){ir[nr]<=ir.fatal&&W_(qn("fatal",e))}a(JN,"fatal");function Bm(...e){ir[nr]<=ir.warn&&W_(qn("warn",e))}a(Bm,"warn");function BV(e,t,...r){t===YN.STDERR?W_(qn(e,r)):Zc(qn(e,r))}a(BV,"logCustomLevel");function HV(){let e;try{e=IV.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Hn.join(e,St.HDB_HOME_DIR_NAME,St.BOOT_PROPS_FILE_NAME);return ho.existsSync(t)||(t=Hn.join(Pm,"utility/hdb_boot_properties.file")),t}a(HV,"getPropsFilePath");function qV(e){nr=e}a(qV,"setLogLevel");function kN(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(kN,"autoCastBoolean");function GV(e){try{if(e.includes("config/settings.js")){let o=VN(e);return{level:o.get(St.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Hn.dirname(o.get(St.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(St.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(St.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=$N.parseDocument(ho.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===St.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(GV,"getLogConfig");function FV(){try{let e=$N.parseDocument(ho.readFileSync(LV,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),s=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:s}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(FV,"getDefaultConfig");function xV(e,t,r,s,n,i){this.username=e,this.status=t,this.type=r,this.originating_ip=s,this.request_method=n,this.path=i}a(xV,"AuthAuditLog")});var mo=T((Lde,kV)=>{kV.exports={name:"harperdb",version:"4.2.0-rc.2",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.1","nats-server":"2.10.1"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test: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: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:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","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.418.0","@aws-sdk/lib-storage":"3.418.0","@endo/static-module-record":"^0.8.1","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.4.0","@fastify/cors":"~8.4.0","@fastify/static":"~6.11.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4","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.23.2","fastify-plugin":"~4.5.0","fs-extra":"11.1.1",graphql:"^16.8.0","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.10.2",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.9.0-beta.2",lodash:"4.17.21",mathjs:"11.11.1",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.0",msgpackr:"1.9.9",nats:"2.17.0",needle:"3.2.0","node-stream-zip":"1.15.0","node-unix-socket":"^0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.15.3",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0",ses:"^0.18.1","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.9","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"^8.14.1",yaml:"2.3.2"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"0.27.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.2.2","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 po=T((Dde,zN)=>{"use strict";zN.exports={version:$V,printVersion:VV};var Q_=mo();function $V(){if(Q_)return Q_.version}a($V,"version");function VV(){Q_&&console.log(`HarperDB Version ${Q_.version}`)}a(VV,"printVersion")});var eb=T((Mde,ZN)=>{"use strict";var XN=require("semver/functions/major"),YV=mo(),qm=process.versions&&process.versions.node?process.versions.node:void 0;ZN.exports=KV;function KV(){let e=YV.engines["minimum-node"];if(qm&&XN(qm)<XN(e))return{error:`The minimum version of Node.js HarperDB supports is: ${e}, the currently installed Node.js version is: ${qm}. Please install a version of Node.js that is withing the defined range.`}}a(KV,"checkNodeVersion")});var So={};Fe(So,{server:()=>Tt});var tb,Tt,Pr=Re(()=>{tb=require("../index"),Tt={};(0,tb._assignPackageExport)("server",Tt)});var Gm=T((vde,rb)=>{"use strict";var WV=require("util"),QV=require("path"),jV=require("child_process"),JV=WV.promisify(jV.execFile),zV=1e3*1e3*10;rb.exports={findPs:XV};async function XV(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await JV("ps",["wwxo",`pid,${r}`],{maxBuffer:zV});for(let n of s.trim().split(`
|
|
5
|
-
`).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:QV.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(XV,"findPs")});var Ke=T((Hde,nb)=>{"use strict";var ZV="__dbis__",eY="__txns__",tY="__environment_name__",rY="__dbi_defintion__",sY={EQUALS:"equals",STARTS_WITH:"startsWith",_STARTS_WITH:"starts_with",ENDS_WITH:"endsWith",_ENDS_WITH:"ends_with",CONTAINS:"contains",SEARCH_ALL:"searchAll",SEARCH_ALL_TO_MAP:"searchAllToMap",BATCH_SEARCH_BY_HASH:"batchSearchByHash",BATCH_SEARCH_BY_HASH_TO_MAP:"batchSearchByHashToMap",GREATER_THAN:"greaterThan",_GREATER_THAN:"greater_than",GREATER_THAN_EQUAL:"greaterThanEqual",_GREATER_THAN_EQUAL:"greater_than_equal",LESS_THAN:"lessThan",_LESS_THAN:"less_than",LESS_THAN_EQUAL:"lessThanEqual",_LESS_THAN_EQUAL:"less_than_equal",BETWEEN:"between"},nY=["__createdtime__","__updatedtime__"],iY="\uFFFF",sb={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},oY=Object.values(sb);nb.exports={AUDIT_STORE_NAME:eY,INTERNAL_DBIS_NAME:ZV,DBI_DEFINITION_NAME:rY,SEARCH_TYPES:sY,TIMESTAMP_NAMES:nY,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:tY,TRANSACTIONS_DBI_NAMES_ENUM:sb,TRANSACTIONS_DBIS:oY,OVERFLOW_MARKER:iY}});var Mr=T((qde,fb)=>{"use strict";var ib=A(),ob=Ke(),ab={CONTINUE:100,OK:200,CREATED:201,BAD_REQUEST:400,UNAUTHORIZED:401,FORBIDDEN:403,NOT_FOUND:404,METHOD_NOT_ALLOWED:405,REQUEST_TIMEOUT:408,CONFLICT:409,TOO_MANY_REQUESTS:429,INTERNAL_SERVER_ERROR:500,NOT_IMPLEMENTED:501,BAD_GATEWAY:502,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504,HTTP_VERSION_NOT_SUPPORTED:505,INSUFFICIENT_STORAGE:507,NETWORK_AUTHENTICATION_REQUIRED:511},cb=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),ub={500:cb("There was an error processing your request."),400:"Invalid request"},aY=ub[ab.INTERNAL_SERVER_ERROR],cY={OP_NOT_SUPPORTED_FOR_FS:e=>`${e} is not available for this instance because it uses the File System data store.`,MISSING_VALUE:e=>`${e} is missing.`,INVALID_VALUE:e=>`${e} is invalid.`,NOT_FOUND:e=>`${e} not found.`},uY={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},lY={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:e=>`There was an error downloading '${e}'.`,INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,INVALID_FILE_EXT_ERR:e=>`Error selecting correct parser - valid file type not found in json - ${e}`,MAX_FILE_SIZE_ERR:(e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:e=>`There was an error downloading '${e}' from AWS.`,WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},_Y={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${ob.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${ob.INTERNAL_DBIS_NAME}`,START_VALUE_REQUIRED:"start_value is required",END_VALUE_REQUIRED:"end_value is required",CANNOT_COMPARE_STRING_TO_NUMERIC_KEYS:"cannot compare a string to numeric keys",END_VALUE_MUST_BE_GREATER_THAN_START_VALUE:"end_value must be greater than or equal to start_value",UNKNOWN_SEARCH_TYPE:"unknown search type",CANNOT_DROP_TABLE_HASH_ATTRIBUTE:"cannot drop a table's hash attribute"},dY={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${ib.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes.`,ATTR_NAME_NULLISH_ERR:"transaction aborted due to record(s) with an attribute name that is null, undefined or empty string",HASH_VAL_LENGTH_ERR:`transaction aborted due to record(s) with a hash value that exceeds ${ib.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes, check log for more info`,INVALID_FORWARD_SLASH_IN_HASH_ERR:"transaction aborted due to record(s) with a hash value that contains a forward slash, check log for more info",RECORD_MISSING_HASH_ERR:"transaction aborted due to record(s) with no hash value, check log for more info"},lb={GENERIC_AUTH_FAIL:"Login failed",USER_INACTIVE:"Cannot complete request: User is inactive",INVALID_TOKEN:"invalid token",NO_ENCRYPTION_KEYS:"unable to generate JWT as there are no encryption keys. please contact your administrator",INVALID_CREDENTIALS:"invalid credentials",PASSWORD_REQUIRED:"password is required",USERNAME_REQUIRED:"username is required",REFRESH_TOKEN_REQUIRED:"refresh_token is required",INVALID_AUTH_OBJECT:"invalid auth_object",INVALID_BODY:"invalid body",TOKEN_EXPIRED:"token expired",REFRESH_TOKEN_SAVE_FAILED:"unable to store refresh_token"},fY={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:e=>`Operation '${e}' is restricted to 'super_user' roles`,OP_NOT_FOUND:e=>`Operation '${e}' not found`,SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:(e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,USER_HAS_NO_PERMS:e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},EY={ATTR_PERM_MISSING:(e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:(e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:e=>`Invalid attribute '${e}' in 'attribute_permissions'`,INVALID_PERM_KEY:e=>`Invalid table permission key value '${e}'`,INVALID_ATTR_PERM_KEY:e=>`Invalid attribute permission key value '${e}'`,INVALID_ROLE_JSON_KEYS:e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,MISMATCHED_TABLE_ATTR_PERMS:e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:e=>`A role with name '${e}' already exists`,ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:e=>`Your role does not have permission to view database metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:e=>`Value for '${e}' permission must be a boolean`,STRUCTURE_USER_ROLE_TYPE_ERROR:e=>`Value for '${e}' permission must be a boolean or Array`,SU_CU_ROLE_NO_PERMS_ALLOWED:e=>`Roles with '${e}' set to true cannot have other permissions set.`,SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:e=>`Missing table ${e.toUpperCase()} permission`,TABLE_PERM_NOT_BOOLEAN:e=>`Table ${e.toUpperCase()} permission must be a boolean`},hY={ATTR_NOT_FOUND:(e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,ATTR_EXISTS_ERR:(e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:e=>`Invalid table ${JSON.stringify(e)}`,SCHEMA_NOT_FOUND:e=>`database '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`database '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in '${e}'`,SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},mY={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},pY={ALTER_USER_DUP_ROLES:e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,ALTER_USER_ROLE_NOT_FOUND:e=>`Update failed. Requested '${e}' role not found.`,DUP_ROLES_FOUND:e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,ROLE_NAME_NOT_FOUND:e=>`${e} role not found`,USER_ALREADY_EXISTS:e=>`User ${e} already exists`,USER_NOT_EXIST:e=>`User ${e} does not exist`},_b={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`},db={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:e=>`ITC server received invalid event type: ${e}`},SY={FUNCTION_STATUS:"Error getting custom function status, check the log for more details",GET_FUNCTIONS:"Error getting custom functions, check the log for more details",GET_FUNCTION:"Error getting custom function, check the log for more details",SET_FUNCTION:"Error setting custom function, check the log for more details",NO_PROJECT:"Project does not exist. Create one using 'add_custom_function_project'",PROJECT_EXISTS:"Project already exists",VALIDATION_ERR:"Error validating request, check the log for more details",NO_FILE:"File does not exist",BAD_FILE_NAME:"File name can only contain alphanumeric, dash and underscore characters",BAD_PROJECT_NAME:"Project name can only contain alphanumeric, dash and underscores characters",BAD_PACKAGE:"Packaged project must be base64-encoded tar file of project directory",DROP_FUNCTION:"Error dropping custom function, check the log for more details",ADD_FUNCTION:"Error adding custom function project, check the log for more details",DROP_FUNCTION_PROJECT:"Error dropping custom function project, check the log for more details",BAD_FILE_PATH:"Filepath must be valid, and contain the name of the tarball you wish to write",NOT_ENABLED:"Custom functions is not enabled, to enable set fastifyRoutes enabled to true in hdb/harperdb-config.yaml file."},TY={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},gY={...lb,...lY,...cY,...fY,...EY,...hY,...mY,...pY,...dY,..._b,...db,...SY,...TY,...uY};fb.exports={CHECK_LOGS_WRAPPER:cb,HDB_ERROR_MSGS:gY,DEFAULT_ERROR_MSGS:ub,DEFAULT_ERROR_RESP:aY,HTTP_STATUS_CODES:ab,LMDB_ERRORS_ENUM:_Y,AUTHENTICATION_ERROR_MSGS:lb,VALIDATION_ERROR_MSGS:_b,ITC_ERRORS:db}});var Z=T((Fde,mb)=>{"use strict";var Sa=Mr(),RY=U(),AY=A(),j_=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Eb),this.statusCode=s||Sa.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Sa.DEFAULT_ERROR_MSGS[s]?Sa.DEFAULT_ERROR_MSGS[s]:Sa.DEFAULT_ERROR_MSGS[Sa.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&RY[n](i)}},Fm=class extends Error{static{a(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},xm=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function Eb(e,t,r,s=AY.LOG_LEVELS.ERROR,n=null,i=!1){if(hb(e))return e;let o=new j_(e,t,r,s,n);return i&&delete o.stack,o}a(Eb,"handleHDBError");function hb(e){return e.__proto__.constructor.name===j_.name}a(hb,"isHDBError");mb.exports={isHDBError:hb,handleHDBError:Eb,ClientError:Fm,ServerError:xm,hdb_errors:Sa}});var Be=T((kde,Ob)=>{"use strict";var nu=A(),OY=G(),or=Q(),iu=require("path"),NY=require("minimist"),pb=require("fs-extra"),Sb=require("lodash");or.initSync();var{CONFIG_PARAMS:Ii,DATABASES_PARAM_CONFIG:eu,SYSTEM_SCHEMA_NAME:J_}=nu,tu,ru,su;function Tb(){if(tu!==void 0)return tu;if(or.getHdbBasePath()!==void 0)return tu=or.get(Ii.STORAGE_PATH)||iu.join(or.getHdbBasePath(),nu.DATABASES_DIR_NAME),tu}a(Tb,"getBaseSchemaPath");function gb(){if(ru!==void 0)return ru;if(or.getHdbBasePath()!==void 0)return ru=Ab(J_),ru}a(gb,"getSystemSchemaPath");function Rb(){if(su!==void 0)return su;if(or.getHdbBasePath()!==void 0)return su=or.get(nu.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||iu.join(or.getHdbBasePath(),nu.TRANSACTIONS_DIR_NAME),su}a(Rb,"getTransactionAuditStoreBasePath");function bY(e,t){let r=or.get(Ii.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||iu.join(Rb(),e.toString())}a(bY,"getTransactionAuditStorePath");function Ab(e,t){e=e.toString(),t=t&&t.toString();let r=or.get(nu.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||iu.join(Tb(),e)}a(Ab,"getSchemaPath");function yY(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,NY(process.argv));let s=r[Ii.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!OY.isObject(s))throw o;i=s}for(let o of i){let c=o[J_];if(!c)continue;let u=or.get(Ii.DATABASES);u=u??{};let _=c?.tables?.[t]?.[eu.PATH];if(_)return Sb.set(u,[J_,eu.TABLES,t,eu.PATH],_),or.setProperty(Ii.DATABASES,u),_;let l=c?.[eu.PATH];if(l)return Sb.set(u,[J_,eu.PATH],l),or.setProperty(Ii.DATABASES,u),l}}let n=r[Ii.STORAGE_PATH.toUpperCase()];if(n){if(!pb.pathExistsSync(n))throw new Error(n+" does not exist");let i=iu.join(n,e);return pb.mkdirsSync(i),or.setProperty(Ii.STORAGE_PATH,n),i}return gb()}a(yY,"initSystemSchemaPaths");function IY(){tu=void 0,ru=void 0,su=void 0}a(IY,"resetPaths");Ob.exports={getBaseSchemaPath:Tb,getSystemSchemaPath:gb,getTransactionAuditStorePath:bY,getTransactionAuditStoreBasePath:Rb,getSchemaPath:Ab,initSystemSchemaPaths:yY,resetPaths:IY}});var ar=T((Kde,wb)=>{"use strict";var wY=Mr().LMDB_ERRORS_ENUM,Vde=require("lmdb"),CY=Ke(),Yde=require("buffer").Buffer,{OVERFLOW_MARKER:Nb,MAX_SEARCH_KEY_LENGTH:z_}=CY,bb=["number","string","symbol","boolean","bigint"];function LY(e){if(e=e?.primaryStore||e,!e)throw new Error(wY.ENV_REQUIRED)}a(LY,"validateEnv");function DY(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(DY,"stringifyData");function PY(e){return e instanceof Date?e.valueOf():e}a(PY,"convertKeyValueToWrite");function MY(e){if(e==null)return;if(bb.includes(typeof e))return e.length>z_?[e.slice(0,z_)+Nb]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(bb.includes(typeof n))n.length>z_?t.push(n.slice(0,z_)+Nb):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(MY,"getIndexedValues");var X_=0,yb=0;function Ib(){yb=Date.now()-performance.now()}a(Ib,"adjustStartTime");Ib();var UY=6e4;setInterval(Ib,UY).unref();function vY(){let e=performance.now()+yb;return e>X_?(X_=e,e):(X_+=488e-6,X_)}a(vY,"getNextMonotonicTime");wb.exports={validateEnv:LY,stringifyData:DY,convertKeyValueToWrite:PY,getNextMonotonicTime:vY,getIndexedValues:MY}});var Cb,bs,km,ou=Re(()=>{Cb=require("events"),bs=class extends Cb.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new km;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){return this.queue?.shift()}on(t,r){if(t==="data"&&!this.hasDataListeners)for(this.hasDataListeners=!0;this.queue?.length>0;)r(this.queue.shift());return super.on(t,r)}},km=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function ts(e){return e[Wt]||(e[Wt]=Object.create(null))}function rd(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u;switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new ys.ClientError(`${c} must be a string, attempt to assign ${l}`);ts(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new ys.ClientError(`${c} must be a string, attempt to assign ${l}`);ts(this)[c]=l},"set");break;case"Float":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new ys.ClientError(`${c} must be a number, attempt to assign ${l}`);ts(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new ys.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);ts(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new ys.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);ts(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new ys.ClientError(`${c} must be a boolean, attempt to assign ${l}`);ts(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new ys.ClientError(`${c} must be a Date, attempt to assign ${l}`);ts(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new ys.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);ts(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){ts(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new ys.ClientError(`${c} must be an object, attempt to assign ${l}`);ts(this)[c]=l},"set")}let _=s[c]={get(){let l=this[Wt];if(l&&c in l)return l[c];let d=this[Ae]?.[c];if(d&&typeof d=="object"){let f=Lb(d,o);if(f)return l||(l=this[Wt]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0};_.get.isAttribute=!0,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[Wt];return u?.[o]!==void 0?u[o]:this[Ae]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new ys.ClientError("Can not add a property to a sealed table schema");ts(this)[o]=c}),i("deleteProperty",function(o){ts(this)[o]=void 0}),i("toJSON",function(){let o=this[Wt],c;for(let _ in o)c||(c=Object.assign({},this[Ae])),c[_]=o[_];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[Ae])),Object.assign(c,this)),c||this[Ae]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function Lb(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(n){this[Ae]=n}},rd(r,t)),new r(e)):new Z_(e);case Array:let s=new td(e.length);s[Ae]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=Lb(o,t?.elements)),s[n]=o}return s}}function sd(e){let t=e[Wt],r;for(let n in t){r||(r=Object.assign({},e[Ae]));let i=t[n];i&&typeof i=="object"&&(i=sd(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Ae])),Object.assign(r,e)),r||e[Ae]}function au(e){let t;if(e[Ae]&&e.constructor===Array&&!Object.isFrozen(e)){t=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=au(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[Wt];for(let s in r){t||(t=Object.assign({},e[Ae]));let n=r[s];n&&typeof n=="object"&&(n=au(n)),t[s]=n}return t?Object.freeze(t):e[Ae]||(e.buffer?e:Object.freeze(e))}function ed(e){let t=e[Ae];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[To]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[Ae]===n){if(ed(i))return!0}else return!0}}else{let r=e[Wt];if(r&&!t)return!0;for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[Ae]===i){if(ed(n))return!0}else return!0}else return!0}}return!1}var ys,Wt,Z_,To,td,nd=Re(()=>{Is();ys=P(Z()),Wt=Symbol("own-data");a(ts,"getChanges");a(rd,"assignTrackedAccessors");a(Lb,"trackObject");Z_=class{static{a(this,"GenericTrackedObject")}constructor(t){this[Ae]=t}};rd(Z_,{});a(sd,"collapseData");a(au,"deepFreeze");a(ed,"hasChanges");To=Symbol.for("has-array-changes"),td=class extends Array{static{a(this,"TrackedArray")}[To];constructor(t){super(t)}splice(...t){return this[To]=!0,super.splice(...t)}push(...t){return this[To]=!0,super.push(...t)}pop(){return this[To]=!0,super.pop()}unshift(...t){return this[To]=!0,super.unshift(...t)}shift(){return this[To]=!0,super.shift()}};td.prototype.constructor=Array});function GY(){qY=setInterval(function(){for(let e of $m)if(e.stale){let t=e[Se]?.url;Db.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.resetReadSnapshot()}else e.stale=!0},HY).unref()}var Vm,Db,BY,$m,go,id,HY,qY,Ym=Re(()=>{Vm=P(ar()),Db=P(U());Is();BY=100,$m=new Set,go=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;validated=0;timestamp=0;open=!0;getReadTxn(){return this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn?this.readTxn:(this.readTxn=this.lmdbDb.useReadTransaction(),$m.add(this),this.readTxn)}disregardReadTxn(){--this.readTxnRefCount===0&&this.resetReadSnapshot()}resetReadSnapshot(){this.readTxn&&($m.delete(this),this.readTxn.done(),this.readTxn=null)}addWrite(t){this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,Vm.getNextMonotonicTime)());let s=t.retries||0;if(this.resetReadSnapshot(),this.validated<this.writes.length){let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{for(let f=0;f<2;f++){let E;for(let h=l;h<this.validated;h++){let S=this.writes[h];if(!S)continue;let m=S[f===0?"before":"beforeIntermediate"];if(m){let g=m();E?E.push?E.push(g):E=[E,g]:E=g}}E&&await(E.push?Promise.all(E):E)}return this.commit(t)})()}t?.close&&(this.open=!1);let n,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,s)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){s>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);n=n||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<BY>>s?u():n=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),n)return n.then(l=>l?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),Promise.all(i).then(()=>(this.writes=[],{txnTime:r}))):(t?t.retries=s+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(){this.resetReadSnapshot(),this.writes=[]}},id=class extends go{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Vm.getNextMonotonicTime)())}getReadTxn(){}},HY=3e3;a(GY,"startMonitoringTxns");GY()});function We(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let s=e.transaction=new go;e.timestamp&&(s.timestamp=e.timestamp),s[Se]=e,e.resourceCache||(e.resourceCache=[]);let n;try{if(n=t(s),n?.then)return n.then(i,o)}catch(c){o(c)}return i(n);function i(c){let u=s.commit({close:!0});return u.then?u.then(()=>(r?.resetTransaction&&(e.transaction=null),c)):(r?.resetTransaction&&(e.transaction=null),c)}function o(c){throw s.abort(),r?.resetTransaction&&(e.transaction=null),c}}var Pb,Ro=Re(()=>{Pb=require("../index");Is();Ym();a(We,"transaction");(0,Pb._assignPackageExport)("transaction",We);We.commit=function(e){let t=(e[Se]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};We.abort=function(e){let t=(e[Se]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function Qm(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,_,l=e[1]??e.value;l instanceof Date&&(l=l.getTime());let d=e.comparator,f;switch(xY[d]||d){case"lt":o=!0,c=l;break;case"le":o=!0,c=l,u=!0;break;case"gt":o=l,_=!0;break;case"ge":o=l;break;case"prefix":o=l,c=l.slice(0),c[c.length-1]=rn.MAXIMUM_KEY;break;case"starts_with":o=l.toString(),c=l+String.fromCharCode(65535);break;case"between":o=l[0],o instanceof Date&&(o=o.getTime()),c=l[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case bt.SEARCH_TYPES.EQUALS:case void 0:o=l,c=l,u=!0;break;case"ne":case"contains":case"ends_with":f=!0;break}if(r){let m=o;o=c,c=m,m=!_,_=!u,u=m}let E=i===s.primaryKey||i==null,h=E?s.primaryStore:s.indices[i];if(!h||h.isIndexing||f){if(!n)throw new Km.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let m=jm(e);if(!m)throw new Km.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:g,value:R})=>new Promise((b,V)=>setImmediate(()=>{try{b(R&&m(R)?g:Ub.SKIP)}catch($){V($)}})))}let S={start:o,end:c,inclusiveEnd:u,exclusiveStart:_,values:!E,transaction:t,reverse:r};return E?h.getRange(S):h.getRange(S).map(({value:m})=>m)}function jm(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),t){case bt.SEARCH_TYPES.EQUALS:case void 0:return tn(r,n=>n===s);case bt.SEARCH_TYPES.CONTAINS:return tn(r,n=>n?.toString().includes(s));case bt.SEARCH_TYPES.ENDS_WITH:case bt.SEARCH_TYPES._ENDS_WITH:return tn(r,n=>n?.toString().endsWith(s));case bt.SEARCH_TYPES.STARTS_WITH:case bt.SEARCH_TYPES._STARTS_WITH:return tn(r,n=>typeof n=="string"&&n.startsWith(s));case bt.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),tn(r,n=>(0,rn.compareKeys)(n,s[0])>=0&&(0,rn.compareKeys)(n,s[1])<=0);case"gt":case bt.SEARCH_TYPES.GREATER_THAN:case bt.SEARCH_TYPES._GREATER_THAN:return tn(r,n=>(0,rn.compareKeys)(n,s)>0);case"ge":case bt.SEARCH_TYPES.GREATER_THAN_EQUAL:case bt.SEARCH_TYPES._GREATER_THAN_EQUAL:return tn(r,n=>(0,rn.compareKeys)(n,s)>=0);case bt.SEARCH_TYPES.LESS_THAN:case"lt":case bt.SEARCH_TYPES._LESS_THAN:return tn(r,n=>(0,rn.compareKeys)(n,s)<0);case"le":case bt.SEARCH_TYPES.LESS_THAN_EQUAL:case bt.SEARCH_TYPES._LESS_THAN_EQUAL:return tn(r,n=>(0,rn.compareKeys)(n,s)<=0);case"ne":return tn(r,n=>(0,rn.compareKeys)(n,s)!==0);default:return}}function tn(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function od(e){if(!e)return;let t=new Wm,r,s,n,i,o,c=Mb;for(;r=c.exec(e);){i=c.lastIndex;let[,u,_]=r;switch(_){case")":case")&":switch(o){case"limit":if(u.indexOf(",")>-1){let[l,d]=u.split(",");t.offset=+l,t.limit=d-t.offset}else t.limit=+u;break;case"select":if(u[0]==="["){if(u[u.length-1]!=="]")throw new Error("Unmatched brackets");t.select=u.slice(1,-1).split(","),t.select.asArray=!0}else u.indexOf(",")>-1?t.select=(u.endsWith(",")?u.slice(0,-1):u).split(","):t.select=u;break;case"group-by":throw new Error("Group by is not implemented yet");case"sort":t.sort=u.split(",").map(l=>{switch(l[0]){case"-":return{attribute:l.slice(1),descending:!0};case"+":return{attribute:l.slice(1),descending:!1};default:return{attribute:l,descending:!1}}});break;default:throw new Error(`Unknown query function call ${o}`)}s=void 0;break;case"(":o=u;break;case"=":s?u.length<=2&&(n=u):(n="equals",s=decodeURIComponent(u));break;case"!=":case"<":case"<=":case">":case">=":n=FY[_],s=decodeURIComponent(u);break;case"=*":n="ends_with",s=decodeURIComponent(u);break;case"*":case"*&":t.conditions.push({comparator:n==="ends_with"?"contains":"starts_with",attribute:s,value:decodeURIComponent(u)}),s=null;break;case"":case void 0:case"&":case"|":if(!s)throw new Error(`Unable to parse query, no part before ${_} at ${i} in ${e}`);t.conditions.push({comparator:n,attribute:s,value:decodeURIComponent(u)}),s=void 0;break;default:throw new Error(`Unknown operator ${_} in query ${e}`)}c=s?kY:Mb,c.lastIndex=i}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var Km,bt,rn,Ub,FY,xY,Mb,kY,Wm,ad=Re(()=>{Km=P(Z()),bt=P(Ke()),rn=require("ordered-binary"),Ub=require("lmdb"),FY={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(Qm,"idsForCondition");xY={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(jm,"filterByType");a(tn,"attributeComparator");Mb=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,kY=/([^&|*=]+)([&|*=]*)/g;a(od,"parseQuery");Wm=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let s=this.conditions[r];if(s.attribute===t)return s.value}}}});var Xm={};Fe(Xm,{CONTEXT:()=>Se,ID_PROPERTY:()=>Le,IS_COLLECTION:()=>sn,RECORD_PROPERTY:()=>Ae,Resource:()=>Mt,SAVE_UPDATES_PROPERTY:()=>Fb,snake_case:()=>VY});function VY(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function vb(e,t){if(e=e.slice(1),e.indexOf("/")===-1)return e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e));let r=e.split("/"),s=new zm(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function rs(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,_;if(r?o?(_=i,o=o[Se]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(_=n,c=_[this.primaryKey]??null,o=i[Se]||i):_=i:(_=n,c=_[Le]??_[this.primaryKey]??null):i?o=i[Se]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[];for(let f of n){if(typeof f=="object"&&f)break;c.push(f)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null)))}else{if(typeof(c=n.url)=="string"){let f=c.indexOf("?");if(f>-1){let h=this.parseQuery(c.slice(f+1));u?u=Object.assign(h,u):u=h,c=c.slice(0,f)}let E=this.parsePath(c,o,u);E?.query?(u=E.query,c=E.id):c=E}c===void 0&&(c=n.id??null)}else c=n??null;o||(o={});let l;if(u?.ensureLoaded!=null||u?.async?(l=Object.assign({},t),u?.ensureLoaded!=null&&(l.ensureLoaded=u.ensureLoaded),u.async&&(l.async=u.async)):l=t,o.transaction){let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)}else return We(o,()=>{let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)},l);function d(f){if(t.type==="read"&&(f[Fb]=!1),o.authorize){o.authorize=!1;let E=t.type==="read"?f.allowRead(o.user,o):t.type==="update"?f.doesExist?.()===!1?f.allowCreate(o.user,o):f.allowUpdate(o.user,o):t.type==="create"?f.allowCreate(o.user,o):f.allowDelete(o.user,o);if(E?.then)return E.then(h=>{if(!h)throw new cd(o.user);return typeof _?.then=="function"?_.then(S=>e(f,u,o,S)):e(f,u,o,_)});if(!E)throw new cd(o.user)}return typeof _?.then=="function"?_.then(E=>e(f,u,o,E)):e(f,u,o,_)}a(d,"authorizeActionOnResource")}}function ss(e,t){let r=new Gb.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let s of["get","put","post","delete","query","move","copy"])typeof e[s]=="function"&&r.allow.push(s);throw r}function Jm(e){let t=e[Ae];if(t){let r=e[Wt];return s=>{let n;return e.hasOwnProperty(s)&&typeof(n=e[s])!="function"?n:r&&s in r?r[s]:t[s]}}else return r=>e[r]}function Bb(e){if(typeof e=="string")return t=>Jm(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=Jm(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=Jm(r);for(let i of e){let o=n(i);o===void 0&&t&&(o=null),s[i]=o}return s}}else throw new Error("Invalid select argument type "+typeof e)}var Hb,qb,Gb,Se,Le,sn,Fb,Ae,$Y,Mt,cd,zm,Is=Re(()=>{Hb=require("crypto");ou();qb=require("../index"),Gb=P(Z());nd();Ro();ad();Se=Symbol.for("context"),Le=Symbol.for("primary-key"),sn=Symbol("is-collection"),Fb=Symbol("save-updates"),Ae=Symbol("stored-record"),$Y={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Mt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Le]=t;let s=r?.[Se];this[Se]=s!==void 0?s:r||null}static get=rs(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null){let _=Bb(u);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=rs(function(t,r,s,n){if(Array.isArray(n)&&t[sn]){let i=[],o=s.authorize;for(let c of n){let u=t.constructor,_=u.getResource(c[u.primaryKey],s,{async:!0});_.then?i.push(_.then(l=>l.put(c,s))):i.push(_.put(c,s))}return Promise.all(i)}return t.put?t.put(n,r):ss(t,"put")},{hasContent:!0,type:"update"});static delete=rs(function(t,r,s,n){return t.delete?t.delete(r):ss(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,Hb.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),We(s,()=>{let i=new this(n,s),o=i.put?i.put(r):ss(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=rs(function(t,r,s,n){return t.invalidate?t.invalidate(r):ss(t,"delete")},{hasContent:!1,type:"update"});static post=rs(function(t,r,s,n){return t[Le]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=rs(function(t,r,s,n){return t.connect?t.connect(n,r):ss(t,"connect")},{hasContent:!0,type:"read"});static subscribe=rs(function(t,r,s,n){return t.subscribe?t.subscribe(r):ss(t,"subscribe")},{type:"read"});static publish=rs(function(t,r,s,n){return t[Le]!=null&&t.update?.(),t.publish?t.publish(n,r):ss(t,"publish")},{hasContent:!0,type:"create"});static search=rs(function(t,r,s,n){let i=t.search?t.search(r):ss(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=Bb(o);return i.map(c)}return i},{type:"read"});static query=rs(function(t,r,s,n){return t.search?t.search(n,r):ss(t,"search")},{hasContent:!0,type:"read"});static copy=rs(function(t,r,s,n){return t.copy?t.copy(n,r):ss(t,"copy")},{type:"create"});static move=rs(function(t,r,s,n){return t.move?t.move(n,r):ss(t,"move")},{type:"delete"});post(t){if(this[sn])return this.constructor.create(this[Le],t,this[Se]);ss(this,"post")}static isCollection(t){return t?.[sn]}static coerceId(t){return t}static parseQuery(t){return od(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let i=t.slice(n+1);t=t.slice(0,n);let o=r?.headers&&$Y[i];if(o)r.headers.set("accept",o);else if(s)s.property=i;else return{query:{property:i},id:vb(t,this)}}return vb(t,this)}static getResource(t,r,s){let n,i=r[Se],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=t==null||Array.isArray(t)&&t[t.length-1]==null;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let _=u.asMap.get(t);if(n=_?.find(l=>l.constructor===c),n)return n;_||u.asMap.set(t,_=[]),_.push(n=new c(t,i))}else{if(n=u.find(_=>_[Le]===t&&_.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[Le],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else n=new c(t,i);return o&&(n[sn]=!0),n}subscribe(t){return new bs}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new bs}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[Le]}getContext(){return this[Se]}};Mt.prototype[Se]=null;(0,qb._assignPackageExport)("Resource",Mt);a(VY,"snake_case");cd=class extends Error{static{a(this,"AccessError")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};a(vb,"pathToId");zm=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(rs,"transactional");a(ss,"missingMethod");a(Jm,"selectFromObject");a(Bb,"transformForSelect")});var xb={};Fe(xb,{Resources:()=>ud,keyArrayToString:()=>Ta,resetResources:()=>YY,resources:()=>wi});function YY(){return wi=new ud}function Ta(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var ud,wi,cu=Re(()=>{Ro();ud=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let l=this.get(c.slice(0,_));l&&(l.hasSubPaths=!0),_+=2}}}getMatch(t,r){let s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(t[0]!=="/"&&(t="/"+t),n.relativeURL=t)),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return We(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(YY,"resetResources");a(Ta,"keyArrayToString")});var Wb={};Fe(Wb,{HAS_EXPIRATION:()=>ip,LAST_TIMESTAMP_PLACEHOLDER:()=>lu,LOCAL_TIMESTAMP:()=>KY,METADATA:()=>uu,NO_TIMESTAMP:()=>Zm,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>np,RecordEncoder:()=>sp,TIMESTAMP_ASSIGN_LAST:()=>QY,TIMESTAMP_ASSIGN_NEW:()=>Vb,TIMESTAMP_ASSIGN_PREVIOUS:()=>Yb,TIMESTAMP_PLACEHOLDER:()=>ld,TIMESTAMP_RECORD_PREVIOUS:()=>ep,getUpdateRecord:()=>op,handleLocalTimeForGets:()=>Ed});function Kb(){return Ra[0]=Ra[0]^64,WY.getFloat64(0)}function Ed(e){let t=e.getEntry;e.getEntry=function(i,o){let c=t.call(this,i,o),u=c?.value,_=u?.[uu];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[uu]>=0?c.value:c};let s=e.getRange;e.getRange=function(i){let o=s.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1?o:o.map(c=>{let u=c.value,_=u[uu];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})},e.env.metadataRetriever||(e.env.metadataRetriever=!0,e.on("aftercommit",({next:i,last:o})=>{do{let c=i.meta,u=c&&c.store;if(u&&!(i.flag&67108864)){let _=u.cache;if(c.key){let l=jY.call(_,c.key);if(l&&l.timestampBytes){let d=l.timestampOffset;l.timestampBytes[d]===2&&(l.timestampBytes.copy(Ra,0,d),l.timestampBytes=null,l.localTime=Kb())}}}}while(i!=o&&(i=i.next))}));let n=e.useReadTransaction();if(n.done(),!n.done.isTracked){n.done.isTracked=!0;let i=n.constructor,o=n.use,c=n.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Ao.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Ao.length;u++){let _=Ao[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&Ao.splice(u--,1)}}}return e}function op(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?ga=i?.localTime?ep|Yb:Zm:ga=u?i?.localTime?ep|16384:Vb|16384:Zm,l>0&&(c|=ip),dd=c,rp=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:ga>0},S;try{f&&(h.ifVersion=S=i?.version??null);let m=e.put(s,n,h);if(e.cache&&m.result!==!1){let g=e.cache.get(s);g&&(c>=0?g.metadataFlags=c:g.metadataFlags>=0&&(g.metadataFlags=void 0),(l||!g.expiresAt)&&(g.expiresAt=l),h.instructedWrite&&(g.localTime||(g.localTime=1),g.timestampBytes=tp,g.timestampOffset=tp.start||0))}if(u){let g=_?.user?.username;if(E&&(_d=e.encoder.encode(E)),f&&i?.localTime){let R=i?.localTime,b=r.get(R);if(b){let V=Ur(b).previousLocalTime;return r.put(R,fd(o,t,s,V,g,d,_d),{ifVersion:S}),m}}r.put(lu,fd(o,t,s,i?.localTime?1:0,g,d,_d),{append:d!=="invalidate",instructedWrite:!0,ifVersion:S})}return m}catch(m){throw m.message+=" id: "+s+" options: "+h,m}}}var kb,$b,ld,lu,np,KY,uu,Ra,WY,Zm,Vb,QY,Yb,ep,ip,tp,_d,ga,dd,rp,sp,jY,Ao,_u=Re(()=>{kb=require("msgpackr");Aa();$b=P(U()),ld=new Uint8Array([1,1,1,1,4,64,0,0]),lu=new Uint8Array([1,1,1,1,1,0,0,0]),np=new Uint8Array([1,1,1,1,3,64,0,0]),KY=Symbol("local-timestamp"),uu=Symbol("metadata"),Ra=new Uint8Array(8),WY=new DataView(Ra.buffer,0,8),Zm=0,Vb=0,QY=1,Yb=3,ep=4,ip=16,ga=0,dd=-1,rp=0,sp=class extends kb.Encoder{static{a(this,"RecordEncoder")}constructor(t){super(t);let r=this.encode;this.encode=function(s,n){if(ga||dd>=0){let i=0,o=ga;o&&(i+=8,ga=0);let c=dd,u=rp;c>=0&&(i+=2,dd=-1,u&&(i+=8,rp=0));let _=tp=r.call(this,s,n|2048|i);_d=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(ld[4]=o,ld[5]=o>>8,_.set(ld,l),l+=8),c>=0&&(_[l++]=c,_[l++]=0,u&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(l,u)),_}else return r.call(this,s,n)}}decode(t,r){let s=r?.start||0,n=r>-1?r:r?.end||t.length,i=t[s],o=0;try{if(i<32&&n>2){let c=s,u;if(i===2){if(t.copy)t.copy(Ra,0,c),c+=8;else for(let d=0;d<8;d++)Ra[d]=t[c++];u=Kb(),i=t[c]}let _;i<32&&(o=i,c+=2,o&ip&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,n),n-c);return{localTime:u,value:l,[uu]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(Kb,"getTimestamp");jY=Map.prototype.get;a(Ed,"handleLocalTimeForGets");Ao=[];setInterval(()=>{for(let e=0;e<Ao.length;e++){let t=Ao[e].deref();!t||t.isDone||t.isCommitted?Ao.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&$b.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t),t.openTimer++):t.openTimer=1)}},15e3).unref();a(op,"getUpdateRecord")});var iy={};Fe(iy,{AUDIT_STORE_OPTIONS:()=>sy,createAuditEntry:()=>fd,openAuditStore:()=>md,readAuditEntry:()=>Ur,setAuditRetention:()=>JY,transactionKeyEncoder:()=>ry});function md(e){let t=e.auditStore=e.openDB(Xb.AUDIT_STORE_NAME,sy);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,ey.getWorkerIndex)()===0&&e.on("aftercommit",()=>{fu||(fu=setTimeout(()=>{if(fu=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:0,end:Date.now()-ap})){if((n[0]&15)===up){let i=Ur(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},ap/10).unref())}),t}function JY(e){clearTimeout(fu),fu=null,ap=e}function fd(e,t,r,s,n,i,o){let c=ny[i],u=1;s&&(s>1?du.setFloat64(0,s):nn.set(np),u=9),f(0),f(t),d(r),du.setFloat64(u,e),u+=8,n?d(n):nn[u++]=0,nn[s?8:0]=c;let l=nn.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,Oa.writeKey)(E,nn,u),u>130||(nn[h]=u-h-1)}function f(E){E<128?nn[u++]=E:E<16384?(du.setUint16(u,E|32767),u+=2):E<1056964608?(du.setUint32(u,E|3489660927),u+=4):(nn[u]=255,du.setUint32(u+1,E),u+=5)}}function Ur(e){let t=e.dataView||(e.dataView=new lp(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let s=t.readInt(),n=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,u=t.position+=o,_=t.readFloat64();o=t.readInt();let l=t.position,d=t.position+=o;return{type:ny[s&7],tableId:i,get recordId(){return zb(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?zb(e,l,d):void 0},getValue(f){return s&cp?f.decoder.decode(e.subarray(t.position)):void 0}}}function zb(e,t,r){let s=e.subarray(t,r);return(0,Oa.readKey)(s,0,r-t)}var Oa,hd,Xb,Zb,ey,ty,nn,du,ry,sy,ap,fu,cp,Qb,up,jb,Jb,ny,lp,Aa=Re(()=>{Oa=require("ordered-binary"),hd=P(Q()),Xb=P(Ke()),Zb=P(A()),ey=P(Qe()),ty=P(G());_u();(0,hd.initSync)();nn=Buffer.alloc(1024),du=new DataView(nn.buffer,nn.byteOffset,1024),ry={writeKey(e,t,r){return e===lu?(t.set(lu,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Oa.writeKey)(e,t,r)},readKey(e,t,r){return e[t]===66?(e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))).getFloat64(t):(0,Oa.readKey)(e,t,r)}},sy={encoding:"binary",keyEncoder:ry},ap=(0,ty.convertToMS)((0,hd.get)(Zb.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,fu=null;a(md,"openAuditStore");a(JY,"setAuditRetention");cp=16,Qb=1,up=2,jb=3,Jb=4,ny={put:Qb|cp,[Qb]:"put",delete:up,[up]:"delete",message:jb|cp,[jb]:"message",invalidate:Jb,[Jb]:"invalidate"};a(fd,"createAuditEntry");a(Ur,"readAuditEntry");lp=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t=this.getUint8(this.position++);return t>=128?t>=192?t===255?(t=this.getUint32(this.position-1)&3489660927,this.position+=4,t):(t=this.getUint32(this.position-1)&3489660927,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch{debugger}}};a(zb,"readKeySafely")});function ay(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;Na||((0,hu.onMessageByType)(oy,d=>{cy(d.path)}),(0,hu.onMessageByType)(zY,d=>{(0,Eu.trace)("confirming to proceed with txn",d.txnId)}),Na=Object.create(null));let c=Na[i]||(Na[i]=[]);c.auditStore=e.auditStore;let u=c[o];u||(u=c[o]=new Map,u.envs=c,u.tableId=o,u.store=e.primaryStore),t=Ta(t);let _=new dp(r);_.startTime=s,n&&(_.includeDescendants=n);let l=u.get(t);return l?l.push(_):(u.set(t,l=[_]),l.tables=u,l.key=t),_.subscriptions=l,_}function cy(e,t){if(!Na)return;let r=Na[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(n){throw n.message+=" in "+e,n}let s;for(let{key:n,value:i}of r.auditStore.getRange({start:_p,exclusiveStart:!0})){_p=n;let o=Ur(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=Ta(o.recordId),d;do{let f=c.get(l);if(f){for(let h of f)if(!(d&&!h.includeDescendants)){if(h.startTime>=n){(0,Eu.info)("omitting",u,h.startTime,n);continue}try{if(h.crossThreads===!1&&!t)continue;let S;h.supportsTransactions&&h.txnInProgress!==o.version&&(S=!0,h.txnInProgress||(s?s.push(h):s=[h]),h.txnInProgress=o.version),h.listener(u,o,n,S)}catch(S){console.error(S),(0,Eu.info)(S)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E+1):l=null,d=!0}while(!0)}if(s)for(let n of s)n.txnInProgress=null,n.listener(null,{type:"end_txn"},_p,!0)}function uy(e,t){let r=t||e,s=r.env;if(t&&!t.cache&&(t.cache=new Map),!s.hasBroadcastListener){s.hasBroadcastListener=!0;let n=s.path;r.on("aftercommit",()=>{(0,hu.broadcast)({type:oy,path:n}),cy(n,!0)})}}var Eu,hu,oy,zY,Na,Nfe,dp,_p,ly=Re(()=>{Eu=P(U()),hu=P(Qe());ou();cu();Aa();oy="transaction",zY="transaction-await",Nfe=Buffer.alloc(4096);a(ay,"addSubscription");dp=class extends bs{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let s=t.envs,n=t.dbi;delete s[n]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}},_p=Date.now();a(cy,"notifyFromTransactionData");a(uy,"listenToCommits")});var dy=T((Ife,_y)=>{"use strict";var fp=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};_y.exports=fp});var Ey=T((Cfe,fy)=>{"use strict";var Ep=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};fy.exports=Ep});var pd=T((Dfe,hy)=>{"use strict";var mp=Q(),pp=A(),{RecordEncoder:XY}=(_u(),te(Wb));mp.initSync();var ZY=mp.get(pp.CONFIG_PARAMS.STORAGE_COMPRESSION),e1=mp.get(pp.CONFIG_PARAMS.STORAGE_CACHING)!==!1,t1=pp.UPDATES_PROPERTY,hp=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=ZY&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=e1&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:XY},this.alwaysLazyProperty=s=>s===t1)}};hy.exports=hp});var Td=T((Mfe,py)=>{"use strict";var ba=Q(),mu=A();ba.initSync();var r1=ba.get(mu.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||ba.get(mu.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||ba.get(mu.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",my=ba.get(mu.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),s1=ba.get(mu.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Sd=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=r1,this.noFSAccess=!0,my!==void 0&&(this.overlappingSync=my),this.noReadAhead=s1}};py.exports=Sd;Sd.MAX_DBS=1e4});var Me=T((vfe,Iy)=>{"use strict";var Tp=require("lmdb"),ws=require("fs-extra"),vr=require("path"),gd=ar(),gy=U(),cr=Mr().LMDB_ERRORS_ENUM,Rd=Ey(),gp=pd(),Ry=Td(),Ci=Ke(),Sy=A(),{table:n1,resetDatabases:i1}=(de(),te(De)),Ty=Q(),Cs=Ci.INTERNAL_DBIS_NAME,Ay=Ci.DBI_DEFINITION_NAME,o1="data.mdb",a1="lock.mdb",pu=".mdb",c1="-lock",Sp=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=ns(t,r),this.key_type=this.dbi[Ci.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Ci.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Tp.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Ad(e,t){if(e===void 0)throw new Error(cr.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(cr.ENV_NAME_REQUIRED)}a(Ad,"pathEnvNameValidation");async function Rp(e,t,r=!0){try{await ws.access(e)}catch(s){throw s.code==="ENOENT"?new Error(cr.INVALID_BASE_PATH):s}try{let s=vr.join(e,t+pu);return await ws.access(s,ws.constants.R_OK|ws.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await ws.access(vr.join(e,t,o1),ws.constants.R_OK|ws.constants.F_OK),vr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(cr.INVALID_ENVIRONMENT)}else throw new Error(cr.INVALID_ENVIRONMENT);throw s}}a(Rp,"validateEnvironmentPath");function Od(e,t){if(gd.validateEnv(e),t===void 0)throw new Error(cr.DBI_NAME_REQUIRED)}a(Od,"validateEnvDBIName");async function u1(e,t,r=!1,s=!1){Ad(e,t);let n=vr.basename(e);t=t.toString();let i=Ty.get(Sy.CONFIG_PARAMS.DATABASES);i||Ty.setProperty(Sy.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await Rp(e,t,s),Oy(e,t,r)}catch(o){if(o.message===cr.INVALID_ENVIRONMENT){let c=vr.join(e,t);await ws.mkdirp(s?c:e);let u=new Ry(s?c:c+pu,!1),_=Tp.open(u);_.dbis=Object.create(null);let l=new gp(!1);_.openDB(Cs,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Ap(e,t,r);return _[Ci.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(u1,"createEnvironment");async function l1(e,t,r,s=!0){Ad(e,t),t=t.toString();let n=vr.join(e,t);return n1({table:t,database:vr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(l1,"copyEnvironment");async function Oy(e,t,r=!1){Ad(e,t),t=t.toString();let s=Ap(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await Rp(e,t),i=vr.join(e,t+pu),o=n!=i,c=new Ry(n,o),u=Tp.open(c);u.dbis=Object.create(null);let _=by(u);for(let l=0;l<_.length;l++)ns(u,_[l]);return u[Ci.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(Oy,"openEnvironment");async function _1(e,t,r=!1){Ad(e,t),t=t.toString();let s=vr.join(e,t+pu),n=await Rp(e,t);if(global.lmdb_map!==void 0){let i=Ap(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Ny(o),delete global.lmdb_map[i]}}await ws.remove(n),await ws.remove(n===s?n+c1:vr.join(vr.dirname(n),a1))}a(_1,"deleteEnvironment");async function Ny(e){gd.validateEnv(e);let t=e[Ci.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Ny,"closeEnvironment");function Ap(e,t,r=!1){let n=`${vr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Ap,"getCachedEnvironmentName");function d1(e){gd.validateEnv(e);let t=Object.create(null),r=ns(e,Cs);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Cs)try{t[s]=Object.assign(new Rd,n)}catch{gy.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(d1,"listDBIDefinitions");function by(e){gd.validateEnv(e);let t=[],r=ns(e,Cs);for(let{key:s}of r.getRange({start:!1}))s!==Cs&&t.push(s);return t}a(by,"listDBIs");function f1(e,t){let s=ns(e,Cs).getEntry(t),n=new Rd;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{gy.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(f1,"getDBIDefinition");function yy(e,t,r,s=!r){if(Od(e,t),t=t.toString(),t===Cs)throw new Error(cr.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return ns(e,t)}catch(n){if(n.message===cr.DBI_DOES_NOT_EXIST){let i=new gp(r,s===!0),o=e.openDB(t,i),c=new Rd(r===!0,s);return o[Ay]=c,ns(e,Cs).putSync(t,c),e.dbis[t]=o,o}throw n}}a(yy,"createDBI");function ns(e,t){if(Od(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Cs?r=f1(e,t):r=new Rd,r===void 0)throw new Error(cr.DBI_DOES_NOT_EXIST);let s;try{let n=new gp(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(cr.DBI_DOES_NOT_EXIST):n}return s[Ay]=r,e.dbis[t]=s,s}a(ns,"openDBI");function E1(e,t){Od(e,t),t=t.toString();let r=ns(e,t),s=r.getStats();return r[Ci.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(E1,"statDBI");async function h1(e,t){try{let r=vr.join(e,t+pu);return(await ws.stat(r)).size}catch{throw new Error(cr.INVALID_ENVIRONMENT)}}a(h1,"environmentDataSize");function m1(e,t){if(Od(e,t),t=t.toString(),t===Cs)throw new Error(cr.CANNOT_DROP_INTERNAL_DBIS_NAME);ns(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],ns(e,Cs).removeSync(t)}a(m1,"dropDBI");function p1(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{ns(e,i)}catch(o){if(o.message===cr.DBI_DOES_NOT_EXIST)yy(e,i,i!==t,i===t),s=!0;else throw o}}s&&i1()}a(p1,"initializeDBIs");Iy.exports={openDBI:ns,openEnvironment:Oy,createEnvironment:u1,listDBIs:by,listDBIDefinitions:d1,createDBI:yy,dropDBI:m1,statDBI:E1,deleteEnvironment:_1,initializeDBIs:p1,TransactionCursor:Sp,environmentDataSize:h1,copyEnvironment:l1,closeEnvironment:Ny}});var Ly=T((Hfe,Cy)=>{"use strict";var Op=Me(),S1=U(),wy=Mr().LMDB_ERRORS_ENUM;Cy.exports=T1;async function T1(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await Op.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==wy.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Op.closeEnvironment(global.lmdb_map[s]),await Op.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==wy.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){S1.error(t)}}a(T1,"cleanLMDBMap")});var Gn=T((Gfe,g1)=>{g1.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metric"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var $y=T((xfe,ky)=>{"use strict";var Np=require("recursive-iterator"),R1=require("alasql"),bp=require("clone"),Dy=G(),{handleHDBError:Py,hdb_errors:A1}=Z(),{HDB_ERROR_MSGS:My,HTTP_STATUS_CODES:Uy}=A1,{getDatabases:O1}=(de(),te(De)),N1=["DISTINCT_ARRAY"],vy=Symbol("validateTables"),yp=Symbol("validateTable"),Ffe=Symbol("getAllColumns"),By=Symbol("validateAllColumns"),Nd=Symbol("findColumn"),Hy=Symbol("validateOrderBy"),Su=Symbol("validateSegment"),Ip=Symbol("validateColumn"),qy=Symbol("setColumnsForTable"),Gy=Symbol("checkColumnsForAsterisk"),Fy=Symbol("validateGroupBy"),xy=Symbol("hasColumns"),wp=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[vy](),this[Gy](),this[By]()}[vy](){if(this[xy]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[yp](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[yp](t.table)})}}[xy](){let t=!1,r=new Np(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[yp](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=O1();if(!r[t.databaseid])throw Py(new Error,My.SCHEMA_NOT_FOUND(t.databaseid),Uy.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Py(new Error,My.TABLE_NOT_FOUND(t.databaseid,t.tableid),Uy.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=bp(n);i.table=bp(t),this.attributes.push(i)})}[Nd](t){return this.attributes.filter(r=>t.tableid?(r.table.as===t.tableid||r.table.tableid===t.tableid)&&r.attribute===t.columnid:r.attribute===t.columnid)}[Gy](){let t=new Np(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[qy](r.tableid)}[qy](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new R1.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[By](){this[Su](this.statement.columns,!1),this[Su](this.statement.joins,!1),this[Su](this.statement.where,!1),this[Fy](this.statement.group,!1),this[Su](this.statement.order,!0)}[Su](t,r){if(!t)return;let s=new Np(t),n=[];for(let{node:i,path:o}of s)!Dy.isEmpty(i)&&!Dy.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Hy](i):n.push(this[Ip](i)));return n}[Fy](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&N1.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=bp(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Nd](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[Nd](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[Hy](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[Ip](t)}[Ip](t){let r=this[Nd](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};ky.exports=wp});var Yy=T(($fe,Vy)=>{"use strict";var Cp=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};Vy.exports=Cp});var Wy=T((Yfe,Ky)=>{"use strict";var Lp=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};Ky.exports=Lp});var jy=T((Wfe,Qy)=>{"use strict";var Dp=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};Qy.exports=Dp});var zy=T((jfe,Jy)=>{"use strict";var Pp=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};Jy.exports=Pp});var No=T((eEe,eI)=>{"use strict";var b1=Me(),y1=Wy(),I1=jy(),w1=zy(),on=ar(),Tu=Mr().LMDB_ERRORS_ENUM,C1=Ke(),Fn=A(),L1=G(),D1=require("uuid"),zfe=require("lmdb"),{handleHDBError:P1,hdb_errors:M1}=Z(),{OVERFLOW_MARKER:Xfe,MAX_SEARCH_KEY_LENGTH:Zfe}=C1,Xy=Q();Xy.initSync();var bd=Xy.get(Fn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Mp=Fn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Oo=Fn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function U1(e,t,r,s,n=on.getNextMonotonicTime()){Hp(e,t,r,s),Up(e,t,r);let i=new y1,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];Zy(_,!0,n);let l=v1(e,t,r,_),d=_[t];o.push(l),c.push(d)}return vp(o,c,s,i,n)}a(U1,"insertRecords");function v1(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][Fn.FUNC_VAL],s[o]=c)}let u=on.getIndexedValues(c),_=e.dbis[o];if(u){bd&&_.prefetch(u.map(l=>({key:l,value:n})),yd);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}bd&&e.dbis[t].prefetch([n],yd),e.dbis[t].put(n,s,s[Oo])})}a(v1,"insertRecord");function B1(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(B1,"removeSkippedRecords");function Zy(e,t,r){let s=r>0;(s||!Number.isInteger(e[Oo]))&&(e[Oo]=r||(r=on.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Mp]))&&(e[Mp]=r||on.getNextMonotonicTime()):delete e[Mp]}a(Zy,"setTimestamps");function Up(e,t,r){r.indexOf(Fn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Fn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Fn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Fn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),b1.initializeDBIs(e,t,r)}a(Up,"initializeTransaction");async function H1(e,t,r,s,n=on.getNextMonotonicTime()){Hp(e,t,r,s),Up(e,t,r);let i=new I1,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=Bp(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return vp(c,u,s,i,n,o)}a(H1,"updateRecords");async function q1(e,t,r,s,n=on.getNextMonotonicTime()){try{Hp(e,t,r,s)}catch(u){throw P1(u,u.message,M1.HTTP_STATUS_CODES.BAD_REQUEST)}Up(e,t,r);let i=new w1,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;L1.isEmpty(_[t])?(l=D1.v4(),_[t]=l):l=_[t];let d=Bp(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return vp(o,c,s,i,n)}a(q1,"upsertRecords");async function vp(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||on.getNextMonotonicTime(),B1(r,i),s}a(vp,"finalizeWrite");function Bp(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(Zy(r,!l,o),Number.isInteger(r[Oo])&&_[Oo]>r[Oo])return!1;l&&n.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let S=r[h],m=e.dbis[h];if(m===void 0)continue;let g=_[h];if(typeof S=="function"){let b=S([[_]]);Array.isArray(b)&&(S=b[0][Fn.FUNC_VAL],r[h]=S)}if(S===g)continue;let R=on.getIndexedValues(g);if(R){bd&&m.prefetch(R.map(b=>({key:b,value:s})),yd);for(let b=0,V=R.length;b<V;b++)m.remove(R[b],s)}if(R=on.getIndexedValues(S),R){bd&&m.prefetch(R.map(b=>({key:b,value:s})),yd);for(let b=0,V=R.length;b<V;b++)m.put(R[b],s)}}let E=Object.assign({},_,r);c.put(s,E,E[Oo])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:Bp(e,t,r,s,n,i,o))}a(Bp,"updateUpsertRecord");function G1(e,t,r){if(on.validateEnv(e),t===void 0)throw new Error(Tu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Tu.WRITE_ATTRIBUTES_REQUIRED):new Error(Tu.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(G1,"validateBasic");function Hp(e,t,r,s){if(G1(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Tu.RECORDS_REQUIRED):new Error(Tu.RECORDS_MUST_BE_ARRAY)}a(Hp,"validateWrite");function yd(){}a(yd,"noop");eI.exports={insertRecords:U1,updateRecords:H1,upsertRecords:q1}});var an=T((rEe,sI)=>{"use strict";var rI=G(),tI=A(),ya=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,xn=require("joi"),Li={schema_format:{pattern:ya,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},F1=xn.alternatives(xn.string().min(1).max(Li.schema_length.maximum).pattern(ya).messages({"string.pattern.base":"{:#label} "+Li.schema_format.message}),xn.number()).required(),x1=xn.alternatives(xn.string().min(1).max(Li.schema_length.maximum).pattern(ya).messages({"string.pattern.base":"{:#label} "+Li.schema_format.message}),xn.number()),k1=xn.alternatives(xn.string().min(1).max(Li.schema_length.maximum).pattern(ya).messages({"string.pattern.base":"{:#label} "+Li.schema_format.message}),xn.number()).required();function $1(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Li.schema_length.maximum?`'${e}' maximum of 250 characters`:ya.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a($1,"checkValidTable");function V1(e,t){return rI.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(V1,"validateSchemaExists");function Y1(e,t){let r=t.state.ancestors[0].schema;return rI.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Y1,"validateTableExists");function K1(e,t){return e.toLowerCase()===tI.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${tI.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(K1,"validateSchemaName");sI.exports={common_validators:Li,schema_regex:ya,hdb_schema_table:F1,validateSchemaExists:V1,validateTableExists:Y1,validateSchemaName:K1,checkValidTable:$1,hdb_database:x1,hdb_table:k1}});var Ve=T((nEe,nI)=>{"use strict";var ur=require("validate.js");ur.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||ur.validators.type.checks[t](e)?null:` must be a '${t}' value`};ur.validators.type.checks={Object:function(e){return ur.isObject(e)&&!ur.isArray(e)},Array:ur.isArray,Integer:ur.isInteger,Number:ur.isNumber,String:ur.isString,Date:ur.isDate,Boolean:function(e){return typeof e=="boolean"}};ur.validators.hasValidFileExt=function(e,t){return ur.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};nI.exports={validateObject:W1,validateObjectAsync:Q1,validateBySchema:j1};function W1(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=ur(e,t,{format:"flat"});return r?new Error(r):null}a(W1,"validateObject");async function Q1(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await ur.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(Q1,"validateObjectAsync");function j1(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(j1,"validateBySchema")});var Id=T((oEe,iI)=>{var{common_validators:cn}=an(),Ru=Ve(),gu="is required",ct={database:{presence:!1,format:cn.schema_format,length:cn.schema_length},schema:{presence:!1,format:cn.schema_format,length:cn.schema_length},table:{presence:!0,format:cn.schema_format,length:cn.schema_length},attribute:{presence:!0,format:cn.schema_format,length:cn.schema_length},hash_attribute:{presence:!0,format:cn.schema_format,length:cn.schema_length}};function Au(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(Au,"makeAttributesStrings");function J1(e){return e=Au(e),ct.table.presence=!1,ct.attribute.presence=!1,ct.hash_attribute.presence=!1,Ru.validateObject(e,ct)}a(J1,"schema_object");function z1(e){return e=Au(e),ct.table.presence={message:gu},ct.attribute.presence=!1,ct.hash_attribute.presence=!1,Ru.validateObject(e,ct)}a(z1,"table_object");function X1(e){return e=Au(e),ct.table.presence={message:gu},ct.attribute.presence=!1,Ru.validateObject(e,ct)}a(X1,"create_table_object");function Z1(e){return e=Au(e),ct.table.presence={message:gu},ct.attribute.presence={message:gu},ct.hash_attribute.presence=!1,Ru.validateObject(e,ct)}a(Z1,"attribute_object");function eK(e){return e=Au(e),ct.table.presence={message:gu},ct.attribute.presence=!1,ct.hash_attribute.presence=!1,Ru.validateObject(e,ct)}a(eK,"describe_table");function tK(e){if(e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a(tK,"validateTableResidence");iI.exports={schema_object:J1,create_table_object:X1,table_object:z1,attribute_object:Z1,describe_table:eK,validateTableResidence:tK}});var aI=T((cEe,oI)=>{"use strict";var rK=require("uuid"),qp=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||rK.v4(),this.schema_table=`${this.schema}.${this.table}`}};oI.exports=qp});var wd=T((lEe,cI)=>{"use strict";var sK=aI(),Gp=class extends sK{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};cI.exports=Gp});var lI=T((dEe,uI)=>{"use strict";uI.exports=iK;var nK="inserted";function iK(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===nK?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(iK,"returnObject")});var Cd=T((EEe,hI)=>{"use strict";var oK=A(),Fp=Me(),aK=No(),{getSystemSchemaPath:cK,getSchemaPath:uK}=Be(),lK=Gn(),_K=Id(),dK=wd(),fK=lI(),{handleHDBError:_I,hdb_errors:fI}=Z(),dI=G(),{HTTP_STATUS_CODES:EK}=fI,xp=lK.hdb_attribute,EI=[];for(let e=0;e<xp.attributes.length;e++)EI.push(xp.attributes[e].attribute);var hK="inserted";hI.exports=mK;async function mK(e){let t=_K.attribute_object(e);if(t)throw _I(new Error,t.message,fI.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&dI.checkGlobalSchemaTable(e.schema,e.table);if(r)throw _I(new Error,r,EK.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=dI.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new dK(e.schema,e.table,e.attribute,e.id);try{let i=await Fp.openEnvironment(uK(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);Fp.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Fp.openEnvironment(cK(),oK.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await aK.insertRecords(o,xp.hash_attribute,EI,[n]);return fK(hK,c,{records:[n]},u)}catch(i){throw i}}a(mK,"lmdbCreateAttribute")});var $p=T((mEe,pI)=>{var{hdb_table:pK,hdb_database:mI}=an(),SK=Ve(),kp=require("joi"),TK={undefined:"undefined",null:"null"},gK=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||TK[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),RK=kp.object({database:mI,schema:mI,table:pK,records:kp.array().items(kp.object().custom(gK)).required()});pI.exports=function(e){return SK.validateBySchema(e,RK)}});var Ou=T((TEe,TI)=>{"use strict";var kn=G(),SI=U(),SEe=$p(),{getDatabases:AK}=(de(),te(De)),{ClientError:bo}=Z();TI.exports=OK;function OK(e){if(kn.isEmpty(e))throw new bo("invalid update parameters defined.");if(kn.isEmptyOrZeroLength(e.schema))throw new bo("invalid schema specified.");if(kn.isEmptyOrZeroLength(e.table))throw new bo("invalid table specified.");if(!Array.isArray(e.records))throw new bo("records must be an array");let t=AK()[e.schema]?.[e.table];if(kn.isEmpty(t))throw new bo(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&kn.isEmptyOrZeroLength(o[r]))throw SI.error("a valid hash attribute must be provided with update record:",o),new bo("a valid hash attribute must be provided with update record, check log for more info");if(!kn.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw SI.error(`a valid hash value must be provided with ${e.operation} record:`,o),new bo(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!kn.isEmpty(o[r])&&o[r]!==""&&s.has(kn.autoCast(o[r]))&&(o.skip=!0),s.add(kn.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(OK,"insertUpdateValidate")});var Nu=T((REe,gI)=>{"use strict";var NK=A().OPERATIONS_ENUM,Vp=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=NK.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};gI.exports=Vp});var wu=T((NEe,RI)=>{"use strict";var OEe=Nu(),Ld=A(),Kp=G(),Yp=U(),bK=require("uuid"),{handleHDBError:bu,hdb_errors:yK}=Z(),{HDB_ERROR_MSGS:yu,HTTP_STATUS_CODES:Iu}=yK;RI.exports=IK;function IK(e,t,r){for(let n=0;n<t.length;n++)wK(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];CK(i,r,e.operation)}}a(IK,"processRows");function wK(e){if(Buffer.byteLength(String(e))>Ld.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw bu(new Error,yu.ATTR_NAME_LENGTH_ERR(e),Iu.BAD_REQUEST,void 0,void 0,!0);if(Kp.isEmptyOrZeroLength(e)||Kp.isEmpty(e.trim()))throw bu(new Error,yu.ATTR_NAME_NULLISH_ERR,Iu.BAD_REQUEST,void 0,void 0,!0)}a(wK,"validateAttribute");function CK(e,t,r){if(!e.hasOwnProperty(t)||Kp.isEmptyOrZeroLength(e[t])){if(r===Ld.OPERATIONS_ENUM.INSERT||r===Ld.OPERATIONS_ENUM.UPSERT){e[t]=bK.v4();return}throw Yp.error("Update transaction aborted due to record with no hash value:",e),bu(new Error,yu.RECORD_MISSING_HASH_ERR,Iu.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Ld.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Yp.error(e),bu(new Error,yu.HASH_VAL_LENGTH_ERR,Iu.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Yp.error(e),bu(new Error,yu.INVALID_FORWARD_SLASH_IN_HASH_ERR,Iu.BAD_REQUEST,void 0,void 0,!0)}a(CK,"validateHash")});var Dd=T((yEe,OI)=>{"use strict";var AI=G(),LK=A(),DK=U(),PK=Cd(),MK=wd(),UK=$n(),{SchemaEventMsg:vK}=Ls(),BK="already exists in";OI.exports=HK;async function HK(e,t,r){if(AI.isEmptyOrZeroLength(r))return r;let s=[];AI.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await qK(e,t.schema,t.name,i)})),n}a(HK,"lmdbCheckForNewAttributes");async function qK(e,t,r,s){let n=new MK(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await GK(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(BK))DK.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(qK,"createNewAttribute");async function GK(e){let t;return t=await PK(e),UK.signalSchemaChange(new vK(process.pid,LK.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(GK,"createAttribute")});var Ia=T((wEe,NI)=>{"use strict";var Wp=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};NI.exports=Wp});var yI=T((LEe,bI)=>{"use strict";var FK=Ia(),xK=A().OPERATIONS_ENUM,Qp=class extends FK{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(xK.INSERT,r,s,n,i),this.records=t}};bI.exports=Qp});var wI=T((PEe,II)=>{"use strict";var kK=Ia(),$K=A().OPERATIONS_ENUM,jp=class extends kK{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super($K.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};II.exports=jp});var LI=T((UEe,CI)=>{"use strict";var VK=Ia(),YK=A().OPERATIONS_ENUM,Jp=class extends VK{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(YK.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};CI.exports=Jp});var PI=T((BEe,DI)=>{"use strict";var KK=Ia(),WK=A().OPERATIONS_ENUM,zp=class extends KK{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(WK.DELETE,s,n,t,i),this.original_records=r}};DI.exports=zp});var Cu=T((GEe,BI)=>{"use strict";var qEe=require("path"),MI=Me(),QK=yI(),jK=wI(),JK=LI(),zK=PI(),wa=Ke(),UI=G(),{CONFIG_PARAMS:XK}=A(),vI=Q();vI.initSync();var Pd=A().OPERATIONS_ENUM,{getTransactionAuditStorePath:ZK}=Be();BI.exports=eW;async function eW(e,t){if(vI.get(XK.LOGGING_AUDITLOG)===!1)return;let r=ZK(e.schema,e.table),s=await MI.openEnvironment(r,e.table,!0),n=tW(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){MI.initializeDBIs(s,wa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,wa.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[wa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[wa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),UI.isEmpty(n.user_name)||s.dbis[wa.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[wa.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(eW,"writeTransaction");function tW(e,t){let r=UI.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Pd.INSERT)return new QK(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Pd.UPDATE)return new jK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Pd.UPSERT)return new JK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Pd.DELETE)return new zK(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(tW,"createTransactionObject")});var Xp=T((kEe,HI)=>{"use strict";var rW=Ou(),xEe=Nu(),Lu=A(),sW=wu(),nW=No().insertRecords,iW=Me(),oW=U(),aW=Dd(),{getSchemaPath:cW}=Be(),uW=Cu();HI.exports=lW;async function lW(e){try{let{schema_table:t,attributes:r}=rW(e);sW(e,r,t.hash_attribute),e.schema!==Lu.SYSTEM_SCHEMA_NAME&&(r.includes(Lu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Lu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Lu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Lu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await aW(e.hdb_auth_header,t,r),n=cW(e.schema,e.table),i=await iW.openEnvironment(n,e.table),o=await nW(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await uW(e,o)}catch(c){oW.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(lW,"lmdbCreateRecords")});var FI=T((VEe,GI)=>{"use strict";var qI=A(),_W=Xp(),dW=Nu(),fW=require("fs-extra"),{getSchemaPath:EW}=Be();GI.exports=hW;async function hW(e){let t=[{name:e.schema,createddate:Date.now()}],r=new dW(qI.SYSTEM_SCHEMA_NAME,qI.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await _W(r),await fW.mkdirp(EW(e.schema))}a(hW,"lmdbCreateSchema")});var kI=T((KEe,xI)=>{"use strict";var Zp=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};xI.exports=Zp});var KI=T((zEe,YI)=>{"use strict";var $I=Me(),eS=ar(),tS=Mr().LMDB_ERRORS_ENUM,mW=Ke(),VI=U(),QEe=G(),pW=require("lmdb"),SW=kI(),TW=A(),{OVERFLOW_MARKER:jEe,MAX_SEARCH_KEY_LENGTH:JEe}=mW,gW=TW.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function RW(e,t,r,s){if(eS.validateEnv(e),t===void 0)throw new Error(tS.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(tS.IDS_REQUIRED):new Error(tS.IDS_MUST_BE_ITERABLE);try{let n=$I.listDBIs(e);$I.initializeDBIs(e,t,n);let i=new SW,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||s&&h[gW]>s){i.skipped.push(o);continue}let S=e.dbis[t].ifVersion(o,pW.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let m=0;m<n.length;m++){let g=n[m];if(!h.hasOwnProperty(g)||g===t)continue;let R=e.dbis[g],b=h[g];if(b!=null)try{let V=eS.getIndexedValues(b);if(V)for(let $=0,F=V.length;$<F;$++)R.remove(V[$],o)}catch{VI.warn(`cannot delete from attribute: ${g}, ${b}:${o}`)}}});c.push(S),u.push(o),i.original_records.push(h)}catch(h){VI.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let f=0,E=l.length;f<E;f++)l[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=eS.getNextMonotonicTime(),i}catch(n){throw n}}a(RW,"deleteRecords");YI.exports={deleteRecords:RW}});var Du=T((ZEe,QI)=>{"use strict";var Ca=G(),AW=KI(),OW=Me(),{getSchemaPath:NW}=Be(),bW=Cu(),yW=U();QI.exports=IW;async function IW(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ca.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ca.isEmptyOrZeroLength(e.hash_values)&&!Ca.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Ca.isEmpty(u)||e.hash_values.push(u)}}if(Ca.isEmptyOrZeroLength(e.hash_values))return WI([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ca.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=NW(e.schema,e.table),i=await OW.openEnvironment(n,e.table),o=await AW.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await bW(e,o)}catch(c){yW.error(`unable to write transaction due to ${c.message}`)}return WI(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(IW,"lmdbDeleteRecords");function WI(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(WI,"createDeleteResponse")});var sS=T((rhe,jI)=>{"use strict";var wW=A(),the=ar();function rS(e,t){let r=Object.create(null);if(t.length===1&&wW.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(rS,"parseRow");function CW(e,t,r,s){let n=rS(r,e);s.push(n)}a(CW,"searchAll");function LW(e,t,r,s){let n=rS(r,e);s[t]=n}a(LW,"searchAllToMap");function DW(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(DW,"iterateDBI");function yo(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(yo,"pushResults");function PW(e,t,r,s,n,i){t.toString().endsWith(e)&&yo(t,r,s,n,i)}a(PW,"endsWith");function MW(e,t,r,s,n,i){t.toString().includes(e)&&yo(t,r,s,n,i)}a(MW,"contains");function UW(e,t,r,s,n,i){t>e&&yo(t,r,s,n,i)}a(UW,"greaterThanCompare");function vW(e,t,r,s,n,i){t>=e&&yo(t,r,s,n,i)}a(vW,"greaterThanEqualCompare");function BW(e,t,r,s,n,i){t<e&&yo(t,r,s,n,i)}a(BW,"lessThanCompare");function HW(e,t,r,s,n,i){t<=e&&yo(t,r,s,n,i)}a(HW,"lessThanEqualCompare");jI.exports={parseRow:rS,searchAll:CW,searchAllToMap:LW,iterateDBI:DW,endsWith:PW,contains:MW,greaterThanCompare:UW,greaterThanEqualCompare:vW,lessThanCompare:BW,lessThanEqualCompare:HW,pushResults:yo}});var La=T((ahe,rw)=>{"use strict";var Di=Me(),nhe=U(),Br=ar(),Md=Ke(),tt=Mr().LMDB_ERRORS_ENUM,ihe=G(),qW=A(),Ud=sS(),{parseRow:GW}=Ud,ohe=require("lmdb"),{OVERFLOW_MARKER:JI,MAX_SEARCH_KEY_LENGTH:FW}=Md;function zI(e,t,r,s=!1,n=void 0,i=void 0){return Io(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(zI,"iterateFullIndex");function Pu(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return Io(e,t,r,(l,d,f,E)=>{let R={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(R.values=!1,d.getRange(R).map(b=>({value:b}))):d.getRange(R)})}a(Pu,"iterateRangeBetween");function Io(e,t,r,s){let n=e.database||e,i=Di.openDBI(n,r);i[Md.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Di.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(Io,"setupTransaction");function XI(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(JI)){if(!n)if(r)n=Di.openDBI(e,r);else{let u=Di.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=Di.openDBI(e,u[_]),!n[Md.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(XI,"getOverflowCheck");function xW(e,t,r,s=!1,n=void 0,i=void 0){if(Br.validateEnv(e),t===void 0)throw new Error(tt.HASH_ATTRIBUTE_REQUIRED);return Io(e,t,t,(o,c,u)=>(vd(r),r=Mu(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>GW(_.value,r))))}a(xW,"searchAll");function kW(e,t,r,s=!1,n=void 0,i=void 0){if(Br.validateEnv(e),t===void 0)throw new Error(tt.HASH_ATTRIBUTE_REQUIRED);vd(r),r=Mu(e.database||e,r);let o=new Map;for(let{key:c,value:u}of zI(e,t,t,s,n,i))o.set(c,Ud.parseRow(u,r));return o}a(kW,"searchAllToMap");function $W(e,t,r=!1,s=void 0,n=void 0){if(Br.validateEnv(e),t===void 0)throw new Error(tt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=zI(e,void 0,t,r,s,n),c=o.transaction,u=XI(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a($W,"iterateDBI");function VW(e,t){if(Br.validateEnv(e),t===void 0)throw new Error(tt.HASH_ATTRIBUTE_REQUIRED);return Di.statDBI(e,t).entryCount}a(VW,"countAll");function YW(e,t,r,s,n=!1,i=void 0,o=void 0){return Pi(e,r,s),Io(e,t,r,(c,u,_,l)=>(s=Br.convertKeyValueToWrite(s),l===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(YW,"equals");function KW(e,t,r){return Pi(e,t,r),Di.openDBI(e,t).getValuesCount(r)}a(KW,"count");function WW(e,t,r,s,n=!1,i=void 0,o=void 0){return Pi(e,r,s),Io(e,null,r,(c,u)=>{s=Br.convertKeyValueToWrite(s);let _=!0;typeof s=="number"&&(_=!1);let l;if(n===!0){let d;for(let f of u.getKeys({transaction:c,start:s}))if(!f.startsWith(s)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(s))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(WW,"startsWith");function QW(e,t,r,s,n=!1,i=void 0,o=void 0){return ZI(e,t,r,s,n,i,o,!0)}a(QW,"endsWith");function ZI(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Pi(e,r,s),Io(e,null,r,(u,_,l,d)=>{let f=XI(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(E=>{let h=E.toString();return h.endsWith(JI)?_.getValues(E,{transaction:u}).map(S=>{let m=f(E,S);if(c?m.endsWith(s):m.includes(s))return{key:m,value:S}}).filter(S=>S):(c?h.endsWith(s):h.includes(s))?_[Md.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(S=>({key:E,value:S})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(ZI,"contains");function jW(e,t,r,s,n=!1,i=void 0,o=void 0){Pi(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Pu(e,t,r,s,u,n,i,o,!0,!1)}a(jW,"greaterThan");function JW(e,t,r,s,n=!1,i=void 0,o=void 0){Pi(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Pu(e,t,r,s,u,n,i,o,!1,!1)}a(JW,"greaterThanEqual");function zW(e,t,r,s,n=!1,i=void 0,o=void 0){Pi(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Pu(e,t,r,u,s,n,i,o,!1,!0)}a(zW,"lessThan");function XW(e,t,r,s,n=!1,i=void 0,o=void 0){Pi(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Pu(e,t,r,u,s,n,i,o,!1,!1)}a(XW,"lessThanEqual");function ZW(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Br.validateEnv(e),r===void 0)throw new Error(tt.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(tt.START_VALUE_REQUIRED);if(n===void 0)throw new Error(tt.END_VALUE_REQUIRED);if(s=Br.convertKeyValueToWrite(s),n=Br.convertKeyValueToWrite(n),s>n)throw new Error(tt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Pu(e,t,r,s,n,i,o,c)}a(ZW,"between");function eQ(e,t,r,s){Br.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(tt.HASH_ATTRIBUTE_REQUIRED);if(vd(r),r=Mu(n,r),s===void 0)throw new Error(tt.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=Ud.parseRow(c,r)),o}a(eQ,"searchByHash");function tQ(e,t,r){Br.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(tt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(tt.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(tQ,"checkHashExists");function rQ(e,t,r,s,n=[]){return tw(e,t,r,s,n),ew(e,t,r,s,n).map(i=>i[1])}a(rQ,"batchSearchByHash");function sQ(e,t,r,s,n=[]){tw(e,t,r,s,n);let i=new Map;for(let[o,c]of ew(e,t,r,s,n))i.set(o,c);return i}a(sQ,"batchSearchByHashToMap");function ew(e,t,r,s,n=[]){return Io(e,t,t,(i,o,c)=>{r=Mu(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,Ud.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(ew,"batchHashSearch");function tw(e,t,r,s,n){if(Br.validateEnv(e),t===void 0)throw new Error(tt.HASH_ATTRIBUTE_REQUIRED);if(vd(r),s==null)throw new Error(tt.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(tt.IDS_MUST_BE_ITERABLE)}a(tw,"initializeBatchSearchByHash");function vd(e){if(!Array.isArray(e))throw e===void 0?new Error(tt.FETCH_ATTRIBUTES_REQUIRED):new Error(tt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(vd,"validateFetchAttributes");function Pi(e,t,r){if(Br.validateEnv(e),t===void 0)throw new Error(tt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(tt.SEARCH_VALUE_REQUIRED);if(r?.length>FW)throw new Error(tt.SEARCH_VALUE_TOO_LARGE)}a(Pi,"validateComparisonFunctions");function Mu(e,t){return t.length===1&&qW.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Di.listDBIs(e)),t}a(Mu,"setGetWholeRowAttributes");rw.exports={searchAll:xW,searchAllToMap:kW,count:KW,countAll:VW,equals:YW,startsWith:WW,endsWith:QW,contains:ZI,searchByHash:eQ,setGetWholeRowAttributes:Mu,batchSearchByHash:rQ,batchSearchByHashToMap:sQ,checkHashExists:tQ,iterateDBI:$W,greaterThan:jW,greaterThanEqual:JW,lessThan:zW,lessThanEqual:XW,between:ZW}});var Da=T((uhe,aw)=>{var sw=require("lodash"),nw=Ve(),xe=require("joi"),nQ=G(),{hdb_schema_table:Bd,checkValidTable:iw,hdb_table:ow,hdb_database:Hd}=an(),{handleHDBError:iQ,hdb_errors:oQ}=Z(),{getDatabases:aQ}=(de(),te(De)),{HTTP_STATUS_CODES:cQ}=oQ,uQ=xe.object({database:Hd,schema:Hd,table:ow,search_attribute:Bd,search_value:xe.any().required(),get_attributes:xe.array().min(1).items(Bd).optional(),desc:xe.bool(),limit:xe.number().integer().min(1),offset:xe.number().integer().min(0)}),lQ=xe.object({database:Hd,schema:Hd,table:ow,operator:xe.string().valid("and","or").default("and").lowercase(),offset:xe.number().integer().min(0),limit:xe.number().integer().min(1),get_attributes:xe.array().min(1).items(Bd).optional(),conditions:xe.array().min(1).items(xe.object({search_attribute:Bd,search_type:xe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").optional(),search_value:xe.when("search_type",{switch:[{is:"equals",then:xe.any()},{is:"between",then:xe.array().items(xe.alternatives([xe.string(),xe.number()])).length(2)}],otherwise:xe.alternatives(xe.string(),xe.number())}).required()})).required()});aw.exports=function(e,t){let r=null;switch(t){case"value":r=nw.validateBySchema(e,uQ);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(iw("database",e.schema)),i(iw("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=nw.validateBySchema(e,lQ);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=nQ.checkGlobalSchemaTable(e.schema,e.table);if(n)return iQ(new Error,n,cQ.NOT_FOUND);let o=aQ()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let _=0,l=e.conditions.length;_<l;_++){let d=e.conditions[_];c.push(d.search_attribute)}let u=sw.filter(c,_=>_!=="*"&&_.attribute!=="*"&&!sw.some(o,l=>l===_||l.attribute===_||l.attribute===_.attribute));if(u&&u.length>0){let _=u.join(", ");return _=_.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${_}'`)}}return r}});var nS=T((_he,cw)=>{"use strict";var _Q=Me(),dQ=Da(),{getSchemaPath:fQ}=Be();cw.exports=EQ;function EQ(e){let t=dQ(e,"hashes");if(t)throw t;let r=fQ(e.schema,e.table);return _Q.openEnvironment(r,e.table)}a(EQ,"initialize")});var iS=T((fhe,uw)=>{"use strict";var hQ=La(),mQ=nS();uw.exports=pQ;async function pQ(e){let t=await mQ(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return hQ.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(pQ,"lmdbGetDataByHash")});var Pa=T((hhe,lw)=>{"use strict";var oS=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};lw.exports=oS});var dw=T((She,_w)=>{"use strict";var phe=Pa(),SQ=La(),TQ=nS();_w.exports=gQ;async function gQ(e){let t=await TQ(e),r=global.hdb_schema[e.schema][e.table];return SQ.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(gQ,"lmdbSearchByHash")});var Ds=T((ghe,fw)=>{"use strict";var aS=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};fw.exports=aS});var qd=T((Ahe,Tw)=>{"use strict";var Qt=La(),RQ=Me(),AQ=G(),ue=Ke(),wo=A(),OQ=Gn(),Ew=Mr().LMDB_ERRORS_ENUM,{getSchemaPath:NQ}=Be(),Vn=wo.SEARCH_WILDCARDS;async function bQ(e,t,r){let s;e.schema===wo.SYSTEM_SCHEMA_NAME?s=OQ[e.table]:s=global.hdb_schema[e.schema][e.table];let n=Sw(e,s.hash_attribute,r,t);return mw(e,n,s.hash_attribute,r)}a(bQ,"prepSearch");async function mw(e,t,r,s){let n=NQ(e.schema,e.table),i=await RQ.openEnvironment(n,e.table),o=pw(i,e,t,r),c=o.transaction||i;if([ue.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ue.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ue.SEARCH_TYPES.SEARCH_ALL,ue.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(yQ(e,r)===!1){let l=e.search_attribute;if(l===r)return s?hw(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?hw(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Qt.batchSearchByHashToMap(c,r,e.get_attributes,_):Qt.batchSearchByHash(c,r,e.get_attributes,_)}a(mw,"executeSearch");function pw(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case ue.SEARCH_TYPES.EQUALS:n=Qt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ue.SEARCH_TYPES.CONTAINS:n=Qt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case ue.SEARCH_TYPES.ENDS_WITH:case ue.SEARCH_TYPES._ENDS_WITH:n=Qt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ue.SEARCH_TYPES.STARTS_WITH:case ue.SEARCH_TYPES._STARTS_WITH:n=Qt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ue.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Qt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ue.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Qt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ue.SEARCH_TYPES.SEARCH_ALL:return Qt.searchAll(e,s,t.get_attributes,o,c,u);case ue.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Qt.searchAllToMap(e,s,t.get_attributes,o,c,u);case ue.SEARCH_TYPES.BETWEEN:n=Qt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case ue.SEARCH_TYPES.GREATER_THAN:case ue.SEARCH_TYPES._GREATER_THAN:n=Qt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ue.SEARCH_TYPES.GREATER_THAN_EQUAL:case ue.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Qt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case ue.SEARCH_TYPES.LESS_THAN:case ue.SEARCH_TYPES._LESS_THAN:n=Qt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ue.SEARCH_TYPES.LESS_THAN_EQUAL:case ue.SEARCH_TYPES._LESS_THAN_EQUAL:n=Qt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(pw,"searchByType");function hw(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(hw,"createMapFromIterable");function yQ(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(yQ,"checkToFetchMore");function Sw(e,t,r,s){if(AQ.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Vn.indexOf(n)>-1)return r===!0?ue.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ue.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Vn[0])<0&&n.indexOf(Vn[1])<0)return c===!0?r===!0?ue.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ue.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ue.SEARCH_TYPES.EQUALS;if(Vn.indexOf(i)>=0&&Vn.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ue.SEARCH_TYPES.CONTAINS;if(Vn.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ue.SEARCH_TYPES.ENDS_WITH;if(Vn.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ue.SEARCH_TYPES.STARTS_WITH;if(n.includes(Vn[0])||n.includes(Vn[1]))return ue.SEARCH_TYPES.EQUALS;throw new Error(Ew.UNKNOWN_SEARCH_TYPE)}else switch(s){case wo.VALUE_SEARCH_COMPARATORS.BETWEEN:return ue.SEARCH_TYPES.BETWEEN;case wo.VALUE_SEARCH_COMPARATORS.GREATER:return ue.SEARCH_TYPES.GREATER_THAN;case wo.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ue.SEARCH_TYPES.GREATER_THAN_EQUAL;case wo.VALUE_SEARCH_COMPARATORS.LESS:return ue.SEARCH_TYPES.LESS_THAN;case wo.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ue.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Ew.UNKNOWN_SEARCH_TYPE)}}a(Sw,"createSearchTypeFromSearchObject");Tw.exports={executeSearch:mw,createSearchTypeFromSearchObject:Sw,prepSearch:bQ,searchByType:pw}});var Rw=T((bhe,gw)=>{"use strict";var Nhe=Ds(),IQ=Da(),wQ=G(),CQ=A(),LQ=qd();gw.exports=DQ;function DQ(e,t){if(!wQ.isEmpty(t)&&CQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=IQ(e,"value");if(s)throw s;let n=!0;return LQ.prepSearch(e,t,n)}a(DQ,"lmdbGetDataByValue")});var Uu=T((whe,Aw)=>{"use strict";var Ihe=Ds(),PQ=Da(),MQ=G(),UQ=A(),vQ=qd();Aw.exports=BQ;async function BQ(e,t){if(!MQ.isEmpty(t)&&UQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=PQ(e,"value");if(s)throw s;return vQ.prepSearch(e,t,!1)}a(BQ,"lmdbSearchByValue")});var Nw=T((Dhe,Ow)=>{"use strict";var Lhe=Ke(),cS=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}},uS=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},lS=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Ow.exports={SearchByConditionsObject:cS,SearchCondition:uS,SortAttribute:lS}});var Cw=T((vhe,ww)=>{"use strict";var Mhe=Nw().SearchByConditionsObject,HQ=Ds(),qQ=Da(),_S=La(),Gd=Ke(),{Resource:Uhe}=(Is(),te(Xm)),Iw=qd(),GQ=sS(),FQ=require("lodash"),{getSchemaPath:xQ}=Be(),bw=Me(),{handleHDBError:kQ,hdb_errors:$Q}=Z(),{HTTP_STATUS_CODES:VQ}=$Q,YQ=1e8;ww.exports=KQ;async function KQ(e){let t=qQ(e,"conditions");if(t)throw kQ(t,t.message,VQ.BAD_REQUEST,void 0,void 0,!0);e.operator=e.operator?e.operator.toLowerCase():void 0,e.offset=Number.isInteger(e.offset)?e.offset:0;let r=xQ(e.schema,e.table),s=await bw.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)bw.openDBI(s,_.search_attribute);let i=FQ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===Gd.SEARCH_TYPES.EQUALS?_.estimated_count=_S.count(s,_.search_attribute,_.search_value):l===Gd.SEARCH_TYPES.CONTAINS||l===Gd.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=YQ}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await yw(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=s.dbis[n.hash_attribute],l=i.slice(1).map(Iw.filterByType),d=l.length,f=_S.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(E=>GQ.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await yw(o,e,f,n.hash_attribute);c=c.concat(E)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=_S.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(KQ,"lmdbSearchByConditions");async function yw(e,t,r,s){let n=new HQ(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Gd.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Iw.searchByType(e,n,i,s).map(o=>o.value)}a(yw,"executeConditionSearch")});var vu=T((Hhe,Lw)=>{"use strict";var WQ=A().OPERATIONS_ENUM,dS=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=WQ.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Lw.exports=dS});var fS=T((Ghe,qw)=>{"use strict";var Uw=Ds(),vw=vu(),Bw=Uu(),Hw=Du(),lr=A(),Dw=G(),Pw=Me(),{getTransactionAuditStorePath:QQ,getSchemaPath:jQ}=Be(),Mw=U();qw.exports=JQ;async function JQ(e){try{if(Dw.isEmpty(global.hdb_schema[e.schema])||Dw.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await zQ(e),await XQ(e);let t=jQ(e.schema,e.table);try{await Pw.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Mw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=QQ(e.schema,e.table);await Pw.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Mw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(JQ,"lmdbDropTable");async function zQ(e){let t=new Uw(lr.SYSTEM_SCHEMA_NAME,lr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,lr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[lr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Bw(t)),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new vw(lr.SYSTEM_SCHEMA_NAME,lr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Hw(n)}a(zQ,"deleteAttributesFromSystem");async function XQ(e){let t=new Uw(lr.SYSTEM_SCHEMA_NAME,lr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,lr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[lr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,lr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,lr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await Bw(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new vw(lr.SYSTEM_SCHEMA_NAME,lr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Hw(n)}catch(i){throw i}}a(XQ,"dropTableFromSystem")});var Fw=T((xhe,Gw)=>{"use strict";var ZQ=require("fs-extra"),ej=Ds(),tj=Pa(),rj=vu(),sj=fS(),nj=Du(),ij=iS(),oj=Uu(),Yn=A(),{getSchemaPath:aj}=Be(),{handleHDBError:cj,hdb_errors:uj}=Z(),{HDB_ERROR_MSGS:lj,HTTP_STATUS_CODES:_j}=uj;Gw.exports=dj;async function dj(e){let t;try{t=await fj(e.schema);let r=new ej(Yn.SYSTEM_SCHEMA_NAME,Yn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Yn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Yn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await oj(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await sj(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new rj(Yn.SYSTEM_SCHEMA_NAME,Yn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await nj(n);let i=aj(t);await ZQ.remove(i)}catch(r){throw r}}a(dj,"lmdbDropSchema");async function fj(e){let t=new tj(Yn.SYSTEM_SCHEMA_NAME,Yn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Yn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await ij(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw cj(new Error,lj.SCHEMA_NOT_FOUND(e),_j.NOT_FOUND,void 0,void 0,!0);return s}a(fj,"validateDropSchema")});var Bu=T(($he,xw)=>{"use strict";var ES=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};xw.exports=ES});var mS=T((Khe,kw)=>{"use strict";var Ej=require("fs-extra"),Fd=Me(),{getTransactionAuditStorePath:hj}=Be(),hS=Ke(),Yhe=Bu();kw.exports=mj;async function mj(e){let t;try{let r=hj(e.schema,e.table);await Ej.mkdirp(r),t=await Fd.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{Fd.createDBI(t,hS.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Fd.createDBI(t,hS.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Fd.createDBI(t,hS.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(mj,"createTransactionsAuditEnvironment")});var Kw=T((Qhe,Yw)=>{"use strict";var pS=A(),$w=Me(),pj=No(),{getSystemSchemaPath:Sj,getSchemaPath:Tj}=Be(),gj=Gn(),Rj=Cd(),SS=wd(),Aj=U(),Oj=mS(),gS=gj.hdb_table,Vw=[];for(let e=0;e<gS.attributes.length;e++)Vw.push(gS.attributes[e].attribute);Yw.exports=Nj;async function Nj(e,t){let r=Tj(t.schema,t.table),s=new SS(t.schema,t.table,pS.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new SS(t.schema,t.table,pS.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new SS(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await $w.createEnvironment(r,t.table),e!==void 0){let o=await $w.openEnvironment(Sj(),pS.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await pj.insertRecords(o,gS.hash_attribute,Vw,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await TS(s),await TS(n),await TS(i)}await Oj(t)}catch(o){throw o}}a(Nj,"lmdbCreateTable");async function TS(e){try{await Rj(e)}catch(t){Aj.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(TS,"createAttribute")});var Qw=T((Jhe,Ww)=>{"use strict";var bj=Ou(),yj=wu(),Ij=Dd(),Hu=A(),wj=No().updateRecords,Cj=Me(),{getSchemaPath:Lj}=Be(),Dj=Cu(),Pj=U();Ww.exports=Mj;async function Mj(e){try{let{schema_table:t,attributes:r}=bj(e);yj(e,r,t.hash_attribute),e.schema!==Hu.SYSTEM_SCHEMA_NAME&&(r.includes(Hu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Hu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Hu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Hu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Ij(e.hdb_auth_header,t,r),n=Lj(e.schema,e.table),i=await Cj.openEnvironment(n,e.table),o=await wj(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Dj(e,o)}catch(c){Pj.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(Mj,"lmdbUpdateRecords")});var Jw=T((Xhe,jw)=>{"use strict";var Uj=A().OPERATIONS_ENUM,RS=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=Uj.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};jw.exports=RS});var Xw=T((tme,zw)=>{"use strict";var eme=Jw(),vj=Ou(),Bj=wu(),Hj=Dd(),qu=A(),qj=No().upsertRecords,Gj=Me(),{getSchemaPath:Fj}=Be(),xj=Cu(),kj=U(),{handleHDBError:$j,hdb_errors:Vj}=Z();zw.exports=Yj;async function Yj(e){let t;try{t=vj(e)}catch(u){throw $j(u,u.message,Vj.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;Bj(e,s,r.hash_attribute),e.schema!==qu.SYSTEM_SCHEMA_NAME&&(s.includes(qu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(qu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(qu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(qu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Hj(e.hdb_auth_header,r,s),i=Fj(e.schema,e.table),o=await Gj.openEnvironment(i,e.table),c=await qj(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await xj(e,c)}catch(u){kj.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(Yj,"lmdbUpsertRecords")});var eC=T((sme,Zw)=>{"use strict";var AS=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};Zw.exports=AS});var rC=T((ime,tC)=>{"use strict";var OS=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};tC.exports=OS});var iC=T((cme,nC)=>{"use strict";var NS=Me(),{getTransactionAuditStorePath:Kj}=Be(),ame=eC(),Gu=Ke(),Wj=G(),sC=rC(),Qj=require("util").promisify,jj=Qj(setTimeout),Jj=1e4,zj=100;nC.exports=Xj;async function Xj(e){let t=Kj(e.schema,e.table),r=await NS.openEnvironment(t,e.table,!0),s=NS.listDBIs(r);NS.initializeDBIs(r,Gu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new sC;do n=await Zj(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await jj(zj);while(n.transactions_deleted>0);return i}a(Xj,"deleteAuditLogsBefore");async function Zj(e,t){let r=new sC;try{let s=e.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Gu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Wj.isEmpty(c)||(n=e.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>Jj)break}return await n,r}catch(s){throw s}}a(Zj,"deleteTransactions")});var aC=T((lme,oC)=>{"use strict";var bS=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};oC.exports=bS});var uC=T((fme,cC)=>{"use strict";var eJ=Ds(),tJ=vu(),dme=aC(),un=A(),rJ=G(),yS=Me(),sJ=Gn(),nJ=Uu(),iJ=Du(),{getSchemaPath:oJ}=Be();cC.exports=aJ;async function aJ(e,t=!0){let r;e.schema===un.SYSTEM_SCHEMA_NAME?r=sJ[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await uJ(e),n=oJ(e.schema,e.table),i=await yS.openEnvironment(n,e.table);return t===!0&&await cJ(e,i,r.hash_attribute),yS.dropDBI(i,e.attribute),s}a(aJ,"lmdbDropAttribute");async function cJ(e,t,r){let s=yS.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);n=t.dbis[r].put(o,_,u)}await n}a(cJ,"removeAttributeFromAllObjects");async function uJ(e){let t=new eJ(un.SYSTEM_SCHEMA_NAME,un.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await nJ(t)).filter(o=>o[un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(rJ.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new tJ(un.SYSTEM_SCHEMA_NAME,un.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return iJ(i)}a(uJ,"dropAttributeFromSystem")});var hC=T((mme,EC)=>{"use strict";var IS=Me(),Ma=Ke(),hme=ar(),wS=A(),lC=G(),{getTransactionAuditStorePath:lJ}=Be(),_J=La(),xd=Ia(),dJ=U();EC.exports=fJ;async function fJ(e){let t=lJ(e.schema,e.table),r=await IS.openEnvironment(t,e.table,!0),s=IS.listDBIs(r);IS.initializeDBIs(r,Ma.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case wS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return _C(r,e.search_values);case wS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,hJ(r,e.search_values,n);case wS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return EJ(r,e.search_values);default:return _C(r)}}a(fJ,"readAuditLog");function _C(e,t=[0,Date.now()]){lC.isEmpty(t[0])&&(t[0]=0),lC.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Ma.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new xd,n))}a(_C,"searchTransactionsByTimestamp");function EJ(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[Ma.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,fC(e,i))}return Object.fromEntries(r)}a(EJ,"searchTransactionsByUsername");function hJ(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=_J.equals(e,Ma.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ma.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);s.has(f)?s.get(f).push(_.toString()):s.set(f,[_.toString()])}}let n=Array.from(s.keys()),i=fC(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);dC(u,"records",r,l,o),dC(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(hJ,"searchTransactionsByHashValues");function dC(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(s.indexOf(u)>=0)if(n.has(u)){let _=n.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new xd(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new xd(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(dC,"loopRecords");function fC(e,t){let r=[];try{let s=e.dbis[Ma.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new xd,i);r.push(o)}}catch(i){dJ.warn(i)}return r}catch(s){throw s}}a(fC,"batchSearchTransactions")});var pC=T((gme,mC)=>{"use strict";var{getSchemaPath:Sme}=Be(),Tme=Me(),{database:mJ}=(de(),te(De));mC.exports={writeTransaction:pJ};async function pJ(e,t,r){return mJ({database:e,table:t}).transaction(r)}a(pJ,"writeTransaction")});var RC=T((Ame,gC)=>{"use strict";var{getSchemaPath:SC}=Be(),TC=Me();gC.exports={flush:SJ,resetReadTxn:TJ};async function SJ(e,t){return(await TC.openEnvironment(SC(e,t),t.toString())).flushed}a(SJ,"flush");async function TJ(e,t){try{(await TC.openEnvironment(SC(e,t),t.toString())).resetReadTxn()}catch{}}a(TJ,"resetReadTxn")});var bC=T((Nme,NC)=>{"use strict";var{Readable:gJ}=require("stream"),{getDatabases:RJ}=(de(),te(De)),{readSync:AJ,openSync:OJ,createReadStream:AC}=require("fs"),{open:NJ}=require("lmdb"),OC=pd(),bJ=Td(),{AUDIT_STORE_OPTIONS:yJ}=(Aa(),te(iy)),{INTERNAL_DBIS_NAME:IJ,AUDIT_STORE_NAME:wJ}=Ke();NC.exports=LJ;var CS=32768,CJ=100;async function LJ(e){let t=e.database||e.schema||"data",r=RJ()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let _=r[n[0]];if(!_)throw new Error(`Can not find table ${n[0]}`);let l=_.dbisDB,d=NJ({noSync:!0,maxDbs:bJ.MAX_DBS}),f,E=d.openDB(IJ,new OC(!1)),h=l.useReadTransaction(),S=0,m=a(async function(R,b){b.encoding="binary",b.encoder=void 0;let V=d.openDB(R,b),$=l.openDB(R,b);for(let{key:F,version:w,value:W}of $.getRange({transaction:h,versions:$.useVersions}))f=V.put(F,W,w),S++%CJ===0&&(await new Promise(B=>setTimeout(B,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:R,value:b}of l.getRange({transaction:h,start:!1}))if(n.some(V=>R.startsWith?.(V+"/"))){E.put(R,b);let[,V]=R.split("/"),$=!V,F=new OC(!$,$);await m(R,F)}e.include_audit&&await m(wJ,Object.assign({},yJ)),await f;let g=AC(d.path);return g.headers=u(),g.on("close",()=>{h.done(),d.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=OJ(o.path);return o.transaction(()=>{let _=Buffer.alloc(CS);AJ(c,_,0,CS);let l=o.useReadTransaction(),d=AC(null,{fd:c,start:CS}),f=new gJ.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",s),_}}a(LJ,"getBackup")});var wC=T((yme,IC)=>{"use strict";var DJ=U(),{handleHDBError:PJ}=Z(),MJ=Yy(),UJ=Cd(),vJ=Xp(),BJ=FI(),HJ=Du(),qJ=iS(),GJ=dw(),FJ=Rw(),xJ=Uu(),kJ=Cw(),$J=Fw(),VJ=Kw(),YJ=Qw(),KJ=Xw(),WJ=iC(),QJ=fS(),jJ=uC(),JJ=hC(),zJ=pC(),yC=RC(),XJ=bC(),LS=class extends MJ{static{a(this,"LMDBBridge")}async searchByConditions(t){return kJ(t)}async getDataByHash(t){return await qJ(t)}async searchByHash(t){return await GJ(t)}async getDataByValue(t,r){return await FJ(t,r)}async searchByValue(t){return await xJ(t)}async createSchema(t){return await BJ(t)}async dropSchema(t){return await $J(t)}async createTable(t,r){return await VJ(t,r)}async dropTable(t){return await QJ(t)}async createAttribute(t){return await UJ(t)}async createRecords(t){return await vJ(t)}async updateRecords(t){return await YJ(t)}async upsertRecords(t){try{return await KJ(t)}catch(r){throw PJ(r,null,null,DJ.ERR,r)}}async deleteRecords(t){return await HJ(t)}async dropAttribute(t){return await jJ(t)}async deleteAuditLogsBefore(t){return await WJ(t)}async readAuditLog(t){return await JJ(t)}writeTransaction(t,r,s){return zJ.writeTransaction(t,r,s)}flush(t,r){return yC.flush(t,r)}resetReadTxn(t,r){return yC.resetReadTxn(t,r)}getBackup(t){return XJ(t)}};IC.exports=LS});var HC={};Fe(HC,{ResourceBridge:()=>MS});function US({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function LC(e,t){let r=ln(e),s=US(e,r);if(!r)throw new Ps.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user},o;We(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l=await r.get({id:_,lazy:n,select:s},i);return l=l&&sd(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function ln(e){let t=e.database||e.schema||ez,r=Ms()[t];if(!r)throw(0,Ps.handleHDBError)(new Error,ZJ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function DC(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*PC(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(o),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[o],records:[u]})}s&&(yield s)}var MC,kd,Ps,UC,vC,Us,DS,PS,BC,ZJ,ez,tz,rz,CC,MS,qC=Re(()=>{"use strict";MC=P(wC()),kd=P(Da()),Ps=P(Z());de();UC=P(Ou()),vC=P(wu()),Us=P(A()),DS=P($n()),PS=P(Ls()),BC=P(G());Ro();nd();({HDB_ERROR_MSGS:ZJ}=Ps.hdb_errors),ez="data",tz=1e4,rz=10,MS=class extends MC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),CC=this}async searchByConditions(t){let r=(0,kd.default)(t,"conditions");if(r)throw(0,Ps.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=ln(t);if(!s)throw new Ps.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i=>({attribute:i.search_attribute,comparator:i.search_type,value:i.search_value}));return s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:US(t,s),allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Ps.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}ut({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await ln(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=ln(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))n=i(o,c,u),await new Promise(_=>setImmediate(_));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){ln(t).dropTable()}createSchema(t){return Fu({database:t.schema,table:null}),DS.signalSchemaChange(new PS.SchemaEventMsg(process.pid,Us.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await vS(t.schema),DS.signalSchemaChange(new PS.SchemaEventMsg(process.pid,Us.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,CC.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,UC.default)(t);(0,vC.default)(t,s,r.primaryKey);let n,i=Ms()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return We(o,async c=>{if(!i.schemaDefined){n=[];for(let l of s)i.attributes.find(f=>f.name==l)||n.push(l);n.length>0&&await i.addAttributes(n.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=await i.get(l[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(l[i.primaryKey]);continue}d&&(d=sd(d));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let E=l[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,l[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(l),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=d[f]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:_}})}async deleteRecords(t){let r=Ms()[t.schema][t.table],s={user:t.hdb_user};return We(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return DC(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=Ms()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ps.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:Us.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,BC.async_set_timeout)(rz),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%tz===0&&await _();return u.length>0&&await _(),n?DC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,kd.default)(t,"hashes");if(r)throw r;return LC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of LC(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&Us.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,kd.default)(t,"value");if(s)throw s;let n=ln(t);if(!n)throw new Ps.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===Us.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:US(t,n)})}async getDataByValue(t,r){let s=new Map,n=ln(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){ln({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return ln(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=ln(t),s={};switch(t.search_type){case Us.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case Us.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of PC(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return PC(r,t.search_values?.[0],t.search_values?.[1])}}};a(US,"getSelect");a(LC,"getRecords");a(ln,"getTable");a(DC,"createDeleteResponse");a(PC,"groupRecordsInHistory")});var is=T((Pme,GC)=>{"use strict";var{ResourceBridge:sz}=(qC(),te(HC)),nz=Q();nz.initSync();var $d;function iz(){return $d||($d=new sz,$d)}a(iz,"getBridge");GC.exports=iz()});var $C=T((Ume,kC)=>{"use strict";var FC=require("lodash"),xu=require("mathjs"),oz=require("jsonata"),xC=G();kC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?FC.uniqWith(e,FC.isEqual):e,searchJSON:az,mad:ku.bind(null,xu.mad),mean:ku.bind(null,xu.mean),mode:ku.bind(null,xu.mode),prod:ku.bind(null,xu.prod),median:ku.bind(null,xu.median)};function ku(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(ku,"aggregateFunction");function az(e,t){if(typeof e!="string"||e.length===0)throw new Error("search json expression must be a non-empty string");let r="__"+e+"__";if(xC.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),xC.isEmpty(this.__ala__.res[r])){let s=oz(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(az,"searchJSON")});var YC=T((Bme,VC)=>{"use strict";var lt=require("moment"),BS="YYYY-MM-DDTHH:mm:ss.SSSZZ";lt.suppressDeprecationWarnings=!0;VC.exports={current_date:()=>lt().utc().format("YYYY-MM-DD"),current_time:()=>lt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return lt(e).utc().format("YYYY");case"month":return lt(e).utc().format("MM");case"day":return lt(e).utc().format("DD");case"hour":return lt(e).utc().format("HH");case"minute":return lt(e).utc().format("mm");case"second":return lt(e).utc().format("ss");case"millisecond":return lt(e).utc().format("SSS");default:break}},date:e=>lt(e).utc().format(BS),date_format:(e,t)=>lt(e).utc().format(t),date_add:(e,t,r)=>lt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>lt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=lt(e).utc(),n=lt(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>lt().utc().valueOf(),get_server_time:()=>lt().format(BS),offset_utc:(e,t)=>lt(e).utc().utcOffset(t).format(BS)}});var jC=T((Hme,QC)=>{"use strict";var cz=require("@turf/area"),uz=require("@turf/length"),lz=require("@turf/circle"),_z=require("@turf/difference"),dz=require("@turf/distance"),fz=require("@turf/boolean-contains"),Ez=require("@turf/boolean-equal"),hz=require("@turf/boolean-disjoint"),mz=require("@turf/helpers"),KC=A(),fe=G();QC.exports={geoArea:pz,geoLength:Sz,geoCircle:Tz,geoDifference:gz,geoDistance:WC,geoNear:Rz,geoContains:Az,geoEqual:Oz,geoCrosses:Nz,geoConvert:bz};var HS="geo1 is required",qS="geo2 is required";function pz(e){if(fe.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=fe.autoCastJSON(e)),cz.default(e)}a(pz,"geoArea");function Sz(e,t){if(fe.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=fe.autoCastJSON(e)),uz.default(e,{units:t||"kilometers"})}a(Sz,"geoLength");function Tz(e,t,r){if(fe.isEmpty(e))throw new Error("point is required");if(fe.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=fe.autoCastJSON(e)),lz.default(e,t,{units:r||"kilometers"})}a(Tz,"geoCircle");function gz(e,t){if(fe.isEmpty(e))throw new Error("poly1 is required");if(fe.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=fe.autoCastJSON(e)),typeof t=="string"&&(t=fe.autoCastJSON(t)),_z(e,t)}a(gz,"geoDifference");function WC(e,t,r){if(fe.isEmpty(e))throw new Error("point1 is required");if(fe.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=fe.autoCastJSON(e)),typeof t=="string"&&(t=fe.autoCastJSON(t)),dz.default(e,t,{units:r||"kilometers"})}a(WC,"geoDistance");function Rz(e,t,r,s){if(fe.isEmpty(e))throw new Error("point1 is required");if(fe.isEmpty(t))throw new Error("point2 is required");if(fe.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=fe.autoCastJSON(e)),typeof t=="string"&&(t=fe.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return WC(e,t,s)<=r}a(Rz,"geoNear");function Az(e,t){if(fe.isEmpty(e))throw new Error(HS);if(fe.isEmpty(e))throw new Error(qS);return typeof e=="string"&&(e=fe.autoCastJSON(e)),typeof t=="string"&&(t=fe.autoCastJSON(t)),fz.default(e,t)}a(Az,"geoContains");function Oz(e,t){if(fe.isEmpty(e))throw new Error(HS);if(fe.isEmpty(e))throw new Error(qS);return typeof e=="string"&&(e=fe.autoCastJSON(e)),typeof t=="string"&&(t=fe.autoCastJSON(t)),Ez.default(e,t)}a(Oz,"geoEqual");function Nz(e,t){if(fe.isEmpty(e))throw new Error(HS);if(fe.isEmpty(e))throw new Error(qS);return typeof e=="string"&&(e=fe.autoCastJSON(e)),typeof t=="string"&&(t=fe.autoCastJSON(t)),!hz.default(e,t)}a(Nz,"geoCrosses");function bz(e,t,r){if(fe.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(fe.isEmpty(t))throw new Error("geo_type is required");if(fe.isEmpty(KC.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(KC.GEO_CONVERSION_ENUM).join(",")}`);return mz[t](e,r)}a(bz,"geoConvert")});var Vd=T((Gme,JC)=>{var Co=$C(),Hr=YC(),_n=jC();JC.exports=e=>{e.aggr.mad=e.aggr.MAD=Co.mad,e.aggr.mean=e.aggr.MEAN=Co.mean,e.aggr.mode=e.aggr.MODE=Co.mode,e.aggr.prod=e.aggr.PROD=Co.prod,e.aggr.median=e.aggr.MEDIAN=Co.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Co.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Co.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Hr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Hr.current_time,e.fn.extract=e.fn.EXTRACT=Hr.extract,e.fn.date=e.fn.DATE=Hr.date,e.fn.date_format=e.fn.DATE_FORMAT=Hr.date_format,e.fn.date_add=e.fn.DATE_ADD=Hr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Hr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Hr.date_diff,e.fn.now=e.fn.NOW=Hr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Hr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Hr.get_server_time,e.fn.getdate=e.fn.GETDATE=Hr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Hr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=_n.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=_n.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=_n.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=_n.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=_n.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=_n.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=_n.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=_n.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=_n.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=_n.geoNear}});var eL=T((Fme,ZC)=>{"use strict";var $u=require("lodash"),Ut=require("alasql");Ut.options.cache=!1;var yz=Vd(),zC=require("clone"),Yd=require("recursive-iterator"),ne=U(),ae=G(),Ua=is(),Iz=A(),{hdb_errors:wz}=Z(),{getDatabases:XC}=(de(),te(De)),Cz="IS NULL",vs="There was a problem performing this search. Please check the logs and try again.";yz(Ut);var GS=class{static{a(this,"SQLSearch")}constructor(t,r){if(ae.isEmpty(t))throw ne.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),ae.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!ae.isEmptyOrZeroLength(s))return ne.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw ne.error("Error thrown from checkEmptySQL in SQLSearch class method search."),ne.error(s),new Error(vs)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw ne.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),ne.error(s),new Error(vs)}if(Object.keys(this.data).length===0)return ne.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw ne.error("Error thrown from processJoins in SQLSearch class method search."),ne.error(s),new Error(vs)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw ne.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),ne.error(s),new Error(vs)}try{return t=await this._finalSQL(),t}catch(s){throw ne.error("Error thrown from finalSQL in SQLSearch class method search."),ne.error(s),new Error(vs)}}_getColumns(){let t=new Yd(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(zC(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=$u.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=XC()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ae.isEmpty(this.statement.where)){ne.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Yd(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!ae.isEmpty(r)&&r.right)if(ae.isNotEmptyAndHasValue(r.right.value)){let s=ae.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new Ut.yy.LogicValue({value:s}):r.right instanceof Ut.yy.StringValue&&!ae.isEmpty(s)&&ae.autoCasterIsNumberCheck(s.toString())&&(r.right=new Ut.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=ae.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new Ut.yy.LogicValue({value:i}):s instanceof Ut.yy.StringValue&&ae.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new Ut.yy.NumValue({value:i}))});if(t){ne.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Yd(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!ae.isEmpty(Iz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ae.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ae.isEmptyOrZeroLength(r.left.columnid)||ae.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(ae.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!ae.isEmpty(r.right.value)||!ae.isEmpty(r.left.value)?s.add(ae.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)s.add(u[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(ae.isEmptyOrZeroLength(this.all_table_attributes)&&ae.isEmptyOrZeroLength(this.statement.from)&&ae.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&$u.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(ae.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ae.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(ae.isEmptyOrZeroLength(this.all_table_attributes)&&!ae.isEmptyOrZeroLength(this.columns.columns))return t;if(ae.isEmptyOrZeroLength(this.all_table_attributes)&&ae.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Ut.promise(r)}catch(r){throw ne.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),ne.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(zC(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(ae.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(Cz)>-1&&this.tables.forEach(n=>{let i={columnid:XC()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=$u.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,_=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!ae.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!ae.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await Ua.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(l){throw ne.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),ne.error(l),new Error(vs)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let f=await Ua.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,ae.autoCast(E)))}))}catch(l){throw ne.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),ne.error(l),new Error(vs)}else if(!ae.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!ae.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,f=l.length;d<f;d++){let E=l[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await Ua.getDataByValue(c,E.operation);if(u)for(let[S]of h)this.data[i].__merged_data[S]||(this.data[i].__merged_data[S]=[...s[i]],this._setMergedHashAttribute(i,ae.autoCast(S)));else for(let[S,m]of h)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,m[n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,m[n.attribute]),this._setMergedHashAttribute(i,ae.autoCast(S)))}}catch(l){throw ne.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),ne.error(l),new Error(vs)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await Ua.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,ae.autoCast(d)));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]),this._setMergedHashAttribute(i,ae.autoCast(d)))}catch(l){throw ne.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),ne.error(l),new Error(vs)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof Ut.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new Ut.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new Ut.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new Ut.yy.FuncValue:new Ut.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,S=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${S}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${S}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"",_="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(E=>{E.is_func?r.push(E.initial_select_column.toString()):E.initial_select_column.tableid?r.push(`${E.initial_select_column.tableid}.${E.initial_select_column.columnid} AS ${E.expression.columnid}`):r.push(`${E.initial_select_column.columnid} AS ${E.expression.columnid}`)}));let l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(E,n);f=await Ut.promise(h,t),t=null}catch(E){throw ne.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),ne.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let S=f[E];o.forEach(m=>{S[m.key]!==null&&S[m.key]!==void 0&&m.keys.add(S[m.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),S=$u.difference(h,[...E.keys].map(m=>m.toString()));for(let m=0,g=S.length;m<g;m++){let R=S[m];delete this.data[`${E.schema}_${E.table}`].__merged_data[R]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Yd(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=$u.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw ne.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),ne.error(i),new Error(vs)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await Ua.getDataByHash(c),_=n.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let S=n.columns[h],m=E[S]===void 0?null:E[S];this.data[s].__merged_data[f].push(m)}}}}catch(r){throw ne.error("Error thrown from getDataByHash function in SQLSearch class method getData."),ne.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();ne.trace(`Final SQL: ${n}`),s=await Ut.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),ne.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw ne.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),ne.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return ne.error(wz.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),ne.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=n[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;s=s.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;s=s.replace(u,_)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await Ua.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw ne.error("There was an error when processing this SQL operation. Check your logs"),ne.error(o),new Error(vs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};ZC.exports=GS});var _r=T((kme,tL)=>{"use strict";var Lz=$y();tL.exports={searchByConditions:Pz,searchByHash:Mz,searchByValue:Uz,search:vz};var FS=is(),{transformReq:xS}=G(),Dz=eL();async function Pz(e){return xS(e),FS.searchByConditions(e)}a(Pz,"searchByConditions");async function Mz(e){xS(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of FS.searchByHash(e))r&&t.push(r);return t}a(Mz,"searchByHash");async function Uz(e){xS(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of FS.searchByValue(e))t.push(r);return t}a(Uz,"searchByValue");function vz(e,t){try{let r=new Lz(e);r.validate(),new Dz(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(vz,"search")});var Kn=T((Vme,iL)=>{"use strict";var Vu=require("crypto"),Bz=Q(),{CONFIG_PARAMS:Hz}=A(),sL="aes-256-cbc",qz=32,Gz=16,kS=64,nL=32,Fz=kS+nL,rL=new Map;iL.exports={encrypt:xz,decrypt:kz,createNatsTableStreamName:$z};function xz(e){let t=Vu.randomBytes(qz),r=Vu.randomBytes(Gz),s=Vu.createCipheriv(sL,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(xz,"encrypt");function kz(e){let t=e.substr(0,kS),r=e.substr(kS,nL),s=e.substr(Fz,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Vu.createDecipheriv(sL,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(kz,"decrypt");function $z(e,t){let r=Bz.get(Hz.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=rL.get(r);return s||(s=Vu.createHash("md5").update(r).digest("hex"),rL.set(r,s)),s}a($z,"createNatsTableStreamName")});var Mi=T((Wme,aL)=>{"use strict";var Kme=_r(),Kd=U(),oL=Id(),Vz=Kn(),Wd=G(),{handleHDBError:Qd,hdb_errors:Yz}=Z(),{HDB_ERROR_MSGS:jd,HTTP_STATUS_CODES:$S}=Yz,Kz=Q();Kz.initSync();var{getDatabases:VS}=(de(),te(De));aL.exports={describeAll:Wz,describeTable:Jd,describeSchema:Qz};async function Wz(e){try{let t=Wd.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=VS(),i={},o={},c=[],u=e?.exact_count;for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let d=n[l];for(let f in d)try{let E;if(t||s)E=await Jd({schema:l,table:f,exact_count:u});else if(r&&r[l].describe&&r[l].tables[f].describe){let h=r[l].tables[f].attribute_permissions;E=await Jd({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){Kd.error(E)}}let _={};for(let l in c)t||s?(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||s?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return Kd.error("Got an error in describeAll"),Kd.error(t),Qd(new Error,jd.DESCRIBE_ALL_ERR)}}a(Wz,"describeAll");async function Jd(e,t){Wd.transformReq(e);let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i=oL.describe_table(e);if(i)throw i;let c=VS()[r];if(!c)throw Qd(new Error,jd.SCHEMA_NOT_FOUND(e.schema),$S.NOT_FOUND);let u=c[s];if(!u)throw Qd(new Error,jd.TABLE_NOT_FOUND(e.schema,e.table),$S.NOT_FOUND);function _(f){l.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let l=[];if(n){let f={};n.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),u.attributes.forEach(E=>{f[E.name]&&_(E)})}else u.attributes?.forEach(f=>_(f));let d={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l};d.clustering_stream_name=Vz.createNatsTableStreamName(d.schema,d.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=u.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&u.indices.__updatedtime__)for(let h of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){Kd.warn(`unable to stat table dbi due to ${f}`)}return d}a(Jd,"descTable");async function Qz(e){Wd.transformReq(e);let t=oL.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),i=VS()[s];if(!i)throw Qd(new Error,jd.SCHEMA_NOT_FOUND(e.schema),$S.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),Wd.isEmpty(u)||u.describe){let _=await Jd({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(Qz,"describeSchema")});var os=T((zme,dL)=>{var jz=Gn(),{callbackify:uL,promisify:Jz}=require("util"),{getDatabases:lL}=(de(),te(De));dL.exports={setSchemaDataToGlobal:cL,getTableSchema:zz,getSystemSchema:Xz,setSchemaDataToGlobalAsync:Jz(cL)};var _L=Mi(),jme=uL(_L.describeAll),Jme=uL(_L.describeTable);function cL(e){global.hdb_schema=lL(),e&&e()}a(cL,"setSchemaDataToGlobal");function zz(e,t,r){let s=lL()[e];if(!s)return r(`schema ${e} does not exist`);let n=s[t];return n?r(null,{schema:e,name:t,hash_attribute:n.primaryKey}):r(`table ${e}.${t} does not exist`)}a(zz,"getTableSchema");function Xz(){return jz}a(Xz,"getSystemSchema")});var dr=T((Zme,mL)=>{"use strict";var Xd=$p(),vt=G(),Zz=require("util"),Zd=is(),e2=os(),fL=U(),{handleHDBError:Lo,hdb_errors:t2}=Z(),{HTTP_STATUS_CODES:Do}=t2,r2=Zz.promisify(e2.getTableSchema),s2="updated",EL="inserted",hL="upserted";mL.exports={insert:i2,update:o2,upsert:a2,validation:n2,flush:c2};async function n2(e){if(vt.isEmpty(e))throw new Error("invalid update parameters defined.");if(vt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(vt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await r2(e.schema,e.table),r=Xd(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&vt.isEmptyOrZeroLength(c[s]))throw fL.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!vt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw fL.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!vt.isEmpty(c[s])&&c[s]!==""&&n.has(vt.autoCast(c[s]))&&(c.skip=!0),n.add(vt.autoCast(c[s]));for(let u in c)i[u]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(n2,"validation");async function i2(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Xd(e);if(t)throw Lo(new Error,t.message,Do.BAD_REQUEST);vt.transformReq(e);let r=vt.checkSchemaTableExist(e.schema,e.table);if(r)throw Lo(new Error,r,Do.BAD_REQUEST);let s=await Zd.createRecords(e);return zd(EL,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(i2,"insertData");async function o2(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Xd(e);if(t)throw Lo(new Error,t.message,Do.BAD_REQUEST);vt.transformReq(e);let r=vt.checkSchemaTableExist(e.schema,e.table);if(r)throw Lo(new Error,r,Do.BAD_REQUEST);let s=await Zd.updateRecords(e);return vt.isEmpty(s.existing_rows)?zd(s2,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):zd(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(o2,"updateData");async function a2(e){if(e.operation!=="upsert")throw Lo(new Error,"invalid operation, must be upsert",Do.INTERNAL_SERVER_ERROR);let t=Xd(e);if(t)throw Lo(new Error,t.message,Do.BAD_REQUEST);vt.transformReq(e);let r=vt.checkSchemaTableExist(e.schema,e.table);if(r)throw Lo(new Error,r,Do.BAD_REQUEST);let s=await Zd.upsertRecords(e);return zd(hL,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(a2,"upsertData");function zd(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===EL?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===hL?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(zd,"returnObject");function c2(e){return vt.transformReq(e),Zd.flush(e.schema,e.table)}a(c2,"flush")});var KS=T((tpe,TL)=>{var u2=Ve(),YS=require("joi"),{hdb_table:l2,hdb_database:pL}=an(),SL={schema:pL,database:pL,table:l2},_2={date:YS.date().iso().required()},d2={timestamp:YS.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};TL.exports=function(e,t){let r=t==="timestamp"?{...SL,...d2}:{...SL,..._2},s=YS.object(r);return u2.validateBySchema(e,s)}});var AL=T((rpe,RL)=>{var f2=Ve(),WS=require("joi"),{hdb_table:E2,hdb_database:gL}=an(),h2=WS.object({schema:gL,database:gL,table:E2,hash_values:WS.array().required(),ids:WS.array()});RL.exports=function(e){return f2.validateBySchema(e,h2)}});var zS=T((spe,OL)=>{"use strict";var QS=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}},jS=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}},JS=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};OL.exports={InsertObject:QS,NoSQLSeachObject:jS,DeleteResponseObject:JS}});var Uo=T((ipe,wL)=>{"use strict";var bL=KS(),m2=AL(),Po=G(),NL=require("moment"),yL=U(),{promisify:p2,callbackify:S2}=require("util"),Mo=A(),T2=os(),XS=p2(T2.getTableSchema),ZS=is(),{DeleteResponseObject:g2}=zS(),{handleHDBError:Ui,hdb_errors:R2}=Z(),{HDB_ERROR_MSGS:ef,HTTP_STATUS_CODES:vi}=R2,A2="records successfully deleted",O2=S2(IL);wL.exports={delete:O2,deleteRecord:IL,deleteFilesBefore:N2,deleteAuditLogsBefore:b2};async function N2(e){let t=bL(e,"date");if(t)throw Ui(t,t.message,vi.BAD_REQUEST,void 0,void 0,!0);if(Po.transformReq(e),!NL(e.date,NL.ISO_8601).isValid())throw Ui(new Error,ef.INVALID_DATE,vi.BAD_REQUEST,Mo.LOG_LEVELS.ERROR,ef.INVALID_DATE,!0);let s=Po.checkSchemaTableExist(e.schema,e.table);if(s)throw Ui(new Error,s,vi.NOT_FOUND,Mo.LOG_LEVELS.ERROR,s,!0);let n=await ZS.deleteRecordsBefore(e);if(await XS(e.schema,e.table),yL.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(N2,"deleteFilesBefore");async function b2(e){let t=bL(e,"timestamp");if(t)throw Ui(t,t.message,vi.BAD_REQUEST,void 0,void 0,!0);if(Po.transformReq(e),isNaN(e.timestamp))throw Ui(new Error,ef.INVALID_VALUE("Timestamp"),vi.BAD_REQUEST,Mo.LOG_LEVELS.ERROR,ef.INVALID_VALUE("Timestamp"),!0);let r=Po.checkSchemaTableExist(e.schema,e.table);if(r)throw Ui(new Error,r,vi.NOT_FOUND,Mo.LOG_LEVELS.ERROR,r,!0);let s=await ZS.deleteAuditLogsBefore(e);return await XS(e.schema,e.table),yL.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(b2,"deleteAuditLogsBefore");async function IL(e){e.ids&&(e.hash_values=e.ids);let t=m2(e);if(t)throw Ui(t,t.message,vi.BAD_REQUEST,void 0,void 0,!0);Po.transformReq(e);let r=Po.checkSchemaTableExist(e.schema,e.table);if(r)throw Ui(new Error,r,vi.NOT_FOUND,Mo.LOG_LEVELS.ERROR,r,!0);try{await XS(e.schema,e.table);let s=await ZS.deleteRecords(e);return Po.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${A2}`),s}catch(s){if(s.message===Mo.SEARCH_NOT_FOUND_MESSAGE){let n=new g2;return n.message=Mo.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(IL,"deleteRecord")});var tf=T((ape,DL)=>{var y2=require("crypto"),CL=9;function I2(e){let t=C2(CL),r=LL(e+t);return t+r}a(I2,"createHash");function w2(e,t){let r=e.substr(0,CL),s=r+LL(t+r);return e===s}a(w2,"validateHash");function C2(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(C2,"generateSalt");function LL(e){return y2.createHash("md5").update(e).digest("hex")}a(LL,"md5");DL.exports={hash:I2,validate:w2}});var ML=T((upe,PL)=>{var eT=Ve(),jt={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function L2(e){return jt.password.presence=!0,jt.username.presence=!0,jt.role.presence=!0,jt.active.presence=!0,eT.validateObject(e,jt)}a(L2,"addUserValidation");function D2(e){return jt.password.presence=!1,jt.username.presence=!0,jt.role.presence=!1,jt.active.presence=!1,eT.validateObject(e,jt)}a(D2,"alterUserValidation");function P2(e){return jt.password.presence=!1,jt.username.presence=!0,jt.role.presence=!1,jt.active.presence=!1,eT.validateObject(e,jt)}a(P2,"dropUserValidation");PL.exports={addUserValidation:L2,alterUserValidation:D2,dropUserValidation:P2}});var ke=T((dpe,vL)=>{"use strict";var{platform:_pe}=require("os"),M2="nats-server.zip",tT="nats-server",U2=process.platform==="win32"?`${tT}.exe`:tT,rT="HDB",v2=/^[^\s.,*>]+$/,UL="__request__",B2=a(e=>`${e}.${UL}`,"REQUEST_SUBJECT"),H2={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},q2={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},G2={HUB:"hub.pid",LEAF:"leaf.pid"},F2={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},x2={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:rT,deliver_subject:"__HDB__.WORKQUEUE"},k2={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:rT,deliver_subject:"HDB.SCHEMAQUEUE"},$2={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:rT,deliver_subject:"HDB.USERQUEUE"},V2={SUCCESS:"success",ERROR:"error"},Y2={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},K2={TXN:"txn",MSGID:"msgid"},va={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},W2={[va.ERR]:1,[va.WRN]:2,[va.INF]:3,[va.DBG]:4,[va.TRC]:5},Q2={debug:"-D",trace:"-DVV"};vL.exports={NATS_SERVER_ZIP:M2,NATS_SERVER_NAME:tT,NATS_BINARY_NAME:U2,PID_FILES:G2,NATS_CONFIG_FILES:q2,SERVER_SUFFIX:F2,WORK_QUEUE_CONSUMER_NAMES:x2,SCHEMA_QUEUE_CONSUMER_NAMES:k2,USER_QUEUE_CONSUMER_NAMES:$2,NATS_TERM_CONSTRAINTS_RX:v2,REQUEST_SUFFIX:UL,UPDATE_REMOTE_RESPONSE_STATUSES:V2,CLUSTER_STATUS_STATUSES:Y2,REQUEST_SUBJECT:B2,SUBJECT_PREFIXES:K2,MSG_HEADERS:H2,LOG_LEVELS:va,LOG_LEVEL_FLAGS:Q2,LOG_LEVEL_HIERARCHY:W2}});var sT=T((Epe,BL)=>{"use strict";var j2={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,String.fromCharCode(13,10)),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,String.fromCharCode(13,10))},J2="certificate.pem",z2="privateKey.pem",X2="ca.pem";BL.exports={CERTIFICATE_VALUES:j2,CERTIFICATE_PEM_NAME:J2,PRIVATEKEY_PEM_NAME:z2,CA_PEM_NAME:X2}});var iT=T((mpe,xL)=>{"use strict";var FL=require("fs-extra"),_e=require("joi"),Z2=require("os"),{boolean:Pe,string:dn,number:Bt,array:nT}=_e.types(),{totalmem:HL}=require("os"),Ba=require("path"),e4=U(),sf=G(),hpe=sT(),qL=A(),t4=Ve(),GL="log",r4="components",s4="Invalid logging.rotation.maxSize unit. Available units are G, M or K",n4="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",i4="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",o4="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",a4="rootPath config parameter is undefined",c4="clustering.enabled config parameter is undefined",vo=Bt.min(0).required(),nf=nT.items({host:dn.required(),port:vo}).empty(null),Wn;xL.exports={configValidator:u4,routesValidator:h4,route_constraints:nf};function u4(e){if(Wn=e.rootPath,sf.isEmpty(Wn))throw a4;let t=Pe.required(),r=Bt.min(0).max(1e3).empty(null).default(E4),s=dn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(rf),n=dn.optional().empty(null),i=dn.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=_e.string().empty(null).default(rf),c=_e.custom(_4).empty(null).default(rf),u=e.clustering?.enabled;if(sf.isEmpty(u))throw c4;let _;return u===!0?_=_e.object({enabled:t,hubServer:_e.object({cluster:_e.object({name:_e.required().empty(null),network:_e.object({port:vo,routes:nf}).required()}).required(),leafNodes:_e.object({network:_e.object({port:vo}).required()}).required(),network:_e.object({port:vo}).required()}).required(),leafServer:_e.object({network:_e.object({port:vo,routes:nf}).required(),streams:_e.object({maxAge:Bt.min(120).allow(null).optional(),maxBytes:Bt.min(1).allow(null).optional(),maxMsgs:Bt.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:_e.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Pe.optional(),databaseLevel:Pe.optional(),tls:_e.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Pe.required(),verify:Pe.optional()}),user:dn.optional().empty(null)}).required():_=_e.object({enabled:t,tls:_e.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Pe.required()})}).required(),_e.object({authentication:_e.object({authorizeLocal:Pe,cacheTTL:Bt.required(),enableSessions:Pe}),analytics:_e.object({aggregatePeriod:Bt}),componentsRoot:s.optional(),clustering:_,localStudio:_e.object({enabled:t}).required(),logging:_e.object({auditAuthEvents:_e.object({logFailed:Pe,logSuccessful:Pe}),file:Pe.required(),level:_e.valid("notify","fatal","error","warn","info","debug","trace"),rotation:_e.object({enabled:Pe.optional(),compress:Pe.optional(),interval:dn.custom(f4).optional().empty(null),maxSize:dn.custom(d4).optional().empty(null),path:dn.optional().empty(null).default(rf)}).required(),root:s,stdStreams:Pe.required(),auditLog:Pe.required()}).required(),operationsApi:_e.object({network:_e.object({cors:Pe.optional(),corsAccessList:nT.optional(),headersTimeout:Bt.min(1).optional(),keepAliveTimeout:Bt.min(1).optional(),port:Bt.optional().empty(null),securePort:Bt.optional().empty(null),timeout:Bt.min(1).optional()}).optional(),tls:_e.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:dn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:_e.object({network:_e.object({port:vo,securePort:vo}).required(),webSocket:Pe.optional(),requireAuthentication:Pe.optional()}),http:_e.object({compressionThreshold:Bt.optional(),cors:Pe.optional(),corsAccessList:nT.optional(),headersTimeout:Bt.min(1).optional(),port:Bt.min(0).optional().empty(null),securePort:Bt.min(0).optional().empty(null)}).required(),threads:r.optional(),storage:_e.object({writeAsync:Pe.required(),overlappingSync:Pe.optional(),caching:Pe.optional(),compression:Pe.optional(),noReadAhead:Pe.optional(),path:c,prefetchWrites:Pe.optional()}).required(),ignoreScripts:Pe.optional(),tls:_e.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(u4,"configValidator");function l4(e){return FL.existsSync(e)?null:`Specified path ${e} does not exist.`}a(l4,"doesPathExist");function _4(e,t){_e.assert(e,dn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=l4(e);if(r)return t.message(r)}a(_4,"validatePath");function d4(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(s4);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(i4):e}a(d4,"validateRotationMaxSize");function f4(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(n4);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(o4):e}a(f4,"validateRotationInterval");function E4(e,t){let r=t.state.path.join("."),s=Z2.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||HL();return i=Math.round(Math.min(i,HL())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),e4.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(E4,"setDefaultThreads");function rf(e,t){if(!sf.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(sf.isEmpty(Wn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Ba.join(Wn,r4);case"logging.root":return Ba.join(Wn,GL);case"clustering.leafServer.streams.path":return Ba.join(Wn,"clustering","leaf");case"storage.path":let s=Ba.join(Wn,qL.LEGACY_DATABASES_DIR_NAME);return FL.existsSync(s)?s:Ba.join(Wn,qL.DATABASES_DIR_NAME);case"logging.rotation.path":return Ba.join(Wn,GL);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(rf,"setDefaultRoot");function h4(e){let t=_e.object({routes:nf});return t4.validateBySchema({routes:e},t)}a(h4,"routesValidator")});var rt=T((Tpe,JL)=>{"use strict";var qr=A(),yt=G(),gt=U(),{configValidator:m4,routesValidator:kL}=iT(),fr=require("fs-extra"),p4=require("yaml"),Bs=require("path"),S4=require("is-number"),VL=require("properties-reader"),T4=require("lodash"),{handleHDBError:g4}=Z(),{HTTP_STATUS_CODES:R4,HDB_ERROR_MSGS:of}=Mr(),Spe=require("minimist"),{server:A4}=(Pr(),te(So)),{DATABASES_PARAM_CONFIG:Yu,CONFIG_PARAMS:Qn,CONFIG_PARAM_MAP:Hs}=qr,O4="Unable to get config value because config is uninitialized",N4="Config successfully initialized",b4="Error backing up config file",y4="Empty parameter sent to getConfigValue",YL=Bs.join(qr.PACKAGE_ROOT,"config","yaml",qr.HDB_DEFAULT_CONFIG_FILE),I4="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",$L={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"},af,Ht,cf;JL.exports={createConfigFile:w4,getDefaultConfig:C4,getConfigValue:WL,initConfig:aT,flattenConfig:Ha,updateConfigValue:QL,updateConfigObject:D4,getConfiguration:U4,setConfiguration:v4,readConfigFile:uT,getClusteringRoutes:B4,initOldConfig:jL,getConfigFromFile:H4,getConfigFilePath:Bo,addConfig:q4,deleteConfigFromFile:G4,getConfigObj:F4};function w4(e){let t=Bi(YL);af=Ha(t.toJSON());let r;for(let o in e){let c=Hs[o.toLowerCase()];if(c===Qn.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=oT(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){gt.error(l)}}}r&&KL(t,r),cT(t);let s=t.toJSON();Ht=Ha(s);let n=t.getIn(["rootPath"]),i=Bs.join(n,qr.HDB_CONFIG_FILE);fr.createFileSync(i),fr.writeFileSync(i,String(t)),gt.trace(`Config file written to ${i}`)}a(w4,"createConfigFile");function KL(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!yt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Yu.TABLES))for(let i in s[n][Yu.TABLES])for(let o in s[n][Yu.TABLES][i]){let c=s[n][Yu.TABLES][i][o],u=[Qn.DATABASES,n,Yu.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[Qn.DATABASES,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){gt.error("Error parsing schemas CLI/env config arguments",s)}}a(KL,"setSchemasConfig");function C4(e){if(af===void 0){let r=Bi(YL);af=Ha(r.toJSON())}let t=Hs[e.toLowerCase()];if(t!==void 0)return af[t.toLowerCase()]}a(C4,"getDefaultConfig");function WL(e){if(e==null){gt.error(y4);return}if(Ht===void 0){gt.trace(O4);return}let t=Hs[e.toLowerCase()];if(t!==void 0)return Ht[t.toLowerCase()]}a(WL,"getConfigValue");function Bo(e=yt.getPropsFilePath()){let t=yt.getEnvCliRootPath();return t?Bs.join(t,qr.HDB_CONFIG_FILE):VL(e).get(qr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Bo,"getConfigFilePath");function aT(e=!1){if(Ht===void 0||e){let t;if(!yt.noBootFile()){t=yt.getPropsFilePath();try{fr.accessSync(t,fr.constants.F_OK|fr.constants.R_OK)}catch(i){throw gt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Bo(t),s;if(r.includes("config/settings.js"))try{jL(r);return}catch(i){if(i.code!==qr.NODE_ERROR_CODES.ENOENT)throw i}try{s=Bi(r)}catch(i){if(i.code===qr.NODE_ERROR_CODES.ENOENT){gt.trace(`HarperDB config file not found at ${r}.
|
|
6
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw gt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}L4(s,r),cT(s);let n=s.toJSON();if(A4.config=n,Ht=Ha(n),Ht.logging_rotation_rotate)for(let i in $L)Ht[i]&>.error(`Config ${$L[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);gt.trace(N4)}}a(aT,"initConfig");function L4(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Bs.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Bs.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Bs.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(gt.trace("Updating config file with missing config params"),fr.writeFileSync(t,String(e)))}a(L4,"checkForUpdatedConfig");function cT(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=m4(t);if(r.error)throw of.CONFIG_VALIDATION(r.error.message);e.setIn(["threads"],r.value.threads),e.setIn(["componentsRoot"],r.value.componentsRoot),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams?.path)}a(cT,"validateConfig");function D4(e,t){Ht===void 0&&(Ht={});let r=Hs[e.toLowerCase()];if(r===void 0){gt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ht[r.toLowerCase()]=t}a(D4,"updateConfigObject");function QL(e,t,r=void 0,s=!1,n=!1,i=!1){Ht===void 0&&aT();let o=WL(Hs.hdb_root),c=Bs.join(o,qr.HDB_CONFIG_FILE),u=Bi(c),_;if(r===void 0&&e.toLowerCase()===Qn.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=Hs[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=oT(f,t);u.setIn([...E],h)}else for(let f in r){let E=Hs[f.toLowerCase()];if(E===Qn.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),S=qr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];S&&S.startsWith("customFunctions")&&u.hasIn(S.split("_"))&&(E=S,h=S.split("_"));let m=oT(E,r[f]);E==="rootPath"&&m?.endsWith("/")&&(m=m.slice(0,-1));try{u.setIn([...h],m)}catch(g){gt.error(g)}}}_&&KL(u,_),cT(u);let l=u.getIn(["rootPath"]),d=Bs.join(l,qr.HDB_CONFIG_FILE);s===!0&&P4(c,l),fr.writeFileSync(d,String(u)),n&&(Ht=Ha(u.toJSON())),gt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(QL,"updateConfigValue");function P4(e,t){try{let r=Bs.join(t,"backup",`${qr.HDB_CONFIG_FILE}.bak`);fr.copySync(e,r),gt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){gt.error(b4),gt.error(r)}}a(P4,"backupConfigFile");var M4=["databases"];function Ha(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)),cf=e,r(e);function r(s){let n={};for(let i in s)if(s.hasOwnProperty(i))if(typeof s[i]=="object"&&s[i]!==null&&!Array.isArray(s[i])&&!M4.includes(i)){let o=r(s[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!Qn[u.toUpperCase()]&&Hs[u]&&(n[Hs[u].toLowerCase()]=o[c]),n[u]=o[c]}}else n[i.toLowerCase()]=s[i];return n}a(r,"squashObj")}a(Ha,"flattenConfig");function oT(e,t){if(e===Qn.CLUSTERING_NODENAME||e===Qn.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(S4(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||yt.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 yt.autoCast(t)}a(oT,"castConfigValue");function U4(){let e=yt.getPropsFilePath(),t=Bo(e);return Bi(t).toJSON()}a(U4,"getConfiguration");async function v4(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return QL(void 0,void 0,n,!0),I4}catch(i){throw typeof i=="string"||i instanceof String?g4(i,i,R4.BAD_REQUEST,void 0,void 0,!0):i}}a(v4,"setConfiguration");function uT(){let e=yt.getPropsFilePath();try{fr.accessSync(e,fr.constants.F_OK|fr.constants.R_OK)}catch(s){if(!yt.noBootFile())throw gt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Bo(e);return Bi(t).toJSON()}a(uT,"readConfigFile");function Bi(e){return p4.parseDocument(fr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Bi,"parseYamlDoc");function B4(){let e=uT(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=yt.isEmptyOrZeroLength(t)?[]:t;let r=kL(t);if(r)throw of.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=yt.isEmptyOrZeroLength(s)?[]:s;let n=kL(s);if(n)throw of.CONFIG_VALIDATION(n.message);if(!yt.isEmptyOrZeroLength(s)&&!yt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!yt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw of.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(B4,"getClusteringRoutes");function jL(e){let t=VL(e);Ht={};for(let r in Hs){let s=t.get(r.toUpperCase());if(yt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Hs[r].toLowerCase();n===Qn.LOGGING_ROOT?Ht[n]=Bs.dirname(s):Ht[n]=s}return Ht}a(jL,"initOldConfig");function H4(e){let t=uT();return T4.get(t,e.replaceAll("_","."))}a(H4,"getConfigFromFile");async function q4(e,t){let r=Bi(Bo());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await fr.writeFile(Bo(),String(r))}a(q4,"addConfig");function G4(e){let t=Bo(yt.getPropsFilePath()),r=Bi(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=Bs.join(s,qr.HDB_CONFIG_FILE);fr.writeFileSync(n,String(r))}a(G4,"deleteConfigFromFile");function F4(){return cf||(aT(),cf)}a(F4,"getConfigObj")});var XL=T((Rpe,zL)=>{"use strict";var uf=A(),lf=class{static{a(this,"BaseLicense")}constructor(t=0,r=uf.RAM_ALLOCATION_ENUM.DEFAULT,s=uf.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},lT=class extends lf{static{a(this,"ExtendedLicense")}constructor(t=0,r=uf.RAM_ALLOCATION_ENUM.DEFAULT,s=uf.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};zL.exports={BaseLicense:lf,ExtendedLicense:lT}});var Ku=T((Ope,nD)=>{"use strict";var Ga=require("fs-extra"),ZL=tf(),eD=require("crypto"),x4=require("moment"),k4=require("uuid").v4,Jt=U(),dT=require("path"),$4=G(),Hi=A(),V4=XL().ExtendedLicense,qa="invalid license key format",Y4="061183",K4="mofi25",W4="aes-256-cbc",Q4=16,j4=32,tD=Q();tD.initSync();var _T;nD.exports={validateLicense:rD,generateFingerPrint:z4,licenseSearch:sD,getLicense:e3};function fT(){return dT.join(tD.getHdbBasePath(),Hi.LICENSE_KEY_DIR_NAME,Hi.LICENSE_FILE_NAME)}a(fT,"getLicenseDirPath");function J4(){let e=fT();return dT.join(e,Hi.LICENSE_FILE_NAME)}a(J4,"getLicenseFilePath");function ET(){let e=fT();return dT.join(e,Hi.REG_KEY_FILE_NAME)}a(ET,"getFingerPrintFilePath");async function z4(){let e=ET();try{return await Ga.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await X4();throw Jt.error(`Error writing fingerprint file to ${e}`),Jt.error(t),new Error("There was an error generating the fingerprint")}}a(z4,"generateFingerPrint");async function X4(){let e=k4(),t=ZL.hash(e),r=ET();try{await Ga.mkdirp(fT()),await Ga.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Jt.error(`Error writing fingerprint file to ${r}`),Jt.error(s),new Error("There was an error generating the fingerprint")}return t}a(X4,"writeFingerprint");function rD(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Hi.RAM_ALLOCATION_ENUM.DEFAULT,version:Hi.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Jt.error("empty license key passed to validate."),r;let s=ET(),n=!1;try{n=Ga.statSync(s)}catch(i){Jt.error(i)}if(n){let i;try{i=Ga.readFileSync(s,"utf8")}catch{Jt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(K4),c=o[1];c=Buffer.concat([Buffer.from(c)],Q4);let u=Buffer.concat([Buffer.from(i)],j4),_=eD.createDecipheriv(W4,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=Z4(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(qa),Jt.error(qa),new Error(qa)}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(qa),Jt.error(qa),new Error(qa)}else r.exp_date=l;r.exp_date<x4().valueOf()&&(r.valid_date=!1),ZL.validate(o[1],`${Y4}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Jt.error("Invalid licence"),r}a(rD,"validateLicense");function Z4(e,t){try{let r=eD.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Jt.warn("Check old license failed")}}a(Z4,"checkOldLicense");function sD(){let e=new V4,t=[];try{t=Ga.readFileSync(J4(),"utf-8").split(Hi.NEW_LINE)}catch(r){r.code==="ENOENT"?Jt.info("no license file found"):Jt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if($4.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=rD(n.license_key,n.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(n){Jt.error("There was an error parsing the license string."),Jt.error(n),e.ram_allocation=Hi.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return _T=e,e}a(sD,"licenseSearch");async function e3(){return _T||await sD(),_T}a(e3,"getLicense")});var Er=T((wpe,gD)=>{"use strict";var cD="username is required",uD="nothing to update, must supply active, role or password to update",lD="password cannot be an empty string",_D="If role is specified, it cannot be empty.",dD="active must be true or false";gD.exports={addUser:u3,alterUser:l3,dropUser:d3,getSuperUser:m3,userInfo:f3,listUsers:df,listUsersExternal:E3,setUsersToGlobal:xa,findAndValidateUser:SD,getClusterUser:p3,USERNAME_REQUIRED:cD,ALTERUSER_NOTHING_TO_UPDATE:uD,EMPTY_PASSWORD:lD,EMPTY_ROLE:_D,ACTIVE_BOOLEAN:dD};var fD=dr(),t3=Uo(),pT=tf(),ED=ML(),hD=_r(),ST=$n(),Gr=G(),mD=require("validate.js"),Ee=U(),{promisify:r3}=require("util"),TT=Kn(),iD=A(),oD=ke(),s3=rt(),bpe=Q(),ype=Ku(),n3=Gn(),{table:Ipe}=(de(),te(De)),{handleHDBError:fn,hdb_errors:i3}=Z(),{HTTP_STATUS_CODES:En,AUTHENTICATION_ERROR_MSGS:hT,HDB_ERROR_MSGS:Fa}=i3,{UserEventMsg:gT}=Ls(),mT=require("lodash"),{server:RT}=(Pr(),te(So)),o3=U();RT.getUser=SD;var pD={username:!0,active:!0,role:!0,password:!0},aD=new Map,_f=hD.searchByValue,a3=hD.searchByHash,c3=r3(t3.delete);async function u3(e){let t=mD.cleanAttributes(e,pD),r=ED.addUserValidation(t);if(r)throw fn(new Error,r.message,En.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await _f(s),n=n&&Array.from(n)}catch(u){throw Ee.error("There was an error searching for a role in add user"),Ee.error(u),u}if(!n||n.length<1)throw fn(new Error,Fa.ROLE_NAME_NOT_FOUND(t.role),En.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw fn(new Error,Fa.DUP_ROLES_FOUND(t.role),En.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=TT.encrypt(t.password)),t.password=pT.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await fD.insert(i)}catch(u){throw Ee.error("There was an error searching for a user."),Ee.error(u),u}Ee.debug(o);try{await xa()}catch(u){throw Ee.error("Got an error setting users to global"),Ee.error(u),u}if(o.skipped_hashes.length===1)throw fn(new Error,Fa.USER_ALREADY_EXISTS(t.username),En.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],ST.signalUserChange(new gT(process.pid)),`${c.username} successfully added`}a(u3,"addUser");async function l3(e){let t=mD.cleanAttributes(e,pD);if(Gr.isEmptyOrZeroLength(t.username))throw new Error(cD);if(Gr.isEmptyOrZeroLength(t.password)&&Gr.isEmptyOrZeroLength(t.role)&&Gr.isEmptyOrZeroLength(t.active))throw new Error(uD);if(!Gr.isEmpty(t.password)&&Gr.isEmptyOrZeroLength(t.password.trim()))throw new Error(lD);if(!Gr.isEmpty(t.active)&&!Gr.isBoolean(t.active))throw new Error(dD);let r=_3(t.username);if(!Gr.isEmpty(t.password)&&!Gr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=TT.encrypt(t.password)),t.password=pT.hash(t.password)),t.role==="")throw new Error(_D);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 _f(i)||[])}catch(c){throw Ee.error("Got an error searching for a role."),Ee.error(c),c}if(!o||o.length===0){let c=Fa.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ee.error(c),fn(new Error,c,En.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Fa.ALTER_USER_DUP_ROLES(t.role);throw Ee.error(c),fn(new Error,c,En.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await fD.update(s)}catch(i){throw Ee.error("Error during update."),Ee.error(i),i}try{await xa()}catch(i){throw Ee.error("Got an error setting users to global"),Ee.error(i),i}return ST.signalUserChange(new gT(process.pid)),n}a(l3,"alterUser");function _3(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(_3,"isClusterUser");async function d3(e){try{let t=ED.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 fn(new Error,Fa.USER_NOT_EXIST(e.username),En.NOT_FOUND,void 0,void 0,!0);let s;try{s=await c3(r)}catch(n){throw Ee.error("Got an error deleting a user."),Ee.error(n),n}Ee.debug(s);try{await xa()}catch(n){throw Ee.error("Got an error setting users to global."),Ee.error(n),n}return ST.signalUserChange(new gT(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(d3,"dropUser");async function f3(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=mT.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await a3(r)}catch(n){throw Ee.error("Got an error searching for a role."),Ee.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ee.error(r),r}return t}a(f3,"userInfo");async function E3(){let e;try{e=await df()}catch(t){throw Ee.error("Got an error listing users."),Ee.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(E3,"listUsersExternal");async function df(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await _f(e)}catch(o){throw Ee.error("Got an error searching for roles."),Ee.error(o),o}let r={};for(let o of t)r[o.id]=mT.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await _f(s)}catch(o){throw Ee.error("Got an error searching for users."),Ee.error(o),o}let i=new Map;for(let o of n)o=mT.cloneDeep(o),o.role=r[o.role],h3(o.role),i.set(o.username,o);return i}catch(e){throw Ee.error("got an error listing users"),Ee.error(e),Gr.errorizeMessage(e)}return null}a(df,"listUsers");function h3(e){try{if(!e){Ee.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(n3)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ee.error("Got an error trying to set system permissions."),Ee.error(t)}}a(h3,"appendSystemTablesToRole");async function xa(){try{let e=await df();global.hdb_users=e}catch(e){throw Ee.error(e),e}}a(xa,"setUsersToGlobal");async function SD(e,t,r=!0){global.hdb_users||await xa();let s=global.hdb_users.get(e);if(!s)throw fn(new Error,hT.GENERIC_AUTH_FAIL,En.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw fn(new Error,hT.USER_INACTIVE,En.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(aD.get(t)===s.password)return n;if(pT.validate(s.password,t))aD.set(t,s.password);else throw fn(new Error,hT.GENERIC_AUTH_FAIL,En.UNAUTHORIZED,void 0,void 0,!0)}return n}a(SD,"findAndValidateUser");async function m3(){global.hdb_users||await xa();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(m3,"getSuperUser");async function p3(){let e=await df(),t=s3.getConfigFromFile(iD.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Gr.isEmpty(r)&&r?.role?.role===iD.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=TT.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+oD.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+oD.SERVER_SUFFIX.ADMIN,r}a(p3,"getClusterUser");var TD=[];RT.invalidateUser=function(e){for(let t of TD)try{t(e)}catch(r){o3.error("Error invalidating user",r)}};RT.onInvalidatedUser=function(e){TD.push(e)}});var Qu=T((Ppe,ND)=>{"use strict";var Ho=U(),Fr=A(),S3=Ly(),Lpe=os(),Dpe=Mi(),T3=Er(),{validateEvent:RD}=Ls(),Wu=is(),g3=require("process"),{resetDatabases:R3}=(de(),te(De)),A3={[Fr.ITC_EVENT_TYPES.SCHEMA]:O3,[Fr.ITC_EVENT_TYPES.USER]:OD};async function O3(e){let t=RD(e);if(t){Ho.error(t);return}Ho.trace("ITC schemaHandler received schema event:",e),await S3(e.message),await N3(e.message)}a(O3,"schemaHandler");async function N3(e){try{Wu.resetReadTxn(Fr.SYSTEM_SCHEMA_NAME,Fr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Wu.resetReadTxn(Fr.SYSTEM_SCHEMA_NAME,Fr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Wu.resetReadTxn(Fr.SYSTEM_SCHEMA_NAME,Fr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=R3();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Ho.error(t)}}a(N3,"syncSchemaMetadata");var AD=[];async function OD(e){try{try{Wu.resetReadTxn(Fr.SYSTEM_SCHEMA_NAME,Fr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Wu.resetReadTxn(Fr.SYSTEM_SCHEMA_NAME,Fr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Ho.warn(r)}let t=RD(e);if(t){Ho.error(t);return}Ho.trace(`ITC userHandler ${Fr.HDB_ITC_CLIENT_PREFIX}${g3.pid} received user event:`,e),await T3.setUsersToGlobal();for(let r of AD)r()}catch(t){Ho.error(t)}}a(OD,"userHandler");OD.addListener=function(e){AD.push(e)};ND.exports=A3});var Ls=T((qpe,yD)=>{"use strict";var Upe=U(),AT=G(),b3=A(),{ITC_ERRORS:ju}=Mr(),{parentPort:vpe,threadId:y3,isMainThread:I3,workerData:Bpe}=require("worker_threads"),{onMessageFromWorkers:w3,broadcast:Hpe,broadcastWithAcknowledgement:C3}=Qe();yD.exports={sendItcEvent:L3,validateEvent:bD,SchemaEventMsg:D3,UserEventMsg:P3};var ff;w3(async(e,t)=>{ff=ff||Qu(),bD(e),ff[e.type]&&await ff[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function L3(e){return!I3&&e.message&&(e.message.originator=y3),C3(e)}a(L3,"sendItcEvent");function bD(e){if(typeof e!="object")return ju.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||AT.isEmpty(e.type))return ju.MISSING_TYPE;if(!e.hasOwnProperty("message")||AT.isEmpty(e.message))return ju.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||AT.isEmpty(e.message.originator))return ju.MISSING_ORIGIN;if(b3.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ju.INVALID_EVENT(e.type)}a(bD,"validateEvent");function D3(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(D3,"SchemaEventMsg");function P3(e){this.originator=e}a(P3,"UserEventMsg")});var $n=T((xpe,LD)=>{"use strict";var ID=A(),Fpe=G(),Ef=U(),wD=dy(),ka,{sendItcEvent:CD}=Ls();function M3(e){try{Ef.trace("signalSchemaChange called with message:",e),ka=ka||Qu();let t=new wD(ID.ITC_EVENT_TYPES.SCHEMA,e);return ka.schema(t),CD(t)}catch(t){Ef.error(t)}}a(M3,"signalSchemaChange");function U3(e){try{Ef.trace("signalUserChange called with message:",e),ka=ka||Qu();let t=new wD(ID.ITC_EVENT_TYPES.USER,e);return ka.user(t),CD(t)}catch(t){Ef.error(t)}}a(U3,"signalUserChange");LD.exports={signalSchemaChange:M3,signalUserChange:U3}});var Zu={};Fe(Zu,{addAnalyticsListener:()=>Xu,recordAction:()=>xr,recordActionBinary:()=>as,setAnalyticsEnabled:()=>v3});function v3(e){FD=e}function xr(e,t,r,s,n){if(!FD)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=pf.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:s,type:n},pf.set(i,o)}hf||B3()}function as(e,t,r,s,n){xr(!!e,t,r,s,n)}function Xu(e){$D.push(e)}function B3(){hf=performance.now(),setTimeout(async()=>{let e=performance.now()-hf;hf=0;let t=[],r={time:Date.now(),period:e,threadId:qo.threadId,metrics:t};for(let[n,i]of pf){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 VD){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let S=_[_.length-1];typeof S=="number"?_[_.length-1]={value:S,count:1+h}:S.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await YD()}let s=process.memoryUsage();t.push({metric:"memory",threadId:qo.threadId,byThread:!0,...s});for(let n of $D)n(t);pf=new Map,qo.parentPort?qo.parentPort.postMessage({type:kD,report:r}):QD({report:r})},xD).unref()}async function H3(e,t=6e4){let r=bT(),s=KD(),n;for(let h of s.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){n=h.value.time;break}if(Date.now()-t<n)return;let i,o=new Map,c=new Map,u=[],_;for(let{key:h,value:S}of r.primaryStore.getRange({start:n||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:m,threadId:g}=S;for(let R of m||[]){let{path:b,method:V,type:$,metric:F,count:w,total:W,distribution:B,threads:k,...se}=R;w||(w=1);let Ie=F+(b?"-"+b:"");V!==void 0&&(Ie+="-"+V),$!==void 0&&(Ie+="-"+$);let ie=o.get(Ie);if(ie){if(ie.threads){let Ge=ie.threads[g];if(Ge)ie=Ge;else{ie.threads[g]=Object.assign({},se);continue}}ie.count||(ie.count=1);let Yt=ie.count;for(let Ge in se){let Pt=se[Ge];typeof Pt=="number"&&(ie[Ge]=(ie[Ge]*Yt+Pt*w)/(Yt+w))}ie.count+=w,W>=0&&(ie.total+=W,ie.ratio=ie.total/ie.count)}else ie=Object.assign({period:t},R),delete ie.distribution,o.set(Ie,ie),ie.byThread&&(ie.threads=[],ie.threads[g]=Object.assign({},se),u.push(ie));if(B){B=B.map(Ge=>typeof Ge=="number"?{value:Ge,count:1}:Ge);let Yt=c.get(Ie);Yt?Yt.push(...B):c.set(Ie,B)}}await YD()}for(let h of u){let{path:S,method:m,type:g,metric:R,count:b,total:V,distribution:$,threads:F,...w}=h;F=F.filter(W=>W);for(let W in w){if(typeof h[W]!="number")continue;let B=0;for(let k of F){let se=k[W];typeof se=="number"&&(B+=se)}h[W]=B}h.count=F.length,delete h.threads,delete h.byThread}for(let[h,S]of c){let m=o.get(h);S.sort((Ge,Pt)=>Ge.value>Pt.value?1:-1);let g=m.count-1,R=[],b=0,V=0,$;for(let Ge of VD){let Pt=g*Ge;for(;b<Pt;)$=S[V++],b+=$.count,V===1&&b--;let Os=S[V>1?V-2:0];$||($=S[0]),R.push($.value-($.value-Os.value)*(b-Pt)/$.count)}let[F,w,W,B,k,se,Ie,ie,Yt]=R;Object.assign(m,{p1:F,p10:w,p25:W,median:B,p75:k,p90:se,p95:Ie,p99:ie,p999:Yt})}let l;for(let[h,S]of o)S.id=(0,mf.getNextMonotonicTime)(),S.time=_,s.primaryStore.put(S.id,S,{append:!0}).then(m=>{m||s.primaryStore.put(S.id,S)}),l=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(l||E*10>f){let h=(0,mf.getNextMonotonicTime)(),S={id:h,metric:"main-thread-utilization",idle:f-DD,active:E-PD,time:d,...process.memoryUsage()};s.primaryStore.put(h,S,{append:!0}).then(m=>{m||s.primaryStore.put(h,S)})}DD=f,PD=E}async function MD(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function bT(){return UD||(UD=ut({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function KD(){return vD||(vD=ut({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function F3(){WD=!0;let e=(0,zu.get)(NT.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await H3(xD,e),await MD(bT(),q3),await MD(KD(),G3)},Math.min(e/2,2147483647)).unref()}function QD(e,t){let r=e.report;r.threadId=t?.threadId||qo.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(BD+=s.mean*s.count);r.totalBytesProcessed=BD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(HD.get(t))}),HD.set(t,t.performance.eventLoopUtilization())),r.id=(0,mf.getNextMonotonicTime)(),bT().primaryStore.put(r.id,r),WD||F3(),x3&&(jD=$3(r))}async function $3(e){if(await jD,!qi){let r=(0,Ju.dirname)((0,GD.getLogFilePath)());try{qi=await(0,OT.open)((0,Ju.join)(r,"analytics.log"),"r+")}catch{qi=await(0,OT.open)((0,Ju.join)(r,"analytics.log"),"w+")}}let t=(await qi.stat()).size;if(t>k3){let r=Buffer.alloc(t);await qi.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await qi.write(r,{position:0}),await qi.truncate(r.length),t=r.length}await qi.write(JSON.stringify(e)+`
|
|
7
|
-
`,t)}var qo,qD,GD,Ju,OT,mf,zu,NT,pf,FD,hf,xD,kD,$D,VD,DD,PD,YD,q3,G3,UD,vD,WD,BD,HD,x3,jD,qi,k3,jn=Re(()=>{qo=require("worker_threads"),qD=P(Qe());de();GD=P(U()),Ju=require("path"),OT=require("fs/promises"),mf=P(ar()),zu=P(Q()),NT=P(A());Pr();(0,zu.initSync)();pf=new Map,FD=(0,zu.get)(NT.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(v3,"setAnalyticsEnabled");a(xr,"recordAction");Tt.recordAnalytics=xr;a(as,"recordActionBinary");hf=0,xD=1e3,kD="analytics-report",$D=[];a(Xu,"addAnalyticsListener");VD=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(B3,"sendAnalytics");a(H3,"aggregation");DD=0,PD=0,YD=a(()=>new Promise(setImmediate),"rest");a(MD,"cleanup");q3=36e5,G3=31536e6;a(bT,"getRawAnalyticsTable");a(KD,"getAnalyticsTable");(0,qD.setChildListenerByType)(kD,QD);a(F3,"startScheduledTasks");BD=0,HD=new Map,x3=!1;a(QD,"recordAnalytics");k3=1e6;a($3,"logAnalytics")});var LT={};Fe(LT,{coerceType:()=>Af,makeTable:()=>Nf,setServerUtilities:()=>J3,updateResource:()=>sl});function Nf(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:S}=e;S||(S=[]),uy(i,u);let m=op(i,s,u),g=0,R,b,V,$={},F=Promise.resolve(),w,W,B;for(let z of S)(z.assignCreatedTime||z.name==="__createdtime__")&&(w=z),(z.assignUpdatedTime||z.name==="__updatedtime__")&&(W=z),z.expiresAt&&(B=z),z.isPrimaryKey&&($=z);let k,se=[],Ie=[],ie=1,Yt=2,Ge={},Pt={},Os=864e5,mN,q_,nk=10,ik=6;E&&TN();class pt extends Mt{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=S;static expirationTimer;static createdTimeProperty=w;static updatedTimeProperty=W;static sources=[];static get expirationMS(){return d}static dbisDB=l;static schemaDefined=_;static sourcedFrom(p,O){O&&(this.sourceOptions=O,(O.expiration||O.eviction||O.scanInterval)&&this.setTTLExpiration(O)),O?.intermediateSource?(p.intermediateSource=!0,this.sources.unshift(p)):this.sources.push(p),b=p.get&&(!p.get.reliesOnPrototype||p.prototype.get);let v=a(I=>{let L=this.sources.slice(0,-1);if(L=L.filter(D=>D[I]&&(!D[I].reliesOnPrototype||D.prototype[I])),L.length>0)if(L.length===1){let D=L[0];return(K,j,ce)=>{if(K?.source!==D)return D[I](j,ce,K)}}else return(D,K,j)=>{let ce=[];for(let Y of L){if(D?.source===Y)break;ce.push(Y[I](K,j,D))}return Promise.all(ce)}},"getApplyToIntermediateSource"),N=this.sources[this.sources.length-1],C=a(I=>{if(N[I]&&(!N[I].reliesOnPrototype||N.prototype[I]))return(L,D,K)=>{if(!L?.source)return N[I](D,K,L)}},"getApplyToCanonicalSource");return Ge={put:C("put"),delete:C("delete"),publish:C("publish")},Pt={put:v("put"),delete:v("delete"),publish:v("publish"),invalidate:v("invalidate")},(async()=>{let I=!1,L=a(async(D,K)=>{let j=D.value,ce=D.table?Je[c][D.table]:pt;if(c===qs.SYSTEM_SCHEMA_NAME&&(D.table===qs.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||D.table===qs.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(I=!0),D.id===void 0&&(D.id=j[ce.primaryKey],D.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(D));D.source=p;let Y=await ce.getResource(D.id,K,el);switch(D.type){case"put":return Y._writeUpdate(j,el);case"delete":return Y._writeDelete(el);case"publish":return Y._writePublish(j,el);case"invalidate":return Y.invalidate(el);default:je.error("Unknown operation",D.type,D.id)}},"writeUpdate");try{let D=p.subscribe;D&&h==null&&(h=!0);let K=p.subscribeOnThisThread?p.subscribeOnThisThread((0,Go.getWorkerIndex)()):(0,Go.getWorkerIndex)()===0,j=D&&K&&await p.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(j){let ce;for await(let Y of j)try{if(!(Y.type==="transaction"?Y.writes[0]:Y)){je.error("Bad subscription event",Y);continue}if(Y.source=p,ce)if(Y.beginTxn)ce.resolve();else{L(Y,ce);continue}if(Y.type==="end_txn")continue;let ye=We(Y,()=>{if(Y.type==="transaction"){let oe=[];for(let Kt of Y.writes)try{oe.push(L(Kt,Y))}catch(sr){throw sr.message+=" writing "+JSON.stringify(Kt)+" of event "+JSON.stringify(Y),sr}return Promise.all(oe)}else if(Y.type==="define_schema"){let oe=this.attributes.slice(0),Kt;for(let sr of Y.attributes)oe.find(fo=>fo.name===sr.name)||(oe.push(sr),Kt=!0);Kt&&(ut({table:n,database:c,attributes:oe,origin:"cluster"}),il.signalSchemaChange(new ol.SchemaEventMsg(process.pid,qs.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return Y.beginTxn?(ce=Y,L(Y,Y),new Promise(oe=>{ce.resolve=oe})):L(Y,Y)});I&&(await ye,il.signalUserChange(new ol.UserEventMsg(process.pid))),Y.onCommit&&(ye?.then?ye.then(Y.onCommit):Y.onCommit())}catch(me){je.error("error in subscription handler",me)}}}catch(D){je.error(D)}})(),this}static getResource(p,O,v){let N=super.getResource(p,O,v);if(p!=null)try{if(N.hasOwnProperty(Ae))return N;if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let C=!v?.async||i.cache?.get(p),I=Ni(O),L=I.getReadTxn();if(L?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return pN(p,O,{transaction:L},C,D=>{if(D?sl(N,D):N[Ae]=null,O.onlyIfCached&&O.noCacheStore){if(!N.doesExist())throw new mn.ServerError("Entry is not cached",504)}else if(v?.ensureLoaded){let K=Nm(p,D,O,N);if(K)return I?.disregardReadTxn(),N[IT]=!0,CT(K,j=>(sl(N,j),N))}return N})}catch(C){throw C.message.includes("Unable to serialize object")&&(C.message+=": "+JSON.stringify(p)),C}return N}ensureLoaded(){let p=Nm(this[Le],this[hn],this[Se]);if(p)return this[IT]=!0,CT(p,O=>{this[hn]=O,this[Ae]=O.value,this[Rf]=O.version})}static setTTLExpiration(p){if(typeof p=="number")d=p*1e3,f||(f=0);else if(p&&typeof p=="object")d=p.expiration*1e3,f=(p.eviction||0)*1e3,Os=p.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");Os=Os||(d+f)/4,bm()}static enableAuditing(p=!0){E=p,p&&TN(),pt.audit=p}static coerceId(p){return p===""?null:Af(p,$)}static async dropTable(){if(delete Je[c][n],c===o){for(let p of S)l.remove(pt.tableName+"/"+p.name),r[p.name]?.drop();l.remove(pt.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));il.signalSchemaChange(new ol.SchemaEventMsg(process.pid,qs.OPERATIONS_ENUM.DROP_TABLE,c,n))}static get(p,O){if(p&&typeof p=="object"&&!Array.isArray(p)&&p.url===""){let v=this.getRecordCount();return{recordCount:v.recordCount,estimatedRecordRange:v.estimatedRange,records:"./",name:n,database:c,attributes:S}}return super.get(p,O)}get(p){if(typeof p=="string")return this.getProperty(p);if(this[sn])return this.search(p);if(p?.property)return this.getProperty(p.property);if(this.doesExist()||p?.ensureLoaded===!1||this[Se]?.returnNonexistent)return this}static allowRead(p,O){if(!p)return!1;let v=p.role.permission;if(v.super_user)return!0;if(v[n]?.read){let N=v[n].attribute_permissions;if(N){O||(O={});let C=O.select;if(C){let I=wT(N,"read");O.select=C.filter(L=>I[L])}else O.select=N.filter(I=>I.read).map(I=>I.attribute_name);return O}else return!0}}allowUpdate(p,O,v){if(!p)return!1;let N=p.role.permission;if(N.super_user)return!0;if(N[n]?.update){let C=N[n].attribute_permissions;if(C){let I=wT(C,"update");for(let L in O)if(!I[L])return!1;if(v)for(let L of C){let D=L.attribute_name;!L.update&&!(D in O)&&(O[D]=this.getProperty(D))}}else return!0}}allowCreate(p,O){return this.allowUpdate(p,{})}static allowCreate(p,O){if(!p)return!1;let v=p.role.permission;if(v.super_user)return!0;if(v[n]?.insert){let N=v[n].attribute_permissions;if(N){let C=wT(N,"insert");for(let I in O)if(!C[I])return!1}else return!0}}static allowDelete(p){if(!p)return!1;let O=p.role.permission;if(O.super_user||O[n]?.delete)return!0}update(p,O){if(!Ni(this[Se]))throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let N;if(typeof p=="object"&&p)if(O){Object.isFrozen(p)&&(p=Object.assign({},p));for(let C in this[Ae])p[C]===void 0&&(p[C]=void 0);this[Wt]=p}else N=this[Wt],N&&(p=Object.assign(N,p)),this[Wt]=N=p;return this._writeUpdate(this),this}invalidate(p){let O=this[Se],v=this[Le];Ni(this[Se]).addWrite({key:v,store:i,invalidated:!0,entry:this[hn],nodeName:this[Se]?.nodeName,before:Ge.invalidate?.bind(this,O,v),beforeIntermediate:Pt.invalidate?.bind(this,O,v),commit:(C,I)=>{if(I?.version>C)return;let L=null;for(let D in r)L||(L={}),L[D]=this.getProperty(D);m(v,L,this[hn],C,Sf,E,this[Se],0,"invalidate")}})}static evict(p,O,v){let N=this.Source,C;if(!((b||E)&&(!O||(C=i.getEntry(p),!C||!O)||C.version!==v))){if(b){if(i.hasLock(p,C.version))return;let I;for(let L in r)I||(I={}),I[L]=O[L];if(I){m(p,I,C,v,Tf,null,null,0,null,!0);return}}if(i.ifVersion(v,()=>{G_(p,O,null)}),E)m(p,null,C,v,Tf,null,null,0,null,!0);else return i.remove(p,v)}}lock(){throw new Error("Not yet implemented")}static operation(p,O){return p.table||=n,p.schema||=c,rP.operation(p,O)}async put(p){this.update(p,!0)}_writeUpdate(p,O){let v=this[Se],N=Ni(v),C=this[Le];if(C===void 0)throw new Error("Can not save record without an id");let I=this[hn];this[yT]=!0;let L={key:C,store:i,entry:I,nodeName:v?.nodeName,validate:D=>{if(!p[zD]||ed(p)){if(this.validate(p),v?.source?p=au(p):(t&&p[t]!==C&&(p[t]=C),W&&(p[W.name]=W.type==="Date"?new Date(D):W.type==="String"?new Date(D).toISOString():D),w&&(I?.value?p[w.name]=I?.value[w.name]:p[w.name]=w.type==="Date"?new Date(D):w.type==="String"?new Date(D).toISOString():D),p=au(p)),p[Ae])throw new Error("Can not assign a record with a record property");this[Ae]=p}else N.removeWrite(L)},before:Ge.put&&(()=>Ge.put(v,C,p)),beforeIntermediate:Pt.put&&(()=>Pt.put(v,C,p)),commit:(D,K,j)=>{j&&(v&&K?.version>(v.lastModified||0)&&(v.lastModified=K.version),sl(this,K));let ce=K?.value;this[yT]=!1,je.trace("Checking timestamp for put",C,K?.version>D,K?.version,D),!(K?.version>D)&&(G_(C,ce,p),m(C,p,K,D,0,E,v,v.expiresAt||(d?d+Date.now():0)))}};N.addWrite(L)}async delete(p){if(typeof p=="string")return this.deleteProperty(p);if(this[sn]){for await(let O of this.search(p))(await pt.getResource(O[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(p);return}return this[Ae]?this._writeDelete(p):!1}_writeDelete(p){let O=Ni(this[Se]),v,N=this[Le],C=this[Se];return O.addWrite({key:N,store:i,resource:this,nodeName:C?.nodeName,before:Ge.delete?.bind(this,C,N),beforeIntermediate:Pt.delete?.bind(this,C,N),commit:(I,L,D)=>{let K=L?.value;D&&(C&&L?.version>(C.lastModified||0)&&(C.lastModified=L.version),sl(this,L)),!(L?.version>I)&&(G_(this[Le],K),je.trace("Write delete entry",N,I),E||h?(m(N,null,this[hn],I,0,E,this[Se],0,"delete"),E||bm()):i.remove(this[Le]))}}),!0}search(p){let O=Ni(this[Se]);if(!p)throw new Error("No query provided");let v=p.reverse===!0,N=p.conditions;N?N.length===void 0&&(N=Array.from(N)):N=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],this[Le]&&(N=[{attribute:null,comparator:"prefix",value:this[Le]}].concat(N));for(let Y of N){let me=Y[0]??Y.attribute,ye=me==null?$:S.find(oe=>oe.name==me);if(ye)ye.type&&(Y[1]===void 0?Y.value=C(Y.value,ye):Y[1]=C(Y[1],ye));else if(me!=null)throw(0,mn.handleHDBError)(new Error,`${me} is not a defined attribute`,404)}function C(Y,me){return Array.isArray(Y)?Y.map(ye=>Af(ye,me)):Af(Y,me)}a(C,"coerceTypedValues"),N.length>1&&(N=(0,eP.sortBy)(N,Y=>{if(Y.estimated_count===void 0){let me=Y.comparator||Y.search_type;if(me===rl.SEARCH_TYPES.EQUALS){let ye=Y[0]??Y.attribute;if(ye==null||ye===t)Y.estimated_count=1;else{let oe=r[ye];Y.estimated_count=oe?oe.getValuesCount(Y[1]??Y.value):1/0}}else me===rl.SEARCH_TYPES.CONTAINS||me===rl.SEARCH_TYPES.ENDS_WITH||me==="ne"?Y.estimated_count=1/0:me===rl.SEARCH_TYPES.STARTS_WITH||me==="prefix"?Y.estimated_count=K3:Y.estimated_count=Y3}return Y.estimated_count}));let I=O.getReadTxn();I.use();let L=p.select,D=N[0],K;if(!D)K=i.getRange(v?{end:!1,reverse:!0,transaction:I,lazy:L?.length<4}:{start:!1,transaction:I,lazy:L?.length<4}).map(({value:Y})=>Y?new Promise(me=>setImmediate(()=>me(Y))):gf.SKIP);else{let Y=Qm(D,I,v,pt,p.allowFullScan);if(!p.operator||p.operator.toLowerCase()==="and"){let me=N.slice(1).map(jm);K=ce(Y,me)}else{for(let ye=1;ye<N.length;ye++){let oe=N[ye],Kt=Qm(oe,I,v,pt,p.allowFullScan);Y=Y.concat(Kt)}let me=new Set;Y=Y.filter(ye=>me.has(ye)?!1:(me.add(ye),!0)),K=ce(Y)}}(p.offset||p.limit!==void 0)&&(K=K.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0)),K.onDone=()=>{I.done()};let j=this[Se];function ce(Y,me){let ye=me?.length,oe={transaction:I,lazy:ye>0||L?.length<4,alwaysPrefetch:!0},Kt=p.ensureLoaded!==!1;function sr(fo,$e){if(Kt&&$e!==void 0){let Lr=!j.onlyIfCached&&Nm($e,fo,j,this);if(Lr)return Lr.then(ck=>sr(ck))}let Zs=fo?.value;if(!Zs)return gf.SKIP;for(let Lr=0;Lr<ye;Lr++)if(!me[Lr](Zs))return gf.SKIP;return Zs}return a(sr,"processEntry"),Y.map(fo=>pN(fo,j,oe,!1,sr))}return a(ce,"idsToRecords"),K}async subscribe(p){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||ut({table:n,database:c,schemaDefined:_,attributes:S,audit:!0}),p||(p={});let O=ay(pt,this[Le]??null,function(I,L,D,K){try{let j=L.getValue?.(i);this.send({id:I,timestamp:D,value:j,version:L.version,type:L.type,beginTxn:K})}catch(j){je.error(j)}},p.startTime,this[sn]);p.crossThreads===!1&&(O.crossThreads=!1),p.supportsTransactions&&(O.supportsTransactions=!0);let v=this[Le],N=p.previousCount;N>1e3&&(N=1e3);let C=p.startTime;if(this[sn]){if(C){if(N)throw new mn.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:I,value:L}of u.getRange({start:C,exclusiveStart:!0})){let D=Ur(L,i);if(D.tableId!==s)continue;let K=D.recordId;(v==null||ZD(v,K))&&O.send({id:K,timestamp:I,...D}),O.startTime=I}}else if(N){let I=[];for(let{key:L,value:D}of u.getRange({start:"z",end:!1,reverse:!0}))try{let K=Ur(D);if(K.tableId!==s)continue;let j=K.recordId;if(v==null||ZD(v,j)){let ce=K.getValue(i);if(I.push({id:j,timestamp:L,value:ce,version:K.version,type:K.type}),--N<=0)break}}catch(K){je.error("Error getting history entry",L,K)}for(let L=I.length;L>0;)O.send(I[--L]);I[0]&&(O.startTime=I[0].timestamp)}else if(!p.omitCurrent)for(let{key:I,value:L,version:D,localTime:K}of i.getRange({start:v??!1,end:v==null?void 0:[v,tP.MAXIMUM_KEY],versions:!0}))L&&O.send({id:I,version:D,timestamp:K,value:L})}else{N&&!C&&(C=0);let I=this[hn]?.localTime;if(je.trace("Subscription from",C,"from",v),C<I){let L=[],D=I;do{let K=u.get(D);if(K){p.omitCurrent=!0;let j=Ur(K),ce=j.getValue(i);L.push({id:v,value:ce,timestamp:D,...j}),D=j.previousLocalTime}else break;N&&N--}while(D>C&&N!==0);for(let K=L.length;K>0;)O.send(L[--K]);O.startTime=I}!p.omitCurrent&&this.doesExist()&&O.send({id:v,version:this[Rf],timestamp:this[hn]?.localTime,value:this})}return p.listener&&O.on("data",p.listener),O}doesExist(){return!!(this[Ae]||this[yT])}async publish(p,O){this._writePublish(p,O)}_writePublish(p,O){let v=Ni(this[Se]),N=this[Le]||null,C=this[Se];v.addWrite({key:N,store:i,entry:this[hn],nodeName:C?.nodeName,validate:()=>{this.validate(p)},before:Ge.publish?.bind(this,C,N,p),beforeIntermediate:Pt.publish?.bind(this,C,N,p),commit:(I,L,D)=>{L===void 0&&h&&!E&&bm(),m(N,L?.value??null,L,L?.version||I,0,!0,C,L?.expiresAt,"message",!1,p)}})}validate(p){let O,v=a((N,C,I)=>{if(C.type&&N!=null)if(C.properties){typeof N!="object"&&(O||(O=[])).push(`Property ${I} must be an object${C.type?" ("+C.type+")":""}`);let L=C.properties;for(let D=0,K=L.length;D<K;D++){let j=L[D],ce=v(N[j.name],j,I+"."+j.name);ce&&(N[j.name]=ce)}}else switch(C.type){case"Int":(typeof N!="number"||N>>0!==N)&&(O||(O=[])).push(`Property ${I} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof N!="number"||!(Math.floor(N)===N&&Math.abs(N)<=9007199254740992))&&(O||(O=[])).push(`Property ${I} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof N!="number"&&(O||(O=[])).push(`Property ${I} must be a number`);break;case"ID":typeof N=="string"||N?.length>0&&N.every?.(L=>typeof L=="string")||(O||(O=[])).push(`Property ${I} must be a string, or an array of strings`);break;case"String":typeof N!="string"&&(O||(O=[])).push(`Property ${I} must be a string`);break;case"Boolean":typeof N!="boolean"&&(O||(O=[])).push(`Property ${I} must be a boolean`);break;case"Date":if(!(N instanceof Date)){if(typeof N=="string"||typeof N=="number")return new Date(N);(O||(O=[])).push(`Property ${I} must be a Date`)}break;case"Bytes":N instanceof Uint8Array||(O||(O=[])).push(`Property ${I} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(N)){if(C.elements)for(let L=0,D=N.length;L<D;L++){let K=N[L],j=v(K,C.elements,I+"[*]");j&&(N[L]=j)}}else(O||(O=[])).push(`Property ${I} must be a Buffer or Uint8Array`);break}C.nullable===!1&&N==null&&(O||(O=[])).push(`Property ${I} is required (and not does not allow null values)`)},"validateValue");for(let N=0,C=S.length;N<C;N++){let I=S[N],L=v(p[I.name],I,I.name);L&&(p[I.name]=L)}if(O)throw new mn.ClientError(O.join(". "))}getUpdatedTime(){return this[Rf]}wasLoadedFromSource(){return b?!!this[IT]:void 0}static async addAttributes(p){let O=S.slice(0);for(let v of p){if(!v.name)throw new mn.ClientError("Attribute name is required");if(v.name.match(/[`/]/))throw new mn.ClientError("Attribute names cannot include backticks or forward slashes");O.push(v)}return ut({table:n,database:c,schemaDefined:_,attributes:O}),pt.indexingOperation}static async removeAttributes(p){let O=S.filter(v=>!p.includes(v.name));return ut({table:n,database:c,schemaDefined:_,attributes:O}),pt.indexingOperation}static getRecordCount(p){let O=i.getStats().entryCount,v=5e3,N=1e3,C;O>v&&!p?.exactCount&&(C=N);let I=0;for(let{value:L}of i.getRange({start:!0,lazy:!0,limit:C}))L!=null&&I++;if(C){let L=I;I=0;for(let{value:Kt}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:C}))Kt!=null&&I++;let D=C*2,K=(I+L)/D,j=Math.pow((I-L+1)/C/2,2)+K*(1-K)/D,ce=Math.max(Math.sqrt(j)*O,1),Y=Math.round(K*O),me=Math.max(Y-1.96*ce,0),ye=Math.min(Y+1.96*ce,O),oe=Math.pow(10,Math.round(Math.log10(ce)));return oe>Y&&(oe=oe/10),I=Math.round(Y/oe)*oe,{recordCount:I,estimatedRange:[Math.round(me),Math.round(ye)]}}return{recordCount:I}}static updatedAttributes(){rd(this,this)}static async deleteHistory(p=0){let O;for(let{key:v,value:N}of u.getRange({start:0,end:p}))await tl(),Ur(N).tableId===s&&(O=u.remove(v));await O}static async*getHistory(p=0,O=1/0){for(let{key:v,value:N}of u.getRange({start:p,end:O})){await tl();let C=Ur(N);C.tableId===s&&(yield{id:C.recordId,localTime:v,version:C.version,type:C.type,value:C.getValue(i),user:C.user})}}static async getHistoryOfRecord(p){let O=[],v=i.getEntry(p);if(!v)return O;let N=v.localTime,C=0;do{await tl();let I=u.get(N);if(I){let L=Ur(I);O.push({id:L.recordId,localTime:N,version:L.version,type:L.type,value:L.getValue(i),user:L.user}),N=L.previousLocalTime}else break}while(C<1e3&&N);return O.reverse()}static cleanup(){k?.remove()}}pt.updatedAttributes();let ok=pt.prototype;return ok[zD]=!0,d&&pt.setTTLExpiration(d/1e3),B&&ak(),pt;function G_(z,p,O){let v;for(let N in r){let C=r[N],I=C.isIndexing,L=O?.[N],D=p?.[N];if(L===D&&!I)continue;v=!0;let K=(0,nl.getIndexedValues)(D);if(K){JD&&C.prefetch(K.map(j=>({key:j,value:z})),XD);for(let j=0,ce=K.length;j<ce;j++)C.remove(K[j],z)}if(K=(0,nl.getIndexedValues)(L),K){JD&&C.prefetch(K.map(j=>({key:j,value:z})),XD);for(let j=0,ce=K.length;j<ce;j++)C.put(K[j],z)}}return v}a(G_,"updateIndices");function pN(z,p,O,v,N){let C=a(()=>{p?.transaction?.stale&&(p.transaction.stale=!1);let I=i.getEntry(z,O);return I&&p&&(I?.version>(p.lastModified||0)&&(p.lastModified=I.version),I?.localTime&&!p.lastRefreshed&&(p.lastRefreshed=I.localTime)),N(I,z)},"whenPrefetched");return v?C():ie>0?(ie--,C()):new Promise((I,L)=>{ie===0?(ie--,i.prefetch([z],()=>{D(),K()})):(se.push(z),Ie.push(K),se.length>ik&&(ie--,D()));function D(){if(se.length>0){let j=Ie;i.prefetch(se,()=>{ie===-1?D():ie++;for(let ce of j)ce()}),se=[],Ie=[],Yt>2&&Yt--}else ie=Yt,Yt<nk&&Yt++}a(D,"prefetch");function K(){try{I(C())}catch(j){L(j)}}a(K,"load")})}a(pN,"loadLocalRecord");function Nm(z,p,O,v){if(b){let N;if(O.noCache?N=!0:(p?(!p.value||p.metadataFlags&(Sf|Tf)||p.expiresAt&&p.expiresAt<Date.now())&&(N=!0):N=!0,as(!N,"cache-hit",n)),N){let C=SN(z,p,O).then(I=>(I?.value?.[Ae]&&je.error("Can not assign a record with a record property"),O&&(I?.version>(O.lastModified||0)&&(O.lastModified=I.version),O.lastRefreshed=Date.now()),I));if(O?.onlyIfCached||p?.value&&v?.allowStaleWhileRevalidate?.(p,z)){if(C.catch(I=>je.warn(I)),O?.onlyIfCached&&!v.doesExist())throw new mn.ServerError("Entry is not cached",504);return}else return C}}}a(Nm,"ensureLoadedFromSource");function Ni(z){let p=z?.transaction;if(p){if(!p.open)throw new Error("Can not use a transaction that is not open");if(!p.lmdbDb)return p.lmdbDb=i,p;do{if(p.lmdbDb?.path===i.path)return p;let O=p.next;if(!O)return p=p.next=new go,p.lmdbDb=i,p;p=O}while(!0)}else return new id}a(Ni,"txnForContext");async function SN(z,p,O){let v=p?.metadataFlags,N=p?.version,C,I;if(!i.attemptLock(z,N,()=>{clearTimeout(I);let j=i.getEntry(z);!j||!j.value||j.metadataFlags&(Sf|Tf)?C(SN(z,i.getEntry(z),O)):C(j)}))return new Promise(j=>{C=j,I=setTimeout(()=>{i.unlock(z,N)},j3)});let L=p?.value,D={requestContext:O,replacingRecord:L,replacingVersion:N,source:null,resourceCache:O?.resourceCache},K=O?.responseHeaders;return new Promise((j,ce)=>{let Y;CT(We(D,async me=>{let ye=performance.now(),oe,Kt,sr;try{for(let Lr of pt.sources)if(Lr.get&&(!Lr.get.reliesOnPrototype||Lr.prototype.get)&&(D.source=Lr,oe=await Lr.get(z,D),oe))break;sr=v&Sf;let $e=D.lastModified||sr&&N;Kt=sr||$e>N||!L,$e||($e=(0,nl.getNextMonotonicTime)());let Zs=performance.now()-ye;if(xr(Zs,"cache-resolution",n),K&&K.append("Server-Timing",`cache-resolve;dur=${Zs.toFixed(2)}`),me.timestamp=$e,d&&!D.expiresAt&&(D.expiresAt=Date.now()+d),oe){if(typeof oe!="object")throw new Error("Only objects can be cached and stored in tables");typeof oe.toJSON=="function"&&(oe=oe.toJSON()),t&&oe[t]!==z&&(oe[t]=z)}Y=!0,j({version:$e,value:oe})}catch($e){$e.message+=` while resolving record ${z} for ${n}`,L&&(($e.code==="ECONNRESET"||$e.code==="ECONNREFUSED"||$e.code==="EAI_AGAIN")&&!O?.mustRevalidate||O?.staleIfError&&($e.statusCode===500||$e.statusCode===502||$e.statusCode===503||$e.statusCode===504))?(j({version:N,value:L}),je.trace($e.message,"(returned stale record)")):ce($e),D.transaction.abort();return}if(O?.noCacheStore){D.transaction.abort();return}Ni(D).addWrite({key:z,store:i,entry:p,nodeName:"source",commit:($e,Zs)=>{if(Zs?.version!==N)return;let Lr=G_(z,L,oe);oe?(Pt.put?.(D,z,oe),m(z,oe,Zs,$e,0,E&&Kt||null,D,D.expiresAt,"put",!!sr)):(Pt.delete?.(D,z),E||h?m(z,null,Zs,$e,0,E&&Kt||null,D,0,"delete",!!sr):i.remove(z,N))}})}),()=>{i.unlock(z,N)},me=>{i.unlock(z,N),Y&&je.error("Error committing cache update",me)})})}a(SN,"getFromSource");function bm(){if(Os!==mN&&(mN=Os,(0,Go.getWorkerIndex)()===(0,Go.getWorkerCount)()-1)){if(q_&&clearTimeout(q_),!Os)return;let z=new Date;z.setMonth(0),z.setDate(1),z.setHours(0),z.setMinutes(0),z.setSeconds(0);let p=Math.ceil((Date.now()-z.getTime())/Os)*Os+z.getTime(),O=a(v=>{je.trace(`Scheduled next cleanup scan at ${new Date(v)}ms`),q_=setTimeout(()=>F=F.then(async()=>{if(O(Math.max(v+Os,Date.now())),i.rootStore.status!=="open"){clearTimeout(q_);return}je.trace(`Starting cleanup scan for ${n}`);try{let N=0;for(let{key:C,value:I,version:L,expiresAt:D}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0}))I===null&&!E&&L+Q3<Date.now()?i.remove(C,L):D&&D+f<Date.now()&&(pt.evict(C,I,L),N++),await tl();je.trace(`Finished cleanup scan for ${n}, evicted ${N} entries`)}catch(N){je.trace(`Error in cleanup scan for ${n}:`,N)}}),Math.min(v-Date.now(),2147483647)).unref()},"startNextTimer");O(p)}}a(bm,"scheduleCleanup");function TN(){k=u?.addDeleteRemovalCallback(s,z=>{let p=i.getEntry(z);p?.value===null&&i.remove(z,p.version)})}a(TN,"addDeleteRemoval");function ak(){(0,Go.getWorkerIndex)()===0&&setInterval(async()=>{try{let z=B.name,p=r[z];if(!p)throw new Error(`expiresAt attribute ${B} must be indexed`);for(let{value:O}of p.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let v=i.getEntry(O);v?.value?.[z]<Date.now()&&pt.evict(O,v.value,v.version),await tl()}}catch(z){je.error("Error in evicting old records",z)}},W3).unref()}a(ak,"runRecordExpirationEviction")}function wT(e,t){let r=e.attr_object||(e.attr_object={}),s=r[t];if(s)return s;s=r[t]=Object.create(null);for(let n of e)s[n.attribute_name]=n[t];return s}function XD(){}function J3(e){rP=e}function Af(e,t){let r=t?.type;return e===null?e:r==="Int"||r==="Long"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!z3.test(e)&&(e+="Z"),new Date(e)):r?e:(0,Of.autoCast)(e)}function ZD(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 s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}function CT(e,t,r){return e?.then?e.then(t,r):t(e)}function sl(e,t){e[hn]=t,e[Ae]=t?.value??null,e[Rf]=t?.version}var qs,gf,nl,eP,rl,al,mn,il,ol,je,tP,Go,Of,V3,rP,Y3,K3,W3,Q3,JD,j3,Rf,zD,hn,yT,IT,el,Sf,Tf,dSe,z3,tl,bf=Re(()=>{qs=P(A()),gf=require("lmdb"),nl=P(ar()),eP=require("lodash");Is();Ym();rl=P(Ke()),al=P(Q());ly();mn=P(Z()),il=P($n()),ol=P(Ls());de();ad();je=P(U());nd();Ro();tP=require("ordered-binary"),Go=P(Qe());Aa();Of=P(G());_u();jn();V3=new Uint8Array(9);V3[8]=192;Y3=1e8,K3=1e7,W3=6e4,Q3=864e5;al.initSync();JD=al.get(qs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),j3=1e4,Rf=Symbol.for("version"),zD=Symbol.for("incremental-update"),hn=Symbol("entry"),yT=Symbol("is-saving"),IT=Symbol("loaded-from-source"),el={isNotification:!0,ensureLoaded:!1},Sf=1,Tf=8,dSe=(0,Of.convertToMS)(al.get(qs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Nf,"makeTable");a(wT,"attributesAsObject");a(XD,"noop");a(J3,"setServerUtilities");z3=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Af,"coerceType");a(ZD,"isDescendantId");tl=a(()=>new Promise(setImmediate),"rest");a(CT,"when");a(sl,"updateResource")});var De={};Fe(De,{database:()=>Fu,databases:()=>Je,dropDatabase:()=>vS,dropTableMeta:()=>sX,getDatabases:()=>Ms,getTables:()=>X3,onUpdatedTable:()=>vT,readMetaDb:()=>cl,resetDatabases:()=>Z3,table:()=>ut,tables:()=>$r});function X3(){return Lf||Ms(),$r||{}}function Ms(){if(Lf)return Je;Lf=!0,Ya=new Map;let e=(0,zt.getHdbBasePath)()&&(0,Ye.join)((0,zt.getHdbBasePath)(),Vr.DATABASES_DIR_NAME),t=(0,zt.get)(Vr.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)(Vr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,kr.existsSync)(e)?e:(0,Ye.join)((0,zt.getHdbBasePath)(),Vr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,kr.existsSync)(e))for(let r of(0,kr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Ye.basename)(r.name,".mdb");r.isFile()&&(0,Ye.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&cl((0,Ye.join)(e,r.name),null,s)}if((0,kr.existsSync)((0,Va.getBaseSchemaPath)())){for(let r of(0,kr.readdirSync)((0,Va.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Ye.join)((0,Va.getBaseSchemaPath)(),r.name),n=(0,Ye.join)((0,Va.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,kr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Ye.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Ye.join)(n,i.name);cl((0,Ye.join)(s,i.name),(0,Ye.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,kr.existsSync)(n))for(let o of(0,kr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Ye.extname)(o.name).toLowerCase()===".mdb"&&cl((0,Ye.join)(n,o.name),(0,Ye.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Ye.join)(c.path,(0,Ye.basename)(o+".mdb"));(0,kr.existsSync)(u)&&cl(u,o,r,null,!0)}}for(let r in Je){let s=Ya.get(r);if(s){let n=Je[r];r.includes("delete")&&cs.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(cs.trace(`delete table class ${i}`),delete n[i])}else if(delete Je[r],r==="data"){for(let n in $r)delete $r[n];delete $r[Df]}}return Ya=null,Je}}function Z3(){Lf=!1;for(let[,e]of Gi)e.needsDeletion=!0;Ms();for(let[e,t]of Gi)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Gi.delete(e));return Je}function cl(e,t,r=MT,s,n){let i=new DT.default(e,!1);try{let o=Gi.get(e);o?o.needsDeletion=!1:(o=(0,If.open)(i),Gi.set(e,o));let c=new Fo.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(yf.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,kr.existsSync)(s)&&(i.path=s,_=(0,If.open)(i),_.isLegacy=!0):_=md(o));let l=oP(r),d=l[Df],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[S,m]=E.toString().split("/");m===""?m=h.name:m||(m=S,S=t,h.name||(h.name=m,h.indexed=!h.is_hash_attribute)),d?.add(S);let g=f.get(S);g||f.set(S,g={attributes:[]}),(m==null||h.is_hash_attribute)&&(g.primary=h),m!=null&&g.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:S,primary:m}=h;if(!m){for(let k of S)if(k.is_hash_attribute||k.isPrimaryKey){m=k;break}if(!m){cs.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(S)}`);continue}}let g=l[E],R={},b=[],V,$,F=typeof m.audit=="boolean"?m.audit:(0,zt.get)(Vr.CONFIG_PARAMS.LOGGING_AUDITLOG),w=m.trackDeletes,W=m.expiration,B=m.eviction;if(g)R=g.indices,b=g.attributes,g.schemaVersion++;else{V=m.tableId,V?V>=(u.get($a)||0)&&u.putSync($a,V+1):(m.tableId=V=u.get($a),V||(V=1),u.putSync($a,V+1),u.putSync(m.key,m));let k=new Fo.default(!m.is_hash_attribute,m.is_hash_attribute);$=Ed(o.openDB(m.key,k)),$.rootStore=o,$.tableId=V}for(let k of S){k.attribute=k.name;try{if(!k.is_hash_attribute&&(k.indexed||k.attribute&&!k.name)){if(!R[k.name]){let Ie=new Fo.default(!k.is_hash_attribute,k.is_hash_attribute);R[k.name]=o.openDB(k.key,Ie)}let se=b.find(Ie=>Ie.name===k.name);se?b.splice(b.indexOf(se),1,k):b.push(k)}}catch(se){cs.error("Error trying to update attribute",k,b,R,se)}}if(!g){g=aP(l,E,Nf({primaryStore:$,auditStore:_,audit:F,expirationMS:W&&W*1e3,evictionMS:B&&B*1e3,trackDeletes:w,tableName:E,tableId:V,primaryKey:m.name,databasePath:n?r+"/"+E:r,databaseName:r,indices:R,attributes:S,schemaDefined:m.schemaDefined,dbisDB:u})),g.schemaVersion=1;for(let k of UT)k(g)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function oP(e){let t=Je[e];if(t||(e==="data"?t=Je[e]=$r:e==="system"?Object.defineProperty(Je,"system",{value:t=Object.create(null),configurable:!0}):t=Je[e]=Object.create(null)),Ya&&!Ya.has(e)){let r=new Set;t[Df]=r,Ya.set(e,r)}return t}function aP(e,t,r){return e[t]=r,r}function Fu({database:e,table:t}){e||(e=MT),Ms();let r=oP(e),s=(0,Ye.join)((0,zt.getHdbBasePath)(),Vr.DATABASES_DIR_NAME),n=(0,zt.get)(Vr.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(n.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&n[e]?.tables?.[t]?.path;s=i||n[e]?.path||process.env.STORAGE_PATH||(0,zt.get)(Vr.CONFIG_PARAMS.STORAGE_PATH)||((0,kr.existsSync)(s)?s:(0,Ye.join)((0,zt.getHdbBasePath)(),Vr.LEGACY_DATABASES_DIR_NAME));let o=(0,Ye.join)(s,(i?t:e)+".mdb"),c=Gi.get(o);if(!c){let u=new DT.default(o,!1);c=(0,If.open)(u),Gi.set(o,c)}return c}async function vS(e){if(!Je[e])throw new Error("Schema does not exist");let t=Je[e];for(let r in t){let n=t[r].primaryStore.rootStore;Gi.delete(n.path),n.status==="open"&&(await n.close(),await sP.remove(n.path))}if(e==="data"){for(let r in $r)delete $r[r];delete $r[Df]}delete Je[e]}function ut({table:e,database:t,expiration:r,eviction:s,scanInterval:n,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=MT);let l=Fu({database:t,table:e}),d=Je[t],f=d?.[e];if(l.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,S,m;u==null&&(u=!0);let g=new Fo.default(!1);for(let w of i)w.attribute?(w.name=w.attribute,w.indexed=!0):w.attribute=w.name,w.expiresAt&&(w.indexed=!0);let R,b;if(f){if(E=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let w=l.auditStore;w||(w=md(l)),h=i.find(se=>se.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,zt.get)(Vr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),s&&(h.eviction=s),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),cs.trace(`${e} table loading, opening primary store`);let W=new Fo.default(!1,!0),B=e+"/",k=Ed(l.openDB(B,W));k.rootStore=l,m=l.dbisDb=l.openDB(yf.INTERNAL_DBIS_NAME,g),k.tableId=m.get($a),k.tableId||(k.tableId=1),m.putSync($a,k.tableId+1),h.tableId=k.tableId,f=aP(d,e,Nf({primaryStore:k,auditStore:w,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:s&&s*1e3,primaryKey:E,tableName:e,tableId:k.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:u,dbisDB:m})),f.schemaVersion=1,R=!0,F(),m.put(B,h)}S=f.indices,m=m||(l.dbisDb=l.openDB(yf.INTERNAL_DBIS_NAME,g)),f.dbisDB=m;let V=[];for(let{key:w,value:W}of m.getRange({start:!0})){let[B,k]=w.toString().split("/");if(k===""&&(k=W.name),k){if(B!==e)continue}else k=B;if(!i.find(Ie=>Ie.name===k)?.indexed&&W.indexed&&!W.isPrimaryKey){F(),R=!0,m.remove(w);let Ie=f.indices[B];Ie&&V.push(Ie)}}let $=[];try{for(let w of i||[]){let W=e+"/"+(w.name||"");Object.defineProperty(w,"key",{value:W,configurable:!0});let B=m.get(W);if(w.isPrimaryKey){if(B=B||m.get(W=e+"/")||{},o!==f.audit||(+r||void 0)!==(+B.expiration||void 0)||(+s||void 0)!==(+B.eviction||void 0)){let se=Object.assign({},B);typeof o=="boolean"&&(o&&f.enableAuditing(o),se.audit=o),r&&(se.expiration=+r),s&&(se.eviction=+s),R=!0,F(),m.put(W,se)}continue}B?.attribute&&!B.name&&(B.indexed=!0);let k=!B||B.type!==w.type||B.indexed!==w.indexed||JSON.stringify(B.attributes)!==JSON.stringify(w.attributes)||JSON.stringify(B.elements)!==JSON.stringify(w.elements);if(w.indexed){let se=new Fo.default(!0,!1),Ie=l.openDB(W,se);(k||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<ul.workerData?.restartNumber)&&(R=!0,F(),B=m.get(W),(k||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<ul.workerData?.restartNumber)&&(R=!0,w.lastIndexedKey=B?.lastIndexedKey||!1,w.indexingPID=process.pid,Ie.isIndexing=!0,Object.defineProperty(w,"dbi",{value:Ie}),$.push(w)),m.put(W,w)),S[w.name]=Ie}else k&&(R=!0,F(),m.put(W,w))}}finally{b&&b()}if(R&&(f.schemaVersion++,f.updatedAttributes()),cs.trace(`${e} table loading, running index`),$.length>0||V.length>0?f.indexingOperation=rX(f,$,V):R&&wf.signalSchemaChange(new Cf.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,R)for(let w of UT)w(f,_!=="cluster");return(r||s||n)&&f.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),cs.trace(`${e} table loaded`),f;function F(){b||l.transactionSync(()=>({then(w){b=w}}))}a(F,"startTxn")}async function rX(e,t,r){try{let s=e.schemaVersion;await wf.signalSchemaChange(new Cf.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=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++,n=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,S=(0,nP.getIndexedValues)(l[h]);if(S)for(let m=0,g=S.length;m<g;m++)E.dbi.put(S[m],_)}}),n.then(()=>u--,f=>{u--,cs.error(f)}),ul.workerData&&ul.workerData.restartNumber!==iP.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>eX?await n:u>tX&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,n=e.dbisDB.put(_.key,_)}await n,await wf.signalSchemaChange(new Cf.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){cs.error("Error in indexing",s)}}function sX({table:e,database:t}){let r=Fu({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function vT(e){UT.push(e)}var zt,yf,If,Ye,kr,Va,Fo,DT,Vr,sP,PT,nP,wf,Cf,ul,cs,iP,MT,Df,$r,Je,$a,UT,Lf,Gi,Ya,eX,tX,de=Re(()=>{zt=P(Q()),yf=P(Ke()),If=require("lmdb"),Ye=require("path"),kr=require("fs"),Va=P(Be());bf();Fo=P(pd()),DT=P(Td()),Vr=P(A()),sP=P(require("fs-extra")),PT=require("../index"),nP=P(ar()),wf=P($n()),Cf=P(Ls()),ul=require("worker_threads"),cs=P(U()),iP=P(Qe());Aa();_u();MT="data",Df=Symbol("defined-tables");(0,zt.initSync)();$r=Object.create(null),Je=Object.create(null);(0,PT._assignPackageExport)("databases",Je);(0,PT._assignPackageExport)("tables",$r);$a=Symbol.for("next-table-id"),UT=[],Gi=new Map;a(X3,"getTables");a(Ms,"getDatabases");a(Z3,"resetDatabases");a(cl,"readMetaDb");a(oP,"ensureDB");a(aP,"setTable");a(Fu,"database");a(vS,"dropDatabase");a(ut,"table");eX=1e3,tX=10;a(rX,"runIndexing");a(sX,"dropTableMeta");a(vT,"onUpdatedTable")});var G=T((RSe,RP)=>{"use strict";var Fi=require("path"),dP=require("fs-extra"),hr=U(),cP=require("fs-extra"),Pf=require("os"),nX=require("net"),iX=require("recursive-iterator"),ze=A(),oX=Gm(),uP=require("papaparse"),Mf=require("moment"),{inspect:aX}=require("util"),lP=require("is-number"),gSe=require("lodash"),cX=require("minimist"),uX=require("https"),lX=require("http"),{hdb_errors:Uf}=Z(),_X=/^((\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)))$/,fP=require("util").promisify(setTimeout),dX=100,fX=5,EX="",hX=4,_P={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};RP.exports={isEmpty:Yr,isEmptyOrZeroLength:pn,arrayHasEmptyValues:SX,arrayHasEmptyOrZeroLengthValues:TX,buildFolderPath:gX,isBoolean:EP,errorizeMessage:mX,stripFileExtension:AX,autoCast:OX,autoCastJSON:hP,autoCastJSONDeep:HT,removeDir:NX,compareVersions:bX,isCompatibleDataVersion:yX,escapeRawValue:IX,unescapeValue:wX,stringifyProps:CX,timeoutPromise:DX,isClusterOperation:MX,getClusterUser:vX,checkGlobalSchemaTable:UX,getHomeDir:pP,getPropsFilePath:LX,promisifyPapaParse:BX,removeBOM:SP,createEventPromise:HX,checkProcessRunning:qX,checkSchemaTableExist:GX,checkSchemaExists:TP,checkTableExists:gP,getStartOfTomorrowInSeconds:FX,getLimitKey:xX,isObject:RX,isNotEmptyAndHasValue:pX,autoCasterIsNumberCheck:mP,backtickASTSchemaItems:kX,isPortTaken:PX,createForkArgs:$X,autoCastBoolean:VX,async_set_timeout:fP,getTableHashAttribute:YX,doesSchemaExist:KX,doesTableExist:WX,stringifyObj:QX,ms_to_time:jX,changeExtension:JX,getEnvCliRootPath:qT,noBootFile:zX,httpRequest:XX,transformReq:ZX,convertToMS:eZ,PACKAGE_ROOT:ze.PACKAGE_ROOT};function mX(e){return e instanceof Error?e:new Error(e)}a(mX,"errorizeMessage");function Yr(e){return e==null}a(Yr,"isEmpty");function pX(e){return!Yr(e)&&(e||e===0||e===""||EP(e))}a(pX,"isNotEmptyAndHasValue");function pn(e){return Yr(e)||e.length===0||e.size===0}a(pn,"isEmptyOrZeroLength");function SX(e){if(Yr(e))return!0;for(let t=0;t<e.length;t++)if(Yr(e[t]))return!0;return!1}a(SX,"arrayHasEmptyValues");function TX(e){if(pn(e))return!0;for(let t=0;t<e.length;t++)if(pn(e[t]))return!0;return!1}a(TX,"arrayHasEmptyOrZeroLengthValues");function gX(...e){try{return e.join(Fi.sep)}catch{console.error(e)}}a(gX,"buildFolderPath");function EP(e){return Yr(e)?!1:e===!0||e===!1}a(EP,"isBoolean");function RX(e){return Yr(e)?!1:typeof e=="object"}a(RX,"isObject");function AX(e){return pn(e)?EX:e.slice(0,-hX)}a(AX,"stripFileExtension");function OX(e){return Yr(e)||e===""||typeof e!="string"?e:_P[e]!==void 0?_P[e]:mP(e)===!0?Number(e):_X.test(e)?new Date(e):e}a(OX,"autoCast");function hP(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(hP,"autoCastJSON");function HT(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=HT(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=HT(r);s!==r&&(e[t]=s)}return e}else return hP(e)}a(HT,"autoCastJSONDeep");function mP(e){if(e.startsWith("0.")&&lP(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&lP(e))}a(mP,"autoCasterIsNumberCheck");async function NX(e){if(pn(e))throw new Error(`Directory path: ${e} does not exist`);try{await cP.emptyDir(e),await cP.remove(e)}catch(t){throw hr.error(`Error removing files in ${e} -- ${t}`),t}}a(NX,"removeDir");function bX(e,t){if(pn(e)){hr.info("Invalid current version sent as parameter.");return}if(pn(t)){hr.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").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(bX,"compareVersions");function yX(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(yX,"isCompatibleDataVersion");function IX(e){if(Yr(e))return e;let t=String(e);return t==="."?ze.UNICODE_PERIOD:t===".."?ze.UNICODE_PERIOD+ze.UNICODE_PERIOD:t.replace(ze.FORWARD_SLASH_REGEX,ze.UNICODE_FORWARD_SLASH)}a(IX,"escapeRawValue");function wX(e){if(Yr(e))return e;let t=String(e);return t===ze.UNICODE_PERIOD?".":t===ze.UNICODE_PERIOD+ze.UNICODE_PERIOD?"..":String(e).replace(ze.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(wX,"unescapeValue");function CX(e,t){if(Yr(e))return hr.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+Pf.EOL}!pn(s)&&s[0]===";"?r+=" "+s+n+Pf.EOL:pn(s)||(r+=s+"="+n+Pf.EOL)}catch{hr.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(CX,"stringifyProps");function pP(){let e;try{e=Pf.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(pP,"getHomeDir");function LX(){let e=Fi.join(pP(),ze.HDB_HOME_DIR_NAME,ze.BOOT_PROPS_FILE_NAME);return dP.existsSync(e)||(e=Fi.join(__dirname,"../","hdb_boot_properties.file")),e}a(LX,"getPropsFilePath");function DX(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(DX,"timeoutPromise");async function PX(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=nX.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(PX,"isPortTaken");function MX(e){try{return ze.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){hr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(MX,"isClusterOperation");function UX(e,t){let r=(de(),te(De)).getDatabases();if(!r[e])return Uf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Uf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(UX,"checkGlobalSchemaTable");function vX(e,t){if(Yr(t)){hr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Yr(e)||pn(e)){hr.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){hr.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){hr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(vX,"getClusterUser");function BX(){uP.parsePromise=function(e,t,r){return new Promise(function(s,n){uP.parse(e,{header:!0,transformHeader:SP,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(BX,"promisifyPapaParse");function SP(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(SP,"removeBOM");function HX(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;hr.info(`Got cluster status event response: ${aX(n)}`);try{i.cancel()}catch{hr.error("Error trying to cancel timeout.")}s(n)})})}a(HX,"createEventPromise");async function qX(e){let t=!0,r=0;do await fP(dX*r++),(await oX.findPs(e)).length>0&&(t=!1);while(t&&r<fX);if(t)throw new Error(`process ${e} was not started`)}a(qX,"checkProcessRunning");function GX(e,t){let r=TP(e);if(r)return r;let s=gP(e,t);if(s)return s}a(GX,"checkSchemaTableExist");function TP(e){let{getDatabases:t}=(de(),te(De));if(!t()[e])return Uf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(TP,"checkSchemaExists");function gP(e,t){let{getDatabases:r}=(de(),te(De));if(!r()[e][t])return Uf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(gP,"checkTableExists");function FX(){let e=Mf().utc().add(1,ze.MOMENT_DAYS_TAG).startOf(ze.MOMENT_DAYS_TAG).unix(),t=Mf().utc().unix();return e-t}a(FX,"getStartOfTomorrowInSeconds");function xX(){return Mf().utc().format("DD-MM-YYYY")}a(xX,"getLimitKey");function kX(e){try{let t=new iX(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){hr.error("Got an error back ticking items."),hr.error(t)}}a(kX,"backtickASTSchemaItems");function $X(e){return[e]}a($X,"createForkArgs");function VX(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(VX,"autoCastBoolean");function YX(e,t){let{getDatabases:r}=(de(),te(De)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(YX,"getTableHashAttribute");function KX(e){let{getDatabases:t}=(de(),te(De));return t()[e]!==void 0}a(KX,"doesSchemaExist");function WX(e,t){let{getDatabases:r}=(de(),te(De));return r()[e]?.[t]!==void 0}a(WX,"doesTableExist");function QX(e){try{return JSON.stringify(e)}catch{return e}}a(QX,"stringifyObj");function jX(e){let t=Mf.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(jX,"ms_to_time");function JX(e,t){let r=Fi.basename(e,Fi.extname(e));return Fi.join(Fi.dirname(e),r+t)}a(JX,"changeExtension");function qT(){if(process.env[ze.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[ze.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=cX(process.argv);if(e[ze.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[ze.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(qT,"getEnvCliRootPath");var BT;function zX(){if(BT)return BT;let e=qT();qT()&&dP.pathExistsSync(Fi.join(e,ze.HDB_CONFIG_FILE))&&(BT=!0)}a(zX,"noBootFile");function XX(e,t){let r;return e.protocol==="http:"?r=lX:r=uX,new Promise((s,n)=>{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",()=>{s(c)})});i.on("error",o=>{n(o)}),i.write(JSON.stringify(t)),i.end()})}a(XX,"httpRequest");function ZX(e){if(!e.schema&&!e.database){e.schema=ze.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(ZX,"transformReq");function eZ(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(eZ,"convertToMS")});var Q=T((OSe,NP)=>{"use strict";var GT=require("fs-extra"),Gs=require("path"),AP=require("os"),tZ=require("properties-reader"),ll=U(),xo=G(),re=A(),vf=rt(),rZ="Error initializing environment manager",Bf="BOOT_PROPS_FILE_PATH",OP=!1,sZ={[re.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Jn={};NP.exports={BOOT_PROPS_FILE_PATH:Bf,getHdbBasePath:nZ,setHdbBasePath:iZ,get:oZ,initSync:cZ,setProperty:pe,initTestEnvironment:uZ};function nZ(){return Jn[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(nZ,"getHdbBasePath");function iZ(e){Jn[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(iZ,"setHdbBasePath");function oZ(e){let t=vf.getConfigValue(e);return t===void 0?Jn[e]:t}a(oZ,"get");function pe(e,t){sZ[e]&&(Jn[e]=t),vf.updateConfigObject(e,t)}a(pe,"setProperty");function aZ(){let e;try{e=xo.getPropsFilePath(),GT.accessSync(e,GT.constants.F_OK|GT.constants.R_OK),OP=!0;let t=tZ(e);return Jn[re.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(re.HDB_SETTINGS_NAMES.INSTALL_USER),Jn[re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Jn[Bf]=e,!0}catch{return ll.trace(`Environment manager found no properties file at ${e}`),!1}}a(aZ,"doesPropFileExist");function cZ(e=!1){try{(OP||aZ()||xo.noBootFile())&&(vf.initConfig(e),Jn[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=vf.getConfigValue(re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){ll.error(rZ),ll.error(t),console.error(t),process.exit(1)}}a(cZ,"initSync");function uZ(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=Gs.join(__dirname,"../../","unitTests");Jn[Bf]=Gs.join(u,"hdb_boot_properties.file"),pe(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Gs.join(u,"settings.test")),pe(re.HDB_SETTINGS_NAMES.INSTALL_USER,AP.userInfo()?AP.userInfo().username:void 0),pe(re.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Gs.join(u,"envDir","utility","keys","privateKey.pem")),pe(re.HDB_SETTINGS_NAMES.CERT_KEY,Gs.join(u,"envDir","utility","keys","certificate.pem")),pe(re.CONFIG_PARAMS.TLS_PRIVATEKEY,Gs.join(u,"envDir","utility","keys","privateKey.pem")),pe(re.CONFIG_PARAMS.TLS_CERTIFICATE,Gs.join(u,"envDir","utility","keys","certificate.pem")),pe(re.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),pe(re.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Gs.join(u,"envDir","log")),pe(re.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),pe(re.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),pe(re.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),pe(re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Gs.join(u,"envDir")),pe(re.CONFIG_PARAMS.STORAGE_PATH,Gs.join(u,"envDir")),pe(re.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,xo.isEmpty(n)?!0:n),pe(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,xo.isEmpty(n)?!0:n),pe(re.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),pe(re.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,xo.isEmpty(i)?!1:i),pe(re.CONFIG_PARAMS.HTTP_CORS,xo.isEmpty(i)?!1:i),pe(re.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),pe(re.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),pe(re.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),pe(re.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),pe(re.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Gs.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),pe(re.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,xo.isEmpty(c)?!1:c),o&&(pe("CORS_ACCESSLIST",o),pe(re.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),s&&(pe(re.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),pe(re.CONFIG_PARAMS.HTTP_TIMEOUT,s)),t&&(pe(re.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),pe(re.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(pe(re.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),pe(re.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Bf}. Please check your boot props and settings files`;ll.fatal(r),ll.error(t)}}a(uZ,"initTestEnvironment")});var xT={};Fe(xT,{loadGQLSchema:()=>dZ,start:()=>FT,startOnMainThread:()=>_Z});function FT({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),n)),f=new Map,E=[],h;for(let m of d.definitions)switch(m.kind){case u.OBJECT_TYPE_DEFINITION:let $=function(F){if(F.kind==="NonNullType"){let B=$(F.type);return B.nullable=!1,B}if(F.kind==="ListType")return{type:"array",elements:$(F.type)};let W={type:F.name?.value};return Object.defineProperty(W,"location",{value:F.loc.startToken}),W};a($,"getProperty");let g=m.name.value,R=[],b={table:null,database:null,properties:R};f.set(g,b);for(let F of m.directives){if(F.name.value==="table"){for(let w of F.arguments)b[w.name.value]=w.value.value;b.schema&&(b.database=b.schema),b.table||(b.table=g),b.audit&&(b.audit=b.audit!=="false"),b.attributes=b.properties,E.push(b)}if(F.name.value==="sealed"&&(b.sealed=!0),F.name.value==="export"){b.export=!0;for(let w of F.arguments)w.name.value==="name"&&(b.export={name:w.value.value})}}let V=!1;for(let F of m.fields){let w=$(F.type);w.name=F.name.value,R.push(w);for(let W of F.directives)if(W.name.value==="primaryKey")V?console.warn("Can not define two attributes as a primary key"):(w.isPrimaryKey=!0,V=!0);else if(W.name.value==="indexed")w.indexed=!0;else if(W.name.value==="createdTime")w.assignCreatedTime=!0;else if(W.name.value==="updatedTime")w.assignUpdatedTime=!0;else if(W.name.value==="expiresAt")w.expiresAt=!0;else if(W.name.value==="allow"){let B=w.authorizedRoles=[];for(let k of W.arguments)k.name.value==="role"&&B.push(k.value.value)}}b.typeName=g,g==="Query"&&(h=b)}function S(m){let g=f.get(m.type);g?m.properties=g.properties:m.type==="array"?S(m.elements):lZ.includes(m.type)||(0,bP.getWorkerIndex)()===0&&console.error(`The type ${m.type} is unknown at line ${m.location.line}, column ${m.location.column}, in ${n}`)}a(S,"connectPropertyType");for(let m of f.values())for(let g of m.properties)S(g);for(let m of E)m.tableClass=e(m),m.export&&(m.export.name===""?i.set((0,Hf.dirname)(s),m.tableClass):i.set((0,Hf.dirname)(s)+"/"+(m.export.name||m.typeName),m.tableClass));if(h)for(let m of h.properties){let g=f.get(m.type);if(!g)throw new Error(`${m.type} was not found as a Query export`);i.set((0,Hf.dirname)(s)+"/"+m.name,g.tableClass)}}}var Hf,bP,lZ,_Z,dZ,yP=Re(()=>{Hf=require("path");de();bP=P(Qe()),lZ=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any"];a(FT,"start");_Z=FT,dZ=FT({ensureTable:ut}).handleFile});async function qf(e){return fZ?(_l||(_l=EZ(mZ)),(await(await _l).import(e)).namespace):import(e)}async function EZ(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),_l=new Compartment({console,Math,Date,fetch:hZ,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,wP.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:Mt,tables:$r,databases:Je})}};let s=await(0,IP.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),_l}function hZ(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 mZ(){return{Resource:Mt,tables:$r}}var IP,wP,fZ,_l,kT=Re(()=>{Is();de();IP=require("fs/promises"),wP=require("path"),fZ=!1;a(qf,"secureImport");a(EZ,"getCompartment");a(hZ,"secureOnlyFetch");a(mZ,"getGlobalVars")});var VT={};Fe(VT,{handleFile:()=>pZ});async function pZ(e,t,r,s){let n=new Map,i=(0,CP.pathToFileURL)(r).toString(),o=await qf(i);u(o.default)&&s.set((0,$T.dirname)(t),o.default),c(o,(0,$T.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?s.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"),n}var CP,$T,LP=Re(()=>{CP=require("url");kT();$T=require("path");a(pZ,"handleFile")});var KT={};Fe(KT,{start:()=>SZ});function SZ({resources:e}){e.set("login",YT),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var YT,DP=Re(()=>{Is();a(SZ,"start");YT=class extends Mt{static{a(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:o}=r;return{data:await s.login(n,i)}}}});var QT=T((vSe,UP)=>{"use strict";var{Readable:TZ}=require("stream"),gZ=1e4;UP.exports={streamAsJSON(e){return new WT({value:e})}};var WT=class extends TZ{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0)}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator](),o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){yield"]";return}else n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),PP)}catch(n){yield PP(n)}else yield JSON.stringify(t)}else yield JSON.stringify(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);MP(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>gZ?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 MP(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))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}}};function PP(e){return console.error(e),JSON.stringify(e.toString())}a(PP,"handleError");function MP(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(MP,"when")});var Gf=T((HSe,vP)=>{"use strict";var RZ=is();vP.exports={writeTransaction:AZ};function AZ(e,t,r){return RZ.writeTransaction(e,t,r)}a(AZ,"writeTransaction")});var GP=T((FSe,qP)=>{"use strict";var OZ=_r(),NZ=os(),BP=U(),bZ=dr(),GSe=Gf(),yZ=require("clone"),JT=require("alasql"),IZ=Vd(),HP=require("util"),wZ=HP.promisify(NZ.getTableSchema),CZ=HP.promisify(OZ.search),LZ=A(),jT=G();IZ(JT);qP.exports={update:PZ};var DZ="There was a problem performing this update. Please check the logs and try again.";async function PZ({statement:e,hdb_user:t}){let r=await wZ(e.table.databaseid,e.table.tableid),s=MZ(e.columns);jT.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=yZ(n),c=jT.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=JT.parse(u).statements[0],l=await CZ(_),d=UZ(s,l);return vZ(o,d,t)}a(PZ,"update");function MZ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=JT.compile(`SELECT ${r.expression.toString()} AS [${LZ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw BP.error(t),new Error(DZ)}}a(MZ,"createUpdateRecord");function UZ(e,t){return jT.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(UZ,"buildUpdateRecords");async function vZ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await bZ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){BP.error(`Error delete new_attributes from update response: ${i}`)}return n}a(vZ,"updateRecords")});var xP=T((VSe,FP)=>{var BZ=require("alasql"),HZ=_r(),qZ=U(),GZ=is(),XT=require("util"),zT=G(),FZ=A(),xZ=os(),kSe=Gf(),$Se=dr(),kZ="record",$Z="successfully deleted",VZ=XT.callbackify(QZ),YZ=XT.promisify(HZ.search),KZ=XT.promisify(xZ.getTableSchema);FP.exports={convertDelete:VZ};function WZ(e){return`${e.deleted_hashes.length} ${kZ}${e.deleted_hashes.length===1?"":"s"} ${$Z}`}a(WZ,"generateReturnMessage");async function QZ({statement:e,hdb_user:t}){let r=await KZ(e.table.databaseid,e.table.tableid);zT.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=zT.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=BZ.parse(o).statements[0],u={operation:FZ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await YZ(c);let _=await GZ.deleteRecords(u);return zT.isEmptyOrZeroLength(_.message)&&(_.message=WZ(_)),delete _.txn_time,_}catch(_){throw qZ.error(_),_.hdb_code?_.message:_}}a(QZ,"convertDelete")});var KP=T((KSe,YP)=>{"use strict";var jZ=Mi(),{hdb_errors:kP}=Z(),{getDatabases:$P}=(de(),te(De));YP.exports={checkSchemaExists:VP,checkSchemaTableExists:JZ,schema_describe:jZ};async function VP(e){if(!$P()[e])return kP.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(VP,"checkSchemaExists");async function JZ(e,t){let r=await VP(e);if(r)return r;if(!$P()[e][t])return kP.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(JZ,"checkSchemaTableExists")});var st=T((XSe,_M)=>{"use strict";var qt=Q();qt.initSync();var zZ=require("fs-extra"),XZ=require("semver"),El=require("path"),{monotonicFactory:ZZ}=require("ulidx"),QP=ZZ(),e5=require("util"),jP=require("child_process"),t5=e5.promisify(jP.exec),r5=jP.spawn,Oe=ke(),be=A(),rg=G(),us=U(),Ff=Kn(),s5=Gf(),dl=rt(),{onMessageByType:n5}=Qe(),{isMainThread:i5}=require("worker_threads"),{Encoder:o5,decode:sg}=require("msgpackr"),JP=new o5,{isEmpty:ko}=rg,zP=Er(),a5=48*36e11,c5=5e9;i5&&n5(be.ITC_EVENT_TYPES.RESTART,()=>{Fs=void 0,Qa=void 0});var{connect:u5,StorageType:XP,RetentionPolicy:ZP,AckPolicy:xf,DeliverPolicy:kf,DiscardPolicy:l5,NatsConnection:QSe,JetStreamManager:jSe,JetStreamClient:JSe,StringCodec:zSe,JSONCodec:_5,createInbox:ng,headers:d5,ErrorCode:WP}=require("nats"),{PACKAGE_ROOT:f5}=A(),E5=mo(),{recordAction:h5}=(jn(),te(Zu)),eM=_5(),m5="clustering",p5=E5.engines[Oe.NATS_SERVER_NAME],S5=El.join(f5,"dependencies"),tg=El.join(S5,`${process.platform}-${process.arch}`,Oe.NATS_BINARY_NAME),ZT,eg,fl,Ka,Wa;_M.exports={runCommand:tM,checkNATSServerInstalled:T5,createConnection:ig,getConnection:$f,getJetStreamManager:hl,getJetStream:rM,getNATSReferences:mr,getServerList:R5,createLocalStream:og,listStreams:sM,deleteLocalStream:A5,getServerConfig:ml,listRemoteStreams:O5,viewStream:N5,viewStreamIterator:b5,publishToStream:y5,createWorkQueueStream:I5,addSourceToWorkStream:iM,request:C5,removeSourceFromWorkStream:aM,reloadNATS:ag,reloadNATSHub:L5,reloadNATSLeaf:D5,extractServerName:oM,requestErrorHandler:P5,updateWorkStream:M5,createLocalTableStream:uM,createTableStreams:U5,purgeTableStream:lM,purgeSchemaTableStreams:v5,getStreamInfo:B5,updateLocalStreams:q5,closeConnection:g5,getJsmServerName:pl,addNatsMsgHeader:nM,updateIngestStreamConsumer:w5};async function tM(e,t=void 0){let{stdout:r,stderr:s}=await t5(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
2
|
+
"use strict";var Ek=Object.create;var Wc=Object.defineProperty;var hk=Object.getOwnPropertyDescriptor;var mk=Object.getOwnPropertyNames;var pk=Object.getPrototypeOf,Sk=Object.prototype.hasOwnProperty;var a=(e,t)=>Wc(e,"name",{value:t,configurable:!0});var Re=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Fe=(e,t)=>{for(var r in t)Wc(e,r,{get:t[r],enumerable:!0})},ON=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of mk(t))!Sk.call(e,n)&&n!==r&&Wc(e,n,{get:()=>t[n],enumerable:!(s=hk(t,n))||s.enumerable});return e};var M=(e,t,r)=>(r=e!=null?Ek(pk(e)):{},ON(t||!e||!e.__esModule?Wc(r,"default",{value:e,enumerable:!0}):r,e)),te=e=>ON(Wc({},"__esModule",{value:!0}),e);var yN=T((bde,bN)=>{var Tk=require("fast-glob"),{statSync:wm,existsSync:Cm,readFileSync:gk,writeFileSync:Rk}=require("fs"),{spawnSync:Ak,spawn:Ok,execFileSync:Nde}=require("child_process"),{isMainThread:Nk}=require("worker_threads"),{join:bi,relative:NN}=require("path"),{PACKAGE_ROOT:bs}=R(),{tmpdir:bk,platform:yk}=require("os");require("source-map-support").install();var Ik=["resources","server","dataLayer","components"],Qc="ts-build",Lm,wk=__filename.endsWith("tsBuild.js");if(wk){if(Nk){let r;try{wm(bi(bs,Qc)),r=!0}catch{}if(r)for(let s of Tk.sync(Ik.map(n=>n+"/**/*.ts"),{cwd:bs})){let n=0,i=0;try{n=wm(bi(bs,s)).mtimeMs-5e3,i=wm(bi(bs,Qc,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),Lm=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),Lm=!0;if(Lm){let s=bi(bs,"node_modules/.bin/tsc");yk()==="win32"&&(s+=".cmd");let n=Ak(s,{cwd:bs});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=bi(bk(),"harperdb-tsc.pid"),o;if(Cm(i))try{process.kill(+gk(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=Ok(s,["--watch"],{cwd:bs,detached:!0,stdio:"ignore"});Rk(i,c.pid.toString()),c.unref()}}}}let e=bN.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(bs)&&!s[0].includes("node_modules")){let i=NN(bs,s[0]),o;i.startsWith(Qc)?o=bi(bs,NN(Qc,i)):o=bi(bs,Qc,i);let c=bi(o,r),u=c+".js";if(Cm(u))return u;if(c.includes(".")&&Cm(c))return c}return t(r,s,n)}}});var R=T((wde,FN)=>{"use strict";var es=require("path"),Ck=require("fs"),{relative:yde,join:Ide}=es,{existsSync:Lk}=Ck;function Dk(){let e=__dirname;for(;!Lk(es.join(e,"package.json"));){let t=es.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(Dk,"getHDBPackageRoot");var yi=Dk(),IN="js",x_=IN,Pk="harperdb-config.yaml",Mk="defaultConfig.yaml",Uk="hdb",wN=`harperdb.${x_}`,CN=`customFunctionsServer.${x_}`,vk=`restartHdb.${x_}`,Pm="HarperDB",F_="Custom Functions",k_="Clustering Hub",$_="Clustering Leaf",Bk="Clustering Ingest Service",Hk="Clustering Reply Service",qk="foreground.pid",Gk="hdb.pid",Fk="data",xk={HDB:Pm,CLUSTERING_HUB:k_,CLUSTERING_LEAF:$_,CLUSTERING_INGEST_SERVICE:Bk,CLUSTERING_REPLY_SERVICE:Hk,CUSTOM_FUNCTIONS:F_,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},kk={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},$k={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},Vk={harperdb:Pm,"clustering hub":k_,"clustering leaf":$_,"custom functions":F_,custom_functions:F_,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},Yk={CLUSTERING_HUB_PROC_DESCRIPTOR:k_,CLUSTERING_LEAF_PROC_DESCRIPTOR:$_},Dm={HDB:es.join(yi,"server/harperdb"),CUSTOM_FUNCTIONS:es.join(yi,"server/customFunctions"),CLUSTERING_HUB:es.join(yi,"server/nats"),CLUSTERING_LEAF:es.join(yi,"server/nats")},Kk={HDB:es.join(Dm.HDB,wN),CUSTOM_FUNCTIONS:es.join(Dm.CUSTOM_FUNCTIONS,CN)},Wk={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:es.join(yi,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:es.join(yi,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:es.join(yi,"launchServiceScripts/launchUpdateNodes4-0-0.js")},Qk={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},LN="support@harperdb.io",jk="customer-success@harperdb.io",DN=1,zk=4141,PN="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",Jk="https://www.harperdb.io/product",Xk=`For support, please submit a request at ${PN} or contact ${LN}`,MN=`For license support, please contact ${jk}`,Zk="None of the specified records were found.",e$="hash attribute not found",t$=`Your current license only supports ${DN} role. ${MN}`,r$="Your current license only supports 3 connections to a node.",s$="127.0.0.1",n$=1,i$=/^\.$/,o$=/^\.\.$/,a$="U+002E",c$=/\//g,u$="U+002F",l$=/U\+002F/g,_$=/^U\+002E$/,d$=/^U\+002EU\+002E$/,f$="d",E$=999999,h$="*",m$="--max-old-space-size=",p$="system",S$="__hdb_hash",T$=".harperdb",g$=".hdb",R$="keys",A$="hdb_boot_properties.file",O$=".updateConfig.json",N$="SIGTSTP",b$=24,y$=6e4,I$=448,w$="blob",C$="trash",L$="database",D$="schema",P$="transactions",M$=".count",U$="id",v$="PROCESS_NAME",UN={SETTINGS_PATH_KEY:"settings_path"},vN=require("lodash"),B$={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},H$={HDB_PATH_KEY:"HDB_INTERNAL_PATH",HDB_AUTH_HEADER:"hdb_auth_header",HDB_USER_DATA_KEY:"hdb_user",CHUNK_SIZE:1e3,MAX_CHARACTER_SIZE:250},q$={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},G$={JOB_TABLE_NAME:"hdb_job",NODE_TABLE_NAME:"hdb_nodes",ATTRIBUTE_TABLE_NAME:"hdb_attribute",LICENSE_TABLE_NAME:"hdb_license",ROLE_TABLE_NAME:"hdb_role",SCHEMA_TABLE_NAME:"hdb_schema",TABLE_TABLE_NAME:"hdb_table",USER_TABLE_NAME:"hdb_user",INFO_TABLE_NAME:"hdb_info"},F$={JOB_TABLE_HASH_ATTRIBUTE:"id",NODE_TABLE_HASH_ATTRIBUTE:"name",ATTRIBUTE_TABLE_HASH_ATTRIBUTE:"id",LICENSE_TABLE_HASH_ATTRIBUTE:"license_key",ROLE_TABLE_HASH_ATTRIBUTE:"id",SCHEMA_TABLE_HASH_ATTRIBUTE:"name",TABLE_TABLE_HASH_ATTRIBUTE:"id",USER_TABLE_HASH_ATTRIBUTE:"username",INFO_TABLE_ATTRIBUTE:"info_id"},Dr="hdb_internal:",x$={CREATE_SCHEMA:Dr+"create_schema",CREATE_TABLE:Dr+"create_table",CREATE_ATTRIBUTE:Dr+"create_attribute",ADD_USER:Dr+"add_user",ALTER_USER:Dr+"alter_user",DROP_USER:Dr+"drop_user",HDB_NODES:Dr+"hdb_nodes",HDB_USERS:Dr+"hdb_users",HDB_WORKERS:Dr+"hdb_workers",CATCHUP:Dr+"catchup",SCHEMA_CATCHUP:Dr+"schema_catchup",WORKER_ROOM:Dr+"cluster_workers"},k$={ATTR_ATTRIBUTE_KEY:"attribute",ATTR_CREATEDDATE_KEY:"createddate",ATTR_HASH_ATTRIBUTE_KEY:"hash_attribute",ATTR_ID_KEY:"id",ATTR_NAME_KEY:"name",ATTR_PASSWORD_KEY:"password",ATTR_RESIDENCE_KEY:"residence",ATTR_ROLE_KEY:"role",ATTR_SCHEMA_KEY:"schema",ATTR_SCHEMA_TABLE_KEY:"schema_table",ATTR_TABLE_KEY:"table",ATTR_USERNAME_KEY:"username"},$$="060493.ks",V$=".license",Y$={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},J={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup"},K$={CSV:".csv",JSON:".json"},W$={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},Q$={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},jc={};jc[J.INSERT]=J.INSERT;jc[J.UPDATE]=J.UPDATE;jc[J.UPSERT]=J.UPSERT;jc[J.DELETE]=J.DELETE;var we=Object.create(null);we[J.DESCRIBE_ALL]=J.DESCRIBE_ALL;we[J.DESCRIBE_TABLE]=J.DESCRIBE_TABLE;we[J.DESCRIBE_SCHEMA]=J.DESCRIBE_SCHEMA;we[J.READ_LOG]=J.READ_LOG;we[J.ADD_NODE]=J.ADD_NODE;we[J.LIST_USERS]=J.LIST_USERS;we[J.LIST_ROLES]=J.LIST_ROLES;we[J.USER_INFO]=J.USER_INFO;we[J.SQL]=J.SQL;we[J.GET_JOB]=J.GET_JOB;we[J.SEARCH_JOBS_BY_START_DATE]=J.SEARCH_JOBS_BY_START_DATE;we[J.DELETE_FILES_BEFORE]=J.DELETE_FILES_BEFORE;we[J.EXPORT_LOCAL]=J.EXPORT_LOCAL;we[J.EXPORT_TO_S3]=J.EXPORT_TO_S3;we[J.CLUSTER_STATUS]=J.CLUSTER_STATUS;we[J.REMOVE_NODE]=J.REMOVE_NODE;we[J.RESTART]=J.RESTART;we[J.CUSTOM_FUNCTIONS_STATUS]=J.CUSTOM_FUNCTIONS_STATUS;we[J.GET_CUSTOM_FUNCTIONS]=J.GET_CUSTOM_FUNCTIONS;we[J.GET_CUSTOM_FUNCTION]=J.GET_CUSTOM_FUNCTION;we[J.SET_CUSTOM_FUNCTION]=J.SET_CUSTOM_FUNCTION;we[J.DROP_CUSTOM_FUNCTION]=J.DROP_CUSTOM_FUNCTION;we[J.ADD_CUSTOM_FUNCTION_PROJECT]=J.ADD_CUSTOM_FUNCTION_PROJECT;we[J.DROP_CUSTOM_FUNCTION_PROJECT]=J.DROP_CUSTOM_FUNCTION_PROJECT;we[J.PACKAGE_CUSTOM_FUNCTION_PROJECT]=J.PACKAGE_CUSTOM_FUNCTION_PROJECT;we[J.DEPLOY_CUSTOM_FUNCTION_PROJECT]=J.DEPLOY_CUSTOM_FUNCTION_PROJECT;var j$={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},z$={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},BN={HDB_ROOT_KEY:"HDB_ROOT",SERVER_PORT_KEY:"SERVER_PORT",CERT_KEY:"CERTIFICATE",PRIVATE_KEY_KEY:"PRIVATE_KEY",HTTP_SECURE_ENABLED_KEY:"HTTPS_ON",CORS_ENABLED_KEY:"CORS_ON",CORS_WHITELIST_KEY:"CORS_WHITELIST",LOG_LEVEL_KEY:"LOG_LEVEL",LOGGER_KEY:"LOGGER",LOG_PATH_KEY:"LOG_PATH",LOG_ROTATE:"LOG_ROTATE",LOG_ROTATE_MAX_SIZE:"LOG_ROTATE_MAX_SIZE",LOG_ROTATE_RETAIN:"LOG_ROTATE_RETAIN",LOG_ROTATE_COMPRESS:"LOG_ROTATE_COMPRESS",LOG_ROTATE_DATE_FORMAT:"LOG_ROTATE_DATE_FORMAT",LOG_ROTATE_ROTATE_MODULE:"LOG_ROTATE_ROTATE_MODULE",LOG_ROTATE_WORKER_INTERVAL:"LOG_ROTATE_WORKER_INTERVAL",LOG_ROTATE_ROTATE_INTERVAL:"LOG_ROTATE_ROTATE_INTERVAL",LOG_ROTATE_TIMEZONE:"LOG_ROTATE_TIMEZONE",LOG_DAILY_ROTATE_KEY:"LOG_DAILY_ROTATE",LOG_MAX_DAILY_FILES_KEY:"LOG_MAX_DAILY_FILES",PROPS_ENV_KEY:"NODE_ENV",SETTINGS_PATH_KEY:"settings_path",CLUSTERING_PORT_KEY:"CLUSTERING_PORT",CLUSTERING_NODE_NAME_KEY:"NODE_NAME",CLUSTERING_ENABLED_KEY:"CLUSTERING",ALLOW_SELF_SIGNED_SSL_CERTS:"ALLOW_SELF_SIGNED_SSL_CERTS",MAX_HDB_PROCESSES:"MAX_HDB_PROCESSES",INSTALL_USER:"install_user",CLUSTERING_USER_KEY:"CLUSTERING_USER",MAX_CLUSTERING_PROCESSES:"MAX_CLUSTERING_PROCESSES",SERVER_TIMEOUT_KEY:"SERVER_TIMEOUT_MS",SERVER_KEEP_ALIVE_TIMEOUT_KEY:"SERVER_KEEP_ALIVE_TIMEOUT",SERVER_HEADERS_TIMEOUT_KEY:"SERVER_HEADERS_TIMEOUT",DISABLE_TRANSACTION_LOG_KEY:"DISABLE_TRANSACTION_LOG",OPERATION_TOKEN_TIMEOUT_KEY:"OPERATION_TOKEN_TIMEOUT",REFRESH_TOKEN_TIMEOUT_KEY:"REFRESH_TOKEN_TIMEOUT",CUSTOM_FUNCTIONS_ENABLED_KEY:"CUSTOM_FUNCTIONS",CUSTOM_FUNCTIONS_PORT_KEY:"CUSTOM_FUNCTIONS_PORT",CUSTOM_FUNCTIONS_DIRECTORY_KEY:"CUSTOM_FUNCTIONS_DIRECTORY",MAX_CUSTOM_FUNCTION_PROCESSES:"MAX_CUSTOM_FUNCTION_PROCESSES",LOG_TO_FILE:"LOG_TO_FILE",LOG_TO_STDSTREAMS:"LOG_TO_STDSTREAMS",RUN_IN_FOREGROUND:"RUN_IN_FOREGROUND",LOCAL_STUDIO_ON:"LOCAL_STUDIO_ON",STORAGE_WRITE_ASYNC:"STORAGE_WRITE_ASYNC"},J$=vN.invert(BN),X$={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},y={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",ROOTPATH:"rootPath",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority"},HN={settings_path:UN.SETTINGS_PATH_KEY,hdb_root_key:y.ROOTPATH,hdb_root:y.ROOTPATH,rootpath:y.ROOTPATH,server_port_key:y.OPERATIONSAPI_NETWORK_PORT,server_port:y.OPERATIONSAPI_NETWORK_PORT,cert_key:y.TLS_CERTIFICATE,certificate:y.TLS_CERTIFICATE,private_key_key:y.TLS_PRIVATEKEY,private_key:y.TLS_PRIVATEKEY,http_secure_enabled_key:y.OPERATIONSAPI_NETWORK_HTTPS,https_on:y.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:y.OPERATIONSAPI_NETWORK_CORS,cors_on:y.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:y.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:y.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:y.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:y.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:y.LOGGING_LEVEL,log_level:y.LOGGING_LEVEL,log_path_key:y.LOGGING_ROOT,log_path:y.LOGGING_ROOT,clustering_node_name_key:y.CLUSTERING_NODENAME,node_name:y.CLUSTERING_NODENAME,clustering_enabled_key:y.CLUSTERING_ENABLED,clustering:y.CLUSTERING_ENABLED,max_http_threads:y.THREADS,max_hdb_processes:y.THREADS,server_timeout_key:y.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:y.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:y.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:y.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:y.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:y.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:y.LOGGING_AUDITLOG,disable_transaction_log:y.LOGGING_AUDITLOG,operation_token_timeout_key:y.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:y.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:y.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:y.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:y.HTTP_PORT,custom_functions_port:y.HTTP_PORT,custom_functions_directory_key:y.COMPONENTSROOT,custom_functions_directory:y.COMPONENTSROOT,max_custom_function_processes:y.THREADS,log_to_file:y.LOGGING_FILE,log_to_stdstreams:y.LOGGING_STDSTREAMS,local_studio_on:y.LOCALSTUDIO_ENABLED,clustering_port:y.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:y.CLUSTERING_USER,clustering_enabled:y.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:y.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:y.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:y.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:y.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:y.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:y.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:y.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:y.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:y.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:y.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:y.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:y.CLUSTERING_NODENAME,clustering_tls_certificate:y.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:y.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:y.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:y.CLUSTERING_TLS_INSECURE,clustering_tls_verify:y.CLUSTERING_TLS_VERIFY,clustering_loglevel:y.CLUSTERING_LOGLEVEL,clustering_republishmessages:y.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:y.CLUSTERING_DATABASELEVEL,customfunctions_network_port:y.HTTP_PORT,customfunctions_tls_certificate:y.TLS_CERTIFICATE,customfunctions_network_cors:y.HTTP_CORS,customfunctions_network_corsaccesslist:y.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:y.HTTP_HEADERSTIMEOUT,customfunctions_network_https:y.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:y.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:y.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:y.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:y.HTTP_TIMEOUT,http_threads:y.THREADS,threads:y.THREADS,http_session_affinity:y.HTTP_SESSIONAFFINITY,http_compressionthreshold:y.HTTP_COMPRESSIONTHRESHOLD,http_cors:y.HTTP_CORS,http_corsaccesslist:y.HTTP_CORSACCESSLIST,http_headerstimeout:y.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:y.HTTP_KEEPALIVETIMEOUT,http_timeout:y.HTTP_TIMEOUT,http_port:y.HTTP_PORT,http_secureport:y.HTTP_SECUREPORT,customfunctions_processes:y.THREADS,customfunctions_root:y.COMPONENTSROOT,localstudio_enabled:y.LOCALSTUDIO_ENABLED,logging_file:y.LOGGING_FILE,logging_level:y.LOGGING_LEVEL,logging_root:y.LOGGING_ROOT,logging_rotation_enabled:y.LOGGING_ROTATION_ENABLED,logging_rotation_compress:y.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:y.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:y.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:y.LOGGING_ROTATION_PATH,logging_stdstreams:y.LOGGING_STDSTREAMS,logging_auditlog:y.LOGGING_AUDITLOG,logging_auditretention:y.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:y.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:y.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:y.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:y.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:y.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:y.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:y.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:y.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:y.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:y.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_secureport:y.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:y.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:y.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:y.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:y.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:y.ROOTPATH,databases:y.DATABASES,storage_path:y.STORAGE_PATH,ignorescripts:y.IGNORE_SCRIPTS,mqtt_network_port:y.MQTT_NETWORK_PORT,mqtt_websocket:y.MQTT_WEBSOCKET,mqtt_network_secureport:y.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:y.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:y.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:y.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:y.AUTHENTICATION_CACHETTL,authentication_enablesessions:y.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:y.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:y.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:y.COMPONENTSROOT,tls_certificate:y.TLS_CERTIFICATE,tls_privatekey:y.TLS_PRIVATEKEY,tls_certificateauthority:y.TLS_CERTIFICATEAUTHORITY};for(let e in y){let t=y[e];HN[t.toLowerCase()]=t}var Z$={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},eV={csv_file_load:"csv_file_load",csv_data_load:J.CSV_DATA_LOAD,csv_url_load:J.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},tV={CLUSTERING_PAYLOAD:"clustering_payload",DELEGATE_THREAD_RESPONSE:"delegate_thread_response",CLUSTERING:"clustering",SCHEMA:"schema",CLUSTER_STATUS:"cluster_status",JOB:"job",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",USER:"user",RESTART:"restart"},rV={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},sV={VERSION_DEFAULT:"2.2.0"},nV={DEVELOPMENT:8192,DEFAULT:512},iV={IDENTIFY:"identify",AUTHENTICATE:"authenticate",AUTHENTICATE_OK:"authenticated",AUTHENTICATE_FAIL:"authenticate_fail",CONNECTION:"connection",CONNECT:"connect",CATCHUP_REQUEST:"catchup_request",CATCHUP_RESPONSE:"catchup",CONFIRM_MSG:"confirm_msg",ERROR:"error",DISCONNECT:"disconnect",SCHEMA_UPDATE_REQ:"schema_update_request",SCHEMA_UPDATE_RES:"schema_update_response",RECONNECT_ATTEMPT:"reconnect_attempt",CONNECT_ERROR:"connect_error",MESSAGE:"msg",VERSION_MISMATCH:"version_mismatch",DIRECTION_CHANGE:"direction_change"},oV={1e3:"SUCCESSFUL_SHUTDOWN",1001:"CLOSE_GOING_AWAY",1002:"CLOSE_PROTOCOL_ERROR",1003:"CLOSE_UNSUPPORTED",1005:"CLOSE_NO_STATUS",1006:"CLOSE_ABNORMAL",1007:"UNSUPPORTED_PAYLOAD",1008:"POLICY_VIOLATION",1009:"CLOSE_TOO_LARGE",1010:"MANDATORY_EXTENSION",1011:"SERVER_ERROR",1012:"SERVICE_RESTART",1013:"SERVER_BUSY",1014:"BAD_GATEWAY",1015:"HANDSHAKE_FAIL",4141:"LICENSE_LIMIT_REACHED"},aV={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},qN={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},cV=Symbol("metadata"),uV="__clustering__",lV=Object.values(qN),_V=15984864e5,GN={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},dV=vN.invert(GN),fV={GET_CLUSTER_STATUS:"GET_CLUSTER_STATUS",CLUSTER_STATUS_RESPONSE:"CLUSTER_STATUS_RESPONSE",ERROR_RESPONSE:"ERROR",ADD_USER:"ADD_USER",ALTER_USER:"ALTER_USER",DROP_USER:"DROP_USER",HDB_OPERATION:"HDB_OPERATION",ADD_NODE:"ADD_NODE",UPDATE_NODE:"UPDATE_NODE",REMOVE_NODE:"REMOVE_NODE",HDB_USERS_MSG:"HDB_USERS_MSG",HDB_WORKERS:"HDB_WORKERS",HDB_TRANSACTION:"HDB_TRANSACTION"},EV=111,hV=`\r
|
|
3
|
+
`,mV={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},pV=["*","%"],SV="unauthorized_access",TV="func_val",gV={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},RV={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},AV={SHUTDOWN:"shutdown",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request",METRICS:"metrics",GET_METRICS:"get_metrics",RESTART:"restart"},OV={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},NV={HTTP:"http"},bV={STOPPED:"stopped",ONLINE:"online"},yV="3.x.x",IV={SUCCESS:"success",FAILURE:"failure"},wV={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};FN.exports={LOCAL_HARPERDB_OPERATIONS:we,HDB_SUPPORT_ADDRESS:LN,HDB_SUPPORT_URL:PN,HDB_PRICING_URL:Jk,SUPPORT_HELP_MSG:Xk,LICENSE_HELP_MSG:MN,HDB_PROC_NAME:wN,HDB_PROC_DESCRIPTOR:Pm,CLUSTERING_LEAF_PROC_DESCRIPTOR:$_,CLUSTERING_HUB_PROC_DESCRIPTOR:k_,SYSTEM_SCHEMA_NAME:p$,HASH_FOLDER_NAME:S$,HDB_HOME_DIR_NAME:T$,UPDATE_FILE_NAME:O$,LICENSE_KEY_DIR_NAME:R$,BOOT_PROPS_FILE_NAME:A$,JOB_TYPE_ENUM:eV,JOB_STATUS_ENUM:Y$,SYSTEM_TABLE_NAMES:G$,SYSTEM_TABLE_HASH_ATTRIBUTES:F$,OPERATIONS_ENUM:J,VALID_S3_FILE_TYPES:K$,S3_BUCKET_AUTH_KEYS:W$,VALID_SQL_OPS_ENUM:Q$,GEO_CONVERSION_ENUM:z$,HDB_SETTINGS_NAMES:BN,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:J$,SERVICE_ACTIONS_ENUM:j$,CLUSTER_MESSAGE_TYPE_ENUM:tV,CLUSTER_CONNECTION_DIRECTION_ENUM:rV,CLUSTER_EVENTS_DEFS_ENUM:iV,PERIOD_REGEX:i$,DOUBLE_PERIOD_REGEX:o$,UNICODE_PERIOD:a$,FORWARD_SLASH_REGEX:c$,UNICODE_FORWARD_SLASH:u$,ESCAPED_FORWARD_SLASH_REGEX:l$,ESCAPED_PERIOD_REGEX:_$,ESCAPED_DOUBLE_PERIOD_REGEX:d$,REG_KEY_FILE_NAME:$$,RESTART_TIMEOUT_MS:y$,HDB_FILE_PERMISSIONS:I$,DATABASES_DIR_NAME:L$,LEGACY_DATABASES_DIR_NAME:D$,TRANSACTIONS_DIR_NAME:P$,LIMIT_COUNT_NAME:M$,ID_ATTRIBUTE_STRING:U$,INSERT_MODULE_ENUM:H$,UPGRADE_JSON_FIELD_NAMES_ENUM:q$,RESTART_CODE:N$,RESTART_CODE_NUM:b$,CLUSTER_OPERATIONS:jc,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:k$,HDB_INTERNAL_SC_CHANNEL_PREFIX:Dr,INTERNAL_SC_CHANNELS:x$,CLUSTERING_MESSAGE_TYPES:fV,HDB_FILE_SUFFIX:g$,BLOB_FOLDER_NAME:w$,HDB_TRASH_DIR:C$,ORIGINATOR_SET_VALUE:EV,LICENSE_VALUES:sV,RAM_ALLOCATION_ENUM:nV,TIME_STAMP_NAMES_ENUM:qN,TIME_STAMP_NAMES:lV,PERMS_UPDATE_RELEASE_TIMESTAMP:_V,SEARCH_NOT_FOUND_MESSAGE:Zk,SEARCH_ATTRIBUTE_NOT_FOUND:e$,LICENSE_ROLE_DENIED_RESPONSE:t$,LICENSE_MAX_CONNS_REACHED:r$,BASIC_LICENSE_MAX_NON_CU_ROLES:DN,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:zk,VALUE_SEARCH_COMPARATORS:GN,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:dV,LICENSE_FILE_NAME:V$,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:oV,NEW_LINE:hV,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:n$,MOMENT_DAYS_TAG:f$,API_TURNOVER_SEC:E$,LOOPBACK:s$,CODE_EXTENSION:x_,WILDCARD_SEARCH_VALUE:h$,NODE_ERROR_CODES:aV,JAVASCRIPT_EXTENSION:IN,PERMS_CRUD_ENUM:mV,UNAUTHORIZED_PERMISSION_NAME:SV,SEARCH_WILDCARDS:pV,FUNC_VAL:TV,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:gV,JWT_ENUM:RV,CLUSTERING_FLAG:uV,ITC_EVENT_TYPES:AV,CUSTOM_FUNCTION_PROC_NAME:CN,CUSTOM_FUNCTION_PROC_DESCRIPTOR:F_,SERVICES:OV,THREAD_TYPES:NV,MEM_SETTING_KEY:m$,HDB_RESTART_SCRIPT:vk,PROCESS_DESCRIPTORS:xk,SERVICE_SERVERS:Kk,SERVICE_SERVERS_CWD:Dm,PROCESS_DESCRIPTORS_VALIDATE:Vk,LAUNCH_SERVICE_SCRIPTS:Wk,LOG_LEVELS:$k,PROCESS_NAME_ENV_PROP:v$,LOG_NAMES:kk,PM2_PROCESS_STATUSES:bV,CONFIG_PARAM_MAP:HN,CONFIG_PARAMS:y,HDB_CONFIG_FILE:Pk,HDB_DEFAULT_CONFIG_FILE:Mk,ROLE_TYPES_ENUM:Qk,BOOT_PROP_PARAMS:UN,INSTALL_PROMPTS:B$,HDB_ROOT_DIR_NAME:Uk,CLUSTERING_PROCESSES:Yk,FOREGROUND_PID_FILE:qk,PACKAGE_ROOT:yi,PRE_4_0_0_VERSION:yV,DATABASES_PARAM_CONFIG:Z$,METADATA_PROPERTY:cV,AUTH_AUDIT_STATUS:IV,AUTH_AUDIT_TYPES:wV,HDB_PID_FILE:Gk,DEFAULT_DATABASE_NAME:Fk,LEGACY_CONFIG_PARAMS:X$};yN()});var Eo=T((Lde,$N)=>{"use strict";var xN=require("minimist");$N.exports=CV;function CV(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=kN(process.env),s=kN(xN(process.argv))):(r=process.env,s=xN(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let c=e[i];s[c]!==void 0?n[c]=s[c].toString().trim():r[c]!==void 0&&(n[c]=r[c].toString().trim())}return n}a(CV,"assignCMDENVVariables");function kN(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(kN,"objKeysToLowerCase")});var v=T((Pde,Gm)=>{"use strict";var ho=require("fs-extra"),{workerData:LV,threadId:DV}=require("worker_threads"),Bn=require("path"),KN=require("yaml"),WN=require("properties-reader"),St=R(),VN=Eo(),PV=require("os"),{PACKAGE_ROOT:Um}=R(),{_assignPackageExport:MV}=require("../index"),Jc={};for(let e in console)Jc[e]||(Jc[e]=console[e]);var ir={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},QN={STDOUT:"stdOut",STDERR:"stdErr"},UV=Bn.join(Um,"logs"),vV=Bn.join(Um,"config/yaml/",St.HDB_DEFAULT_CONFIG_FILE),BV=1e4,vn,en,nr,V_,Y_,Xc,pa,zc;zc===void 0&&jN();Gm.exports={notify:XN,fatal:ZN,error:Zc,warn:qm,info:K_,debug:Hm,trace:Bm,setLogLevel:$V,log_level:nr,loggerWithTag:HV,suppressLogging:qV,initLogSettings:jN,setupConsoleLogging:zN,logCustomLevel:xV,closeLogFile:vm,getLogFilePath:()=>Xc,OUTPUTS:QN,AuthAuditLog:KV};MV("logger",Gm.exports);function jN(e=!1){try{if(zc===void 0||e){vm();let t=kV(),r=VN(["ROOTPATH"]);try{zc=WN(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!ho.pathExistsSync(Bn.join(r.ROOTPATH,St.HDB_CONFIG_FILE)))throw s}({level:nr,config_log_path:Y_,to_file:vn,to_stream:en}=VV(r.ROOTPATH?Bn.join(r.ROOTPATH,St.HDB_CONFIG_FILE):zc.get("settings_path"))),V_=St.LOG_NAMES.HDB,Xc=Bn.join(Y_,V_)}}catch(t){if(zc=void 0,t.code===St.NODE_ERROR_CODES.ENOENT){let r=VN(Object.keys(St.CONFIG_PARAM_MAP),!0);for(let o in r){let c=St.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===St.CONFIG_PARAMS.LOGGING_LEVEL){nr=u;continue}if(c===St.CONFIG_PARAMS.LOGGING_STDSTREAMS){en=u;continue}c===St.CONFIG_PARAMS.LOGGING_FILE&&(vn=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=YV();vn=vn===void 0?n:vn,vn=YN(vn),en=en===void 0?i:en,en=YN(en),nr=nr===void 0?s:nr,Y_=UV,V_=St.LOG_NAMES.INSTALL,Xc=Bn.join(Y_,V_);return}throw Zc("Error initializing log settings"),Zc(t),t}process.env.DEV_MODE&&(en=!0),zN()}a(jN,"initLogSettings");var Mm=!0;function zN(){ma("error",Zc),ma("warn",qm),ma("log",K_),ma("info",K_),ma("debug",Hm),ma("trace",Bm)}a(zN,"setupConsoleLogging");function ma(e,t){console[e]=function(...r){if(Mm&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Jc[e](...r)}}a(ma,"logConsole");function HV(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(XN),fatal:r(ZN),error:r(Zc),warn:r(qm),info:r(K_),debug:r(Hm),trace:r(Bm)};function r(s){return function(...n){return s(t,...n)}}}a(HV,"loggerWithTag");function qV(e){try{Mm=!1,e()}finally{Mm=!0}}a(qV,"suppressLogging");var GV=LV?.name?.replace(/ /g,"-")||"main";function Hn(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,o=[e],c=0,u;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(u=t[0]?.serviceName,c++)),o.unshift(u||GV+"/"+DV);c<n;c++){let _=t[c];_ instanceof Error&&_.stack?s+=_.stack:typeof _=="object"?s+=JSON.stringify(_):s+=_,c<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
|
|
4
|
+
`}a(Hn,"createLogRecord");function eu(e){vn&&JN(e),en&&process.stdout.write(e)}a(eu,"logStdOut");function W_(e){vn&&JN(e),en&&process.stderr.write(e)}a(W_,"logStdErr");function JN(e){FV(),pa?ho.appendFileSync(pa,e):Jc.log(e)}a(JN,"logToFile");function vm(){try{ho.closeSync(pa)}catch{}pa=null}a(vm,"closeLogFile");function FV(){if(!pa){try{if(!Xc)debugger;pa=ho.openSync(Xc,"a")}catch(e){Jc.error(e)}setTimeout(()=>{vm()},BV).unref()}}a(FV,"openLogFile");function K_(...e){ir[nr]<=ir.info&&eu(Hn("info",e))}a(K_,"info");function Bm(...e){ir[nr]<=ir.trace&&eu(Hn("trace",e))}a(Bm,"trace");function Zc(...e){ir[nr]<=ir.error&&W_(Hn("error",e))}a(Zc,"error");function Hm(...e){ir[nr]<=ir.debug&&eu(Hn("debug",e))}a(Hm,"debug");function XN(...e){ir[nr]<=ir.notify&&eu(Hn("notify",e))}a(XN,"notify");function ZN(...e){ir[nr]<=ir.fatal&&W_(Hn("fatal",e))}a(ZN,"fatal");function qm(...e){ir[nr]<=ir.warn&&W_(Hn("warn",e))}a(qm,"warn");function xV(e,t,...r){t===QN.STDERR?W_(Hn(e,r)):eu(Hn(e,r))}a(xV,"logCustomLevel");function kV(){let e;try{e=PV.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Bn.join(e,St.HDB_HOME_DIR_NAME,St.BOOT_PROPS_FILE_NAME);return ho.existsSync(t)||(t=Bn.join(Um,"utility/hdb_boot_properties.file")),t}a(kV,"getPropsFilePath");function $V(e){nr=e}a($V,"setLogLevel");function YN(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(YN,"autoCastBoolean");function VV(e){try{if(e.includes("config/settings.js")){let o=WN(e);return{level:o.get(St.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Bn.dirname(o.get(St.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(St.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(St.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=KN.parseDocument(ho.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===St.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(VV,"getLogConfig");function YV(){try{let e=KN.parseDocument(ho.readFileSync(vV,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),s=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:s}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(YV,"getDefaultConfig");function KV(e,t,r,s,n,i){this.username=e,this.status=t,this.type=r,this.originating_ip=s,this.request_method=n,this.path=i}a(KV,"AuthAuditLog")});var mo=T((Ude,WV)=>{WV.exports={name:"harperdb",version:"4.2.0",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.3","nats-server":"2.10.3"},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: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: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:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","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.425.0","@aws-sdk/lib-storage":"3.418.0","@endo/static-module-record":"^0.8.1","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.4.0","@fastify/cors":"~8.4.0","@fastify/static":"~6.11.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4","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.23.2","fastify-plugin":"~4.5.0","fs-extra":"11.1.1",graphql:"^16.8.0","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.9.0-beta.2",lodash:"4.17.21",mathjs:"11.11.1",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.0",msgpackr:"1.9.9",nats:"2.17.0",needle:"3.2.0","node-stream-zip":"1.15.0","node-unix-socket":"^0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.15.6",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0",ses:"^0.18.1","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.10","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"^8.14.1",yaml:"2.3.2"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"0.27.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.2.2","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 po=T((vde,eb)=>{"use strict";eb.exports={version:QV,printVersion:jV};var Q_=mo();function QV(){if(Q_)return Q_.version}a(QV,"version");function jV(){Q_&&console.log(`HarperDB Version ${Q_.version}`)}a(jV,"printVersion")});var sb=T((Hde,rb)=>{"use strict";var tb=require("semver/functions/major"),zV=mo(),Fm=process.versions&&process.versions.node?process.versions.node:void 0;rb.exports=JV;function JV(){let e=zV.engines["minimum-node"];if(Fm&&tb(Fm)<tb(e))return{error:`The minimum version of Node.js HarperDB supports is: ${e}, the currently installed Node.js version is: ${Fm}. Please install a version of Node.js that is withing the defined range.`}}a(JV,"checkNodeVersion")});var So={};Fe(So,{server:()=>Tt});var nb,Tt,Pr=Re(()=>{nb=require("../index"),Tt={};(0,nb._assignPackageExport)("server",Tt)});var xm=T((Gde,ib)=>{"use strict";var XV=require("util"),ZV=require("path"),eY=require("child_process"),tY=XV.promisify(eY.execFile),rY=1e3*1e3*10;ib.exports={findPs:sY};async function sY(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await tY("ps",["wwxo",`pid,${r}`],{maxBuffer:rY});for(let n of s.trim().split(`
|
|
5
|
+
`).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:ZV.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(sY,"findPs")});var Ke=T((xde,ab)=>{"use strict";var nY="__dbis__",iY="__txns__",oY="__environment_name__",aY="__dbi_defintion__",cY={EQUALS:"equals",STARTS_WITH:"startsWith",_STARTS_WITH:"starts_with",ENDS_WITH:"endsWith",_ENDS_WITH:"ends_with",CONTAINS:"contains",SEARCH_ALL:"searchAll",SEARCH_ALL_TO_MAP:"searchAllToMap",BATCH_SEARCH_BY_HASH:"batchSearchByHash",BATCH_SEARCH_BY_HASH_TO_MAP:"batchSearchByHashToMap",GREATER_THAN:"greaterThan",_GREATER_THAN:"greater_than",GREATER_THAN_EQUAL:"greaterThanEqual",_GREATER_THAN_EQUAL:"greater_than_equal",LESS_THAN:"lessThan",_LESS_THAN:"less_than",LESS_THAN_EQUAL:"lessThanEqual",_LESS_THAN_EQUAL:"less_than_equal",BETWEEN:"between"},uY=["__createdtime__","__updatedtime__"],lY="\uFFFF",ob={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},_Y=Object.values(ob);ab.exports={AUDIT_STORE_NAME:iY,INTERNAL_DBIS_NAME:nY,DBI_DEFINITION_NAME:aY,SEARCH_TYPES:cY,TIMESTAMP_NAMES:uY,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:oY,TRANSACTIONS_DBI_NAMES_ENUM:ob,TRANSACTIONS_DBIS:_Y,OVERFLOW_MARKER:lY}});var Mr=T((kde,mb)=>{"use strict";var cb=R(),ub=Ke(),lb={CONTINUE:100,OK:200,CREATED:201,BAD_REQUEST:400,UNAUTHORIZED:401,FORBIDDEN:403,NOT_FOUND:404,METHOD_NOT_ALLOWED:405,REQUEST_TIMEOUT:408,CONFLICT:409,TOO_MANY_REQUESTS:429,INTERNAL_SERVER_ERROR:500,NOT_IMPLEMENTED:501,BAD_GATEWAY:502,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504,HTTP_VERSION_NOT_SUPPORTED:505,INSUFFICIENT_STORAGE:507,NETWORK_AUTHENTICATION_REQUIRED:511},_b=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),db={500:_b("There was an error processing your request."),400:"Invalid request"},dY=db[lb.INTERNAL_SERVER_ERROR],fY={OP_NOT_SUPPORTED_FOR_FS:e=>`${e} is not available for this instance because it uses the File System data store.`,MISSING_VALUE:e=>`${e} is missing.`,INVALID_VALUE:e=>`${e} is invalid.`,NOT_FOUND:e=>`${e} not found.`},EY={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},hY={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:e=>`There was an error downloading '${e}'.`,INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,INVALID_FILE_EXT_ERR:e=>`Error selecting correct parser - valid file type not found in json - ${e}`,MAX_FILE_SIZE_ERR:(e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:e=>`There was an error downloading '${e}' from AWS.`,WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},mY={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${ub.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${ub.INTERNAL_DBIS_NAME}`,START_VALUE_REQUIRED:"start_value is required",END_VALUE_REQUIRED:"end_value is required",CANNOT_COMPARE_STRING_TO_NUMERIC_KEYS:"cannot compare a string to numeric keys",END_VALUE_MUST_BE_GREATER_THAN_START_VALUE:"end_value must be greater than or equal to start_value",UNKNOWN_SEARCH_TYPE:"unknown search type",CANNOT_DROP_TABLE_HASH_ATTRIBUTE:"cannot drop a table's hash attribute"},pY={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${cb.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes.`,ATTR_NAME_NULLISH_ERR:"transaction aborted due to record(s) with an attribute name that is null, undefined or empty string",HASH_VAL_LENGTH_ERR:`transaction aborted due to record(s) with a hash value that exceeds ${cb.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes, check log for more info`,INVALID_FORWARD_SLASH_IN_HASH_ERR:"transaction aborted due to record(s) with a hash value that contains a forward slash, check log for more info",RECORD_MISSING_HASH_ERR:"transaction aborted due to record(s) with no hash value, check log for more info"},fb={GENERIC_AUTH_FAIL:"Login failed",USER_INACTIVE:"Cannot complete request: User is inactive",INVALID_TOKEN:"invalid token",NO_ENCRYPTION_KEYS:"unable to generate JWT as there are no encryption keys. please contact your administrator",INVALID_CREDENTIALS:"invalid credentials",PASSWORD_REQUIRED:"password is required",USERNAME_REQUIRED:"username is required",REFRESH_TOKEN_REQUIRED:"refresh_token is required",INVALID_AUTH_OBJECT:"invalid auth_object",INVALID_BODY:"invalid body",TOKEN_EXPIRED:"token expired",REFRESH_TOKEN_SAVE_FAILED:"unable to store refresh_token"},SY={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:e=>`Operation '${e}' is restricted to 'super_user' roles`,OP_NOT_FOUND:e=>`Operation '${e}' not found`,SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:(e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,USER_HAS_NO_PERMS:e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},TY={ATTR_PERM_MISSING:(e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:(e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:e=>`Invalid attribute '${e}' in 'attribute_permissions'`,INVALID_PERM_KEY:e=>`Invalid table permission key value '${e}'`,INVALID_ATTR_PERM_KEY:e=>`Invalid attribute permission key value '${e}'`,INVALID_ROLE_JSON_KEYS:e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,MISMATCHED_TABLE_ATTR_PERMS:e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:e=>`A role with name '${e}' already exists`,ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:e=>`Your role does not have permission to view database metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:e=>`Value for '${e}' permission must be a boolean`,STRUCTURE_USER_ROLE_TYPE_ERROR:e=>`Value for '${e}' permission must be a boolean or Array`,SU_CU_ROLE_NO_PERMS_ALLOWED:e=>`Roles with '${e}' set to true cannot have other permissions set.`,SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:e=>`Missing table ${e.toUpperCase()} permission`,TABLE_PERM_NOT_BOOLEAN:e=>`Table ${e.toUpperCase()} permission must be a boolean`},gY={ATTR_NOT_FOUND:(e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,ATTR_EXISTS_ERR:(e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:e=>`Invalid table ${JSON.stringify(e)}`,SCHEMA_NOT_FOUND:e=>`database '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`database '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in '${e}'`,SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},RY={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},AY={ALTER_USER_DUP_ROLES:e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,ALTER_USER_ROLE_NOT_FOUND:e=>`Update failed. Requested '${e}' role not found.`,DUP_ROLES_FOUND:e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,ROLE_NAME_NOT_FOUND:e=>`${e} role not found`,USER_ALREADY_EXISTS:e=>`User ${e} already exists`,USER_NOT_EXIST:e=>`User ${e} does not exist`},Eb={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`},hb={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:e=>`ITC server received invalid event type: ${e}`},OY={FUNCTION_STATUS:"Error getting custom function status, check the log for more details",GET_FUNCTIONS:"Error getting custom functions, check the log for more details",GET_FUNCTION:"Error getting custom function, check the log for more details",SET_FUNCTION:"Error setting custom function, check the log for more details",NO_PROJECT:"Project does not exist. Create one using 'add_custom_function_project'",PROJECT_EXISTS:"Project already exists",VALIDATION_ERR:"Error validating request, check the log for more details",NO_FILE:"File does not exist",BAD_FILE_NAME:"File name can only contain alphanumeric, dash and underscore characters",BAD_PROJECT_NAME:"Project name can only contain alphanumeric, dash and underscores characters",BAD_PACKAGE:"Packaged project must be base64-encoded tar file of project directory",DROP_FUNCTION:"Error dropping custom function, check the log for more details",ADD_FUNCTION:"Error adding custom function project, check the log for more details",DROP_FUNCTION_PROJECT:"Error dropping custom function project, check the log for more details",BAD_FILE_PATH:"Filepath must be valid, and contain the name of the tarball you wish to write",NOT_ENABLED:"Custom functions is not enabled, to enable set fastifyRoutes enabled to true in hdb/harperdb-config.yaml file."},NY={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},bY={...fb,...hY,...fY,...SY,...TY,...gY,...RY,...AY,...pY,...Eb,...hb,...OY,...NY,...EY};mb.exports={CHECK_LOGS_WRAPPER:_b,HDB_ERROR_MSGS:bY,DEFAULT_ERROR_MSGS:db,DEFAULT_ERROR_RESP:dY,HTTP_STATUS_CODES:lb,LMDB_ERRORS_ENUM:mY,AUTHENTICATION_ERROR_MSGS:fb,VALIDATION_ERROR_MSGS:Eb,ITC_ERRORS:hb}});var Z=T((Vde,Tb)=>{"use strict";var Sa=Mr(),yY=v(),IY=R(),j_=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,pb),this.statusCode=s||Sa.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Sa.DEFAULT_ERROR_MSGS[s]?Sa.DEFAULT_ERROR_MSGS[s]:Sa.DEFAULT_ERROR_MSGS[Sa.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&yY[n](i)}},km=class extends Error{static{a(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},$m=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function pb(e,t,r,s=IY.LOG_LEVELS.ERROR,n=null,i=!1){if(Sb(e))return e;let o=new j_(e,t,r,s,n);return i&&delete o.stack,o}a(pb,"handleHDBError");function Sb(e){return e.__proto__.constructor.name===j_.name}a(Sb,"isHDBError");Tb.exports={isHDBError:Sb,handleHDBError:pb,ClientError:km,ServerError:$m,hdb_errors:Sa}});var Be=T((Kde,yb)=>{"use strict";var iu=R(),wY=G(),or=j(),ou=require("path"),CY=require("minimist"),gb=require("fs-extra"),Rb=require("lodash");or.initSync();var{CONFIG_PARAMS:Ii,DATABASES_PARAM_CONFIG:tu,SYSTEM_SCHEMA_NAME:z_}=iu,ru,su,nu;function Ab(){if(ru!==void 0)return ru;if(or.getHdbBasePath()!==void 0)return ru=or.get(Ii.STORAGE_PATH)||ou.join(or.getHdbBasePath(),iu.DATABASES_DIR_NAME),ru}a(Ab,"getBaseSchemaPath");function Ob(){if(su!==void 0)return su;if(or.getHdbBasePath()!==void 0)return su=bb(z_),su}a(Ob,"getSystemSchemaPath");function Nb(){if(nu!==void 0)return nu;if(or.getHdbBasePath()!==void 0)return nu=or.get(iu.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||ou.join(or.getHdbBasePath(),iu.TRANSACTIONS_DIR_NAME),nu}a(Nb,"getTransactionAuditStoreBasePath");function LY(e,t){let r=or.get(Ii.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||ou.join(Nb(),e.toString())}a(LY,"getTransactionAuditStorePath");function bb(e,t){e=e.toString(),t=t&&t.toString();let r=or.get(iu.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||ou.join(Ab(),e)}a(bb,"getSchemaPath");function DY(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,CY(process.argv));let s=r[Ii.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!wY.isObject(s))throw o;i=s}for(let o of i){let c=o[z_];if(!c)continue;let u=or.get(Ii.DATABASES);u=u??{};let _=c?.tables?.[t]?.[tu.PATH];if(_)return Rb.set(u,[z_,tu.TABLES,t,tu.PATH],_),or.setProperty(Ii.DATABASES,u),_;let l=c?.[tu.PATH];if(l)return Rb.set(u,[z_,tu.PATH],l),or.setProperty(Ii.DATABASES,u),l}}let n=r[Ii.STORAGE_PATH.toUpperCase()];if(n){if(!gb.pathExistsSync(n))throw new Error(n+" does not exist");let i=ou.join(n,e);return gb.mkdirsSync(i),or.setProperty(Ii.STORAGE_PATH,n),i}return Ob()}a(DY,"initSystemSchemaPaths");function PY(){ru=void 0,su=void 0,nu=void 0}a(PY,"resetPaths");yb.exports={getBaseSchemaPath:Ab,getSystemSchemaPath:Ob,getTransactionAuditStorePath:LY,getTransactionAuditStoreBasePath:Nb,getSchemaPath:bb,initSystemSchemaPaths:DY,resetPaths:PY}});var ar=T((zde,Db)=>{"use strict";var MY=Mr().LMDB_ERRORS_ENUM,Qde=require("lmdb"),UY=Ke(),jde=require("buffer").Buffer,{OVERFLOW_MARKER:Ib,MAX_SEARCH_KEY_LENGTH:J_}=UY,wb=["number","string","symbol","boolean","bigint"];function vY(e){if(e=e?.primaryStore||e,!e)throw new Error(MY.ENV_REQUIRED)}a(vY,"validateEnv");function BY(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(BY,"stringifyData");function HY(e){return e instanceof Date?e.valueOf():e}a(HY,"convertKeyValueToWrite");function qY(e){if(e==null)return;if(wb.includes(typeof e))return e.length>J_?[e.slice(0,J_)+Ib]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(wb.includes(typeof n))n.length>J_?t.push(n.slice(0,J_)+Ib):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(qY,"getIndexedValues");var X_=0,Cb=0;function Lb(){Cb=Date.now()-performance.now()}a(Lb,"adjustStartTime");Lb();var GY=6e4;setInterval(Lb,GY).unref();function FY(){let e=performance.now()+Cb;return e>X_?(X_=e,e):(X_+=488e-6,X_)}a(FY,"getNextMonotonicTime");Db.exports={validateEnv:vY,stringifyData:BY,convertKeyValueToWrite:HY,getNextMonotonicTime:FY,getIndexedValues:qY}});var Pb,ys,Vm,au=Re(()=>{Pb=require("events"),ys=class extends Pb.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new Vm;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){return this.queue?.shift()}on(t,r){if(t==="data"&&!this.hasDataListeners)for(this.hasDataListeners=!0;this.queue?.length>0;)r(this.queue.shift());return super.on(t,r)}},Vm=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function ts(e){return e[Wt]||(e[Wt]=Object.create(null))}function rd(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u;switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new Is.ClientError(`${c} must be a string, attempt to assign ${l}`);ts(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new Is.ClientError(`${c} must be a string, attempt to assign ${l}`);ts(this)[c]=l},"set");break;case"Float":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new Is.ClientError(`${c} must be a number, attempt to assign ${l}`);ts(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new Is.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);ts(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new Is.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);ts(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new Is.ClientError(`${c} must be a boolean, attempt to assign ${l}`);ts(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new Is.ClientError(`${c} must be a Date, attempt to assign ${l}`);ts(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new Is.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);ts(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){ts(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new Is.ClientError(`${c} must be an object, attempt to assign ${l}`);ts(this)[c]=l},"set")}let _=s[c]={get(){let l=this[Wt];if(l&&c in l)return l[c];let d=this[Ae]?.[c];if(d&&typeof d=="object"){let f=Mb(d,o);if(f)return l||(l=this[Wt]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0};_.get.isAttribute=!0,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[Wt];return u?.[o]!==void 0?u[o]:this[Ae]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new Is.ClientError("Can not add a property to a sealed table schema");ts(this)[o]=c}),i("deleteProperty",function(o){ts(this)[o]=void 0}),i("toJSON",function(){let o=this[Wt],c;for(let _ in o)c||(c=Object.assign({},this[Ae])),c[_]=o[_];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[Ae])),Object.assign(c,this)),c||this[Ae]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function Mb(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(n){this[Ae]=n}},rd(r,t)),new r(e)):new Z_(e);case Array:let s=new td(e.length);s[Ae]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=Mb(o,t?.elements)),s[n]=o}return s}}function sd(e){let t=e[Wt],r;for(let n in t){r||(r=Object.assign({},e[Ae]));let i=t[n];i&&typeof i=="object"&&(i=sd(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Ae])),Object.assign(r,e)),r||e[Ae]}function cu(e){let t;if(e[Ae]&&e.constructor===Array&&!Object.isFrozen(e)){t=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=cu(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[Wt];for(let s in r){t||(t=Object.assign({},e[Ae]));let n=r[s];n&&typeof n=="object"&&(n=cu(n)),t[s]=n}return t?Object.freeze(t):e[Ae]||(e.buffer?e:Object.freeze(e))}function ed(e){let t=e[Ae];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[To]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[Ae]===n){if(ed(i))return!0}else return!0}}else{let r=e[Wt];if(r&&!t)return!0;for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[Ae]===i){if(ed(n))return!0}else return!0}else return!0}}return!1}var Is,Wt,Z_,To,td,nd=Re(()=>{ws();Is=M(Z()),Wt=Symbol("own-data");a(ts,"getChanges");a(rd,"assignTrackedAccessors");a(Mb,"trackObject");Z_=class{static{a(this,"GenericTrackedObject")}constructor(t){this[Ae]=t}};rd(Z_,{});a(sd,"collapseData");a(cu,"deepFreeze");a(ed,"hasChanges");To=Symbol.for("has-array-changes"),td=class extends Array{static{a(this,"TrackedArray")}[To];constructor(t){super(t)}splice(...t){return this[To]=!0,super.splice(...t)}push(...t){return this[To]=!0,super.push(...t)}pop(){return this[To]=!0,super.pop()}unshift(...t){return this[To]=!0,super.unshift(...t)}shift(){return this[To]=!0,super.shift()}};td.prototype.constructor=Array});function VY(){$Y=setInterval(function(){for(let e of Ym)if(e.stale){let t=e[Se]?.url;Ub.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.resetReadSnapshot()}else e.stale=!0},kY).unref()}var Km,Ub,xY,Ym,go,id,kY,$Y,Wm=Re(()=>{Km=M(ar()),Ub=M(v());ws();xY=100,Ym=new Set,go=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;validated=0;timestamp=0;open=!0;getReadTxn(){return this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn?this.readTxn:(this.readTxn=this.lmdbDb.useReadTransaction(),Ym.add(this),this.readTxn)}disregardReadTxn(){--this.readTxnRefCount===0&&this.resetReadSnapshot()}resetReadSnapshot(){this.readTxn&&(Ym.delete(this),this.readTxn.done(),this.readTxn=null)}addWrite(t){this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,Km.getNextMonotonicTime)());let s=t.retries||0;if(this.resetReadSnapshot(),this.validated<this.writes.length){let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{for(let f=0;f<2;f++){let E;for(let h=l;h<this.validated;h++){let p=this.writes[h];if(!p)continue;let S=p[f===0?"before":"beforeIntermediate"];if(S){let A=S();E?E.push?E.push(A):E=[E,A]:E=A}}E&&await(E.push?Promise.all(E):E)}return this.commit(t)})()}t?.close&&(this.open=!1);let n,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,s)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){s>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);n=n||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<xY>>s?u():n=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),n)return n.then(l=>l?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),Promise.all(i).then(()=>(this.writes=[],{txnTime:r}))):(t?t.retries=s+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(){this.resetReadSnapshot(),this.writes=[]}},id=class extends go{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Km.getNextMonotonicTime)())}getReadTxn(){}},kY=3e4;a(VY,"startMonitoringTxns");VY()});function We(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let s=e.transaction=new go;e.timestamp&&(s.timestamp=e.timestamp),s[Se]=e,e.resourceCache||(e.resourceCache=[]);let n;try{if(n=t(s),n?.then)return n.then(i,o)}catch(c){o(c)}return i(n);function i(c){let u=s.commit({close:!0});return u.then?u.then(()=>(r?.resetTransaction&&(e.transaction=null),c)):(r?.resetTransaction&&(e.transaction=null),c)}function o(c){throw s.abort(),r?.resetTransaction&&(e.transaction=null),c}}var vb,Ro=Re(()=>{vb=require("../index");ws();Wm();a(We,"transaction");(0,vb._assignPackageExport)("transaction",We);We.commit=function(e){let t=(e[Se]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};We.abort=function(e){let t=(e[Se]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function zm(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,_,l=e[1]??e.value;l instanceof Date&&(l=l.getTime());let d=e.comparator,f;switch(qb[d]||d){case"lt":o=!0,c=l;break;case"le":o=!0,c=l,u=!0;break;case"gt":o=l,_=!0;break;case"ge":o=l;break;case"prefix":o=l,c=l.slice(0),c[c.length-1]=rn.MAXIMUM_KEY;break;case"starts_with":o=l.toString(),c=l+String.fromCharCode(65535);break;case"between":o=l[0],o instanceof Date&&(o=o.getTime()),c=l[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case bt.SEARCH_TYPES.EQUALS:case void 0:o=l,c=l,u=!0;break;case"ne":case"contains":case"ends_with":f=!0;break}if(r){let S=o;o=c,c=S,S=!_,_=!u,u=S}let E=i===s.primaryKey||i==null,h=E?s.primaryStore:s.indices[i];if(!h||h.isIndexing||f){if(!n)throw new Qm.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let S=Jm(e);if(!S)throw new Qm.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:A,value:g})=>new Promise((O,V)=>setImmediate(()=>{try{O(g&&S(g)?A:Hb.SKIP)}catch($){V($)}})))}let p={start:o,end:c,inclusiveEnd:u,exclusiveStart:_,values:!E,transaction:t,reverse:r};return E?h.getRange(p):h.getRange(p).map(({value:S})=>S)}function Jm(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),qb[t]||t){case bt.SEARCH_TYPES.EQUALS:case void 0:return tn(r,n=>n===s);case bt.SEARCH_TYPES.CONTAINS:return tn(r,n=>n?.toString().includes(s));case bt.SEARCH_TYPES.ENDS_WITH:case bt.SEARCH_TYPES._ENDS_WITH:return tn(r,n=>n?.toString().endsWith(s));case bt.SEARCH_TYPES.STARTS_WITH:case bt.SEARCH_TYPES._STARTS_WITH:return tn(r,n=>typeof n=="string"&&n.startsWith(s));case bt.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),tn(r,n=>(0,rn.compareKeys)(n,s[0])>=0&&(0,rn.compareKeys)(n,s[1])<=0);case"gt":case bt.SEARCH_TYPES.GREATER_THAN:case bt.SEARCH_TYPES._GREATER_THAN:return tn(r,n=>(0,rn.compareKeys)(n,s)>0);case"ge":case bt.SEARCH_TYPES.GREATER_THAN_EQUAL:case bt.SEARCH_TYPES._GREATER_THAN_EQUAL:return tn(r,n=>(0,rn.compareKeys)(n,s)>=0);case bt.SEARCH_TYPES.LESS_THAN:case"lt":case bt.SEARCH_TYPES._LESS_THAN:return tn(r,n=>(0,rn.compareKeys)(n,s)<0);case"le":case bt.SEARCH_TYPES.LESS_THAN_EQUAL:case bt.SEARCH_TYPES._LESS_THAN_EQUAL:return tn(r,n=>(0,rn.compareKeys)(n,s)<=0);case"ne":return tn(r,n=>(0,rn.compareKeys)(n,s)!==0);default:return}}function tn(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function od(e){if(!e)return;let t=new jm,r,s,n,i,o,c=Bb;for(;r=c.exec(e);){i=c.lastIndex;let[,u,_]=r;switch(_){case")":case")&":switch(o){case"limit":if(u.indexOf(",")>-1){let[l,d]=u.split(",");t.offset=+l,t.limit=d-t.offset}else t.limit=+u;break;case"select":if(u[0]==="["){if(u[u.length-1]!=="]")throw new Error("Unmatched brackets");t.select=u.slice(1,-1).split(","),t.select.asArray=!0}else u.indexOf(",")>-1?t.select=(u.endsWith(",")?u.slice(0,-1):u).split(","):t.select=u;break;case"group-by":throw new Error("Group by is not implemented yet");case"sort":t.sort=u.split(",").map(l=>{switch(l[0]){case"-":return{attribute:l.slice(1),descending:!0};case"+":return{attribute:l.slice(1),descending:!1};default:return{attribute:l,descending:!1}}});break;default:throw new Error(`Unknown query function call ${o}`)}s=void 0;break;case"(":o=u;break;case"=":s?u.length<=2&&(n=u):(n="equals",s=decodeURIComponent(u));break;case"!=":case"<":case"<=":case">":case">=":n=YY[_],s=decodeURIComponent(u);break;case"=*":n="ends_with",s=decodeURIComponent(u);break;case"*":case"*&":t.conditions.push({comparator:n==="ends_with"?"contains":"starts_with",attribute:s,value:decodeURIComponent(u)}),s=null;break;case"":case void 0:case"&":case"|":if(!s)throw new Error(`Unable to parse query, no part before ${_} at ${i} in ${e}`);t.conditions.push({comparator:n,attribute:s,value:decodeURIComponent(u)}),s=void 0;break;default:throw new Error(`Unknown operator ${_} in query ${e}`)}c=s?KY:Bb,c.lastIndex=i}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var Qm,bt,rn,Hb,YY,qb,Bb,KY,jm,ad=Re(()=>{Qm=M(Z()),bt=M(Ke()),rn=require("ordered-binary"),Hb=require("lmdb"),YY={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(zm,"idsForCondition");qb={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(Jm,"filterByType");a(tn,"attributeComparator");Bb=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,KY=/([^&|*=]+)([&|*=]*)/g;a(od,"parseQuery");jm=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let s=this.conditions[r];if(s.attribute===t)return s.value}}}});var ep={};Fe(ep,{CONTEXT:()=>Se,ID_PROPERTY:()=>Le,IS_COLLECTION:()=>sn,RECORD_PROPERTY:()=>Ae,Resource:()=>Mt,SAVE_UPDATES_PROPERTY:()=>Vb,snake_case:()=>QY});function QY(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function Gb(e,t){if(e=e.slice(1),e.indexOf("/")===-1)return e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e));let r=e.split("/"),s=new Zm(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function rs(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,_;if(r?o?(_=i,o=o[Se]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(_=n,c=_[this.primaryKey]??null,o=i[Se]||i):_=i:(_=n,c=_[Le]??_[this.primaryKey]??null):i?o=i[Se]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[];for(let f of n){if(typeof f=="object"&&f)break;c.push(f)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null)))}else{if(typeof(c=n.url)=="string"){let f=c.indexOf("?");if(f>-1){let h=this.parseQuery(c.slice(f+1));u?u=Object.assign(h,u):u=h,c=c.slice(0,f)}let E=this.parsePath(c,o,u);E?.query?(u=E.query,c=E.id):c=E}c===void 0&&(c=n.id??null)}else c=n??null;o||(o={});let l;if(u?.ensureLoaded!=null||u?.async?(l=Object.assign({},t),u?.ensureLoaded!=null&&(l.ensureLoaded=u.ensureLoaded),u.async&&(l.async=u.async)):l=t,o.transaction){let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)}else return We(o,()=>{let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)},l);function d(f){if(t.type==="read"&&(f[Vb]=!1),o.authorize){o.authorize=!1;let E=t.type==="read"?f.allowRead(o.user,o):t.type==="update"?f.doesExist?.()===!1?f.allowCreate(o.user,o):f.allowUpdate(o.user,o):t.type==="create"?f.allowCreate(o.user,o):f.allowDelete(o.user,o);if(E?.then)return E.then(h=>{if(!h)throw new cd(o.user);return typeof _?.then=="function"?_.then(p=>e(f,u,o,p)):e(f,u,o,_)});if(!E)throw new cd(o.user)}return typeof _?.then=="function"?_.then(E=>e(f,u,o,E)):e(f,u,o,_)}a(d,"authorizeActionOnResource")}}function ss(e,t){let r=new $b.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let s of["get","put","post","delete","query","move","copy"])typeof e[s]=="function"&&r.allow.push(s);throw r}function Xm(e){let t=e[Ae];if(t){let r=e[Wt];return s=>{let n;return e.hasOwnProperty(s)&&typeof(n=e[s])!="function"?n:r&&s in r?r[s]:t[s]}}else return r=>e[r]}function Fb(e){if(typeof e=="string")return t=>Xm(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=Xm(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=Xm(r);for(let i of e){let o=n(i);o===void 0&&t&&(o=null),s[i]=o}return s}}else throw new Error("Invalid select argument type "+typeof e)}var xb,kb,$b,Se,Le,sn,Vb,Ae,WY,Mt,cd,Zm,ws=Re(()=>{xb=require("crypto");au();kb=require("../index"),$b=M(Z());nd();Ro();ad();Se=Symbol.for("context"),Le=Symbol.for("primary-key"),sn=Symbol("is-collection"),Vb=Symbol("save-updates"),Ae=Symbol("stored-record"),WY={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Mt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Le]=t;let s=r?.[Se];this[Se]=s!==void 0?s:r||null}static get=rs(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null){let _=Fb(u);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=rs(function(t,r,s,n){if(Array.isArray(n)&&t[sn]){let i=[],o=s.authorize;for(let c of n){let u=t.constructor,_=u.getResource(c[u.primaryKey],s,{async:!0});_.then?i.push(_.then(l=>l.put(c,s))):i.push(_.put(c,s))}return Promise.all(i)}return t.put?t.put(n,r):ss(t,"put")},{hasContent:!0,type:"update"});static delete=rs(function(t,r,s,n){return t.delete?t.delete(r):ss(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,xb.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),We(s,()=>{let i=new this(n,s),o=i.put?i.put(r):ss(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=rs(function(t,r,s,n){return t.invalidate?t.invalidate(r):ss(t,"delete")},{hasContent:!1,type:"update"});static post=rs(function(t,r,s,n){return t[Le]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=rs(function(t,r,s,n){return t.connect?t.connect(n,r):ss(t,"connect")},{hasContent:!0,type:"read"});static subscribe=rs(function(t,r,s,n){return t.subscribe?t.subscribe(r):ss(t,"subscribe")},{type:"read"});static publish=rs(function(t,r,s,n){return t[Le]!=null&&t.update?.(),t.publish?t.publish(n,r):ss(t,"publish")},{hasContent:!0,type:"create"});static search=rs(function(t,r,s,n){let i=t.search?t.search(r):ss(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=Fb(o);return i.map(c)}return i},{type:"read"});static query=rs(function(t,r,s,n){return t.search?t.search(n,r):ss(t,"search")},{hasContent:!0,type:"read"});static copy=rs(function(t,r,s,n){return t.copy?t.copy(n,r):ss(t,"copy")},{type:"create"});static move=rs(function(t,r,s,n){return t.move?t.move(n,r):ss(t,"move")},{type:"delete"});post(t){if(this[sn])return this.constructor.create(this[Le],t,this[Se]);ss(this,"post")}static isCollection(t){return t?.[sn]}static coerceId(t){return t}static parseQuery(t){return od(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let i=t.slice(n+1);t=t.slice(0,n);let o=r?.headers&&WY[i];if(o)r.headers.set("accept",o);else if(s)s.property=i;else return{query:{property:i},id:Gb(t,this)}}return Gb(t,this)}static getResource(t,r,s){let n,i=r[Se],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=t==null||Array.isArray(t)&&t[t.length-1]==null;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let _=u.asMap.get(t);if(n=_?.find(l=>l.constructor===c),n)return n;_||u.asMap.set(t,_=[]),_.push(n=new c(t,i))}else{if(n=u.find(_=>_[Le]===t&&_.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[Le],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else n=new c(t,i);return o&&(n[sn]=!0),n}subscribe(t){return new ys}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new ys}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[Le]}getContext(){return this[Se]}};Mt.prototype[Se]=null;(0,kb._assignPackageExport)("Resource",Mt);a(QY,"snake_case");cd=class extends Error{static{a(this,"AccessError")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};a(Gb,"pathToId");Zm=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(rs,"transactional");a(ss,"missingMethod");a(Xm,"selectFromObject");a(Fb,"transformForSelect")});var Yb={};Fe(Yb,{Resources:()=>ud,keyArrayToString:()=>Ta,resetResources:()=>jY,resources:()=>wi});function jY(){return wi=new ud}function Ta(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var ud,wi,uu=Re(()=>{Ro();ud=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let l=this.get(c.slice(0,_));l&&(l.hasSubPaths=!0),_+=2}}}getMatch(t,r){let s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(t[0]!=="/"&&(t="/"+t),n.relativeURL=t)),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return We(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(jY,"resetResources");a(Ta,"keyArrayToString")});var Jb={};Fe(Jb,{HAS_EXPIRATION:()=>ap,LAST_TIMESTAMP_PLACEHOLDER:()=>_u,LOCAL_TIMESTAMP:()=>zY,METADATA:()=>lu,NO_TIMESTAMP:()=>tp,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>op,RecordEncoder:()=>ip,TIMESTAMP_ASSIGN_LAST:()=>XY,TIMESTAMP_ASSIGN_NEW:()=>Qb,TIMESTAMP_ASSIGN_PREVIOUS:()=>jb,TIMESTAMP_PLACEHOLDER:()=>ld,TIMESTAMP_RECORD_PREVIOUS:()=>rp,getUpdateRecord:()=>cp,handleLocalTimeForGets:()=>Ed});function zb(){return Ra[0]=Ra[0]^64,JY.getFloat64(0)}function Ed(e){let t=e.getEntry;e.getEntry=function(i,o){let c=t.call(this,i,o),u=c?.value,_=u?.[lu];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[lu]>=0?c.value:c};let s=e.getRange;e.getRange=function(i){let o=s.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1?o:o.map(c=>{let u=c.value,_=u[lu];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})},e.env.metadataRetriever||(e.env.metadataRetriever=!0,e.on("aftercommit",({next:i,last:o})=>{do{let c=i.meta,u=c&&c.store;if(u&&!(i.flag&67108864)){let _=u.cache;if(c.key){let l=ZY.call(_,c.key);if(l&&l.timestampBytes){let d=l.timestampOffset;l.timestampBytes[d]===2&&(l.timestampBytes.copy(Ra,0,d),l.timestampBytes=null,l.localTime=zb())}}}}while(i!=o&&(i=i.next))}));let n=e.useReadTransaction();if(n.done(),!n.done.isTracked){let i=n.constructor,o=n.use,c=n.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Ao.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Ao.length;u++){let _=Ao[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&Ao.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function cp(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?ga=i?.localTime?rp|jb:tp:ga=u?i?.localTime?rp|16384:Qb|16384:tp,l>0&&(c|=ap),dd=c,np=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:ga>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(s,n,h);if(e.cache&&S.result!==!1){let A=e.cache.get(s);A&&(c>=0?A.metadataFlags=c:A.metadataFlags>=0&&(A.metadataFlags=void 0),(l||!A.expiresAt)&&(A.expiresAt=l),h.instructedWrite&&(A.localTime||(A.localTime=1),A.timestampBytes=sp,A.timestampOffset=sp.start||0))}if(u){let A=_?.user?.username;if(E&&(_d=e.encoder.encode(E)),f&&i?.localTime){let g=i?.localTime,O=r.get(g);if(O){let V=Ur(O).previousLocalTime;return r.put(g,fd(o,t,s,V,A,d,_d),{ifVersion:p}),S}}r.put(_u,fd(o,t,s,i?.localTime?1:0,A,d,_d),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var Kb,Wb,ld,_u,op,zY,lu,Ra,JY,tp,Qb,XY,jb,rp,ap,sp,_d,ga,dd,np,ip,ZY,Ao,du=Re(()=>{Kb=require("msgpackr");Aa();Wb=M(v()),ld=new Uint8Array([1,1,1,1,4,64,0,0]),_u=new Uint8Array([1,1,1,1,1,0,0,0]),op=new Uint8Array([1,1,1,1,3,64,0,0]),zY=Symbol("local-timestamp"),lu=Symbol("metadata"),Ra=new Uint8Array(8),JY=new DataView(Ra.buffer,0,8),tp=0,Qb=0,XY=1,jb=3,rp=4,ap=16,ga=0,dd=-1,np=0,ip=class extends Kb.Encoder{static{a(this,"RecordEncoder")}constructor(t){super(t);let r=this.encode;this.encode=function(s,n){if(ga||dd>=0){let i=0,o=ga;o&&(i+=8,ga=0);let c=dd,u=np;c>=0&&(i+=2,dd=-1,u&&(i+=8,np=0));let _=sp=r.call(this,s,n|2048|i);_d=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(ld[4]=o,ld[5]=o>>8,_.set(ld,l),l+=8),c>=0&&(_[l++]=c,_[l++]=0,u&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(l,u)),_}else return r.call(this,s,n)}}decode(t,r){let s=r?.start||0,n=r>-1?r:r?.end||t.length,i=t[s],o=0;try{if(i<32&&n>2){let c=s,u;if(i===2){if(t.copy)t.copy(Ra,0,c),c+=8;else for(let d=0;d<8;d++)Ra[d]=t[c++];u=zb(),i=t[c]}let _;i<32&&(o=i,c+=2,o&ap&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,n),n-c);return{localTime:u,value:l,[lu]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(zb,"getTimestamp");ZY=Map.prototype.get;a(Ed,"handleLocalTimeForGets");Ao=[];setInterval(()=>{for(let e=0;e<Ao.length;e++){let t=Ao[e].deref();!t||t.isDone||t.isCommitted?Ao.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&Wb.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t),t.openTimer++):t.openTimer=1)}},15e3).unref();a(cp,"getUpdateRecord")});var uy={};Fe(uy,{AUDIT_STORE_OPTIONS:()=>ay,createAuditEntry:()=>fd,openAuditStore:()=>md,readAuditEntry:()=>Ur,setAuditRetention:()=>e1,transactionKeyEncoder:()=>oy});function md(e){let t=e.auditStore=e.openDB(ry.AUDIT_STORE_NAME,ay);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,ny.getWorkerIndex)()===0&&e.on("aftercommit",()=>{fu||(fu=setTimeout(()=>{if(fu=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:0,end:Date.now()-up})){if((n[0]&15)===_p){let i=Ur(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},up/10).unref())}),t}function e1(e){clearTimeout(fu),fu=null,up=e}function fd(e,t,r,s,n,i,o){let c=cy[i],u=1;s&&(s>1?Oa.setFloat64(0,s):ns.set(op),u=9),f(0),f(t),d(r),Oa.setFloat64(u,e),u+=8,n?d(n):ns[u++]=0,ns[s?8:0]=c;let l=ns.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,Na.writeKey)(E,ns,u);let p=u-h-1;p>127?p>16383?(fp.error("Key or username was too large for audit entry",E),u=h+1,ns[h]=0):(ns.copyWithin(h+2,h+1,u),Oa.setUint16(h,p|32768),u++):ns[h]=p}function f(E){E<128?ns[u++]=E:E<16384?(Oa.setUint16(u,E|32768),u+=2):E<1056964608?(Oa.setUint32(u,E|3221225472),u+=4):(ns[u]=255,Oa.setUint32(u+1,E),u+=5)}}function Ur(e){try{let t=e.dataView||(e.dataView=new dp(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let s=t.readInt(),n=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,u=t.position+=o,_=t.readFloat64();o=t.readInt();let l=t.position,d=t.position+=o;return{type:cy[s&7],tableId:i,get recordId(){return ty(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?ty(e,l,d):void 0},getValue(f){return s&lp?f.decoder.decode(e.subarray(t.position)):void 0}}}catch{return fp.error("Reading audit entry error",e),{}}}function ty(e,t,r){let s=e.subarray(t,r);return(0,Na.readKey)(s,0,r-t)}var Na,hd,ry,sy,ny,iy,fp,ns,Oa,oy,ay,up,fu,lp,Xb,_p,Zb,ey,cy,dp,Aa=Re(()=>{Na=require("ordered-binary"),hd=M(j()),ry=M(Ke()),sy=M(R()),ny=M(Qe()),iy=M(G());du();fp=M(v());(0,hd.initSync)();ns=Buffer.alloc(1024),Oa=new DataView(ns.buffer,ns.byteOffset,1024),oy={writeKey(e,t,r){return e===_u?(t.set(_u,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Na.writeKey)(e,t,r)},readKey(e,t,r){return e[t]===66?(e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))).getFloat64(t):(0,Na.readKey)(e,t,r)}},ay={encoding:"binary",keyEncoder:oy},up=(0,iy.convertToMS)((0,hd.get)(sy.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,fu=null;a(md,"openAuditStore");a(e1,"setAuditRetention");lp=16,Xb=1,_p=2,Zb=3,ey=4,cy={put:Xb|lp,[Xb]:"put",delete:_p,[_p]:"delete",message:Zb|lp,[Zb]:"message",invalidate:ey,[ey]:"invalidate"};a(fd,"createAuditEntry");a(Ur,"readAuditEntry");dp=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t=this.getUint8(this.position++);return t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch{debugger}}};a(ty,"readKeySafely")});function _y(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;ba||((0,hu.onMessageByType)(ly,d=>{dy(d.path)}),(0,hu.onMessageByType)(t1,d=>{(0,Eu.trace)("confirming to proceed with txn",d.txnId)}),ba=Object.create(null));let c=ba[i]||(ba[i]=[]);c.auditStore=e.auditStore;let u=c[o];u||(u=c[o]=new Map,u.envs=c,u.tableId=o,u.store=e.primaryStore),t=Ta(t);let _=new hp(r);_.startTime=s,n&&(_.includeDescendants=n);let l=u.get(t);return l?l.push(_):(u.set(t,l=[_]),l.tables=u,l.key=t),_.subscriptions=l,_}function dy(e,t){if(!ba)return;let r=ba[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(n){throw n.message+=" in "+e,n}let s;for(let{key:n,value:i}of r.auditStore.getRange({start:Ep,exclusiveStart:!0})){Ep=n;let o=Ur(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=Ta(o.recordId),d;do{let f=c.get(l);if(f){for(let h of f)if(!(d&&!h.includeDescendants)){if(h.startTime>=n){(0,Eu.info)("omitting",u,h.startTime,n);continue}try{if(h.crossThreads===!1&&!t)continue;let p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(s?s.push(h):s=[h]),h.txnInProgress=o.version),h.listener(u,o,n,p)}catch(p){console.error(p),(0,Eu.info)(p)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E+1):l=null,d=!0}while(!0)}if(s)for(let n of s)n.txnInProgress=null,n.listener(null,{type:"end_txn"},Ep,!0)}function fy(e,t){let r=t||e,s=r.env;if(t&&!t.cache&&(t.cache=new Map),!s.hasBroadcastListener){s.hasBroadcastListener=!0;let n=s.path;r.on("aftercommit",()=>{(0,hu.broadcast)({type:ly,path:n}),dy(n,!0)})}}var Eu,hu,ly,t1,ba,wfe,hp,Ep,Ey=Re(()=>{Eu=M(v()),hu=M(Qe());au();uu();Aa();ly="transaction",t1="transaction-await",wfe=Buffer.alloc(4096);a(_y,"addSubscription");hp=class extends ys{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let s=t.envs,n=t.dbi;delete s[n]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}},Ep=Date.now();a(dy,"notifyFromTransactionData");a(fy,"listenToCommits")});var my=T((Dfe,hy)=>{"use strict";var mp=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};hy.exports=mp});var Sy=T((Mfe,py)=>{"use strict";var pp=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};py.exports=pp});var pd=T((vfe,Ty)=>{"use strict";var Tp=j(),gp=R(),{RecordEncoder:r1}=(du(),te(Jb));Tp.initSync();var s1=Tp.get(gp.CONFIG_PARAMS.STORAGE_COMPRESSION),n1=Tp.get(gp.CONFIG_PARAMS.STORAGE_CACHING)!==!1,i1=gp.UPDATES_PROPERTY,Sp=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=s1&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=n1&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:r1},this.alwaysLazyProperty=s=>s===i1)}};Ty.exports=Sp});var Td=T((Hfe,Ry)=>{"use strict";var ya=j(),mu=R();ya.initSync();var o1=ya.get(mu.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||ya.get(mu.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||ya.get(mu.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",gy=ya.get(mu.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),a1=ya.get(mu.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Sd=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=o1,this.noFSAccess=!0,gy!==void 0&&(this.overlappingSync=gy),this.noReadAhead=a1}};Ry.exports=Sd;Sd.MAX_DBS=1e4});var Me=T((Gfe,Dy)=>{"use strict";var Ap=require("lmdb"),Cs=require("fs-extra"),vr=require("path"),gd=ar(),Ny=v(),cr=Mr().LMDB_ERRORS_ENUM,Rd=Sy(),Op=pd(),by=Td(),Ci=Ke(),Ay=R(),{table:c1,resetDatabases:u1}=(de(),te(De)),Oy=j(),Ls=Ci.INTERNAL_DBIS_NAME,yy=Ci.DBI_DEFINITION_NAME,l1="data.mdb",_1="lock.mdb",pu=".mdb",d1="-lock",Rp=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=is(t,r),this.key_type=this.dbi[Ci.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Ci.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Ap.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Ad(e,t){if(e===void 0)throw new Error(cr.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(cr.ENV_NAME_REQUIRED)}a(Ad,"pathEnvNameValidation");async function Np(e,t,r=!0){try{await Cs.access(e)}catch(s){throw s.code==="ENOENT"?new Error(cr.INVALID_BASE_PATH):s}try{let s=vr.join(e,t+pu);return await Cs.access(s,Cs.constants.R_OK|Cs.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Cs.access(vr.join(e,t,l1),Cs.constants.R_OK|Cs.constants.F_OK),vr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(cr.INVALID_ENVIRONMENT)}else throw new Error(cr.INVALID_ENVIRONMENT);throw s}}a(Np,"validateEnvironmentPath");function Od(e,t){if(gd.validateEnv(e),t===void 0)throw new Error(cr.DBI_NAME_REQUIRED)}a(Od,"validateEnvDBIName");async function f1(e,t,r=!1,s=!1){Ad(e,t);let n=vr.basename(e);t=t.toString();let i=Oy.get(Ay.CONFIG_PARAMS.DATABASES);i||Oy.setProperty(Ay.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await Np(e,t,s),Iy(e,t,r)}catch(o){if(o.message===cr.INVALID_ENVIRONMENT){let c=vr.join(e,t);await Cs.mkdirp(s?c:e);let u=new by(s?c:c+pu,!1),_=Ap.open(u);_.dbis=Object.create(null);let l=new Op(!1);_.openDB(Ls,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=bp(e,t,r);return _[Ci.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(f1,"createEnvironment");async function E1(e,t,r,s=!0){Ad(e,t),t=t.toString();let n=vr.join(e,t);return c1({table:t,database:vr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(E1,"copyEnvironment");async function Iy(e,t,r=!1){Ad(e,t),t=t.toString();let s=bp(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await Np(e,t),i=vr.join(e,t+pu),o=n!=i,c=new by(n,o),u=Ap.open(c);u.dbis=Object.create(null);let _=Cy(u);for(let l=0;l<_.length;l++)is(u,_[l]);return u[Ci.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(Iy,"openEnvironment");async function h1(e,t,r=!1){Ad(e,t),t=t.toString();let s=vr.join(e,t+pu),n=await Np(e,t);if(global.lmdb_map!==void 0){let i=bp(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await wy(o),delete global.lmdb_map[i]}}await Cs.remove(n),await Cs.remove(n===s?n+d1:vr.join(vr.dirname(n),_1))}a(h1,"deleteEnvironment");async function wy(e){gd.validateEnv(e);let t=e[Ci.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(wy,"closeEnvironment");function bp(e,t,r=!1){let n=`${vr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(bp,"getCachedEnvironmentName");function m1(e){gd.validateEnv(e);let t=Object.create(null),r=is(e,Ls);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Ls)try{t[s]=Object.assign(new Rd,n)}catch{Ny.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(m1,"listDBIDefinitions");function Cy(e){gd.validateEnv(e);let t=[],r=is(e,Ls);for(let{key:s}of r.getRange({start:!1}))s!==Ls&&t.push(s);return t}a(Cy,"listDBIs");function p1(e,t){let s=is(e,Ls).getEntry(t),n=new Rd;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{Ny.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(p1,"getDBIDefinition");function Ly(e,t,r,s=!r){if(Od(e,t),t=t.toString(),t===Ls)throw new Error(cr.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return is(e,t)}catch(n){if(n.message===cr.DBI_DOES_NOT_EXIST){let i=new Op(r,s===!0),o=e.openDB(t,i),c=new Rd(r===!0,s);return o[yy]=c,is(e,Ls).putSync(t,c),e.dbis[t]=o,o}throw n}}a(Ly,"createDBI");function is(e,t){if(Od(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Ls?r=p1(e,t):r=new Rd,r===void 0)throw new Error(cr.DBI_DOES_NOT_EXIST);let s;try{let n=new Op(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(cr.DBI_DOES_NOT_EXIST):n}return s[yy]=r,e.dbis[t]=s,s}a(is,"openDBI");function S1(e,t){Od(e,t),t=t.toString();let r=is(e,t),s=r.getStats();return r[Ci.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(S1,"statDBI");async function T1(e,t){try{let r=vr.join(e,t+pu);return(await Cs.stat(r)).size}catch{throw new Error(cr.INVALID_ENVIRONMENT)}}a(T1,"environmentDataSize");function g1(e,t){if(Od(e,t),t=t.toString(),t===Ls)throw new Error(cr.CANNOT_DROP_INTERNAL_DBIS_NAME);is(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],is(e,Ls).removeSync(t)}a(g1,"dropDBI");function R1(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{is(e,i)}catch(o){if(o.message===cr.DBI_DOES_NOT_EXIST)Ly(e,i,i!==t,i===t),s=!0;else throw o}}s&&u1()}a(R1,"initializeDBIs");Dy.exports={openDBI:is,openEnvironment:Iy,createEnvironment:f1,listDBIs:Cy,listDBIDefinitions:m1,createDBI:Ly,dropDBI:g1,statDBI:S1,deleteEnvironment:h1,initializeDBIs:R1,TransactionCursor:Rp,environmentDataSize:T1,copyEnvironment:E1,closeEnvironment:wy}});var Uy=T((xfe,My)=>{"use strict";var yp=Me(),A1=v(),Py=Mr().LMDB_ERRORS_ENUM;My.exports=O1;async function O1(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await yp.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==Py.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await yp.closeEnvironment(global.lmdb_map[s]),await yp.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==Py.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){A1.error(t)}}a(O1,"cleanLMDBMap")});var qn=T(($fe,N1)=>{N1.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metric"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var Wy=T((Yfe,Ky)=>{"use strict";var Ip=require("recursive-iterator"),b1=require("alasql"),wp=require("clone"),vy=G(),{handleHDBError:By,hdb_errors:y1}=Z(),{HDB_ERROR_MSGS:Hy,HTTP_STATUS_CODES:qy}=y1,{getDatabases:I1}=(de(),te(De)),w1=["DISTINCT_ARRAY"],Gy=Symbol("validateTables"),Cp=Symbol("validateTable"),Vfe=Symbol("getAllColumns"),Fy=Symbol("validateAllColumns"),Nd=Symbol("findColumn"),xy=Symbol("validateOrderBy"),Su=Symbol("validateSegment"),Lp=Symbol("validateColumn"),ky=Symbol("setColumnsForTable"),$y=Symbol("checkColumnsForAsterisk"),Vy=Symbol("validateGroupBy"),Yy=Symbol("hasColumns"),Dp=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Gy](),this[$y](),this[Fy]()}[Gy](){if(this[Yy]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Cp](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Cp](t.table)})}}[Yy](){let t=!1,r=new Ip(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Cp](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=I1();if(!r[t.databaseid])throw By(new Error,Hy.SCHEMA_NOT_FOUND(t.databaseid),qy.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw By(new Error,Hy.TABLE_NOT_FOUND(t.databaseid,t.tableid),qy.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=wp(n);i.table=wp(t),this.attributes.push(i)})}[Nd](t){return this.attributes.filter(r=>t.tableid?(r.table.as===t.tableid||r.table.tableid===t.tableid)&&r.attribute===t.columnid:r.attribute===t.columnid)}[$y](){let t=new Ip(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[ky](r.tableid)}[ky](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new b1.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Fy](){this[Su](this.statement.columns,!1),this[Su](this.statement.joins,!1),this[Su](this.statement.where,!1),this[Vy](this.statement.group,!1),this[Su](this.statement.order,!0)}[Su](t,r){if(!t)return;let s=new Ip(t),n=[];for(let{node:i,path:o}of s)!vy.isEmpty(i)&&!vy.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[xy](i):n.push(this[Lp](i)));return n}[Vy](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&w1.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=wp(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Nd](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[Nd](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[xy](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[Lp](t)}[Lp](t){let r=this[Nd](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};Ky.exports=Dp});var jy=T((Wfe,Qy)=>{"use strict";var Pp=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};Qy.exports=Pp});var Jy=T((jfe,zy)=>{"use strict";var Mp=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};zy.exports=Mp});var Zy=T((Jfe,Xy)=>{"use strict";var Up=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};Xy.exports=Up});var tI=T((Zfe,eI)=>{"use strict";var vp=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};eI.exports=vp});var No=T((nEe,nI)=>{"use strict";var C1=Me(),L1=Jy(),D1=Zy(),P1=tI(),nn=ar(),Tu=Mr().LMDB_ERRORS_ENUM,M1=Ke(),Gn=R(),U1=G(),v1=require("uuid"),tEe=require("lmdb"),{handleHDBError:B1,hdb_errors:H1}=Z(),{OVERFLOW_MARKER:rEe,MAX_SEARCH_KEY_LENGTH:sEe}=M1,rI=j();rI.initSync();var bd=rI.get(Gn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Bp=Gn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Oo=Gn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function q1(e,t,r,s,n=nn.getNextMonotonicTime()){Fp(e,t,r,s),Hp(e,t,r);let i=new L1,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];sI(_,!0,n);let l=G1(e,t,r,_),d=_[t];o.push(l),c.push(d)}return qp(o,c,s,i,n)}a(q1,"insertRecords");function G1(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][Gn.FUNC_VAL],s[o]=c)}let u=nn.getIndexedValues(c),_=e.dbis[o];if(u){bd&&_.prefetch(u.map(l=>({key:l,value:n})),yd);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}bd&&e.dbis[t].prefetch([n],yd),e.dbis[t].put(n,s,s[Oo])})}a(G1,"insertRecord");function F1(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(F1,"removeSkippedRecords");function sI(e,t,r){let s=r>0;(s||!Number.isInteger(e[Oo]))&&(e[Oo]=r||(r=nn.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Bp]))&&(e[Bp]=r||nn.getNextMonotonicTime()):delete e[Bp]}a(sI,"setTimestamps");function Hp(e,t,r){r.indexOf(Gn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Gn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Gn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Gn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),C1.initializeDBIs(e,t,r)}a(Hp,"initializeTransaction");async function x1(e,t,r,s,n=nn.getNextMonotonicTime()){Fp(e,t,r,s),Hp(e,t,r);let i=new D1,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=Gp(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return qp(c,u,s,i,n,o)}a(x1,"updateRecords");async function k1(e,t,r,s,n=nn.getNextMonotonicTime()){try{Fp(e,t,r,s)}catch(u){throw B1(u,u.message,H1.HTTP_STATUS_CODES.BAD_REQUEST)}Hp(e,t,r);let i=new P1,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;U1.isEmpty(_[t])?(l=v1.v4(),_[t]=l):l=_[t];let d=Gp(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return qp(o,c,s,i,n)}a(k1,"upsertRecords");async function qp(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||nn.getNextMonotonicTime(),F1(r,i),s}a(qp,"finalizeWrite");function Gp(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(sI(r,!l,o),Number.isInteger(r[Oo])&&_[Oo]>r[Oo])return!1;l&&n.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let A=_[h];if(typeof p=="function"){let O=p([[_]]);Array.isArray(O)&&(p=O[0][Gn.FUNC_VAL],r[h]=p)}if(p===A)continue;let g=nn.getIndexedValues(A);if(g){bd&&S.prefetch(g.map(O=>({key:O,value:s})),yd);for(let O=0,V=g.length;O<V;O++)S.remove(g[O],s)}if(g=nn.getIndexedValues(p),g){bd&&S.prefetch(g.map(O=>({key:O,value:s})),yd);for(let O=0,V=g.length;O<V;O++)S.put(g[O],s)}}let E=Object.assign({},_,r);c.put(s,E,E[Oo])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:Gp(e,t,r,s,n,i,o))}a(Gp,"updateUpsertRecord");function $1(e,t,r){if(nn.validateEnv(e),t===void 0)throw new Error(Tu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Tu.WRITE_ATTRIBUTES_REQUIRED):new Error(Tu.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a($1,"validateBasic");function Fp(e,t,r,s){if($1(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Tu.RECORDS_REQUIRED):new Error(Tu.RECORDS_MUST_BE_ARRAY)}a(Fp,"validateWrite");function yd(){}a(yd,"noop");nI.exports={insertRecords:q1,updateRecords:x1,upsertRecords:k1}});var on=T((oEe,aI)=>{"use strict";var oI=G(),iI=R(),Ia=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Fn=require("joi"),Li={schema_format:{pattern:Ia,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},V1=Fn.alternatives(Fn.string().min(1).max(Li.schema_length.maximum).pattern(Ia).messages({"string.pattern.base":"{:#label} "+Li.schema_format.message}),Fn.number()).required(),Y1=Fn.alternatives(Fn.string().min(1).max(Li.schema_length.maximum).pattern(Ia).messages({"string.pattern.base":"{:#label} "+Li.schema_format.message}),Fn.number()),K1=Fn.alternatives(Fn.string().min(1).max(Li.schema_length.maximum).pattern(Ia).messages({"string.pattern.base":"{:#label} "+Li.schema_format.message}),Fn.number()).required();function W1(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Li.schema_length.maximum?`'${e}' maximum of 250 characters`:Ia.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(W1,"checkValidTable");function Q1(e,t){return oI.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(Q1,"validateSchemaExists");function j1(e,t){let r=t.state.ancestors[0].schema;return oI.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(j1,"validateTableExists");function z1(e,t){return e.toLowerCase()===iI.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${iI.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(z1,"validateSchemaName");aI.exports={common_validators:Li,schema_regex:Ia,hdb_schema_table:V1,validateSchemaExists:Q1,validateTableExists:j1,validateSchemaName:z1,checkValidTable:W1,hdb_database:Y1,hdb_table:K1}});var Ve=T((cEe,cI)=>{"use strict";var ur=require("validate.js");ur.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||ur.validators.type.checks[t](e)?null:` must be a '${t}' value`};ur.validators.type.checks={Object:function(e){return ur.isObject(e)&&!ur.isArray(e)},Array:ur.isArray,Integer:ur.isInteger,Number:ur.isNumber,String:ur.isString,Date:ur.isDate,Boolean:function(e){return typeof e=="boolean"}};ur.validators.hasValidFileExt=function(e,t){return ur.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};cI.exports={validateObject:J1,validateObjectAsync:X1,validateBySchema:Z1};function J1(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=ur(e,t,{format:"flat"});return r?new Error(r):null}a(J1,"validateObject");async function X1(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await ur.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(X1,"validateObjectAsync");function Z1(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(Z1,"validateBySchema")});var Id=T((lEe,uI)=>{var{common_validators:an}=on(),Ru=Ve(),gu="is required",ct={database:{presence:!1,format:an.schema_format,length:an.schema_length},schema:{presence:!1,format:an.schema_format,length:an.schema_length},table:{presence:!0,format:an.schema_format,length:an.schema_length},attribute:{presence:!0,format:an.schema_format,length:an.schema_length},hash_attribute:{presence:!0,format:an.schema_format,length:an.schema_length}};function Au(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(Au,"makeAttributesStrings");function eK(e){return e=Au(e),ct.table.presence=!1,ct.attribute.presence=!1,ct.hash_attribute.presence=!1,Ru.validateObject(e,ct)}a(eK,"schema_object");function tK(e){return e=Au(e),ct.table.presence={message:gu},ct.attribute.presence=!1,ct.hash_attribute.presence=!1,Ru.validateObject(e,ct)}a(tK,"table_object");function rK(e){return e=Au(e),ct.table.presence={message:gu},ct.attribute.presence=!1,Ru.validateObject(e,ct)}a(rK,"create_table_object");function sK(e){return e=Au(e),ct.table.presence={message:gu},ct.attribute.presence={message:gu},ct.hash_attribute.presence=!1,Ru.validateObject(e,ct)}a(sK,"attribute_object");function nK(e){return e=Au(e),ct.table.presence={message:gu},ct.attribute.presence=!1,ct.hash_attribute.presence=!1,Ru.validateObject(e,ct)}a(nK,"describe_table");function iK(e){if(e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a(iK,"validateTableResidence");uI.exports={schema_object:eK,create_table_object:rK,table_object:tK,attribute_object:sK,describe_table:nK,validateTableResidence:iK}});var _I=T((dEe,lI)=>{"use strict";var oK=require("uuid"),xp=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||oK.v4(),this.schema_table=`${this.schema}.${this.table}`}};lI.exports=xp});var wd=T((EEe,dI)=>{"use strict";var aK=_I(),kp=class extends aK{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};dI.exports=kp});var EI=T((mEe,fI)=>{"use strict";fI.exports=uK;var cK="inserted";function uK(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===cK?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(uK,"returnObject")});var Cd=T((SEe,TI)=>{"use strict";var lK=R(),$p=Me(),_K=No(),{getSystemSchemaPath:dK,getSchemaPath:fK}=Be(),EK=qn(),hK=Id(),mK=wd(),pK=EI(),{handleHDBError:hI,hdb_errors:pI}=Z(),mI=G(),{HTTP_STATUS_CODES:SK}=pI,Vp=EK.hdb_attribute,SI=[];for(let e=0;e<Vp.attributes.length;e++)SI.push(Vp.attributes[e].attribute);var TK="inserted";TI.exports=gK;async function gK(e){let t=hK.attribute_object(e);if(t)throw hI(new Error,t.message,pI.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&mI.checkGlobalSchemaTable(e.schema,e.table);if(r)throw hI(new Error,r,SK.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=mI.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new mK(e.schema,e.table,e.attribute,e.id);try{let i=await $p.openEnvironment(fK(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);$p.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await $p.openEnvironment(dK(),lK.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await _K.insertRecords(o,Vp.hash_attribute,SI,[n]);return pK(TK,c,{records:[n]},u)}catch(i){throw i}}a(gK,"lmdbCreateAttribute")});var Kp=T((gEe,RI)=>{var{hdb_table:RK,hdb_database:gI}=on(),AK=Ve(),Yp=require("joi"),OK={undefined:"undefined",null:"null"},NK=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||OK[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),bK=Yp.object({database:gI,schema:gI,table:RK,records:Yp.array().items(Yp.object().custom(NK)).required()});RI.exports=function(e){return AK.validateBySchema(e,bK)}});var Ou=T((OEe,OI)=>{"use strict";var xn=G(),AI=v(),AEe=Kp(),{getDatabases:yK}=(de(),te(De)),{ClientError:bo}=Z();OI.exports=IK;function IK(e){if(xn.isEmpty(e))throw new bo("invalid update parameters defined.");if(xn.isEmptyOrZeroLength(e.schema))throw new bo("invalid schema specified.");if(xn.isEmptyOrZeroLength(e.table))throw new bo("invalid table specified.");if(!Array.isArray(e.records))throw new bo("records must be an array");let t=yK()[e.schema]?.[e.table];if(xn.isEmpty(t))throw new bo(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&xn.isEmptyOrZeroLength(o[r]))throw AI.error("a valid hash attribute must be provided with update record:",o),new bo("a valid hash attribute must be provided with update record, check log for more info");if(!xn.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw AI.error(`a valid hash value must be provided with ${e.operation} record:`,o),new bo(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!xn.isEmpty(o[r])&&o[r]!==""&&s.has(xn.autoCast(o[r]))&&(o.skip=!0),s.add(xn.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(IK,"insertUpdateValidate")});var Nu=T((bEe,NI)=>{"use strict";var wK=R().OPERATIONS_ENUM,Wp=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=wK.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};NI.exports=Wp});var wu=T((wEe,bI)=>{"use strict";var IEe=Nu(),Ld=R(),jp=G(),Qp=v(),CK=require("uuid"),{handleHDBError:bu,hdb_errors:LK}=Z(),{HDB_ERROR_MSGS:yu,HTTP_STATUS_CODES:Iu}=LK;bI.exports=DK;function DK(e,t,r){for(let n=0;n<t.length;n++)PK(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];MK(i,r,e.operation)}}a(DK,"processRows");function PK(e){if(Buffer.byteLength(String(e))>Ld.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw bu(new Error,yu.ATTR_NAME_LENGTH_ERR(e),Iu.BAD_REQUEST,void 0,void 0,!0);if(jp.isEmptyOrZeroLength(e)||jp.isEmpty(e.trim()))throw bu(new Error,yu.ATTR_NAME_NULLISH_ERR,Iu.BAD_REQUEST,void 0,void 0,!0)}a(PK,"validateAttribute");function MK(e,t,r){if(!e.hasOwnProperty(t)||jp.isEmptyOrZeroLength(e[t])){if(r===Ld.OPERATIONS_ENUM.INSERT||r===Ld.OPERATIONS_ENUM.UPSERT){e[t]=CK.v4();return}throw Qp.error("Update transaction aborted due to record with no hash value:",e),bu(new Error,yu.RECORD_MISSING_HASH_ERR,Iu.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Ld.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Qp.error(e),bu(new Error,yu.HASH_VAL_LENGTH_ERR,Iu.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Qp.error(e),bu(new Error,yu.INVALID_FORWARD_SLASH_IN_HASH_ERR,Iu.BAD_REQUEST,void 0,void 0,!0)}a(MK,"validateHash")});var Dd=T((LEe,II)=>{"use strict";var yI=G(),UK=R(),vK=v(),BK=Cd(),HK=wd(),qK=kn(),{SchemaEventMsg:GK}=Ds(),FK="already exists in";II.exports=xK;async function xK(e,t,r){if(yI.isEmptyOrZeroLength(r))return r;let s=[];yI.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await kK(e,t.schema,t.name,i)})),n}a(xK,"lmdbCheckForNewAttributes");async function kK(e,t,r,s){let n=new HK(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await $K(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(FK))vK.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(kK,"createNewAttribute");async function $K(e){let t;return t=await BK(e),qK.signalSchemaChange(new GK(process.pid,UK.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a($K,"createAttribute")});var wa=T((PEe,wI)=>{"use strict";var zp=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};wI.exports=zp});var LI=T((UEe,CI)=>{"use strict";var VK=wa(),YK=R().OPERATIONS_ENUM,Jp=class extends VK{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(YK.INSERT,r,s,n,i),this.records=t}};CI.exports=Jp});var PI=T((BEe,DI)=>{"use strict";var KK=wa(),WK=R().OPERATIONS_ENUM,Xp=class extends KK{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(WK.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};DI.exports=Xp});var UI=T((qEe,MI)=>{"use strict";var QK=wa(),jK=R().OPERATIONS_ENUM,Zp=class extends QK{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(jK.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};MI.exports=Zp});var BI=T((FEe,vI)=>{"use strict";var zK=wa(),JK=R().OPERATIONS_ENUM,eS=class extends zK{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(JK.DELETE,s,n,t,i),this.original_records=r}};vI.exports=eS});var Cu=T(($Ee,FI)=>{"use strict";var kEe=require("path"),HI=Me(),XK=LI(),ZK=PI(),eW=UI(),tW=BI(),Ca=Ke(),qI=G(),{CONFIG_PARAMS:rW}=R(),GI=j();GI.initSync();var Pd=R().OPERATIONS_ENUM,{getTransactionAuditStorePath:sW}=Be();FI.exports=nW;async function nW(e,t){if(GI.get(rW.LOGGING_AUDITLOG)===!1)return;let r=sW(e.schema,e.table),s=await HI.openEnvironment(r,e.table,!0),n=iW(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){HI.initializeDBIs(s,Ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ca.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),qI.isEmpty(n.user_name)||s.dbis[Ca.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Ca.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(nW,"writeTransaction");function iW(e,t){let r=qI.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Pd.INSERT)return new XK(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Pd.UPDATE)return new ZK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Pd.UPSERT)return new eW(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Pd.DELETE)return new tW(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(iW,"createTransactionObject")});var tS=T((KEe,xI)=>{"use strict";var oW=Ou(),YEe=Nu(),Lu=R(),aW=wu(),cW=No().insertRecords,uW=Me(),lW=v(),_W=Dd(),{getSchemaPath:dW}=Be(),fW=Cu();xI.exports=EW;async function EW(e){try{let{schema_table:t,attributes:r}=oW(e);aW(e,r,t.hash_attribute),e.schema!==Lu.SYSTEM_SCHEMA_NAME&&(r.includes(Lu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Lu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Lu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Lu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await _W(e.hdb_auth_header,t,r),n=dW(e.schema,e.table),i=await uW.openEnvironment(n,e.table),o=await cW(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await fW(e,o)}catch(c){lW.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(EW,"lmdbCreateRecords")});var VI=T((QEe,$I)=>{"use strict";var kI=R(),hW=tS(),mW=Nu(),pW=require("fs-extra"),{getSchemaPath:SW}=Be();$I.exports=TW;async function TW(e){let t=[{name:e.schema,createddate:Date.now()}],r=new mW(kI.SYSTEM_SCHEMA_NAME,kI.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await hW(r),await pW.mkdirp(SW(e.schema))}a(TW,"lmdbCreateSchema")});var KI=T((zEe,YI)=>{"use strict";var rS=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};YI.exports=rS});var zI=T((the,jI)=>{"use strict";var WI=Me(),sS=ar(),nS=Mr().LMDB_ERRORS_ENUM,gW=Ke(),QI=v(),XEe=G(),RW=require("lmdb"),AW=KI(),OW=R(),{OVERFLOW_MARKER:ZEe,MAX_SEARCH_KEY_LENGTH:ehe}=gW,NW=OW.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function bW(e,t,r,s){if(sS.validateEnv(e),t===void 0)throw new Error(nS.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(nS.IDS_REQUIRED):new Error(nS.IDS_MUST_BE_ITERABLE);try{let n=WI.listDBIs(e);WI.initializeDBIs(e,t,n);let i=new AW,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||s&&h[NW]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,RW.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let A=n[S];if(!h.hasOwnProperty(A)||A===t)continue;let g=e.dbis[A],O=h[A];if(O!=null)try{let V=sS.getIndexedValues(O);if(V)for(let $=0,F=V.length;$<F;$++)g.remove(V[$],o)}catch{QI.warn(`cannot delete from attribute: ${A}, ${O}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){QI.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let f=0,E=l.length;f<E;f++)l[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=sS.getNextMonotonicTime(),i}catch(n){throw n}}a(bW,"deleteRecords");jI.exports={deleteRecords:bW}});var Du=T((she,XI)=>{"use strict";var La=G(),yW=zI(),IW=Me(),{getSchemaPath:wW}=Be(),CW=Cu(),LW=v();XI.exports=DW;async function DW(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(La.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(La.isEmptyOrZeroLength(e.hash_values)&&!La.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];La.isEmpty(u)||e.hash_values.push(u)}}if(La.isEmptyOrZeroLength(e.hash_values))return JI([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(La.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=wW(e.schema,e.table),i=await IW.openEnvironment(n,e.table),o=await yW.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await CW(e,o)}catch(c){LW.error(`unable to write transaction due to ${c.message}`)}return JI(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(DW,"lmdbDeleteRecords");function JI(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(JI,"createDeleteResponse")});var oS=T((ohe,ZI)=>{"use strict";var PW=R(),ihe=ar();function iS(e,t){let r=Object.create(null);if(t.length===1&&PW.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(iS,"parseRow");function MW(e,t,r,s){let n=iS(r,e);s.push(n)}a(MW,"searchAll");function UW(e,t,r,s){let n=iS(r,e);s[t]=n}a(UW,"searchAllToMap");function vW(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(vW,"iterateDBI");function yo(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(yo,"pushResults");function BW(e,t,r,s,n,i){t.toString().endsWith(e)&&yo(t,r,s,n,i)}a(BW,"endsWith");function HW(e,t,r,s,n,i){t.toString().includes(e)&&yo(t,r,s,n,i)}a(HW,"contains");function qW(e,t,r,s,n,i){t>e&&yo(t,r,s,n,i)}a(qW,"greaterThanCompare");function GW(e,t,r,s,n,i){t>=e&&yo(t,r,s,n,i)}a(GW,"greaterThanEqualCompare");function FW(e,t,r,s,n,i){t<e&&yo(t,r,s,n,i)}a(FW,"lessThanCompare");function xW(e,t,r,s,n,i){t<=e&&yo(t,r,s,n,i)}a(xW,"lessThanEqualCompare");ZI.exports={parseRow:iS,searchAll:MW,searchAllToMap:UW,iterateDBI:vW,endsWith:BW,contains:HW,greaterThanCompare:qW,greaterThanEqualCompare:GW,lessThanCompare:FW,lessThanEqualCompare:xW,pushResults:yo}});var Da=T((_he,ow)=>{"use strict";var Di=Me(),che=v(),Br=ar(),Md=Ke(),tt=Mr().LMDB_ERRORS_ENUM,uhe=G(),kW=R(),Ud=oS(),{parseRow:$W}=Ud,lhe=require("lmdb"),{OVERFLOW_MARKER:ew,MAX_SEARCH_KEY_LENGTH:VW}=Md;function tw(e,t,r,s=!1,n=void 0,i=void 0){return Io(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(tw,"iterateFullIndex");function Pu(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return Io(e,t,r,(l,d,f,E)=>{let g={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(g.values=!1,d.getRange(g).map(O=>({value:O}))):d.getRange(g)})}a(Pu,"iterateRangeBetween");function Io(e,t,r,s){let n=e.database||e,i=Di.openDBI(n,r);i[Md.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Di.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(Io,"setupTransaction");function rw(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(ew)){if(!n)if(r)n=Di.openDBI(e,r);else{let u=Di.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=Di.openDBI(e,u[_]),!n[Md.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(rw,"getOverflowCheck");function YW(e,t,r,s=!1,n=void 0,i=void 0){if(Br.validateEnv(e),t===void 0)throw new Error(tt.HASH_ATTRIBUTE_REQUIRED);return Io(e,t,t,(o,c,u)=>(vd(r),r=Mu(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>$W(_.value,r))))}a(YW,"searchAll");function KW(e,t,r,s=!1,n=void 0,i=void 0){if(Br.validateEnv(e),t===void 0)throw new Error(tt.HASH_ATTRIBUTE_REQUIRED);vd(r),r=Mu(e.database||e,r);let o=new Map;for(let{key:c,value:u}of tw(e,t,t,s,n,i))o.set(c,Ud.parseRow(u,r));return o}a(KW,"searchAllToMap");function WW(e,t,r=!1,s=void 0,n=void 0){if(Br.validateEnv(e),t===void 0)throw new Error(tt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=tw(e,void 0,t,r,s,n),c=o.transaction,u=rw(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(WW,"iterateDBI");function QW(e,t){if(Br.validateEnv(e),t===void 0)throw new Error(tt.HASH_ATTRIBUTE_REQUIRED);return Di.statDBI(e,t).entryCount}a(QW,"countAll");function jW(e,t,r,s,n=!1,i=void 0,o=void 0){return Pi(e,r,s),Io(e,t,r,(c,u,_,l)=>(s=Br.convertKeyValueToWrite(s),l===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(jW,"equals");function zW(e,t,r){return Pi(e,t,r),Di.openDBI(e,t).getValuesCount(r)}a(zW,"count");function JW(e,t,r,s,n=!1,i=void 0,o=void 0){return Pi(e,r,s),Io(e,null,r,(c,u)=>{s=Br.convertKeyValueToWrite(s);let _=!0;typeof s=="number"&&(_=!1);let l;if(n===!0){let d;for(let f of u.getKeys({transaction:c,start:s}))if(!f.startsWith(s)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(s))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(JW,"startsWith");function XW(e,t,r,s,n=!1,i=void 0,o=void 0){return sw(e,t,r,s,n,i,o,!0)}a(XW,"endsWith");function sw(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Pi(e,r,s),Io(e,null,r,(u,_,l,d)=>{let f=rw(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(E=>{let h=E.toString();return h.endsWith(ew)?_.getValues(E,{transaction:u}).map(p=>{let S=f(E,p);if(c?S.endsWith(s):S.includes(s))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?_[Md.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(sw,"contains");function ZW(e,t,r,s,n=!1,i=void 0,o=void 0){Pi(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Pu(e,t,r,s,u,n,i,o,!0,!1)}a(ZW,"greaterThan");function eQ(e,t,r,s,n=!1,i=void 0,o=void 0){Pi(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Pu(e,t,r,s,u,n,i,o,!1,!1)}a(eQ,"greaterThanEqual");function tQ(e,t,r,s,n=!1,i=void 0,o=void 0){Pi(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Pu(e,t,r,u,s,n,i,o,!1,!0)}a(tQ,"lessThan");function rQ(e,t,r,s,n=!1,i=void 0,o=void 0){Pi(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Pu(e,t,r,u,s,n,i,o,!1,!1)}a(rQ,"lessThanEqual");function sQ(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Br.validateEnv(e),r===void 0)throw new Error(tt.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(tt.START_VALUE_REQUIRED);if(n===void 0)throw new Error(tt.END_VALUE_REQUIRED);if(s=Br.convertKeyValueToWrite(s),n=Br.convertKeyValueToWrite(n),s>n)throw new Error(tt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Pu(e,t,r,s,n,i,o,c)}a(sQ,"between");function nQ(e,t,r,s){Br.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(tt.HASH_ATTRIBUTE_REQUIRED);if(vd(r),r=Mu(n,r),s===void 0)throw new Error(tt.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=Ud.parseRow(c,r)),o}a(nQ,"searchByHash");function iQ(e,t,r){Br.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(tt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(tt.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(iQ,"checkHashExists");function oQ(e,t,r,s,n=[]){return iw(e,t,r,s,n),nw(e,t,r,s,n).map(i=>i[1])}a(oQ,"batchSearchByHash");function aQ(e,t,r,s,n=[]){iw(e,t,r,s,n);let i=new Map;for(let[o,c]of nw(e,t,r,s,n))i.set(o,c);return i}a(aQ,"batchSearchByHashToMap");function nw(e,t,r,s,n=[]){return Io(e,t,t,(i,o,c)=>{r=Mu(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,Ud.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(nw,"batchHashSearch");function iw(e,t,r,s,n){if(Br.validateEnv(e),t===void 0)throw new Error(tt.HASH_ATTRIBUTE_REQUIRED);if(vd(r),s==null)throw new Error(tt.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(tt.IDS_MUST_BE_ITERABLE)}a(iw,"initializeBatchSearchByHash");function vd(e){if(!Array.isArray(e))throw e===void 0?new Error(tt.FETCH_ATTRIBUTES_REQUIRED):new Error(tt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(vd,"validateFetchAttributes");function Pi(e,t,r){if(Br.validateEnv(e),t===void 0)throw new Error(tt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(tt.SEARCH_VALUE_REQUIRED);if(r?.length>VW)throw new Error(tt.SEARCH_VALUE_TOO_LARGE)}a(Pi,"validateComparisonFunctions");function Mu(e,t){return t.length===1&&kW.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Di.listDBIs(e)),t}a(Mu,"setGetWholeRowAttributes");ow.exports={searchAll:YW,searchAllToMap:KW,count:zW,countAll:QW,equals:jW,startsWith:JW,endsWith:XW,contains:sw,searchByHash:nQ,setGetWholeRowAttributes:Mu,batchSearchByHash:oQ,batchSearchByHashToMap:aQ,checkHashExists:iQ,iterateDBI:WW,greaterThan:ZW,greaterThanEqual:eQ,lessThan:tQ,lessThanEqual:rQ,between:sQ}});var Pa=T((fhe,_w)=>{var aw=require("lodash"),cw=Ve(),xe=require("joi"),cQ=G(),{hdb_schema_table:Bd,checkValidTable:uw,hdb_table:lw,hdb_database:Hd}=on(),{handleHDBError:uQ,hdb_errors:lQ}=Z(),{getDatabases:_Q}=(de(),te(De)),{HTTP_STATUS_CODES:dQ}=lQ,fQ=xe.object({database:Hd,schema:Hd,table:lw,search_attribute:Bd,search_value:xe.any().required(),get_attributes:xe.array().min(1).items(Bd).optional(),desc:xe.bool(),limit:xe.number().integer().min(1),offset:xe.number().integer().min(0)}),EQ=xe.object({database:Hd,schema:Hd,table:lw,operator:xe.string().valid("and","or").default("and").lowercase(),offset:xe.number().integer().min(0),limit:xe.number().integer().min(1),get_attributes:xe.array().min(1).items(Bd).optional(),conditions:xe.array().min(1).items(xe.object({search_attribute:Bd,search_type:xe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").optional(),search_value:xe.when("search_type",{switch:[{is:"equals",then:xe.any()},{is:"between",then:xe.array().items(xe.alternatives([xe.string(),xe.number()])).length(2)}],otherwise:xe.alternatives(xe.string(),xe.number())}).required()})).required()});_w.exports=function(e,t){let r=null;switch(t){case"value":r=cw.validateBySchema(e,fQ);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(uw("database",e.schema)),i(uw("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=cw.validateBySchema(e,EQ);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=cQ.checkGlobalSchemaTable(e.schema,e.table);if(n)return uQ(new Error,n,dQ.NOT_FOUND);let o=_Q()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let _=0,l=e.conditions.length;_<l;_++){let d=e.conditions[_];c.push(d.search_attribute)}let u=aw.filter(c,_=>_!=="*"&&_.attribute!=="*"&&!aw.some(o,l=>l===_||l.attribute===_||l.attribute===_.attribute));if(u&&u.length>0){let _=u.join(", ");return _=_.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${_}'`)}}return r}});var aS=T((hhe,dw)=>{"use strict";var hQ=Me(),mQ=Pa(),{getSchemaPath:pQ}=Be();dw.exports=SQ;function SQ(e){let t=mQ(e,"hashes");if(t)throw t;let r=pQ(e.schema,e.table);return hQ.openEnvironment(r,e.table)}a(SQ,"initialize")});var cS=T((phe,fw)=>{"use strict";var TQ=Da(),gQ=aS();fw.exports=RQ;async function RQ(e){let t=await gQ(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return TQ.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(RQ,"lmdbGetDataByHash")});var Ma=T((The,Ew)=>{"use strict";var uS=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};Ew.exports=uS});var mw=T((Ahe,hw)=>{"use strict";var Rhe=Ma(),AQ=Da(),OQ=aS();hw.exports=NQ;async function NQ(e){let t=await OQ(e),r=global.hdb_schema[e.schema][e.table];return AQ.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(NQ,"lmdbSearchByHash")});var Ps=T((Nhe,pw)=>{"use strict";var lS=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};pw.exports=lS});var qd=T((yhe,Ow)=>{"use strict";var Qt=Da(),bQ=Me(),yQ=G(),ue=Ke(),wo=R(),IQ=qn(),Sw=Mr().LMDB_ERRORS_ENUM,{getSchemaPath:wQ}=Be(),$n=wo.SEARCH_WILDCARDS;async function CQ(e,t,r){let s;e.schema===wo.SYSTEM_SCHEMA_NAME?s=IQ[e.table]:s=global.hdb_schema[e.schema][e.table];let n=Aw(e,s.hash_attribute,r,t);return gw(e,n,s.hash_attribute,r)}a(CQ,"prepSearch");async function gw(e,t,r,s){let n=wQ(e.schema,e.table),i=await bQ.openEnvironment(n,e.table),o=Rw(i,e,t,r),c=o.transaction||i;if([ue.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ue.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ue.SEARCH_TYPES.SEARCH_ALL,ue.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(LQ(e,r)===!1){let l=e.search_attribute;if(l===r)return s?Tw(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?Tw(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Qt.batchSearchByHashToMap(c,r,e.get_attributes,_):Qt.batchSearchByHash(c,r,e.get_attributes,_)}a(gw,"executeSearch");function Rw(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case ue.SEARCH_TYPES.EQUALS:n=Qt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ue.SEARCH_TYPES.CONTAINS:n=Qt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case ue.SEARCH_TYPES.ENDS_WITH:case ue.SEARCH_TYPES._ENDS_WITH:n=Qt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ue.SEARCH_TYPES.STARTS_WITH:case ue.SEARCH_TYPES._STARTS_WITH:n=Qt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ue.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Qt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ue.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Qt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ue.SEARCH_TYPES.SEARCH_ALL:return Qt.searchAll(e,s,t.get_attributes,o,c,u);case ue.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Qt.searchAllToMap(e,s,t.get_attributes,o,c,u);case ue.SEARCH_TYPES.BETWEEN:n=Qt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case ue.SEARCH_TYPES.GREATER_THAN:case ue.SEARCH_TYPES._GREATER_THAN:n=Qt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ue.SEARCH_TYPES.GREATER_THAN_EQUAL:case ue.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Qt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case ue.SEARCH_TYPES.LESS_THAN:case ue.SEARCH_TYPES._LESS_THAN:n=Qt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ue.SEARCH_TYPES.LESS_THAN_EQUAL:case ue.SEARCH_TYPES._LESS_THAN_EQUAL:n=Qt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(Rw,"searchByType");function Tw(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(Tw,"createMapFromIterable");function LQ(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(LQ,"checkToFetchMore");function Aw(e,t,r,s){if(yQ.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),$n.indexOf(n)>-1)return r===!0?ue.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ue.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf($n[0])<0&&n.indexOf($n[1])<0)return c===!0?r===!0?ue.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ue.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ue.SEARCH_TYPES.EQUALS;if($n.indexOf(i)>=0&&$n.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ue.SEARCH_TYPES.CONTAINS;if($n.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ue.SEARCH_TYPES.ENDS_WITH;if($n.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ue.SEARCH_TYPES.STARTS_WITH;if(n.includes($n[0])||n.includes($n[1]))return ue.SEARCH_TYPES.EQUALS;throw new Error(Sw.UNKNOWN_SEARCH_TYPE)}else switch(s){case wo.VALUE_SEARCH_COMPARATORS.BETWEEN:return ue.SEARCH_TYPES.BETWEEN;case wo.VALUE_SEARCH_COMPARATORS.GREATER:return ue.SEARCH_TYPES.GREATER_THAN;case wo.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ue.SEARCH_TYPES.GREATER_THAN_EQUAL;case wo.VALUE_SEARCH_COMPARATORS.LESS:return ue.SEARCH_TYPES.LESS_THAN;case wo.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ue.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Sw.UNKNOWN_SEARCH_TYPE)}}a(Aw,"createSearchTypeFromSearchObject");Ow.exports={executeSearch:gw,createSearchTypeFromSearchObject:Aw,prepSearch:CQ,searchByType:Rw}});var bw=T((Che,Nw)=>{"use strict";var whe=Ps(),DQ=Pa(),PQ=G(),MQ=R(),UQ=qd();Nw.exports=vQ;function vQ(e,t){if(!PQ.isEmpty(t)&&MQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=DQ(e,"value");if(s)throw s;let n=!0;return UQ.prepSearch(e,t,n)}a(vQ,"lmdbGetDataByValue")});var Uu=T((Phe,yw)=>{"use strict";var Dhe=Ps(),BQ=Pa(),HQ=G(),qQ=R(),GQ=qd();yw.exports=FQ;async function FQ(e,t){if(!HQ.isEmpty(t)&&qQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=BQ(e,"value");if(s)throw s;return GQ.prepSearch(e,t,!1)}a(FQ,"lmdbSearchByValue")});var ww=T((vhe,Iw)=>{"use strict";var Uhe=Ke(),_S=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}},dS=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},fS=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Iw.exports={SearchByConditionsObject:_S,SearchCondition:dS,SortAttribute:fS}});var Mw=T((Ghe,Pw)=>{"use strict";var Hhe=ww().SearchByConditionsObject,xQ=Ps(),kQ=Pa(),ES=Da(),Gd=Ke(),{Resource:qhe}=(ws(),te(ep)),Dw=qd(),$Q=oS(),VQ=require("lodash"),{getSchemaPath:YQ}=Be(),Cw=Me(),{handleHDBError:KQ,hdb_errors:WQ}=Z(),{HTTP_STATUS_CODES:QQ}=WQ,jQ=1e8;Pw.exports=zQ;async function zQ(e){let t=kQ(e,"conditions");if(t)throw KQ(t,t.message,QQ.BAD_REQUEST,void 0,void 0,!0);e.operator=e.operator?e.operator.toLowerCase():void 0,e.offset=Number.isInteger(e.offset)?e.offset:0;let r=YQ(e.schema,e.table),s=await Cw.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)Cw.openDBI(s,_.search_attribute);let i=VQ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===Gd.SEARCH_TYPES.EQUALS?_.estimated_count=ES.count(s,_.search_attribute,_.search_value):l===Gd.SEARCH_TYPES.CONTAINS||l===Gd.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=jQ}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await Lw(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=s.dbis[n.hash_attribute],l=i.slice(1).map(Dw.filterByType),d=l.length,f=ES.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(E=>$Q.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await Lw(o,e,f,n.hash_attribute);c=c.concat(E)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=ES.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(zQ,"lmdbSearchByConditions");async function Lw(e,t,r,s){let n=new xQ(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Gd.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Dw.searchByType(e,n,i,s).map(o=>o.value)}a(Lw,"executeConditionSearch")});var vu=T((xhe,Uw)=>{"use strict";var JQ=R().OPERATIONS_ENUM,hS=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=JQ.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Uw.exports=hS});var mS=T(($he,kw)=>{"use strict";var qw=Ps(),Gw=vu(),Fw=Uu(),xw=Du(),lr=R(),vw=G(),Bw=Me(),{getTransactionAuditStorePath:XQ,getSchemaPath:ZQ}=Be(),Hw=v();kw.exports=ej;async function ej(e){try{if(vw.isEmpty(global.hdb_schema[e.schema])||vw.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await tj(e),await rj(e);let t=ZQ(e.schema,e.table);try{await Bw.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Hw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=XQ(e.schema,e.table);await Bw.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Hw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(ej,"lmdbDropTable");async function tj(e){let t=new qw(lr.SYSTEM_SCHEMA_NAME,lr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,lr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[lr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Fw(t)),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new Gw(lr.SYSTEM_SCHEMA_NAME,lr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await xw(n)}a(tj,"deleteAttributesFromSystem");async function rj(e){let t=new qw(lr.SYSTEM_SCHEMA_NAME,lr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,lr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[lr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,lr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,lr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await Fw(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new Gw(lr.SYSTEM_SCHEMA_NAME,lr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await xw(n)}catch(i){throw i}}a(rj,"dropTableFromSystem")});var Vw=T((Yhe,$w)=>{"use strict";var sj=require("fs-extra"),nj=Ps(),ij=Ma(),oj=vu(),aj=mS(),cj=Du(),uj=cS(),lj=Uu(),Vn=R(),{getSchemaPath:_j}=Be(),{handleHDBError:dj,hdb_errors:fj}=Z(),{HDB_ERROR_MSGS:Ej,HTTP_STATUS_CODES:hj}=fj;$w.exports=mj;async function mj(e){let t;try{t=await pj(e.schema);let r=new nj(Vn.SYSTEM_SCHEMA_NAME,Vn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Vn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Vn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await lj(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await aj(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new oj(Vn.SYSTEM_SCHEMA_NAME,Vn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await cj(n);let i=_j(t);await sj.remove(i)}catch(r){throw r}}a(mj,"lmdbDropSchema");async function pj(e){let t=new ij(Vn.SYSTEM_SCHEMA_NAME,Vn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Vn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await uj(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw dj(new Error,Ej.SCHEMA_NOT_FOUND(e),hj.NOT_FOUND,void 0,void 0,!0);return s}a(pj,"validateDropSchema")});var Bu=T((Whe,Yw)=>{"use strict";var pS=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};Yw.exports=pS});var TS=T((zhe,Kw)=>{"use strict";var Sj=require("fs-extra"),Fd=Me(),{getTransactionAuditStorePath:Tj}=Be(),SS=Ke(),jhe=Bu();Kw.exports=gj;async function gj(e){let t;try{let r=Tj(e.schema,e.table);await Sj.mkdirp(r),t=await Fd.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{Fd.createDBI(t,SS.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Fd.createDBI(t,SS.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Fd.createDBI(t,SS.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(gj,"createTransactionsAuditEnvironment")});var zw=T((Xhe,jw)=>{"use strict";var gS=R(),Ww=Me(),Rj=No(),{getSystemSchemaPath:Aj,getSchemaPath:Oj}=Be(),Nj=qn(),bj=Cd(),RS=wd(),yj=v(),Ij=TS(),OS=Nj.hdb_table,Qw=[];for(let e=0;e<OS.attributes.length;e++)Qw.push(OS.attributes[e].attribute);jw.exports=wj;async function wj(e,t){let r=Oj(t.schema,t.table),s=new RS(t.schema,t.table,gS.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new RS(t.schema,t.table,gS.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new RS(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Ww.createEnvironment(r,t.table),e!==void 0){let o=await Ww.openEnvironment(Aj(),gS.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Rj.insertRecords(o,OS.hash_attribute,Qw,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await AS(s),await AS(n),await AS(i)}await Ij(t)}catch(o){throw o}}a(wj,"lmdbCreateTable");async function AS(e){try{await bj(e)}catch(t){yj.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(AS,"createAttribute")});var Xw=T((eme,Jw)=>{"use strict";var Cj=Ou(),Lj=wu(),Dj=Dd(),Hu=R(),Pj=No().updateRecords,Mj=Me(),{getSchemaPath:Uj}=Be(),vj=Cu(),Bj=v();Jw.exports=Hj;async function Hj(e){try{let{schema_table:t,attributes:r}=Cj(e);Lj(e,r,t.hash_attribute),e.schema!==Hu.SYSTEM_SCHEMA_NAME&&(r.includes(Hu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Hu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Hu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Hu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Dj(e.hdb_auth_header,t,r),n=Uj(e.schema,e.table),i=await Mj.openEnvironment(n,e.table),o=await Pj(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await vj(e,o)}catch(c){Bj.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(Hj,"lmdbUpdateRecords")});var eC=T((rme,Zw)=>{"use strict";var qj=R().OPERATIONS_ENUM,NS=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=qj.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Zw.exports=NS});var rC=T((ime,tC)=>{"use strict";var nme=eC(),Gj=Ou(),Fj=wu(),xj=Dd(),qu=R(),kj=No().upsertRecords,$j=Me(),{getSchemaPath:Vj}=Be(),Yj=Cu(),Kj=v(),{handleHDBError:Wj,hdb_errors:Qj}=Z();tC.exports=jj;async function jj(e){let t;try{t=Gj(e)}catch(u){throw Wj(u,u.message,Qj.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;Fj(e,s,r.hash_attribute),e.schema!==qu.SYSTEM_SCHEMA_NAME&&(s.includes(qu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(qu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(qu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(qu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await xj(e.hdb_auth_header,r,s),i=Vj(e.schema,e.table),o=await $j.openEnvironment(i,e.table),c=await kj(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await Yj(e,c)}catch(u){Kj.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(jj,"lmdbUpsertRecords")});var nC=T((ame,sC)=>{"use strict";var bS=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};sC.exports=bS});var oC=T((ume,iC)=>{"use strict";var yS=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};iC.exports=yS});var uC=T((dme,cC)=>{"use strict";var IS=Me(),{getTransactionAuditStorePath:zj}=Be(),_me=nC(),Gu=Ke(),Jj=G(),aC=oC(),Xj=require("util").promisify,Zj=Xj(setTimeout),ez=1e4,tz=100;cC.exports=rz;async function rz(e){let t=zj(e.schema,e.table),r=await IS.openEnvironment(t,e.table,!0),s=IS.listDBIs(r);IS.initializeDBIs(r,Gu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new aC;do n=await sz(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await Zj(tz);while(n.transactions_deleted>0);return i}a(rz,"deleteAuditLogsBefore");async function sz(e,t){let r=new aC;try{let s=e.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Gu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Jj.isEmpty(c)||(n=e.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>ez)break}return await n,r}catch(s){throw s}}a(sz,"deleteTransactions")});var _C=T((Eme,lC)=>{"use strict";var wS=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};lC.exports=wS});var fC=T((pme,dC)=>{"use strict";var nz=Ps(),iz=vu(),mme=_C(),cn=R(),oz=G(),CS=Me(),az=qn(),cz=Uu(),uz=Du(),{getSchemaPath:lz}=Be();dC.exports=_z;async function _z(e,t=!0){let r;e.schema===cn.SYSTEM_SCHEMA_NAME?r=az[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await fz(e),n=lz(e.schema,e.table),i=await CS.openEnvironment(n,e.table);return t===!0&&await dz(e,i,r.hash_attribute),CS.dropDBI(i,e.attribute),s}a(_z,"lmdbDropAttribute");async function dz(e,t,r){let s=CS.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);n=t.dbis[r].put(o,_,u)}await n}a(dz,"removeAttributeFromAllObjects");async function fz(e){let t=new nz(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await cz(t)).filter(o=>o[cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(oz.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new iz(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return uz(i)}a(fz,"dropAttributeFromSystem")});var TC=T((gme,SC)=>{"use strict";var LS=Me(),Ua=Ke(),Tme=ar(),DS=R(),EC=G(),{getTransactionAuditStorePath:Ez}=Be(),hz=Da(),xd=wa(),mz=v();SC.exports=pz;async function pz(e){let t=Ez(e.schema,e.table),r=await LS.openEnvironment(t,e.table,!0),s=LS.listDBIs(r);LS.initializeDBIs(r,Ua.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case DS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return hC(r,e.search_values);case DS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,Tz(r,e.search_values,n);case DS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Sz(r,e.search_values);default:return hC(r)}}a(pz,"readAuditLog");function hC(e,t=[0,Date.now()]){EC.isEmpty(t[0])&&(t[0]=0),EC.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Ua.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new xd,n))}a(hC,"searchTransactionsByTimestamp");function Sz(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[Ua.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,pC(e,i))}return Object.fromEntries(r)}a(Sz,"searchTransactionsByUsername");function Tz(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=hz.equals(e,Ua.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ua.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);s.has(f)?s.get(f).push(_.toString()):s.set(f,[_.toString()])}}let n=Array.from(s.keys()),i=pC(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);mC(u,"records",r,l,o),mC(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(Tz,"searchTransactionsByHashValues");function mC(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(s.indexOf(u)>=0)if(n.has(u)){let _=n.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new xd(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new xd(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(mC,"loopRecords");function pC(e,t){let r=[];try{let s=e.dbis[Ua.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new xd,i);r.push(o)}}catch(i){mz.warn(i)}return r}catch(s){throw s}}a(pC,"batchSearchTransactions")});var RC=T((Nme,gC)=>{"use strict";var{getSchemaPath:Ame}=Be(),Ome=Me(),{database:gz}=(de(),te(De));gC.exports={writeTransaction:Rz};async function Rz(e,t,r){return gz({database:e,table:t}).transaction(r)}a(Rz,"writeTransaction")});var bC=T((yme,NC)=>{"use strict";var{getSchemaPath:AC}=Be(),OC=Me();NC.exports={flush:Az,resetReadTxn:Oz};async function Az(e,t){return(await OC.openEnvironment(AC(e,t),t.toString())).flushed}a(Az,"flush");async function Oz(e,t){try{(await OC.openEnvironment(AC(e,t),t.toString())).resetReadTxn()}catch{}}a(Oz,"resetReadTxn")});var CC=T((wme,wC)=>{"use strict";var{Readable:Nz}=require("stream"),{getDatabases:bz}=(de(),te(De)),{readSync:yz,openSync:Iz,createReadStream:yC}=require("fs"),{open:wz}=require("lmdb"),IC=pd(),Cz=Td(),{AUDIT_STORE_OPTIONS:Lz}=(Aa(),te(uy)),{INTERNAL_DBIS_NAME:Dz,AUDIT_STORE_NAME:Pz}=Ke();wC.exports=Uz;var PS=32768,Mz=100;async function Uz(e){let t=e.database||e.schema||"data",r=bz()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let _=r[n[0]];if(!_)throw new Error(`Can not find table ${n[0]}`);let l=_.dbisDB,d=wz({noSync:!0,maxDbs:Cz.MAX_DBS}),f,E=d.openDB(Dz,new IC(!1)),h=l.useReadTransaction(),p=0,S=a(async function(g,O){O.encoding="binary",O.encoder=void 0;let V=d.openDB(g,O),$=l.openDB(g,O);for(let{key:F,version:w,value:K}of $.getRange({transaction:h,versions:$.useVersions}))f=V.put(F,K,w),p++%Mz===0&&(await new Promise(B=>setTimeout(B,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:g,value:O}of l.getRange({transaction:h,start:!1}))if(n.some(V=>g.startsWith?.(V+"/"))){E.put(g,O);let[,V]=g.split("/"),$=!V,F=new IC(!$,$);await S(g,F)}e.include_audit&&await S(Pz,Object.assign({},Lz)),await f;let A=yC(d.path);return A.headers=u(),A.on("close",()=>{h.done(),d.close()}),A}let o=r[Object.keys(r)[0]].primaryStore,c=Iz(o.path);return o.transaction(()=>{let _=Buffer.alloc(PS);yz(c,_,0,PS);let l=o.useReadTransaction(),d=yC(null,{fd:c,start:PS}),f=new Nz.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",s),_}}a(Uz,"getBackup")});var PC=T((Lme,DC)=>{"use strict";var vz=v(),{handleHDBError:Bz}=Z(),Hz=jy(),qz=Cd(),Gz=tS(),Fz=VI(),xz=Du(),kz=cS(),$z=mw(),Vz=bw(),Yz=Uu(),Kz=Mw(),Wz=Vw(),Qz=zw(),jz=Xw(),zz=rC(),Jz=uC(),Xz=mS(),Zz=fC(),eJ=TC(),tJ=RC(),LC=bC(),rJ=CC(),MS=class extends Hz{static{a(this,"LMDBBridge")}async searchByConditions(t){return Kz(t)}async getDataByHash(t){return await kz(t)}async searchByHash(t){return await $z(t)}async getDataByValue(t,r){return await Vz(t,r)}async searchByValue(t){return await Yz(t)}async createSchema(t){return await Fz(t)}async dropSchema(t){return await Wz(t)}async createTable(t,r){return await Qz(t,r)}async dropTable(t){return await Xz(t)}async createAttribute(t){return await qz(t)}async createRecords(t){return await Gz(t)}async updateRecords(t){return await jz(t)}async upsertRecords(t){try{return await zz(t)}catch(r){throw Bz(r,null,null,vz.ERR,r)}}async deleteRecords(t){return await xz(t)}async dropAttribute(t){return await Zz(t)}async deleteAuditLogsBefore(t){return await Jz(t)}async readAuditLog(t){return await eJ(t)}writeTransaction(t,r,s){return tJ.writeTransaction(t,r,s)}flush(t,r){return LC.flush(t,r)}resetReadTxn(t,r){return LC.resetReadTxn(t,r)}getBackup(t){return rJ(t)}};DC.exports=MS});var xC={};Fe(xC,{ResourceBridge:()=>BS});function HS({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function UC(e,t){let r=un(e),s=HS(e,r);if(!r)throw new Ms.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user},o;We(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l=await r.get({id:_,lazy:n,select:s},i);return l=l&&sd(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function un(e){let t=e.database||e.schema||nJ,r=Us()[t];if(!r)throw(0,Ms.handleHDBError)(new Error,sJ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function vC(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*BC(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(o),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[o],records:[u]})}s&&(yield s)}var HC,kd,Ms,qC,GC,vs,US,vS,FC,sJ,nJ,iJ,oJ,MC,BS,kC=Re(()=>{"use strict";HC=M(PC()),kd=M(Pa()),Ms=M(Z());de();qC=M(Ou()),GC=M(wu()),vs=M(R()),US=M(kn()),vS=M(Ds()),FC=M(G());Ro();nd();({HDB_ERROR_MSGS:sJ}=Ms.hdb_errors),nJ="data",iJ=1e4,oJ=10,BS=class extends HC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),MC=this}async searchByConditions(t){let r=(0,kd.default)(t,"conditions");if(r)throw(0,Ms.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=un(t);if(!s)throw new Ms.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i=>({attribute:i.search_attribute,comparator:i.search_type,value:i.search_value}));return s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:HS(t,s),allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Ms.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}ut({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await un(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=un(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))n=i(o,c,u),await new Promise(_=>setImmediate(_));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){un(t).dropTable()}createSchema(t){return Fu({database:t.schema,table:null}),US.signalSchemaChange(new vS.SchemaEventMsg(process.pid,vs.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await qS(t.schema),US.signalSchemaChange(new vS.SchemaEventMsg(process.pid,vs.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,MC.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,qC.default)(t);(0,GC.default)(t,s,r.primaryKey);let n,i=Us()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return We(o,async c=>{if(!i.schemaDefined){n=[];for(let l of s)i.attributes.find(f=>f.name==l)||n.push(l);n.length>0&&await i.addAttributes(n.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=await i.get(l[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(l[i.primaryKey]);continue}d&&(d=sd(d));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let E=l[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,l[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(l),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=d[f]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:_}})}async deleteRecords(t){let r=Us()[t.schema][t.table],s={user:t.hdb_user};return We(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return vC(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=Us()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ms.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:vs.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,FC.async_set_timeout)(oJ),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%iJ===0&&await _();return u.length>0&&await _(),n?vC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,kd.default)(t,"hashes");if(r)throw r;return UC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of UC(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&vs.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,kd.default)(t,"value");if(s)throw s;let n=un(t);if(!n)throw new Ms.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===vs.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:HS(t,n)})}async getDataByValue(t,r){let s=new Map,n=un(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){un({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return un(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=un(t),s={};switch(t.search_type){case vs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case vs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of BC(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return BC(r,t.search_values?.[0],t.search_values?.[1])}}};a(HS,"getSelect");a(UC,"getRecords");a(un,"getTable");a(vC,"createDeleteResponse");a(BC,"groupRecordsInHistory")});var os=T((Bme,$C)=>{"use strict";var{ResourceBridge:aJ}=(kC(),te(xC)),cJ=j();cJ.initSync();var $d;function uJ(){return $d||($d=new aJ,$d)}a(uJ,"getBridge");$C.exports=uJ()});var WC=T((qme,KC)=>{"use strict";var VC=require("lodash"),xu=require("mathjs"),lJ=require("jsonata"),YC=G();KC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?VC.uniqWith(e,VC.isEqual):e,searchJSON:_J,mad:ku.bind(null,xu.mad),mean:ku.bind(null,xu.mean),mode:ku.bind(null,xu.mode),prod:ku.bind(null,xu.prod),median:ku.bind(null,xu.median)};function ku(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(ku,"aggregateFunction");function _J(e,t){if(typeof e!="string"||e.length===0)throw new Error("search json expression must be a non-empty string");let r="__"+e+"__";if(YC.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),YC.isEmpty(this.__ala__.res[r])){let s=lJ(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(_J,"searchJSON")});var jC=T((Fme,QC)=>{"use strict";var lt=require("moment"),GS="YYYY-MM-DDTHH:mm:ss.SSSZZ";lt.suppressDeprecationWarnings=!0;QC.exports={current_date:()=>lt().utc().format("YYYY-MM-DD"),current_time:()=>lt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return lt(e).utc().format("YYYY");case"month":return lt(e).utc().format("MM");case"day":return lt(e).utc().format("DD");case"hour":return lt(e).utc().format("HH");case"minute":return lt(e).utc().format("mm");case"second":return lt(e).utc().format("ss");case"millisecond":return lt(e).utc().format("SSS");default:break}},date:e=>lt(e).utc().format(GS),date_format:(e,t)=>lt(e).utc().format(t),date_add:(e,t,r)=>lt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>lt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=lt(e).utc(),n=lt(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>lt().utc().valueOf(),get_server_time:()=>lt().format(GS),offset_utc:(e,t)=>lt(e).utc().utcOffset(t).format(GS)}});var ZC=T((xme,XC)=>{"use strict";var dJ=require("@turf/area"),fJ=require("@turf/length"),EJ=require("@turf/circle"),hJ=require("@turf/difference"),mJ=require("@turf/distance"),pJ=require("@turf/boolean-contains"),SJ=require("@turf/boolean-equal"),TJ=require("@turf/boolean-disjoint"),gJ=require("@turf/helpers"),zC=R(),fe=G();XC.exports={geoArea:RJ,geoLength:AJ,geoCircle:OJ,geoDifference:NJ,geoDistance:JC,geoNear:bJ,geoContains:yJ,geoEqual:IJ,geoCrosses:wJ,geoConvert:CJ};var FS="geo1 is required",xS="geo2 is required";function RJ(e){if(fe.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=fe.autoCastJSON(e)),dJ.default(e)}a(RJ,"geoArea");function AJ(e,t){if(fe.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=fe.autoCastJSON(e)),fJ.default(e,{units:t||"kilometers"})}a(AJ,"geoLength");function OJ(e,t,r){if(fe.isEmpty(e))throw new Error("point is required");if(fe.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=fe.autoCastJSON(e)),EJ.default(e,t,{units:r||"kilometers"})}a(OJ,"geoCircle");function NJ(e,t){if(fe.isEmpty(e))throw new Error("poly1 is required");if(fe.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=fe.autoCastJSON(e)),typeof t=="string"&&(t=fe.autoCastJSON(t)),hJ(e,t)}a(NJ,"geoDifference");function JC(e,t,r){if(fe.isEmpty(e))throw new Error("point1 is required");if(fe.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=fe.autoCastJSON(e)),typeof t=="string"&&(t=fe.autoCastJSON(t)),mJ.default(e,t,{units:r||"kilometers"})}a(JC,"geoDistance");function bJ(e,t,r,s){if(fe.isEmpty(e))throw new Error("point1 is required");if(fe.isEmpty(t))throw new Error("point2 is required");if(fe.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=fe.autoCastJSON(e)),typeof t=="string"&&(t=fe.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return JC(e,t,s)<=r}a(bJ,"geoNear");function yJ(e,t){if(fe.isEmpty(e))throw new Error(FS);if(fe.isEmpty(e))throw new Error(xS);return typeof e=="string"&&(e=fe.autoCastJSON(e)),typeof t=="string"&&(t=fe.autoCastJSON(t)),pJ.default(e,t)}a(yJ,"geoContains");function IJ(e,t){if(fe.isEmpty(e))throw new Error(FS);if(fe.isEmpty(e))throw new Error(xS);return typeof e=="string"&&(e=fe.autoCastJSON(e)),typeof t=="string"&&(t=fe.autoCastJSON(t)),SJ.default(e,t)}a(IJ,"geoEqual");function wJ(e,t){if(fe.isEmpty(e))throw new Error(FS);if(fe.isEmpty(e))throw new Error(xS);return typeof e=="string"&&(e=fe.autoCastJSON(e)),typeof t=="string"&&(t=fe.autoCastJSON(t)),!TJ.default(e,t)}a(wJ,"geoCrosses");function CJ(e,t,r){if(fe.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(fe.isEmpty(t))throw new Error("geo_type is required");if(fe.isEmpty(zC.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(zC.GEO_CONVERSION_ENUM).join(",")}`);return gJ[t](e,r)}a(CJ,"geoConvert")});var Vd=T(($me,eL)=>{var Co=WC(),Hr=jC(),ln=ZC();eL.exports=e=>{e.aggr.mad=e.aggr.MAD=Co.mad,e.aggr.mean=e.aggr.MEAN=Co.mean,e.aggr.mode=e.aggr.MODE=Co.mode,e.aggr.prod=e.aggr.PROD=Co.prod,e.aggr.median=e.aggr.MEDIAN=Co.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Co.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Co.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Hr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Hr.current_time,e.fn.extract=e.fn.EXTRACT=Hr.extract,e.fn.date=e.fn.DATE=Hr.date,e.fn.date_format=e.fn.DATE_FORMAT=Hr.date_format,e.fn.date_add=e.fn.DATE_ADD=Hr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Hr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Hr.date_diff,e.fn.now=e.fn.NOW=Hr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Hr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Hr.get_server_time,e.fn.getdate=e.fn.GETDATE=Hr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Hr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=ln.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=ln.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=ln.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=ln.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=ln.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=ln.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=ln.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=ln.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=ln.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=ln.geoNear}});var nL=T((Vme,sL)=>{"use strict";var $u=require("lodash"),Ut=require("alasql");Ut.options.cache=!1;var LJ=Vd(),tL=require("clone"),Yd=require("recursive-iterator"),ne=v(),ae=G(),va=os(),DJ=R(),{hdb_errors:PJ}=Z(),{getDatabases:rL}=(de(),te(De)),MJ="IS NULL",Bs="There was a problem performing this search. Please check the logs and try again.";LJ(Ut);var kS=class{static{a(this,"SQLSearch")}constructor(t,r){if(ae.isEmpty(t))throw ne.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),ae.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!ae.isEmptyOrZeroLength(s))return ne.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw ne.error("Error thrown from checkEmptySQL in SQLSearch class method search."),ne.error(s),new Error(Bs)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw ne.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),ne.error(s),new Error(Bs)}if(Object.keys(this.data).length===0)return ne.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw ne.error("Error thrown from processJoins in SQLSearch class method search."),ne.error(s),new Error(Bs)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw ne.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),ne.error(s),new Error(Bs)}try{return t=await this._finalSQL(),t}catch(s){throw ne.error("Error thrown from finalSQL in SQLSearch class method search."),ne.error(s),new Error(Bs)}}_getColumns(){let t=new Yd(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(tL(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=$u.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=rL()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ae.isEmpty(this.statement.where)){ne.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Yd(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!ae.isEmpty(r)&&r.right)if(ae.isNotEmptyAndHasValue(r.right.value)){let s=ae.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new Ut.yy.LogicValue({value:s}):r.right instanceof Ut.yy.StringValue&&!ae.isEmpty(s)&&ae.autoCasterIsNumberCheck(s.toString())&&(r.right=new Ut.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=ae.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new Ut.yy.LogicValue({value:i}):s instanceof Ut.yy.StringValue&&ae.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new Ut.yy.NumValue({value:i}))});if(t){ne.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Yd(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!ae.isEmpty(DJ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ae.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ae.isEmptyOrZeroLength(r.left.columnid)||ae.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(ae.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!ae.isEmpty(r.right.value)||!ae.isEmpty(r.left.value)?s.add(ae.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)s.add(u[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(ae.isEmptyOrZeroLength(this.all_table_attributes)&&ae.isEmptyOrZeroLength(this.statement.from)&&ae.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&$u.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(ae.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ae.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(ae.isEmptyOrZeroLength(this.all_table_attributes)&&!ae.isEmptyOrZeroLength(this.columns.columns))return t;if(ae.isEmptyOrZeroLength(this.all_table_attributes)&&ae.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Ut.promise(r)}catch(r){throw ne.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),ne.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(tL(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(ae.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(MJ)>-1&&this.tables.forEach(n=>{let i={columnid:rL()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=$u.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,_=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!ae.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!ae.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await va.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(l){throw ne.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),ne.error(l),new Error(Bs)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let f=await va.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,ae.autoCast(E)))}))}catch(l){throw ne.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),ne.error(l),new Error(Bs)}else if(!ae.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!ae.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,f=l.length;d<f;d++){let E=l[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await va.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...s[i]],this._setMergedHashAttribute(i,ae.autoCast(p)));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]):(this.data[i].__merged_data[p]=[...s[i]],this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,ae.autoCast(p)))}}catch(l){throw ne.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),ne.error(l),new Error(Bs)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await va.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,ae.autoCast(d)));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]),this._setMergedHashAttribute(i,ae.autoCast(d)))}catch(l){throw ne.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),ne.error(l),new Error(Bs)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof Ut.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new Ut.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new Ut.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new Ut.yy.FuncValue:new Ut.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,p=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${p}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${p}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"",_="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(E=>{E.is_func?r.push(E.initial_select_column.toString()):E.initial_select_column.tableid?r.push(`${E.initial_select_column.tableid}.${E.initial_select_column.columnid} AS ${E.expression.columnid}`):r.push(`${E.initial_select_column.columnid} AS ${E.expression.columnid}`)}));let l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(E,n);f=await Ut.promise(h,t),t=null}catch(E){throw ne.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),ne.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let p=f[E];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),p=$u.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,A=p.length;S<A;S++){let g=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[g]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Yd(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=$u.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw ne.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),ne.error(i),new Error(Bs)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await va.getDataByHash(c),_=n.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let p=n.columns[h],S=E[p]===void 0?null:E[p];this.data[s].__merged_data[f].push(S)}}}}catch(r){throw ne.error("Error thrown from getDataByHash function in SQLSearch class method getData."),ne.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();ne.trace(`Final SQL: ${n}`),s=await Ut.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),ne.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw ne.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),ne.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return ne.error(PJ.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),ne.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=n[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;s=s.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;s=s.replace(u,_)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await va.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw ne.error("There was an error when processing this SQL operation. Check your logs"),ne.error(o),new Error(Bs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};sL.exports=kS});var _r=T((Kme,iL)=>{"use strict";var UJ=Wy();iL.exports={searchByConditions:BJ,searchByHash:HJ,searchByValue:qJ,search:GJ};var $S=os(),{transformReq:VS}=G(),vJ=nL();async function BJ(e){return VS(e),$S.searchByConditions(e)}a(BJ,"searchByConditions");async function HJ(e){VS(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of $S.searchByHash(e))r&&t.push(r);return t}a(HJ,"searchByHash");async function qJ(e){VS(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of $S.searchByValue(e))t.push(r);return t}a(qJ,"searchByValue");function GJ(e,t){try{let r=new UJ(e);r.validate(),new vJ(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(GJ,"search")});var Yn=T((Qme,uL)=>{"use strict";var Vu=require("crypto"),FJ=j(),{CONFIG_PARAMS:xJ}=R(),aL="aes-256-cbc",kJ=32,$J=16,YS=64,cL=32,VJ=YS+cL,oL=new Map;uL.exports={encrypt:YJ,decrypt:KJ,createNatsTableStreamName:WJ};function YJ(e){let t=Vu.randomBytes(kJ),r=Vu.randomBytes($J),s=Vu.createCipheriv(aL,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(YJ,"encrypt");function KJ(e){let t=e.substr(0,YS),r=e.substr(YS,cL),s=e.substr(VJ,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Vu.createDecipheriv(aL,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(KJ,"decrypt");function WJ(e,t){let r=FJ.get(xJ.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=oL.get(r);return s||(s=Vu.createHash("md5").update(r).digest("hex"),oL.set(r,s)),s}a(WJ,"createNatsTableStreamName")});var Mi=T((Jme,_L)=>{"use strict";var zme=_r(),Kd=v(),lL=Id(),QJ=Yn(),Wd=G(),{handleHDBError:Qd,hdb_errors:jJ}=Z(),{HDB_ERROR_MSGS:jd,HTTP_STATUS_CODES:KS}=jJ,zJ=j();zJ.initSync();var{getDatabases:WS}=(de(),te(De));_L.exports={describeAll:JJ,describeTable:zd,describeSchema:XJ};async function JJ(e){try{let t=Wd.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=WS(),i={},o={},c=[],u=e?.exact_count;for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let d=n[l];for(let f in d)try{let E;if(t||s)E=await zd({schema:l,table:f,exact_count:u});else if(r&&r[l].describe&&r[l].tables[f].describe){let h=r[l].tables[f].attribute_permissions;E=await zd({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){Kd.error(E)}}let _={};for(let l in c)t||s?(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||s?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return Kd.error("Got an error in describeAll"),Kd.error(t),Qd(new Error,jd.DESCRIBE_ALL_ERR)}}a(JJ,"describeAll");async function zd(e,t){Wd.transformReq(e);let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i=lL.describe_table(e);if(i)throw i;let c=WS()[r];if(!c)throw Qd(new Error,jd.SCHEMA_NOT_FOUND(e.schema),KS.NOT_FOUND);let u=c[s];if(!u)throw Qd(new Error,jd.TABLE_NOT_FOUND(e.schema,e.table),KS.NOT_FOUND);function _(f){l.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let l=[];if(n){let f={};n.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),u.attributes.forEach(E=>{f[E.name]&&_(E)})}else u.attributes?.forEach(f=>_(f));let d={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l};d.clustering_stream_name=QJ.createNatsTableStreamName(d.schema,d.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=u.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&u.indices.__updatedtime__)for(let h of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){Kd.warn(`unable to stat table dbi due to ${f}`)}return d}a(zd,"descTable");async function XJ(e){Wd.transformReq(e);let t=lL.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),i=WS()[s];if(!i)throw Qd(new Error,jd.SCHEMA_NOT_FOUND(e.schema),KS.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),Wd.isEmpty(u)||u.describe){let _=await zd({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(XJ,"describeSchema")});var as=T((tpe,mL)=>{var ZJ=qn(),{callbackify:fL,promisify:e2}=require("util"),{getDatabases:EL}=(de(),te(De));mL.exports={setSchemaDataToGlobal:dL,getTableSchema:t2,getSystemSchema:r2,setSchemaDataToGlobalAsync:e2(dL)};var hL=Mi(),Zme=fL(hL.describeAll),epe=fL(hL.describeTable);function dL(e){global.hdb_schema=EL(),e&&e()}a(dL,"setSchemaDataToGlobal");function t2(e,t,r){let s=EL()[e];if(!s)return r(`schema ${e} does not exist`);let n=s[t];return n?r(null,{schema:e,name:t,hash_attribute:n.primaryKey}):r(`table ${e}.${t} does not exist`)}a(t2,"getTableSchema");function r2(){return ZJ}a(r2,"getSystemSchema")});var dr=T((spe,gL)=>{"use strict";var Xd=Kp(),vt=G(),s2=require("util"),Zd=os(),n2=as(),pL=v(),{handleHDBError:Lo,hdb_errors:i2}=Z(),{HTTP_STATUS_CODES:Do}=i2,o2=s2.promisify(n2.getTableSchema),a2="updated",SL="inserted",TL="upserted";gL.exports={insert:u2,update:l2,upsert:_2,validation:c2,flush:d2};async function c2(e){if(vt.isEmpty(e))throw new Error("invalid update parameters defined.");if(vt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(vt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await o2(e.schema,e.table),r=Xd(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&vt.isEmptyOrZeroLength(c[s]))throw pL.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!vt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw pL.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!vt.isEmpty(c[s])&&c[s]!==""&&n.has(vt.autoCast(c[s]))&&(c.skip=!0),n.add(vt.autoCast(c[s]));for(let u in c)i[u]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(c2,"validation");async function u2(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Xd(e);if(t)throw Lo(new Error,t.message,Do.BAD_REQUEST);vt.transformReq(e);let r=vt.checkSchemaTableExist(e.schema,e.table);if(r)throw Lo(new Error,r,Do.BAD_REQUEST);let s=await Zd.createRecords(e);return Jd(SL,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(u2,"insertData");async function l2(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Xd(e);if(t)throw Lo(new Error,t.message,Do.BAD_REQUEST);vt.transformReq(e);let r=vt.checkSchemaTableExist(e.schema,e.table);if(r)throw Lo(new Error,r,Do.BAD_REQUEST);let s=await Zd.updateRecords(e);return vt.isEmpty(s.existing_rows)?Jd(a2,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Jd(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(l2,"updateData");async function _2(e){if(e.operation!=="upsert")throw Lo(new Error,"invalid operation, must be upsert",Do.INTERNAL_SERVER_ERROR);let t=Xd(e);if(t)throw Lo(new Error,t.message,Do.BAD_REQUEST);vt.transformReq(e);let r=vt.checkSchemaTableExist(e.schema,e.table);if(r)throw Lo(new Error,r,Do.BAD_REQUEST);let s=await Zd.upsertRecords(e);return Jd(TL,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(_2,"upsertData");function Jd(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===SL?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===TL?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Jd,"returnObject");function d2(e){return vt.transformReq(e),Zd.flush(e.schema,e.table)}a(d2,"flush")});var jS=T((ipe,OL)=>{var f2=Ve(),QS=require("joi"),{hdb_table:E2,hdb_database:RL}=on(),AL={schema:RL,database:RL,table:E2},h2={date:QS.date().iso().required()},m2={timestamp:QS.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};OL.exports=function(e,t){let r=t==="timestamp"?{...AL,...m2}:{...AL,...h2},s=QS.object(r);return f2.validateBySchema(e,s)}});var yL=T((ope,bL)=>{var p2=Ve(),zS=require("joi"),{hdb_table:S2,hdb_database:NL}=on(),T2=zS.object({schema:NL,database:NL,table:S2,hash_values:zS.array().required(),ids:zS.array()});bL.exports=function(e){return p2.validateBySchema(e,T2)}});var eT=T((ape,IL)=>{"use strict";var JS=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}},XS=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}},ZS=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};IL.exports={InsertObject:JS,NoSQLSeachObject:XS,DeleteResponseObject:ZS}});var Uo=T((upe,PL)=>{"use strict";var CL=jS(),g2=yL(),Po=G(),wL=require("moment"),LL=v(),{promisify:R2,callbackify:A2}=require("util"),Mo=R(),O2=as(),tT=R2(O2.getTableSchema),rT=os(),{DeleteResponseObject:N2}=eT(),{handleHDBError:Ui,hdb_errors:b2}=Z(),{HDB_ERROR_MSGS:ef,HTTP_STATUS_CODES:vi}=b2,y2="records successfully deleted",I2=A2(DL);PL.exports={delete:I2,deleteRecord:DL,deleteFilesBefore:w2,deleteAuditLogsBefore:C2};async function w2(e){let t=CL(e,"date");if(t)throw Ui(t,t.message,vi.BAD_REQUEST,void 0,void 0,!0);if(Po.transformReq(e),!wL(e.date,wL.ISO_8601).isValid())throw Ui(new Error,ef.INVALID_DATE,vi.BAD_REQUEST,Mo.LOG_LEVELS.ERROR,ef.INVALID_DATE,!0);let s=Po.checkSchemaTableExist(e.schema,e.table);if(s)throw Ui(new Error,s,vi.NOT_FOUND,Mo.LOG_LEVELS.ERROR,s,!0);let n=await rT.deleteRecordsBefore(e);if(await tT(e.schema,e.table),LL.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(w2,"deleteFilesBefore");async function C2(e){let t=CL(e,"timestamp");if(t)throw Ui(t,t.message,vi.BAD_REQUEST,void 0,void 0,!0);if(Po.transformReq(e),isNaN(e.timestamp))throw Ui(new Error,ef.INVALID_VALUE("Timestamp"),vi.BAD_REQUEST,Mo.LOG_LEVELS.ERROR,ef.INVALID_VALUE("Timestamp"),!0);let r=Po.checkSchemaTableExist(e.schema,e.table);if(r)throw Ui(new Error,r,vi.NOT_FOUND,Mo.LOG_LEVELS.ERROR,r,!0);let s=await rT.deleteAuditLogsBefore(e);return await tT(e.schema,e.table),LL.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(C2,"deleteAuditLogsBefore");async function DL(e){e.ids&&(e.hash_values=e.ids);let t=g2(e);if(t)throw Ui(t,t.message,vi.BAD_REQUEST,void 0,void 0,!0);Po.transformReq(e);let r=Po.checkSchemaTableExist(e.schema,e.table);if(r)throw Ui(new Error,r,vi.NOT_FOUND,Mo.LOG_LEVELS.ERROR,r,!0);try{await tT(e.schema,e.table);let s=await rT.deleteRecords(e);return Po.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${y2}`),s}catch(s){if(s.message===Mo.SEARCH_NOT_FOUND_MESSAGE){let n=new N2;return n.message=Mo.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(DL,"deleteRecord")});var tf=T((_pe,vL)=>{var L2=require("crypto"),ML=9;function D2(e){let t=M2(ML),r=UL(e+t);return t+r}a(D2,"createHash");function P2(e,t){let r=e.substr(0,ML),s=r+UL(t+r);return e===s}a(P2,"validateHash");function M2(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(M2,"generateSalt");function UL(e){return L2.createHash("md5").update(e).digest("hex")}a(UL,"md5");vL.exports={hash:D2,validate:P2}});var HL=T((fpe,BL)=>{var sT=Ve(),jt={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function U2(e){return jt.password.presence=!0,jt.username.presence=!0,jt.role.presence=!0,jt.active.presence=!0,sT.validateObject(e,jt)}a(U2,"addUserValidation");function v2(e){return jt.password.presence=!1,jt.username.presence=!0,jt.role.presence=!1,jt.active.presence=!1,sT.validateObject(e,jt)}a(v2,"alterUserValidation");function B2(e){return jt.password.presence=!1,jt.username.presence=!0,jt.role.presence=!1,jt.active.presence=!1,sT.validateObject(e,jt)}a(B2,"dropUserValidation");BL.exports={addUserValidation:U2,alterUserValidation:v2,dropUserValidation:B2}});var ke=T((mpe,GL)=>{"use strict";var{platform:hpe}=require("os"),H2="nats-server.zip",nT="nats-server",q2=process.platform==="win32"?`${nT}.exe`:nT,iT="HDB",G2=/^[^\s.,*>]+$/,qL="__request__",F2=a(e=>`${e}.${qL}`,"REQUEST_SUBJECT"),x2={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},k2={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},$2={HUB:"hub.pid",LEAF:"leaf.pid"},V2={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Y2={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:iT,deliver_subject:"__HDB__.WORKQUEUE"},K2={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:iT,deliver_subject:"HDB.SCHEMAQUEUE"},W2={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:iT,deliver_subject:"HDB.USERQUEUE"},Q2={SUCCESS:"success",ERROR:"error"},j2={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},z2={TXN:"txn",MSGID:"msgid"},Ba={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},J2={[Ba.ERR]:1,[Ba.WRN]:2,[Ba.INF]:3,[Ba.DBG]:4,[Ba.TRC]:5},X2={debug:"-D",trace:"-DVV"};GL.exports={NATS_SERVER_ZIP:H2,NATS_SERVER_NAME:nT,NATS_BINARY_NAME:q2,PID_FILES:$2,NATS_CONFIG_FILES:k2,SERVER_SUFFIX:V2,WORK_QUEUE_CONSUMER_NAMES:Y2,SCHEMA_QUEUE_CONSUMER_NAMES:K2,USER_QUEUE_CONSUMER_NAMES:W2,NATS_TERM_CONSTRAINTS_RX:G2,REQUEST_SUFFIX:qL,UPDATE_REMOTE_RESPONSE_STATUSES:Q2,CLUSTER_STATUS_STATUSES:j2,REQUEST_SUBJECT:F2,SUBJECT_PREFIXES:z2,MSG_HEADERS:x2,LOG_LEVELS:Ba,LOG_LEVEL_FLAGS:X2,LOG_LEVEL_HIERARCHY:J2}});var oT=T((Spe,FL)=>{"use strict";var Z2={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,String.fromCharCode(13,10)),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,String.fromCharCode(13,10))},e4="certificate.pem",t4="privateKey.pem",r4="ca.pem";FL.exports={CERTIFICATE_VALUES:Z2,CERTIFICATE_PEM_NAME:e4,PRIVATEKEY_PEM_NAME:t4,CA_PEM_NAME:r4}});var cT=T((gpe,YL)=>{"use strict";var VL=require("fs-extra"),_e=require("joi"),s4=require("os"),{boolean:Pe,string:_n,number:Bt,array:aT}=_e.types(),{totalmem:xL}=require("os"),Ha=require("path"),n4=v(),sf=G(),Tpe=oT(),kL=R(),i4=Ve(),$L="log",o4="components",a4="Invalid logging.rotation.maxSize unit. Available units are G, M or K",c4="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",u4="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",l4="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",_4="rootPath config parameter is undefined",d4="clustering.enabled config parameter is undefined",vo=Bt.min(0).required(),nf=aT.items({host:_n.required(),port:vo}).empty(null),Kn;YL.exports={configValidator:f4,routesValidator:T4,route_constraints:nf};function f4(e){if(Kn=e.rootPath,sf.isEmpty(Kn))throw _4;let t=Pe.required(),r=Bt.min(0).max(1e3).empty(null).default(S4),s=_n.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(rf),n=_n.optional().empty(null),i=_n.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=_e.string().empty(null).default(rf),c=_e.custom(h4).empty(null).default(rf),u=e.clustering?.enabled;if(sf.isEmpty(u))throw d4;let _;return u===!0?_=_e.object({enabled:t,hubServer:_e.object({cluster:_e.object({name:_e.required().empty(null),network:_e.object({port:vo,routes:nf}).required()}).required(),leafNodes:_e.object({network:_e.object({port:vo}).required()}).required(),network:_e.object({port:vo}).required()}).required(),leafServer:_e.object({network:_e.object({port:vo,routes:nf}).required(),streams:_e.object({maxAge:Bt.min(120).allow(null).optional(),maxBytes:Bt.min(1).allow(null).optional(),maxMsgs:Bt.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:_e.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Pe.optional(),databaseLevel:Pe.optional(),tls:_e.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Pe.required(),verify:Pe.optional()}),user:_n.optional().empty(null)}).required():_=_e.object({enabled:t,tls:_e.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Pe.required()})}).required(),_e.object({authentication:_e.object({authorizeLocal:Pe,cacheTTL:Bt.required(),enableSessions:Pe}),analytics:_e.object({aggregatePeriod:Bt}),componentsRoot:s.optional(),clustering:_,localStudio:_e.object({enabled:t}).required(),logging:_e.object({auditAuthEvents:_e.object({logFailed:Pe,logSuccessful:Pe}),file:Pe.required(),level:_e.valid("notify","fatal","error","warn","info","debug","trace"),rotation:_e.object({enabled:Pe.optional(),compress:Pe.optional(),interval:_n.custom(p4).optional().empty(null),maxSize:_n.custom(m4).optional().empty(null),path:_n.optional().empty(null).default(rf)}).required(),root:s,stdStreams:Pe.required(),auditLog:Pe.required()}).required(),operationsApi:_e.object({network:_e.object({cors:Pe.optional(),corsAccessList:aT.optional(),headersTimeout:Bt.min(1).optional(),keepAliveTimeout:Bt.min(1).optional(),port:Bt.optional().empty(null),securePort:Bt.optional().empty(null),timeout:Bt.min(1).optional()}).optional(),tls:_e.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:_n.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:_e.object({network:_e.object({port:vo,securePort:vo}).required(),webSocket:Pe.optional(),requireAuthentication:Pe.optional()}),http:_e.object({compressionThreshold:Bt.optional(),cors:Pe.optional(),corsAccessList:aT.optional(),headersTimeout:Bt.min(1).optional(),port:Bt.min(0).optional().empty(null),securePort:Bt.min(0).optional().empty(null)}).required(),threads:r.optional(),storage:_e.object({writeAsync:Pe.required(),overlappingSync:Pe.optional(),caching:Pe.optional(),compression:Pe.optional(),noReadAhead:Pe.optional(),path:c,prefetchWrites:Pe.optional()}).required(),ignoreScripts:Pe.optional(),tls:_e.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(f4,"configValidator");function E4(e){return VL.existsSync(e)?null:`Specified path ${e} does not exist.`}a(E4,"doesPathExist");function h4(e,t){_e.assert(e,_n.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=E4(e);if(r)return t.message(r)}a(h4,"validatePath");function m4(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(a4);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(u4):e}a(m4,"validateRotationMaxSize");function p4(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(c4);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(l4):e}a(p4,"validateRotationInterval");function S4(e,t){let r=t.state.path.join("."),s=s4.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||xL();return i=Math.round(Math.min(i,xL())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),n4.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(S4,"setDefaultThreads");function rf(e,t){if(!sf.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(sf.isEmpty(Kn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Ha.join(Kn,o4);case"logging.root":return Ha.join(Kn,$L);case"clustering.leafServer.streams.path":return Ha.join(Kn,"clustering","leaf");case"storage.path":let s=Ha.join(Kn,kL.LEGACY_DATABASES_DIR_NAME);return VL.existsSync(s)?s:Ha.join(Kn,kL.DATABASES_DIR_NAME);case"logging.rotation.path":return Ha.join(Kn,$L);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(rf,"setDefaultRoot");function T4(e){let t=_e.object({routes:nf});return i4.validateBySchema({routes:e},t)}a(T4,"routesValidator")});var rt=T((Ope,eD)=>{"use strict";var qr=R(),yt=G(),gt=v(),{configValidator:g4,routesValidator:KL}=cT(),fr=require("fs-extra"),R4=require("yaml"),Hs=require("path"),A4=require("is-number"),QL=require("properties-reader"),O4=require("lodash"),{handleHDBError:N4}=Z(),{HTTP_STATUS_CODES:b4,HDB_ERROR_MSGS:of}=Mr(),Ape=require("minimist"),{server:y4}=(Pr(),te(So)),{DATABASES_PARAM_CONFIG:Yu,CONFIG_PARAMS:Wn,CONFIG_PARAM_MAP:qs}=qr,I4="Unable to get config value because config is uninitialized",w4="Config successfully initialized",C4="Error backing up config file",L4="Empty parameter sent to getConfigValue",jL=Hs.join(qr.PACKAGE_ROOT,"config","yaml",qr.HDB_DEFAULT_CONFIG_FILE),D4="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",WL={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"},af,Ht,cf;eD.exports={createConfigFile:P4,getDefaultConfig:M4,getConfigValue:JL,initConfig:lT,flattenConfig:qa,updateConfigValue:XL,updateConfigObject:v4,getConfiguration:q4,setConfiguration:G4,readConfigFile:dT,getClusteringRoutes:F4,initOldConfig:ZL,getConfigFromFile:x4,getConfigFilePath:Bo,addConfig:k4,deleteConfigFromFile:$4,getConfigObj:V4};function P4(e){let t=Bi(jL);af=qa(t.toJSON());let r;for(let o in e){let c=qs[o.toLowerCase()];if(c===Wn.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=uT(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){gt.error(l)}}}r&&zL(t,r),_T(t);let s=t.toJSON();Ht=qa(s);let n=t.getIn(["rootPath"]),i=Hs.join(n,qr.HDB_CONFIG_FILE);fr.createFileSync(i),fr.writeFileSync(i,String(t)),gt.trace(`Config file written to ${i}`)}a(P4,"createConfigFile");function zL(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!yt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Yu.TABLES))for(let i in s[n][Yu.TABLES])for(let o in s[n][Yu.TABLES][i]){let c=s[n][Yu.TABLES][i][o],u=[Wn.DATABASES,n,Yu.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[Wn.DATABASES,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){gt.error("Error parsing schemas CLI/env config arguments",s)}}a(zL,"setSchemasConfig");function M4(e){if(af===void 0){let r=Bi(jL);af=qa(r.toJSON())}let t=qs[e.toLowerCase()];if(t!==void 0)return af[t.toLowerCase()]}a(M4,"getDefaultConfig");function JL(e){if(e==null){gt.error(L4);return}if(Ht===void 0){gt.trace(I4);return}let t=qs[e.toLowerCase()];if(t!==void 0)return Ht[t.toLowerCase()]}a(JL,"getConfigValue");function Bo(e=yt.getPropsFilePath()){let t=yt.getEnvCliRootPath();return t?Hs.join(t,qr.HDB_CONFIG_FILE):QL(e).get(qr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Bo,"getConfigFilePath");function lT(e=!1){if(Ht===void 0||e){let t;if(!yt.noBootFile()){t=yt.getPropsFilePath();try{fr.accessSync(t,fr.constants.F_OK|fr.constants.R_OK)}catch(i){throw gt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Bo(t),s;if(r.includes("config/settings.js"))try{ZL(r);return}catch(i){if(i.code!==qr.NODE_ERROR_CODES.ENOENT)throw i}try{s=Bi(r)}catch(i){if(i.code===qr.NODE_ERROR_CODES.ENOENT){gt.trace(`HarperDB config file not found at ${r}.
|
|
6
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw gt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}U4(s,r),_T(s);let n=s.toJSON();if(y4.config=n,Ht=qa(n),Ht.logging_rotation_rotate)for(let i in WL)Ht[i]&>.error(`Config ${WL[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);gt.trace(w4)}}a(lT,"initConfig");function U4(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Hs.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Hs.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Hs.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(gt.trace("Updating config file with missing config params"),fr.writeFileSync(t,String(e)))}a(U4,"checkForUpdatedConfig");function _T(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=g4(t);if(r.error)throw of.CONFIG_VALIDATION(r.error.message);e.setIn(["threads"],r.value.threads),e.setIn(["componentsRoot"],r.value.componentsRoot),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams?.path)}a(_T,"validateConfig");function v4(e,t){Ht===void 0&&(Ht={});let r=qs[e.toLowerCase()];if(r===void 0){gt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ht[r.toLowerCase()]=t}a(v4,"updateConfigObject");function XL(e,t,r=void 0,s=!1,n=!1,i=!1){Ht===void 0&&lT();let o=JL(qs.hdb_root),c=Hs.join(o,qr.HDB_CONFIG_FILE),u=Bi(c),_;if(r===void 0&&e.toLowerCase()===Wn.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=qs[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=uT(f,t);u.setIn([...E],h)}else for(let f in r){let E=qs[f.toLowerCase()];if(E===Wn.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=qr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=uT(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{u.setIn([...h],S)}catch(A){gt.error(A)}}}_&&zL(u,_),_T(u);let l=u.getIn(["rootPath"]),d=Hs.join(l,qr.HDB_CONFIG_FILE);s===!0&&B4(c,l),fr.writeFileSync(d,String(u)),n&&(Ht=qa(u.toJSON())),gt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(XL,"updateConfigValue");function B4(e,t){try{let r=Hs.join(t,"backup",`${qr.HDB_CONFIG_FILE}.bak`);fr.copySync(e,r),gt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){gt.error(C4),gt.error(r)}}a(B4,"backupConfigFile");var H4=["databases"];function qa(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)),cf=e,r(e);function r(s){let n={};for(let i in s)if(s.hasOwnProperty(i))if(typeof s[i]=="object"&&s[i]!==null&&!Array.isArray(s[i])&&!H4.includes(i)){let o=r(s[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!Wn[u.toUpperCase()]&&qs[u]&&(n[qs[u].toLowerCase()]=o[c]),n[u]=o[c]}}else n[i.toLowerCase()]=s[i];return n}a(r,"squashObj")}a(qa,"flattenConfig");function uT(e,t){if(e===Wn.CLUSTERING_NODENAME||e===Wn.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(A4(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||yt.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 yt.autoCast(t)}a(uT,"castConfigValue");function q4(){let e=yt.getPropsFilePath(),t=Bo(e);return Bi(t).toJSON()}a(q4,"getConfiguration");async function G4(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return XL(void 0,void 0,n,!0),D4}catch(i){throw typeof i=="string"||i instanceof String?N4(i,i,b4.BAD_REQUEST,void 0,void 0,!0):i}}a(G4,"setConfiguration");function dT(){let e=yt.getPropsFilePath();try{fr.accessSync(e,fr.constants.F_OK|fr.constants.R_OK)}catch(s){if(!yt.noBootFile())throw gt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Bo(e);return Bi(t).toJSON()}a(dT,"readConfigFile");function Bi(e){return R4.parseDocument(fr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Bi,"parseYamlDoc");function F4(){let e=dT(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=yt.isEmptyOrZeroLength(t)?[]:t;let r=KL(t);if(r)throw of.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=yt.isEmptyOrZeroLength(s)?[]:s;let n=KL(s);if(n)throw of.CONFIG_VALIDATION(n.message);if(!yt.isEmptyOrZeroLength(s)&&!yt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!yt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw of.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(F4,"getClusteringRoutes");function ZL(e){let t=QL(e);Ht={};for(let r in qs){let s=t.get(r.toUpperCase());if(yt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=qs[r].toLowerCase();n===Wn.LOGGING_ROOT?Ht[n]=Hs.dirname(s):Ht[n]=s}return Ht}a(ZL,"initOldConfig");function x4(e){let t=dT();return O4.get(t,e.replaceAll("_","."))}a(x4,"getConfigFromFile");async function k4(e,t){let r=Bi(Bo());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await fr.writeFile(Bo(),String(r))}a(k4,"addConfig");function $4(e){let t=Bo(yt.getPropsFilePath()),r=Bi(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=Hs.join(s,qr.HDB_CONFIG_FILE);fr.writeFileSync(n,String(r))}a($4,"deleteConfigFromFile");function V4(){return cf||(lT(),cf)}a(V4,"getConfigObj")});var rD=T((bpe,tD)=>{"use strict";var uf=R(),lf=class{static{a(this,"BaseLicense")}constructor(t=0,r=uf.RAM_ALLOCATION_ENUM.DEFAULT,s=uf.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},fT=class extends lf{static{a(this,"ExtendedLicense")}constructor(t=0,r=uf.RAM_ALLOCATION_ENUM.DEFAULT,s=uf.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};tD.exports={BaseLicense:lf,ExtendedLicense:fT}});var Ku=T((Ipe,cD)=>{"use strict";var Fa=require("fs-extra"),sD=tf(),nD=require("crypto"),Y4=require("moment"),K4=require("uuid").v4,zt=v(),hT=require("path"),W4=G(),Hi=R(),Q4=rD().ExtendedLicense,Ga="invalid license key format",j4="061183",z4="mofi25",J4="aes-256-cbc",X4=16,Z4=32,iD=j();iD.initSync();var ET;cD.exports={validateLicense:oD,generateFingerPrint:t3,licenseSearch:aD,getLicense:n3};function mT(){return hT.join(iD.getHdbBasePath(),Hi.LICENSE_KEY_DIR_NAME,Hi.LICENSE_FILE_NAME)}a(mT,"getLicenseDirPath");function e3(){let e=mT();return hT.join(e,Hi.LICENSE_FILE_NAME)}a(e3,"getLicenseFilePath");function pT(){let e=mT();return hT.join(e,Hi.REG_KEY_FILE_NAME)}a(pT,"getFingerPrintFilePath");async function t3(){let e=pT();try{return await Fa.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await r3();throw zt.error(`Error writing fingerprint file to ${e}`),zt.error(t),new Error("There was an error generating the fingerprint")}}a(t3,"generateFingerPrint");async function r3(){let e=K4(),t=sD.hash(e),r=pT();try{await Fa.mkdirp(mT()),await Fa.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw zt.error(`Error writing fingerprint file to ${r}`),zt.error(s),new Error("There was an error generating the fingerprint")}return t}a(r3,"writeFingerprint");function oD(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Hi.RAM_ALLOCATION_ENUM.DEFAULT,version:Hi.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return zt.error("empty license key passed to validate."),r;let s=pT(),n=!1;try{n=Fa.statSync(s)}catch(i){zt.error(i)}if(n){let i;try{i=Fa.readFileSync(s,"utf8")}catch{zt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(z4),c=o[1];c=Buffer.concat([Buffer.from(c)],X4);let u=Buffer.concat([Buffer.from(i)],Z4),_=nD.createDecipheriv(J4,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=s3(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Ga),zt.error(Ga),new Error(Ga)}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(Ga),zt.error(Ga),new Error(Ga)}else r.exp_date=l;r.exp_date<Y4().valueOf()&&(r.valid_date=!1),sD.validate(o[1],`${j4}${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||zt.error("Invalid licence"),r}a(oD,"validateLicense");function s3(e,t){try{let r=nD.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{zt.warn("Check old license failed")}}a(s3,"checkOldLicense");function aD(){let e=new Q4,t=[];try{t=Fa.readFileSync(e3(),"utf-8").split(Hi.NEW_LINE)}catch(r){r.code==="ENOENT"?zt.info("no license file found"):zt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(W4.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=oD(n.license_key,n.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(n){zt.error("There was an error parsing the license string."),zt.error(n),e.ram_allocation=Hi.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return ET=e,e}a(aD,"licenseSearch");async function n3(){return ET||await aD(),ET}a(n3,"getLicense")});var Er=T((Ppe,ND)=>{"use strict";var dD="username is required",fD="nothing to update, must supply active, role or password to update",ED="password cannot be an empty string",hD="If role is specified, it cannot be empty.",mD="active must be true or false";ND.exports={addUser:f3,alterUser:E3,dropUser:m3,getSuperUser:g3,userInfo:p3,listUsers:df,listUsersExternal:S3,setUsersToGlobal:ka,findAndValidateUser:AD,getClusterUser:R3,USERNAME_REQUIRED:dD,ALTERUSER_NOTHING_TO_UPDATE:fD,EMPTY_PASSWORD:ED,EMPTY_ROLE:hD,ACTIVE_BOOLEAN:mD};var pD=dr(),i3=Uo(),gT=tf(),SD=HL(),TD=_r(),RT=kn(),Gr=G(),gD=require("validate.js"),Ee=v(),{promisify:o3}=require("util"),AT=Yn(),uD=R(),lD=ke(),a3=rt(),Cpe=j(),Lpe=Ku(),c3=qn(),{table:Dpe}=(de(),te(De)),{handleHDBError:dn,hdb_errors:u3}=Z(),{HTTP_STATUS_CODES:fn,AUTHENTICATION_ERROR_MSGS:ST,HDB_ERROR_MSGS:xa}=u3,{UserEventMsg:OT}=Ds(),TT=require("lodash"),{server:NT}=(Pr(),te(So)),l3=v();NT.getUser=AD;var RD={username:!0,active:!0,role:!0,password:!0},_D=new Map,_f=TD.searchByValue,_3=TD.searchByHash,d3=o3(i3.delete);async function f3(e){let t=gD.cleanAttributes(e,RD),r=SD.addUserValidation(t);if(r)throw dn(new Error,r.message,fn.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await _f(s),n=n&&Array.from(n)}catch(u){throw Ee.error("There was an error searching for a role in add user"),Ee.error(u),u}if(!n||n.length<1)throw dn(new Error,xa.ROLE_NAME_NOT_FOUND(t.role),fn.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw dn(new Error,xa.DUP_ROLES_FOUND(t.role),fn.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=AT.encrypt(t.password)),t.password=gT.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await pD.insert(i)}catch(u){throw Ee.error("There was an error searching for a user."),Ee.error(u),u}Ee.debug(o);try{await ka()}catch(u){throw Ee.error("Got an error setting users to global"),Ee.error(u),u}if(o.skipped_hashes.length===1)throw dn(new Error,xa.USER_ALREADY_EXISTS(t.username),fn.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],RT.signalUserChange(new OT(process.pid)),`${c.username} successfully added`}a(f3,"addUser");async function E3(e){let t=gD.cleanAttributes(e,RD);if(Gr.isEmptyOrZeroLength(t.username))throw new Error(dD);if(Gr.isEmptyOrZeroLength(t.password)&&Gr.isEmptyOrZeroLength(t.role)&&Gr.isEmptyOrZeroLength(t.active))throw new Error(fD);if(!Gr.isEmpty(t.password)&&Gr.isEmptyOrZeroLength(t.password.trim()))throw new Error(ED);if(!Gr.isEmpty(t.active)&&!Gr.isBoolean(t.active))throw new Error(mD);let r=h3(t.username);if(!Gr.isEmpty(t.password)&&!Gr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=AT.encrypt(t.password)),t.password=gT.hash(t.password)),t.role==="")throw new Error(hD);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 _f(i)||[])}catch(c){throw Ee.error("Got an error searching for a role."),Ee.error(c),c}if(!o||o.length===0){let c=xa.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ee.error(c),dn(new Error,c,fn.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=xa.ALTER_USER_DUP_ROLES(t.role);throw Ee.error(c),dn(new Error,c,fn.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await pD.update(s)}catch(i){throw Ee.error("Error during update."),Ee.error(i),i}try{await ka()}catch(i){throw Ee.error("Got an error setting users to global"),Ee.error(i),i}return RT.signalUserChange(new OT(process.pid)),n}a(E3,"alterUser");function h3(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(h3,"isClusterUser");async function m3(e){try{let t=SD.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 dn(new Error,xa.USER_NOT_EXIST(e.username),fn.NOT_FOUND,void 0,void 0,!0);let s;try{s=await d3(r)}catch(n){throw Ee.error("Got an error deleting a user."),Ee.error(n),n}Ee.debug(s);try{await ka()}catch(n){throw Ee.error("Got an error setting users to global."),Ee.error(n),n}return RT.signalUserChange(new OT(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(m3,"dropUser");async function p3(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=TT.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await _3(r)}catch(n){throw Ee.error("Got an error searching for a role."),Ee.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ee.error(r),r}return t}a(p3,"userInfo");async function S3(){let e;try{e=await df()}catch(t){throw Ee.error("Got an error listing users."),Ee.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(S3,"listUsersExternal");async function df(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await _f(e)}catch(o){throw Ee.error("Got an error searching for roles."),Ee.error(o),o}let r={};for(let o of t)r[o.id]=TT.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await _f(s)}catch(o){throw Ee.error("Got an error searching for users."),Ee.error(o),o}let i=new Map;for(let o of n)o=TT.cloneDeep(o),o.role=r[o.role],T3(o.role),i.set(o.username,o);return i}catch(e){throw Ee.error("got an error listing users"),Ee.error(e),Gr.errorizeMessage(e)}return null}a(df,"listUsers");function T3(e){try{if(!e){Ee.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(c3)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ee.error("Got an error trying to set system permissions."),Ee.error(t)}}a(T3,"appendSystemTablesToRole");async function ka(){try{let e=await df();global.hdb_users=e}catch(e){throw Ee.error(e),e}}a(ka,"setUsersToGlobal");async function AD(e,t,r=!0){global.hdb_users||await ka();let s=global.hdb_users.get(e);if(!s)throw dn(new Error,ST.GENERIC_AUTH_FAIL,fn.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw dn(new Error,ST.USER_INACTIVE,fn.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(_D.get(t)===s.password)return n;if(gT.validate(s.password,t))_D.set(t,s.password);else throw dn(new Error,ST.GENERIC_AUTH_FAIL,fn.UNAUTHORIZED,void 0,void 0,!0)}return n}a(AD,"findAndValidateUser");async function g3(){global.hdb_users||await ka();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(g3,"getSuperUser");async function R3(){let e=await df(),t=a3.getConfigFromFile(uD.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Gr.isEmpty(r)&&r?.role?.role===uD.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=AT.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+lD.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+lD.SERVER_SUFFIX.ADMIN,r}a(R3,"getClusterUser");var OD=[];NT.invalidateUser=function(e){for(let t of OD)try{t(e)}catch(r){l3.error("Error invalidating user",r)}};NT.onInvalidatedUser=function(e){OD.push(e)}});var Qu=T((Bpe,wD)=>{"use strict";var Ho=v(),Fr=R(),A3=Uy(),Upe=as(),vpe=Mi(),O3=Er(),{validateEvent:bD}=Ds(),Wu=os(),N3=require("process"),{resetDatabases:b3}=(de(),te(De)),y3={[Fr.ITC_EVENT_TYPES.SCHEMA]:I3,[Fr.ITC_EVENT_TYPES.USER]:ID};async function I3(e){let t=bD(e);if(t){Ho.error(t);return}Ho.trace("ITC schemaHandler received schema event:",e),await A3(e.message),await w3(e.message)}a(I3,"schemaHandler");async function w3(e){try{Wu.resetReadTxn(Fr.SYSTEM_SCHEMA_NAME,Fr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Wu.resetReadTxn(Fr.SYSTEM_SCHEMA_NAME,Fr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Wu.resetReadTxn(Fr.SYSTEM_SCHEMA_NAME,Fr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=b3();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Ho.error(t)}}a(w3,"syncSchemaMetadata");var yD=[];async function ID(e){try{try{Wu.resetReadTxn(Fr.SYSTEM_SCHEMA_NAME,Fr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Wu.resetReadTxn(Fr.SYSTEM_SCHEMA_NAME,Fr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Ho.warn(r)}let t=bD(e);if(t){Ho.error(t);return}Ho.trace(`ITC userHandler ${Fr.HDB_ITC_CLIENT_PREFIX}${N3.pid} received user event:`,e),await O3.setUsersToGlobal();for(let r of yD)r()}catch(t){Ho.error(t)}}a(ID,"userHandler");ID.addListener=function(e){yD.push(e)};wD.exports=y3});var Ds=T((kpe,LD)=>{"use strict";var qpe=v(),bT=G(),C3=R(),{ITC_ERRORS:ju}=Mr(),{parentPort:Gpe,threadId:L3,isMainThread:D3,workerData:Fpe}=require("worker_threads"),{onMessageFromWorkers:P3,broadcast:xpe,broadcastWithAcknowledgement:M3}=Qe();LD.exports={sendItcEvent:U3,validateEvent:CD,SchemaEventMsg:v3,UserEventMsg:B3};var ff;P3(async(e,t)=>{ff=ff||Qu(),CD(e),ff[e.type]&&await ff[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function U3(e){return!D3&&e.message&&(e.message.originator=L3),M3(e)}a(U3,"sendItcEvent");function CD(e){if(typeof e!="object")return ju.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||bT.isEmpty(e.type))return ju.MISSING_TYPE;if(!e.hasOwnProperty("message")||bT.isEmpty(e.message))return ju.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||bT.isEmpty(e.message.originator))return ju.MISSING_ORIGIN;if(C3.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ju.INVALID_EVENT(e.type)}a(CD,"validateEvent");function v3(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(v3,"SchemaEventMsg");function B3(e){this.originator=e}a(B3,"UserEventMsg")});var kn=T((Ype,UD)=>{"use strict";var DD=R(),Vpe=G(),Ef=v(),PD=my(),$a,{sendItcEvent:MD}=Ds();function H3(e){try{Ef.trace("signalSchemaChange called with message:",e),$a=$a||Qu();let t=new PD(DD.ITC_EVENT_TYPES.SCHEMA,e);return $a.schema(t),MD(t)}catch(t){Ef.error(t)}}a(H3,"signalSchemaChange");function q3(e){try{Ef.trace("signalUserChange called with message:",e),$a=$a||Qu();let t=new PD(DD.ITC_EVENT_TYPES.USER,e);return $a.user(t),MD(t)}catch(t){Ef.error(t)}}a(q3,"signalUserChange");UD.exports={signalSchemaChange:H3,signalUserChange:q3}});var Zu={};Fe(Zu,{addAnalyticsListener:()=>Xu,recordAction:()=>xr,recordActionBinary:()=>cs,setAnalyticsEnabled:()=>G3});function G3(e){VD=e}function xr(e,t,r,s,n){if(!VD)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=pf.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:s,type:n},pf.set(i,o)}hf||F3()}function cs(e,t,r,s,n){xr(!!e,t,r,s,n)}function Xu(e){WD.push(e)}function F3(){hf=performance.now(),setTimeout(async()=>{let e=performance.now()-hf;hf=0;let t=[],r={time:Date.now(),period:e,threadId:qo.threadId,metrics:t};for(let[n,i]of pf){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 QD){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 jD()}let s=process.memoryUsage();t.push({metric:"memory",threadId:qo.threadId,byThread:!0,...s});for(let n of WD)n(t);pf=new Map,qo.parentPort?qo.parentPort.postMessage({type:KD,report:r}):XD({report:r})},YD).unref()}async function x3(e,t=6e4){let r=wT(),s=zD(),n;for(let h of s.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){n=h.value.time;break}if(Date.now()-t<n)return;let i,o=new Map,c=new Map,u=[],_;for(let{key:h,value:p}of r.primaryStore.getRange({start:n||!1,exclusiveStart:!0,end:1/0})){if(!p)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:S,threadId:A}=p;for(let g of S||[]){let{path:O,method:V,type:$,metric:F,count:w,total:K,distribution:B,threads:k,...se}=g;w||(w=1);let Ie=F+(O?"-"+O:"");V!==void 0&&(Ie+="-"+V),$!==void 0&&(Ie+="-"+$);let ie=o.get(Ie);if(ie){if(ie.threads){let Ge=ie.threads[A];if(Ge)ie=Ge;else{ie.threads[A]=Object.assign({},se);continue}}ie.count||(ie.count=1);let Yt=ie.count;for(let Ge in se){let Pt=se[Ge];typeof Pt=="number"&&(ie[Ge]=(ie[Ge]*Yt+Pt*w)/(Yt+w))}ie.count+=w,K>=0&&(ie.total+=K,ie.ratio=ie.total/ie.count)}else ie=Object.assign({period:t},g),delete ie.distribution,o.set(Ie,ie),ie.byThread&&(ie.threads=[],ie.threads[A]=Object.assign({},se),u.push(ie));if(B){B=B.map(Ge=>typeof Ge=="number"?{value:Ge,count:1}:Ge);let Yt=c.get(Ie);Yt?Yt.push(...B):c.set(Ie,B)}}await jD()}for(let h of u){let{path:p,method:S,type:A,metric:g,count:O,total:V,distribution:$,threads:F,...w}=h;F=F.filter(K=>K);for(let K in w){if(typeof h[K]!="number")continue;let B=0;for(let k of F){let se=k[K];typeof se=="number"&&(B+=se)}h[K]=B}h.count=F.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((Ge,Pt)=>Ge.value>Pt.value?1:-1);let A=S.count-1,g=[],O=0,V=0,$;for(let Ge of QD){let Pt=A*Ge;for(;O<Pt;)$=p[V++],O+=$.count,V===1&&O--;let Ns=p[V>1?V-2:0];$||($=p[0]),g.push($.value-($.value-Ns.value)*(O-Pt)/$.count)}let[F,w,K,B,k,se,Ie,ie,Yt]=g;Object.assign(S,{p1:F,p10:w,p25:K,median:B,p75:k,p90:se,p95:Ie,p99:ie,p999:Yt})}let l;for(let[h,p]of o)p.id=(0,mf.getNextMonotonicTime)(),p.time=_,s.primaryStore.put(p.id,p,{append:!0}).then(S=>{S||s.primaryStore.put(p.id,p)}),l=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(l||E*10>f){let h=(0,mf.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-vD,active:E-BD,time:d,...process.memoryUsage()};s.primaryStore.put(h,p,{append:!0}).then(S=>{S||s.primaryStore.put(h,p)})}vD=f,BD=E}async function HD(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function wT(){return qD||(qD=ut({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function zD(){return GD||(GD=ut({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function V3(){JD=!0;let e=(0,Ju.get)(IT.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await x3(YD,e),await HD(wT(),k3),await HD(zD(),$3)},Math.min(e/2,2147483647)).unref()}function XD(e,t){let r=e.report;r.threadId=t?.threadId||qo.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(FD+=s.mean*s.count);r.totalBytesProcessed=FD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(xD.get(t))}),xD.set(t,t.performance.eventLoopUtilization())),r.id=(0,mf.getNextMonotonicTime)(),wT().primaryStore.put(r.id,r),JD||V3(),Y3&&(ZD=W3(r))}async function W3(e){if(await ZD,!qi){let r=(0,zu.dirname)((0,$D.getLogFilePath)());try{qi=await(0,yT.open)((0,zu.join)(r,"analytics.log"),"r+")}catch{qi=await(0,yT.open)((0,zu.join)(r,"analytics.log"),"w+")}}let t=(await qi.stat()).size;if(t>K3){let r=Buffer.alloc(t);await qi.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await qi.write(r,{position:0}),await qi.truncate(r.length),t=r.length}await qi.write(JSON.stringify(e)+`
|
|
7
|
+
`,t)}var qo,kD,$D,zu,yT,mf,Ju,IT,pf,VD,hf,YD,KD,WD,QD,vD,BD,jD,k3,$3,qD,GD,JD,FD,xD,Y3,ZD,qi,K3,Qn=Re(()=>{qo=require("worker_threads"),kD=M(Qe());de();$D=M(v()),zu=require("path"),yT=require("fs/promises"),mf=M(ar()),Ju=M(j()),IT=M(R());Pr();(0,Ju.initSync)();pf=new Map,VD=(0,Ju.get)(IT.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(G3,"setAnalyticsEnabled");a(xr,"recordAction");Tt.recordAnalytics=xr;a(cs,"recordActionBinary");hf=0,YD=1e3,KD="analytics-report",WD=[];a(Xu,"addAnalyticsListener");QD=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(F3,"sendAnalytics");a(x3,"aggregation");vD=0,BD=0,jD=a(()=>new Promise(setImmediate),"rest");a(HD,"cleanup");k3=36e5,$3=31536e6;a(wT,"getRawAnalyticsTable");a(zD,"getAnalyticsTable");(0,kD.setChildListenerByType)(KD,XD);a(V3,"startScheduledTasks");FD=0,xD=new Map,Y3=!1;a(XD,"recordAnalytics");K3=1e6;a(W3,"logAnalytics")});var MT={};Fe(MT,{coerceType:()=>Af,makeTable:()=>bf,setServerUtilities:()=>tX,updateResource:()=>sl});function bf(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:p}=e;p||(p=[]),fy(i,u);let S=cp(i,s,u),A=0,g,O,V,$={},F=Promise.resolve(),w,K,B;for(let Q of p)(Q.assignCreatedTime||Q.name==="__createdtime__")&&(w=Q),(Q.assignUpdatedTime||Q.name==="__updatedtime__")&&(K=Q),Q.expiresAt&&(B=Q),Q.isPrimaryKey&&($=Q);let k,se=[],Ie=[],ie=1,Yt=2,Ge={},Pt={},Ns=864e5,TN,q_,uk=10,lk=6;E&&AN();class pt extends Mt{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=p;static expirationTimer;static createdTimeProperty=w;static updatedTimeProperty=K;static sources=[];static get expirationMS(){return d}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,N){N&&(this.sourceOptions=N,(N.expiration||N.eviction||N.scanInterval)&&this.setTTLExpiration(N)),N?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),O=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let D=a(I=>{let P=this.sources.slice(0,-1);if(P=P.filter(L=>L[I]&&(!L[I].reliesOnPrototype||L.prototype[I])),P.length>0)if(P.length===1){let L=P[0];return(W,z,ce)=>{if(W?.source!==L)return L[I](z,ce,W)}}else return(L,W,z)=>{let ce=[];for(let Y of P){if(L?.source===Y)break;ce.push(Y[I](W,z,L))}return Promise.all(ce)}},"getApplyToIntermediateSource"),b=this.sources[this.sources.length-1],C=a(I=>{if(b[I]&&(!b[I].reliesOnPrototype||b.prototype[I]))return(P,L,W)=>{if(!P?.source)return b[I](L,W,P)}},"getApplyToCanonicalSource");return Ge={put:C("put"),delete:C("delete"),publish:C("publish")},Pt={put:D("put"),delete:D("delete"),publish:D("publish"),invalidate:D("invalidate")},(async()=>{let I=!1,P=a(async(L,W)=>{let z=L.value,ce=L.table?ze[c][L.table]:pt;if(c===Gs.SYSTEM_SCHEMA_NAME&&(L.table===Gs.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||L.table===Gs.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(I=!0),L.id===void 0&&(L.id=z[ce.primaryKey],L.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(L));L.source=m;let Y=await ce.getResource(L.id,W,el);switch(L.type){case"put":return Y._writeUpdate(z,el);case"delete":return Y._writeDelete(el);case"publish":return Y._writePublish(z,el);case"invalidate":return Y.invalidate(el);default:je.error("Unknown operation",L.type,L.id)}},"writeUpdate");try{let L=m.subscribe;L&&h==null&&(h=!0);let W=m.subscribeOnThisThread?m.subscribeOnThisThread((0,Go.getWorkerIndex)()):(0,Go.getWorkerIndex)()===0,z=L&&W&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(z){let ce;for await(let Y of z)try{if(!(Y.type==="transaction"?Y.writes[0]:Y)){je.error("Bad subscription event",Y);continue}if(Y.source=m,ce)if(Y.beginTxn)ce.resolve();else{P(Y,ce);continue}if(Y.type==="end_txn")continue;let ye=We(Y,()=>{if(Y.type==="transaction"){let oe=[];for(let Kt of Y.writes)try{oe.push(P(Kt,Y))}catch(sr){throw sr.message+=" writing "+JSON.stringify(Kt)+" of event "+JSON.stringify(Y),sr}return Promise.all(oe)}else if(Y.type==="define_schema"){let oe=this.attributes.slice(0),Kt;for(let sr of Y.attributes)oe.find(fo=>fo.name===sr.name)||(oe.push(sr),Kt=!0);Kt&&(ut({table:n,database:c,attributes:oe,origin:"cluster"}),il.signalSchemaChange(new ol.SchemaEventMsg(process.pid,Gs.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return Y.beginTxn?(ce=Y,P(Y,Y),new Promise(oe=>{ce.resolve=oe})):P(Y,Y)});I&&(await ye,il.signalUserChange(new ol.UserEventMsg(process.pid))),Y.onCommit&&(ye?.then?ye.then(Y.onCommit):Y.onCommit())}catch(me){je.error("error in subscription handler",me)}}}catch(L){je.error(L)}})(),this}static getResource(m,N,D){let b=super.getResource(m,N,D);if(m!=null){Kc(m);try{if(b.hasOwnProperty(Ae))return b;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let C=!D?.async||i.cache?.get(m),I=Ni(N),P=I.getReadTxn();if(P?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return gN(m,N,{transaction:P},C,L=>{if(L?sl(b,L):b[Ae]=null,N.onlyIfCached&&N.noCacheStore){if(!b.doesExist())throw new hn.ServerError("Entry is not cached",504)}else if(D?.ensureLoaded){let W=ym(m,L,N,b);if(W)return I?.disregardReadTxn(),b[LT]=!0,PT(W,z=>(sl(b,z),b))}return b})}catch(C){throw C.message.includes("Unable to serialize object")&&(C.message+=": "+JSON.stringify(m)),C}}return b}ensureLoaded(){let m=ym(this[Le],this[En],this[Se]);if(m)return this[LT]=!0,PT(m,N=>{this[En]=N,this[Ae]=N.value,this[Rf]=N.version})}static setTTLExpiration(m){if(typeof m=="number")d=m*1e3,f||(f=0);else if(m&&typeof m=="object")d=m.expiration*1e3,f=(m.eviction||0)*1e3,Ns=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");Ns=Ns||(d+f)/4,Im()}static enableAuditing(m=!0){E=m,m&&AN(),pt.audit=m}static coerceId(m){return m===""?null:Af(m,$)}static async dropTable(){if(delete ze[c][n],c===o){for(let m of p)l.remove(pt.tableName+"/"+m.name),r[m.name]?.drop();l.remove(pt.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));il.signalSchemaChange(new ol.SchemaEventMsg(process.pid,Gs.OPERATIONS_ENUM.DROP_TABLE,c,n))}static get(m,N){if(m&&typeof m=="object"&&!Array.isArray(m)&&m.url===""){let D=this.getRecordCount();return{recordCount:D.recordCount,estimatedRecordRange:D.estimatedRange,records:"./",name:n,database:c,attributes:p}}return super.get(m,N)}get(m){if(typeof m=="string")return this.getProperty(m);if(this[sn])return this.search(m);if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[Se]?.returnNonexistent)return this}static allowRead(m,N){if(!m)return!1;let D=m.role.permission;if(D.super_user)return!0;if(D[n]?.read){let b=D[n].attribute_permissions;if(b){N||(N={});let C=N.select;if(C){let I=DT(b,"read");N.select=C.filter(P=>I[P])}else N.select=b.filter(I=>I.read).map(I=>I.attribute_name);return N}else return!0}}allowUpdate(m,N,D){if(!m)return!1;let b=m.role.permission;if(b.super_user)return!0;if(b[n]?.update){let C=b[n].attribute_permissions;if(C){let I=DT(C,"update");for(let P in N)if(!I[P])return!1;if(D)for(let P of C){let L=P.attribute_name;!P.update&&!(L in N)&&(N[L]=this.getProperty(L))}}else return!0}}allowCreate(m,N){return this.allowUpdate(m,{})}static allowCreate(m,N){if(!m)return!1;let D=m.role.permission;if(D.super_user)return!0;if(D[n]?.insert){let b=D[n].attribute_permissions;if(b){let C=DT(b,"insert");for(let I in N)if(!C[I])return!1}else return!0}}static allowDelete(m){if(!m)return!1;let N=m.role.permission;if(N.super_user||N[n]?.delete)return!0}update(m,N){if(!Ni(this[Se]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let b;if(typeof m=="object"&&m)if(N){Object.isFrozen(m)&&(m=Object.assign({},m));for(let C in this[Ae])m[C]===void 0&&(m[C]=void 0);this[Wt]=m}else b=this[Wt],b&&(m=Object.assign(b,m)),this[Wt]=b=m;return this._writeUpdate(this),this}invalidate(m){let N=this[Se],D=this[Le];Kc(D),Ni(this[Se]).addWrite({key:D,store:i,invalidated:!0,entry:this[En],nodeName:this[Se]?.nodeName,before:Ge.invalidate?.bind(this,N,D),beforeIntermediate:Pt.invalidate?.bind(this,N,D),commit:(C,I)=>{if(I?.version>C)return;let P=null;for(let L in r)P||(P={}),P[L]=this.getProperty(L);S(D,P,this[En],C,Sf,E,this[Se],0,"invalidate")}})}static evict(m,N,D){let b=this.Source,C;if(!((O||E)&&(!N||(C=i.getEntry(m),!C||!N)||C.version!==D))){if(O){if(i.hasLock(m,C.version))return;let I;for(let P in r)I||(I={}),I[P]=N[P];if(I){S(m,I,C,D,Tf,null,null,0,null,!0);return}}if(i.ifVersion(D,()=>{G_(m,N,null)}),E)S(m,null,C,D,Tf,null,null,0,null,!0);else return i.remove(m,D)}}lock(){throw new Error("Not yet implemented")}static operation(m,N){return m.table||=n,m.schema||=c,oP.operation(m,N)}async put(m){this.update(m,!0)}_writeUpdate(m,N){let D=this[Se],b=Ni(D),C=this[Le];Kc(C);let I=this[En];this[CT]=!0;let P={key:C,store:i,entry:I,nodeName:D?.nodeName,validate:L=>{if(!m[tP]||ed(m)){if(this.validate(m),D?.source?m=cu(m):(t&&m[t]!==C&&(m[t]=C),K&&(m[K.name]=K.type==="Date"?new Date(L):K.type==="String"?new Date(L).toISOString():L),w&&(I?.value?m[w.name]=I?.value[w.name]:m[w.name]=w.type==="Date"?new Date(L):w.type==="String"?new Date(L).toISOString():L),m=cu(m)),m[Ae])throw new Error("Can not assign a record with a record property");this[Ae]=m}else b.removeWrite(P)},before:Ge.put&&(()=>Ge.put(D,C,m)),beforeIntermediate:Pt.put&&(()=>Pt.put(D,C,m)),commit:(L,W,z)=>{z&&(D&&W?.version>(D.lastModified||0)&&(D.lastModified=W.version),sl(this,W));let ce=W?.value;this[CT]=!1,je.trace("Checking timestamp for put",C,W?.version>L,W?.version,L),!(W?.version>L)&&(G_(C,ce,m),S(C,m,W,L,0,E,D,D.expiresAt||(d?d+Date.now():0)))}};b.addWrite(P)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[sn]){for await(let N of this.search(m))(await pt.getResource(N[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[Ae]?this._writeDelete(m):!1}_writeDelete(m){let N=Ni(this[Se]),D=this[Le];Kc(D);let b=this[Se];return N.addWrite({key:D,store:i,resource:this,nodeName:b?.nodeName,before:Ge.delete?.bind(this,b,D),beforeIntermediate:Pt.delete?.bind(this,b,D),commit:(C,I,P)=>{let L=I?.value;P&&(b&&I?.version>(b.lastModified||0)&&(b.lastModified=I.version),sl(this,I)),!(I?.version>C)&&(G_(this[Le],L),je.trace("Write delete entry",D,C),E||h?(S(D,null,this[En],C,0,E,this[Se],0,"delete"),E||Im()):i.remove(this[Le]))}}),!0}search(m){let N=Ni(this[Se]);if(!m)throw new Error("No query provided");let D=m.reverse===!0,b=m.conditions;b?b.length===void 0&&(b=Array.from(b)):b=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Le]&&(b=[{attribute:null,comparator:"prefix",value:this[Le]}].concat(b));for(let Y of b){let me=Y[0]??Y.attribute,ye=me==null?$:p.find(oe=>oe.name==me);if(ye)ye.type&&(Y[1]===void 0?Y.value=C(Y.value,ye):Y[1]=C(Y[1],ye));else if(me!=null)throw(0,hn.handleHDBError)(new Error,`${me} is not a defined attribute`,404)}function C(Y,me){return Array.isArray(Y)?Y.map(ye=>Af(ye,me)):Af(Y,me)}a(C,"coerceTypedValues"),b.length>1&&(b=(0,iP.sortBy)(b,Y=>{if(Y.estimated_count===void 0){let me=Y.comparator||Y.search_type;if(me===rl.SEARCH_TYPES.EQUALS){let ye=Y[0]??Y.attribute;if(ye==null||ye===t)Y.estimated_count=1;else{let oe=r[ye];Y.estimated_count=oe?oe.getValuesCount(Y[1]??Y.value):1/0}}else me===rl.SEARCH_TYPES.CONTAINS||me===rl.SEARCH_TYPES.ENDS_WITH||me==="ne"?Y.estimated_count=1/0:me===rl.SEARCH_TYPES.STARTS_WITH||me==="prefix"?Y.estimated_count=z3:Y.estimated_count=j3}return Y.estimated_count}));let I=N.getReadTxn();I.use();let P=m.select,L=b[0],W;if(!L)W=i.getRange(D?{end:!1,reverse:!0,transaction:I,lazy:P?.length<4}:{start:!1,transaction:I,lazy:P?.length<4}).map(({value:Y})=>Y?new Promise(me=>setImmediate(()=>me(Y))):gf.SKIP);else{let Y=zm(L,I,D,pt,m.allowFullScan);if(!m.operator||m.operator.toLowerCase()==="and"){let me=b.slice(1).map(Jm);W=ce(Y,me)}else{for(let ye=1;ye<b.length;ye++){let oe=b[ye],Kt=zm(oe,I,D,pt,m.allowFullScan);Y=Y.concat(Kt)}let me=new Set;Y=Y.filter(ye=>me.has(ye)?!1:(me.add(ye),!0)),W=ce(Y)}}(m.offset||m.limit!==void 0)&&(W=W.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0)),W.onDone=()=>{W.onDone=null,I.done()};let z=this[Se];function ce(Y,me){let ye=me?.length,oe={transaction:I,lazy:ye>0||P?.length<4,alwaysPrefetch:!0},Kt=m.ensureLoaded!==!1;function sr(fo,$e){if(Kt&&$e!==void 0){let Lr=!z.onlyIfCached&&ym($e,fo,z,this);if(Lr)return Lr.then(fk=>sr(fk))}let Zs=fo?.value;if(!Zs)return gf.SKIP;for(let Lr=0;Lr<ye;Lr++)if(!me[Lr](Zs))return gf.SKIP;return Zs}return a(sr,"processEntry"),Y.map(fo=>gN(fo,z,oe,!1,sr))}return a(ce,"idsToRecords"),W}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||ut({table:n,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let N=_y(pt,this[Le]??null,function(I,P,L,W){try{let z=P.getValue?.(i);this.send({id:I,timestamp:L,value:z,version:P.version,type:P.type,beginTxn:W})}catch(z){je.error(z)}},m.startTime,this[sn]);m.crossThreads===!1&&(N.crossThreads=!1),m.supportsTransactions&&(N.supportsTransactions=!0);let D=this[Le],b=m.previousCount;b>1e3&&(b=1e3);let C=m.startTime;if(this[sn]){if(C){if(b)throw new hn.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:I,value:P}of u.getRange({start:C,exclusiveStart:!0})){let L=Ur(P,i);if(L.tableId!==s)continue;let W=L.recordId;(D==null||nP(D,W))&&N.send({id:W,timestamp:I,...L}),N.startTime=I}}else if(b){let I=[];for(let{key:P,value:L}of u.getRange({start:"z",end:!1,reverse:!0}))try{let W=Ur(L);if(W.tableId!==s)continue;let z=W.recordId;if(D==null||nP(D,z)){let ce=W.getValue(i);if(I.push({id:z,timestamp:P,value:ce,version:W.version,type:W.type}),--b<=0)break}}catch(W){je.error("Error getting history entry",P,W)}for(let P=I.length;P>0;)N.send(I[--P]);I[0]&&(N.startTime=I[0].timestamp)}else if(!m.omitCurrent)for(let{key:I,value:P,version:L,localTime:W}of i.getRange({start:D??!1,end:D==null?void 0:[D,Of.MAXIMUM_KEY],versions:!0}))P&&N.send({id:I,version:L,timestamp:W,value:P})}else{b&&!C&&(C=0);let I=this[En]?.localTime;if(je.trace("Subscription from",C,"from",D),C<I){let P=[],L=I;do{let W=u.get(L);if(W){m.omitCurrent=!0;let z=Ur(W),ce=z.getValue(i);P.push({id:D,value:ce,timestamp:L,...z}),L=z.previousLocalTime}else break;b&&b--}while(L>C&&b!==0);for(let W=P.length;W>0;)N.send(P[--W]);N.startTime=I}!m.omitCurrent&&this.doesExist()&&N.send({id:D,version:this[Rf],timestamp:this[En]?.localTime,value:this})}return m.listener&&N.on("data",m.listener),N}doesExist(){return!!(this[Ae]||this[CT])}async publish(m,N){this._writePublish(m,N)}_writePublish(m,N){let D=Ni(this[Se]),b=this[Le]||null;Kc(b);let C=this[Se];D.addWrite({key:b,store:i,entry:this[En],nodeName:C?.nodeName,validate:()=>{this.validate(m)},before:Ge.publish?.bind(this,C,b,m),beforeIntermediate:Pt.publish?.bind(this,C,b,m),commit:(I,P,L)=>{P===void 0&&h&&!E&&Im(),S(b,P?.value??null,P,P?.version||I,0,!0,C,P?.expiresAt,"message",!1,m)}})}validate(m){let N,D=a((b,C,I)=>{if(C.type&&b!=null)if(C.properties){typeof b!="object"&&(N||(N=[])).push(`Property ${I} must be an object${C.type?" ("+C.type+")":""}`);let P=C.properties;for(let L=0,W=P.length;L<W;L++){let z=P[L],ce=D(b[z.name],z,I+"."+z.name);ce&&(b[z.name]=ce)}}else switch(C.type){case"Int":(typeof b!="number"||b>>0!==b)&&(N||(N=[])).push(`Property ${I} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof b!="number"||!(Math.floor(b)===b&&Math.abs(b)<=9007199254740992))&&(N||(N=[])).push(`Property ${I} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof b!="number"&&(N||(N=[])).push(`Property ${I} must be a number`);break;case"ID":typeof b=="string"||b?.length>0&&b.every?.(P=>typeof P=="string")||(N||(N=[])).push(`Property ${I} must be a string, or an array of strings`);break;case"String":typeof b!="string"&&(N||(N=[])).push(`Property ${I} must be a string`);break;case"Boolean":typeof b!="boolean"&&(N||(N=[])).push(`Property ${I} must be a boolean`);break;case"Date":if(!(b instanceof Date)){if(typeof b=="string"||typeof b=="number")return new Date(b);(N||(N=[])).push(`Property ${I} must be a Date`)}break;case"Bytes":b instanceof Uint8Array||(N||(N=[])).push(`Property ${I} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(b)){if(C.elements)for(let P=0,L=b.length;P<L;P++){let W=b[P],z=D(W,C.elements,I+"[*]");z&&(b[P]=z)}}else(N||(N=[])).push(`Property ${I} must be a Buffer or Uint8Array`);break}C.nullable===!1&&b==null&&(N||(N=[])).push(`Property ${I} is required (and not does not allow null values)`)},"validateValue");for(let b=0,C=p.length;b<C;b++){let I=p[b],P=D(m[I.name],I,I.name);P&&(m[I.name]=P)}if(N)throw new hn.ClientError(N.join(". "))}getUpdatedTime(){return this[Rf]}wasLoadedFromSource(){return O?!!this[LT]:void 0}static async addAttributes(m){let N=p.slice(0);for(let D of m){if(!D.name)throw new hn.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new hn.ClientError("Attribute names cannot include backticks or forward slashes");N.push(D)}return ut({table:n,database:c,schemaDefined:_,attributes:N}),pt.indexingOperation}static async removeAttributes(m){let N=p.filter(D=>!m.includes(D.name));return ut({table:n,database:c,schemaDefined:_,attributes:N}),pt.indexingOperation}static getRecordCount(m){let N=i.getStats().entryCount,D=5e3,b=1e3,C;N>D&&!m?.exactCount&&(C=b);let I=0;for(let{value:P}of i.getRange({start:!0,lazy:!0,limit:C}))P!=null&&I++;if(C){let P=I;I=0;for(let{value:Kt}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:C}))Kt!=null&&I++;let L=C*2,W=(I+P)/L,z=Math.pow((I-P+1)/C/2,2)+W*(1-W)/L,ce=Math.max(Math.sqrt(z)*N,1),Y=Math.round(W*N),me=Math.max(Y-1.96*ce,0),ye=Math.min(Y+1.96*ce,N),oe=Math.pow(10,Math.round(Math.log10(ce)));return oe>Y&&(oe=oe/10),I=Math.round(Y/oe)*oe,{recordCount:I,estimatedRange:[Math.round(me),Math.round(ye)]}}return{recordCount:I}}static updatedAttributes(){rd(this,this)}static async deleteHistory(m=0){let N;for(let{key:D,value:b}of u.getRange({start:0,end:m}))await tl(),Ur(b).tableId===s&&(N=u.remove(D));await N}static async*getHistory(m=0,N=1/0){for(let{key:D,value:b}of u.getRange({start:m,end:N})){await tl();let C=Ur(b);C.tableId===s&&(yield{id:C.recordId,localTime:D,version:C.version,type:C.type,value:C.getValue(i),user:C.user})}}static async getHistoryOfRecord(m){let N=[],D=i.getEntry(m);if(!D)return N;let b=D.localTime,C=0;do{await tl();let I=u.get(b);if(I){let P=Ur(I);N.push({id:P.recordId,localTime:b,version:P.version,type:P.type,value:P.getValue(i),user:P.user}),b=P.previousLocalTime}else break}while(C<1e3&&b);return N.reverse()}static cleanup(){k?.remove()}}pt.updatedAttributes();let _k=pt.prototype;return _k[tP]=!0,d&&pt.setTTLExpiration(d/1e3),B&&dk(),pt;function G_(Q,m,N){let D;for(let b in r){let C=r[b],I=C.isIndexing,P=N?.[b],L=m?.[b];if(P===L&&!I)continue;D=!0;let W=(0,nl.getIndexedValues)(L);if(W){eP&&C.prefetch(W.map(z=>({key:z,value:Q})),sP);for(let z=0,ce=W.length;z<ce;z++)C.remove(W[z],Q)}if(W=(0,nl.getIndexedValues)(P),W){eP&&C.prefetch(W.map(z=>({key:z,value:Q})),sP);for(let z=0,ce=W.length;z<ce;z++)C.put(W[z],Q)}}return D}a(G_,"updateIndices");function Kc(Q){switch(typeof Q){case"number":return!0;case"string":if(Q.length<659)return!0;if(Q.length>rP)throw new Error("Primary key size is too large: "+Q.length);break;case"object":if(Q===null)return!0;break;default:throw new Error("Invalid primary key type: "+typeof Q)}if((0,Of.writeKey)(Q,eX,0)>rP)throw new Error("Primary key size is too large: "+Q.length);return!0}a(Kc,"checkValidId");function gN(Q,m,N,D,b){let C=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),N.transaction?.isDone)return b(null,Q);let I=i.getEntry(Q,N);return I&&m&&(I?.version>(m.lastModified||0)&&(m.lastModified=I.version),I?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=I.localTime)),b(I,Q)},"whenPrefetched");return D?C():ie>0?(ie--,C()):new Promise((I,P)=>{ie===0?(ie--,i.prefetch([Q],()=>{L(),W()})):(se.push(Q),Ie.push(W),se.length>lk&&(ie--,L()));function L(){if(se.length>0){let z=Ie;i.prefetch(se,()=>{ie===-1?L():ie++;for(let ce of z)ce()}),se=[],Ie=[],Yt>2&&Yt--}else ie=Yt,Yt<uk&&Yt++}a(L,"prefetch");function W(){try{I(C())}catch(z){P(z)}}a(W,"load")})}a(gN,"loadLocalRecord");function ym(Q,m,N,D){if(O){let b;if(N.noCache?b=!0:(m?(!m.value||m.metadataFlags&(Sf|Tf)||m.expiresAt&&m.expiresAt<Date.now())&&(b=!0):b=!0,cs(!b,"cache-hit",n)),b){let C=RN(Q,m,N).then(I=>(I?.value?.[Ae]&&je.error("Can not assign a record with a record property"),N&&(I?.version>(N.lastModified||0)&&(N.lastModified=I.version),N.lastRefreshed=Date.now()),I));if(N?.onlyIfCached||m?.value&&D?.allowStaleWhileRevalidate?.(m,Q)){if(C.catch(I=>je.warn(I)),N?.onlyIfCached&&!D.doesExist())throw new hn.ServerError("Entry is not cached",504);return}else return C}}}a(ym,"ensureLoadedFromSource");function Ni(Q){let m=Q?.transaction;if(m){if(!m.open)throw new Error("Can not use a transaction that is not open");if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let N=m.next;if(!N)return m=m.next=new go,m.lmdbDb=i,m;m=N}while(!0)}else return new id}a(Ni,"txnForContext");async function RN(Q,m,N){let D=m?.metadataFlags,b=m?.version,C,I;if(!i.attemptLock(Q,b,()=>{clearTimeout(I);let z=i.getEntry(Q);!z||!z.value||z.metadataFlags&(Sf|Tf)?C(RN(Q,i.getEntry(Q),N)):C(z)}))return new Promise(z=>{C=z,I=setTimeout(()=>{i.unlock(Q,b)},Z3)});let P=m?.value,L={requestContext:N,replacingRecord:P,replacingVersion:b,source:null,resourceCache:N?.resourceCache},W=N?.responseHeaders;return new Promise((z,ce)=>{let Y;PT(We(L,async me=>{let ye=performance.now(),oe,Kt,sr;try{for(let Lr of pt.sources)if(Lr.get&&(!Lr.get.reliesOnPrototype||Lr.prototype.get)&&(L.source=Lr,oe=await Lr.get(Q,L),oe))break;sr=D&Sf;let $e=L.lastModified||sr&&b;Kt=sr||$e>b||!P,$e||($e=(0,nl.getNextMonotonicTime)());let Zs=performance.now()-ye;if(xr(Zs,"cache-resolution",n),W&&W.append("Server-Timing",`cache-resolve;dur=${Zs.toFixed(2)}`),me.timestamp=$e,d&&!L.expiresAt&&(L.expiresAt=Date.now()+d),oe){if(typeof oe!="object")throw new Error("Only objects can be cached and stored in tables");typeof oe.toJSON=="function"&&(oe=oe.toJSON()),t&&oe[t]!==Q&&(oe[t]=Q)}Y=!0,z({version:$e,value:oe})}catch($e){$e.message+=` while resolving record ${Q} for ${n}`,P&&(($e.code==="ECONNRESET"||$e.code==="ECONNREFUSED"||$e.code==="EAI_AGAIN")&&!N?.mustRevalidate||N?.staleIfError&&($e.statusCode===500||$e.statusCode===502||$e.statusCode===503||$e.statusCode===504))?(z({version:b,value:P}),je.trace($e.message,"(returned stale record)")):ce($e),L.transaction.abort();return}if(N?.noCacheStore){L.transaction.abort();return}Ni(L).addWrite({key:Q,store:i,entry:m,nodeName:"source",commit:($e,Zs)=>{if(Zs?.version!==b)return;let Lr=G_(Q,P,oe);oe?(Pt.put?.(L,Q,oe),S(Q,oe,Zs,$e,0,E&&Kt||null,L,L.expiresAt,"put",!!sr)):(Pt.delete?.(L,Q),E||h?S(Q,null,Zs,$e,0,E&&Kt||null,L,0,"delete",!!sr):i.remove(Q,b))}})}),()=>{i.unlock(Q,b)},me=>{i.unlock(Q,b),Y&&je.error("Error committing cache update",me)})})}a(RN,"getFromSource");function Im(){if(Ns!==TN&&(TN=Ns,(0,Go.getWorkerIndex)()===(0,Go.getWorkerCount)()-1)){if(q_&&clearTimeout(q_),!Ns)return;let Q=new Date;Q.setMonth(0),Q.setDate(1),Q.setHours(0),Q.setMinutes(0),Q.setSeconds(0);let m=Math.ceil((Date.now()-Q.getTime())/Ns)*Ns+Q.getTime(),N=a(D=>{je.trace(`Scheduled next cleanup scan at ${new Date(D)}ms`),q_=setTimeout(()=>F=F.then(async()=>{if(N(Math.max(D+Ns,Date.now())),i.rootStore.status!=="open"){clearTimeout(q_);return}je.trace(`Starting cleanup scan for ${n}`);try{let b=0;for(let{key:C,value:I,version:P,expiresAt:L}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0}))I===null&&!E&&P+X3<Date.now()?i.remove(C,P):L&&L+f<Date.now()&&(pt.evict(C,I,P),b++),await tl();je.trace(`Finished cleanup scan for ${n}, evicted ${b} entries`)}catch(b){je.trace(`Error in cleanup scan for ${n}:`,b)}}),Math.min(D-Date.now(),2147483647)).unref()},"startNextTimer");N(m)}}a(Im,"scheduleCleanup");function AN(){k=u?.addDeleteRemovalCallback(s,Q=>{let m=i.getEntry(Q);m?.value===null&&i.remove(Q,m.version)})}a(AN,"addDeleteRemoval");function dk(){(0,Go.getWorkerIndex)()===0&&setInterval(async()=>{try{let Q=B.name,m=r[Q];if(!m)throw new Error(`expiresAt attribute ${B} must be indexed`);for(let{value:N}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let D=i.getEntry(N);D?.value?.[Q]<Date.now()&&pt.evict(N,D.value,D.version),await tl()}}catch(Q){je.error("Error in evicting old records",Q)}},J3).unref()}a(dk,"runRecordExpirationEviction")}function DT(e,t){let r=e.attr_object||(e.attr_object={}),s=r[t];if(s)return s;s=r[t]=Object.create(null);for(let n of e)s[n.attribute_name]=n[t];return s}function sP(){}function tX(e){oP=e}function Af(e,t){let r=t?.type;return e===null?e:r==="Int"||r==="Long"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!rX.test(e)&&(e+="Z"),new Date(e)):r?e:(0,Nf.autoCast)(e)}function nP(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 s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}function PT(e,t,r){return e?.then?e.then(t,r):t(e)}function sl(e,t){e[En]=t,e[Ae]=t?.value??null,e[Rf]=t?.version}var Gs,gf,nl,iP,rl,al,hn,il,ol,je,Of,Go,Nf,Q3,oP,j3,z3,J3,X3,eP,Z3,Rf,tP,En,CT,LT,el,Sf,Tf,eX,rP,mSe,rX,tl,yf=Re(()=>{Gs=M(R()),gf=require("lmdb"),nl=M(ar()),iP=require("lodash");ws();Wm();rl=M(Ke()),al=M(j());Ey();hn=M(Z()),il=M(kn()),ol=M(Ds());de();ad();je=M(v());nd();Ro();Of=require("ordered-binary"),Go=M(Qe());Aa();Nf=M(G());du();Qn();Q3=new Uint8Array(9);Q3[8]=192;j3=1e8,z3=1e7,J3=6e4,X3=864e5;al.initSync();eP=al.get(Gs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Z3=1e4,Rf=Symbol.for("version"),tP=Symbol.for("incremental-update"),En=Symbol("entry"),CT=Symbol("is-saving"),LT=Symbol("loaded-from-source"),el={isNotification:!0,ensureLoaded:!1},Sf=1,Tf=8,eX=Buffer.allocUnsafeSlow(8192),rP=1978,mSe=(0,Nf.convertToMS)(al.get(Gs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(bf,"makeTable");a(DT,"attributesAsObject");a(sP,"noop");a(tX,"setServerUtilities");rX=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Af,"coerceType");a(nP,"isDescendantId");tl=a(()=>new Promise(setImmediate),"rest");a(PT,"when");a(sl,"updateResource")});var De={};Fe(De,{database:()=>Fu,databases:()=>ze,dropDatabase:()=>qS,dropTableMeta:()=>cX,getDatabases:()=>Us,getTables:()=>sX,onUpdatedTable:()=>qT,readMetaDb:()=>cl,resetDatabases:()=>nX,table:()=>ut,tables:()=>$r});function sX(){return Df||Us(),$r||{}}function Us(){if(Df)return ze;Df=!0,Ka=new Map;let e=(0,Jt.getHdbBasePath)()&&(0,Ye.join)((0,Jt.getHdbBasePath)(),Vr.DATABASES_DIR_NAME),t=(0,Jt.get)(Vr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Jt.get)(Vr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,kr.existsSync)(e)?e:(0,Ye.join)((0,Jt.getHdbBasePath)(),Vr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,kr.existsSync)(e))for(let r of(0,kr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Ye.basename)(r.name,".mdb");r.isFile()&&(0,Ye.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&cl((0,Ye.join)(e,r.name),null,s)}if((0,kr.existsSync)((0,Ya.getBaseSchemaPath)())){for(let r of(0,kr.readdirSync)((0,Ya.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Ye.join)((0,Ya.getBaseSchemaPath)(),r.name),n=(0,Ye.join)((0,Ya.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,kr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Ye.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Ye.join)(n,i.name);cl((0,Ye.join)(s,i.name),(0,Ye.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,kr.existsSync)(n))for(let o of(0,kr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Ye.extname)(o.name).toLowerCase()===".mdb"&&cl((0,Ye.join)(n,o.name),(0,Ye.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Ye.join)(c.path,(0,Ye.basename)(o+".mdb"));(0,kr.existsSync)(u)&&cl(u,o,r,null,!0)}}for(let r in ze){let s=Ka.get(r);if(s){let n=ze[r];r.includes("delete")&&us.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(us.trace(`delete table class ${i}`),delete n[i])}else if(delete ze[r],r==="data"){for(let n in $r)delete $r[n];delete $r[Pf]}}return Ka=null,ze}}function nX(){Df=!1;for(let[,e]of Gi)e.needsDeletion=!0;Us();for(let[e,t]of Gi)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Gi.delete(e));return ze}function cl(e,t,r=BT,s,n){let i=new UT.default(e,!1);try{let o=Gi.get(e);o?o.needsDeletion=!1:(o=(0,wf.open)(i),Gi.set(e,o));let c=new Fo.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(If.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,kr.existsSync)(s)&&(i.path=s,_=(0,wf.open)(i),_.isLegacy=!0):_=md(o));let l=lP(r),d=l[Pf],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 A=f.get(p);A||f.set(p,A={attributes:[]}),(S==null||h.is_hash_attribute)&&(A.primary=h),S!=null&&A.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 k of p)if(k.is_hash_attribute||k.isPrimaryKey){S=k;break}if(!S){us.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let A=l[E],g={},O=[],V,$,F=typeof S.audit=="boolean"?S.audit:(0,Jt.get)(Vr.CONFIG_PARAMS.LOGGING_AUDITLOG),w=S.trackDeletes,K=S.expiration,B=S.eviction;if(A)g=A.indices,O=A.attributes,A.schemaVersion++;else{V=S.tableId,V?V>=(u.get(Va)||0)&&u.putSync(Va,V+1):(S.tableId=V=u.get(Va),V||(V=1),u.putSync(Va,V+1),u.putSync(S.key,S));let k=new Fo.default(!S.is_hash_attribute,S.is_hash_attribute);$=Ed(o.openDB(S.key,k)),$.rootStore=o,$.tableId=V}for(let k of p){k.attribute=k.name;try{if(!k.is_hash_attribute&&(k.indexed||k.attribute&&!k.name)){if(!g[k.name]){let Ie=new Fo.default(!k.is_hash_attribute,k.is_hash_attribute);g[k.name]=o.openDB(k.key,Ie)}let se=O.find(Ie=>Ie.name===k.name);se?O.splice(O.indexOf(se),1,k):O.push(k)}}catch(se){us.error("Error trying to update attribute",k,O,g,se)}}if(!A){A=_P(l,E,bf({primaryStore:$,auditStore:_,audit:F,expirationMS:K&&K*1e3,evictionMS:B&&B*1e3,trackDeletes:w,tableName:E,tableId:V,primaryKey:S.name,databasePath:n?r+"/"+E:r,databaseName:r,indices:g,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),A.schemaVersion=1;for(let k of HT)k(A)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function lP(e){let t=ze[e];if(t||(e==="data"?t=ze[e]=$r:e==="system"?Object.defineProperty(ze,"system",{value:t=Object.create(null),configurable:!0}):t=ze[e]=Object.create(null)),Ka&&!Ka.has(e)){let r=new Set;t[Pf]=r,Ka.set(e,r)}return t}function _P(e,t,r){return e[t]=r,r}function Fu({database:e,table:t}){e||(e=BT),Us();let r=lP(e),s=(0,Ye.join)((0,Jt.getHdbBasePath)(),Vr.DATABASES_DIR_NAME),n=(0,Jt.get)(Vr.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(n.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&n[e]?.tables?.[t]?.path;s=i||n[e]?.path||process.env.STORAGE_PATH||(0,Jt.get)(Vr.CONFIG_PARAMS.STORAGE_PATH)||((0,kr.existsSync)(s)?s:(0,Ye.join)((0,Jt.getHdbBasePath)(),Vr.LEGACY_DATABASES_DIR_NAME));let o=(0,Ye.join)(s,(i?t:e)+".mdb"),c=Gi.get(o);if(!c){let u=new UT.default(o,!1);c=(0,wf.open)(u),Gi.set(o,c)}return c}async function qS(e){if(!ze[e])throw new Error("Schema does not exist");let t=ze[e];for(let r in t){let n=t[r].primaryStore.rootStore;Gi.delete(n.path),n.status==="open"&&(await n.close(),await aP.remove(n.path))}if(e==="data"){for(let r in $r)delete $r[r];delete $r[Pf]}delete ze[e]}function ut({table:e,database:t,expiration:r,eviction:s,scanInterval:n,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=BT);let l=Fu({database:t,table:e}),d=ze[t],f=d?.[e];if(l.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,p,S;u==null&&(u=!0);let A=new Fo.default(!1);for(let w of i)w.attribute?(w.name=w.attribute,w.indexed=!0):w.attribute=w.name,w.expiresAt&&(w.indexed=!0);let g,O;if(f){if(E=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let w=l.auditStore;w||(w=md(l)),h=i.find(se=>se.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,Jt.get)(Vr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),s&&(h.eviction=s),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),us.trace(`${e} table loading, opening primary store`);let K=new Fo.default(!1,!0),B=e+"/",k=Ed(l.openDB(B,K));k.rootStore=l,S=l.dbisDb=l.openDB(If.INTERNAL_DBIS_NAME,A),k.tableId=S.get(Va),k.tableId||(k.tableId=1),S.putSync(Va,k.tableId+1),h.tableId=k.tableId,f=_P(d,e,bf({primaryStore:k,auditStore:w,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:s&&s*1e3,primaryKey:E,tableName:e,tableId:k.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:u,dbisDB:S})),f.schemaVersion=1,g=!0,F(),S.put(B,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(If.INTERNAL_DBIS_NAME,A)),f.dbisDB=S;let V=[];for(let{key:w,value:K}of S.getRange({start:!0})){let[B,k]=w.toString().split("/");if(k===""&&(k=K.name),k){if(B!==e)continue}else k=B;if(!i.find(Ie=>Ie.name===k)?.indexed&&K.indexed&&!K.isPrimaryKey){F(),g=!0,S.remove(w);let Ie=f.indices[B];Ie&&V.push(Ie)}}let $=[];try{for(let w of i||[]){let K=e+"/"+(w.name||"");Object.defineProperty(w,"key",{value:K,configurable:!0});let B=S.get(K);if(w.isPrimaryKey){if(B=B||S.get(K=e+"/")||{},o!==f.audit||(+r||void 0)!==(+B.expiration||void 0)||(+s||void 0)!==(+B.eviction||void 0)){let se=Object.assign({},B);typeof o=="boolean"&&(o&&f.enableAuditing(o),se.audit=o),r&&(se.expiration=+r),s&&(se.eviction=+s),g=!0,F(),S.put(K,se)}continue}B?.attribute&&!B.name&&(B.indexed=!0);let k=!B||B.type!==w.type||B.indexed!==w.indexed||JSON.stringify(B.attributes)!==JSON.stringify(w.attributes)||JSON.stringify(B.elements)!==JSON.stringify(w.elements);if(w.indexed){let se=new Fo.default(!0,!1),Ie=l.openDB(K,se);(k||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<ul.workerData?.restartNumber)&&(g=!0,F(),B=S.get(K),(k||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<ul.workerData?.restartNumber)&&(g=!0,w.lastIndexedKey=B?.lastIndexedKey||!1,w.indexingPID=process.pid,Ie.isIndexing=!0,Object.defineProperty(w,"dbi",{value:Ie}),$.push(w)),S.put(K,w)),p[w.name]=Ie}else k&&(g=!0,F(),S.put(K,w))}}finally{O&&O()}if(g&&(f.schemaVersion++,f.updatedAttributes()),us.trace(`${e} table loading, running index`),$.length>0||V.length>0?f.indexingOperation=aX(f,$,V):g&&Cf.signalSchemaChange(new Lf.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,g)for(let w of HT)w(f,_!=="cluster");return(r||s||n)&&f.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),us.trace(`${e} table loaded`),f;function F(){O||l.transactionSync(()=>({then(w){O=w}}))}a(F,"startTxn")}async function aX(e,t,r){try{let s=e.schemaVersion;await Cf.signalSchemaChange(new Lf.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=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++,n=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,cP.getIndexedValues)(l[h]);if(p)for(let S=0,A=p.length;S<A;S++)E.dbi.put(p[S],_)}}),n.then(()=>u--,f=>{u--,us.error(f)}),ul.workerData&&ul.workerData.restartNumber!==uP.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>iX?await n:u>oX&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,n=e.dbisDB.put(_.key,_)}await n,await Cf.signalSchemaChange(new Lf.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){us.error("Error in indexing",s)}}function cX({table:e,database:t}){let r=Fu({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function qT(e){HT.push(e)}var Jt,If,wf,Ye,kr,Ya,Fo,UT,Vr,aP,vT,cP,Cf,Lf,ul,us,uP,BT,Pf,$r,ze,Va,HT,Df,Gi,Ka,iX,oX,de=Re(()=>{Jt=M(j()),If=M(Ke()),wf=require("lmdb"),Ye=require("path"),kr=require("fs"),Ya=M(Be());yf();Fo=M(pd()),UT=M(Td()),Vr=M(R()),aP=M(require("fs-extra")),vT=require("../index"),cP=M(ar()),Cf=M(kn()),Lf=M(Ds()),ul=require("worker_threads"),us=M(v()),uP=M(Qe());Aa();du();BT="data",Pf=Symbol("defined-tables");(0,Jt.initSync)();$r=Object.create(null),ze=Object.create(null);(0,vT._assignPackageExport)("databases",ze);(0,vT._assignPackageExport)("tables",$r);Va=Symbol.for("next-table-id"),HT=[],Gi=new Map;a(sX,"getTables");a(Us,"getDatabases");a(nX,"resetDatabases");a(cl,"readMetaDb");a(lP,"ensureDB");a(_P,"setTable");a(Fu,"database");a(qS,"dropDatabase");a(ut,"table");iX=1e3,oX=10;a(aX,"runIndexing");a(cX,"dropTableMeta");a(qT,"onUpdatedTable")});var G=T((bSe,bP)=>{"use strict";var Fi=require("path"),mP=require("fs-extra"),hr=v(),dP=require("fs-extra"),Mf=require("os"),uX=require("net"),lX=require("recursive-iterator"),Je=R(),_X=xm(),fP=require("papaparse"),Uf=require("moment"),{inspect:dX}=require("util"),EP=require("is-number"),NSe=require("lodash"),fX=require("minimist"),EX=require("https"),hX=require("http"),{hdb_errors:vf}=Z(),mX=/^((\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)))$/,pP=require("util").promisify(setTimeout),pX=100,SX=5,TX="",gX=4,hP={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};bP.exports={isEmpty:Yr,isEmptyOrZeroLength:mn,arrayHasEmptyValues:OX,arrayHasEmptyOrZeroLengthValues:NX,buildFolderPath:bX,isBoolean:SP,errorizeMessage:RX,stripFileExtension:IX,autoCast:wX,autoCastJSON:TP,autoCastJSONDeep:FT,removeDir:CX,compareVersions:LX,isCompatibleDataVersion:DX,escapeRawValue:PX,unescapeValue:MX,stringifyProps:UX,timeoutPromise:BX,isClusterOperation:qX,getClusterUser:FX,checkGlobalSchemaTable:GX,getHomeDir:RP,getPropsFilePath:vX,promisifyPapaParse:xX,removeBOM:AP,createEventPromise:kX,checkProcessRunning:$X,checkSchemaTableExist:VX,checkSchemaExists:OP,checkTableExists:NP,getStartOfTomorrowInSeconds:YX,getLimitKey:KX,isObject:yX,isNotEmptyAndHasValue:AX,autoCasterIsNumberCheck:gP,backtickASTSchemaItems:WX,isPortTaken:HX,createForkArgs:QX,autoCastBoolean:jX,async_set_timeout:pP,getTableHashAttribute:zX,doesSchemaExist:JX,doesTableExist:XX,stringifyObj:ZX,ms_to_time:eZ,changeExtension:tZ,getEnvCliRootPath:xT,noBootFile:rZ,httpRequest:sZ,transformReq:nZ,convertToMS:iZ,PACKAGE_ROOT:Je.PACKAGE_ROOT};function RX(e){return e instanceof Error?e:new Error(e)}a(RX,"errorizeMessage");function Yr(e){return e==null}a(Yr,"isEmpty");function AX(e){return!Yr(e)&&(e||e===0||e===""||SP(e))}a(AX,"isNotEmptyAndHasValue");function mn(e){return Yr(e)||e.length===0||e.size===0}a(mn,"isEmptyOrZeroLength");function OX(e){if(Yr(e))return!0;for(let t=0;t<e.length;t++)if(Yr(e[t]))return!0;return!1}a(OX,"arrayHasEmptyValues");function NX(e){if(mn(e))return!0;for(let t=0;t<e.length;t++)if(mn(e[t]))return!0;return!1}a(NX,"arrayHasEmptyOrZeroLengthValues");function bX(...e){try{return e.join(Fi.sep)}catch{console.error(e)}}a(bX,"buildFolderPath");function SP(e){return Yr(e)?!1:e===!0||e===!1}a(SP,"isBoolean");function yX(e){return Yr(e)?!1:typeof e=="object"}a(yX,"isObject");function IX(e){return mn(e)?TX:e.slice(0,-gX)}a(IX,"stripFileExtension");function wX(e){return Yr(e)||e===""||typeof e!="string"?e:hP[e]!==void 0?hP[e]:gP(e)===!0?Number(e):mX.test(e)?new Date(e):e}a(wX,"autoCast");function TP(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(TP,"autoCastJSON");function FT(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=FT(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=FT(r);s!==r&&(e[t]=s)}return e}else return TP(e)}a(FT,"autoCastJSONDeep");function gP(e){if(e.startsWith("0.")&&EP(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&EP(e))}a(gP,"autoCasterIsNumberCheck");async function CX(e){if(mn(e))throw new Error(`Directory path: ${e} does not exist`);try{await dP.emptyDir(e),await dP.remove(e)}catch(t){throw hr.error(`Error removing files in ${e} -- ${t}`),t}}a(CX,"removeDir");function LX(e,t){if(mn(e)){hr.info("Invalid current version sent as parameter.");return}if(mn(t)){hr.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").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(LX,"compareVersions");function DX(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(DX,"isCompatibleDataVersion");function PX(e){if(Yr(e))return e;let t=String(e);return t==="."?Je.UNICODE_PERIOD:t===".."?Je.UNICODE_PERIOD+Je.UNICODE_PERIOD:t.replace(Je.FORWARD_SLASH_REGEX,Je.UNICODE_FORWARD_SLASH)}a(PX,"escapeRawValue");function MX(e){if(Yr(e))return e;let t=String(e);return t===Je.UNICODE_PERIOD?".":t===Je.UNICODE_PERIOD+Je.UNICODE_PERIOD?"..":String(e).replace(Je.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(MX,"unescapeValue");function UX(e,t){if(Yr(e))return hr.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+Mf.EOL}!mn(s)&&s[0]===";"?r+=" "+s+n+Mf.EOL:mn(s)||(r+=s+"="+n+Mf.EOL)}catch{hr.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(UX,"stringifyProps");function RP(){let e;try{e=Mf.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(RP,"getHomeDir");function vX(){let e=Fi.join(RP(),Je.HDB_HOME_DIR_NAME,Je.BOOT_PROPS_FILE_NAME);return mP.existsSync(e)||(e=Fi.join(__dirname,"../","hdb_boot_properties.file")),e}a(vX,"getPropsFilePath");function BX(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(BX,"timeoutPromise");async function HX(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=uX.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(HX,"isPortTaken");function qX(e){try{return Je.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){hr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(qX,"isClusterOperation");function GX(e,t){let r=(de(),te(De)).getDatabases();if(!r[e])return vf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return vf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(GX,"checkGlobalSchemaTable");function FX(e,t){if(Yr(t)){hr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Yr(e)||mn(e)){hr.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){hr.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){hr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(FX,"getClusterUser");function xX(){fP.parsePromise=function(e,t,r){return new Promise(function(s,n){fP.parse(e,{header:!0,transformHeader:AP,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(xX,"promisifyPapaParse");function AP(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(AP,"removeBOM");function kX(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;hr.info(`Got cluster status event response: ${dX(n)}`);try{i.cancel()}catch{hr.error("Error trying to cancel timeout.")}s(n)})})}a(kX,"createEventPromise");async function $X(e){let t=!0,r=0;do await pP(pX*r++),(await _X.findPs(e)).length>0&&(t=!1);while(t&&r<SX);if(t)throw new Error(`process ${e} was not started`)}a($X,"checkProcessRunning");function VX(e,t){let r=OP(e);if(r)return r;let s=NP(e,t);if(s)return s}a(VX,"checkSchemaTableExist");function OP(e){let{getDatabases:t}=(de(),te(De));if(!t()[e])return vf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(OP,"checkSchemaExists");function NP(e,t){let{getDatabases:r}=(de(),te(De));if(!r()[e][t])return vf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(NP,"checkTableExists");function YX(){let e=Uf().utc().add(1,Je.MOMENT_DAYS_TAG).startOf(Je.MOMENT_DAYS_TAG).unix(),t=Uf().utc().unix();return e-t}a(YX,"getStartOfTomorrowInSeconds");function KX(){return Uf().utc().format("DD-MM-YYYY")}a(KX,"getLimitKey");function WX(e){try{let t=new lX(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){hr.error("Got an error back ticking items."),hr.error(t)}}a(WX,"backtickASTSchemaItems");function QX(e){return[e]}a(QX,"createForkArgs");function jX(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(jX,"autoCastBoolean");function zX(e,t){let{getDatabases:r}=(de(),te(De)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(zX,"getTableHashAttribute");function JX(e){let{getDatabases:t}=(de(),te(De));return t()[e]!==void 0}a(JX,"doesSchemaExist");function XX(e,t){let{getDatabases:r}=(de(),te(De));return r()[e]?.[t]!==void 0}a(XX,"doesTableExist");function ZX(e){try{return JSON.stringify(e)}catch{return e}}a(ZX,"stringifyObj");function eZ(e){let t=Uf.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(eZ,"ms_to_time");function tZ(e,t){let r=Fi.basename(e,Fi.extname(e));return Fi.join(Fi.dirname(e),r+t)}a(tZ,"changeExtension");function xT(){if(process.env[Je.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Je.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=fX(process.argv);if(e[Je.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Je.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(xT,"getEnvCliRootPath");var GT;function rZ(){if(GT)return GT;let e=xT();xT()&&mP.pathExistsSync(Fi.join(e,Je.HDB_CONFIG_FILE))&&(GT=!0)}a(rZ,"noBootFile");function sZ(e,t){let r;return e.protocol==="http:"?r=hX:r=EX,new Promise((s,n)=>{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",()=>{s(c)})});i.on("error",o=>{n(o)}),i.write(JSON.stringify(t)),i.end()})}a(sZ,"httpRequest");function nZ(e){if(!e.schema&&!e.database){e.schema=Je.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(nZ,"transformReq");function iZ(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(iZ,"convertToMS")});var j=T((ISe,wP)=>{"use strict";var kT=require("fs-extra"),Fs=require("path"),yP=require("os"),oZ=require("properties-reader"),ll=v(),xo=G(),re=R(),Bf=rt(),aZ="Error initializing environment manager",Hf="BOOT_PROPS_FILE_PATH",IP=!1,cZ={[re.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},jn={};wP.exports={BOOT_PROPS_FILE_PATH:Hf,getHdbBasePath:uZ,setHdbBasePath:lZ,get:_Z,initSync:fZ,setProperty:pe,initTestEnvironment:EZ};function uZ(){return jn[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(uZ,"getHdbBasePath");function lZ(e){jn[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(lZ,"setHdbBasePath");function _Z(e){let t=Bf.getConfigValue(e);return t===void 0?jn[e]:t}a(_Z,"get");function pe(e,t){cZ[e]&&(jn[e]=t),Bf.updateConfigObject(e,t)}a(pe,"setProperty");function dZ(){let e;try{e=xo.getPropsFilePath(),kT.accessSync(e,kT.constants.F_OK|kT.constants.R_OK),IP=!0;let t=oZ(e);return jn[re.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(re.HDB_SETTINGS_NAMES.INSTALL_USER),jn[re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),jn[Hf]=e,!0}catch{return ll.trace(`Environment manager found no properties file at ${e}`),!1}}a(dZ,"doesPropFileExist");function fZ(e=!1){try{(IP||dZ()||xo.noBootFile())&&(Bf.initConfig(e),jn[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Bf.getConfigValue(re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){ll.error(aZ),ll.error(t),console.error(t),process.exit(1)}}a(fZ,"initSync");function EZ(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=Fs.join(__dirname,"../../","unitTests");jn[Hf]=Fs.join(u,"hdb_boot_properties.file"),pe(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Fs.join(u,"settings.test")),pe(re.HDB_SETTINGS_NAMES.INSTALL_USER,yP.userInfo()?yP.userInfo().username:void 0),pe(re.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Fs.join(u,"envDir","utility","keys","privateKey.pem")),pe(re.HDB_SETTINGS_NAMES.CERT_KEY,Fs.join(u,"envDir","utility","keys","certificate.pem")),pe(re.CONFIG_PARAMS.TLS_PRIVATEKEY,Fs.join(u,"envDir","utility","keys","privateKey.pem")),pe(re.CONFIG_PARAMS.TLS_CERTIFICATE,Fs.join(u,"envDir","utility","keys","certificate.pem")),pe(re.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),pe(re.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Fs.join(u,"envDir","log")),pe(re.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),pe(re.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),pe(re.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),pe(re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Fs.join(u,"envDir")),pe(re.CONFIG_PARAMS.STORAGE_PATH,Fs.join(u,"envDir")),pe(re.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,xo.isEmpty(n)?!0:n),pe(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,xo.isEmpty(n)?!0:n),pe(re.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),pe(re.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,xo.isEmpty(i)?!1:i),pe(re.CONFIG_PARAMS.HTTP_CORS,xo.isEmpty(i)?!1:i),pe(re.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),pe(re.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),pe(re.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),pe(re.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),pe(re.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Fs.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),pe(re.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,xo.isEmpty(c)?!1:c),o&&(pe("CORS_ACCESSLIST",o),pe(re.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),s&&(pe(re.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),pe(re.CONFIG_PARAMS.HTTP_TIMEOUT,s)),t&&(pe(re.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),pe(re.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(pe(re.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),pe(re.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Hf}. Please check your boot props and settings files`;ll.fatal(r),ll.error(t)}}a(EZ,"initTestEnvironment")});var VT={};Fe(VT,{loadGQLSchema:()=>pZ,start:()=>$T,startOnMainThread:()=>mZ});function $T({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),n)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let $=function(F){if(F.kind==="NonNullType"){let B=$(F.type);return B.nullable=!1,B}if(F.kind==="ListType")return{type:"array",elements:$(F.type)};let K={type:F.name?.value};return Object.defineProperty(K,"location",{value:F.loc.startToken}),K};a($,"getProperty");let A=S.name.value,g=[],O={table:null,database:null,properties:g};f.set(A,O);for(let F of S.directives){if(F.name.value==="table"){for(let w of F.arguments)O[w.name.value]=w.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=A),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,E.push(O)}if(F.name.value==="sealed"&&(O.sealed=!0),F.name.value==="export"){O.export=!0;for(let w of F.arguments)w.name.value==="name"&&(O.export={name:w.value.value})}}let V=!1;for(let F of S.fields){let w=$(F.type);w.name=F.name.value,g.push(w);for(let K of F.directives)if(K.name.value==="primaryKey")V?console.warn("Can not define two attributes as a primary key"):(w.isPrimaryKey=!0,V=!0);else if(K.name.value==="indexed")w.indexed=!0;else if(K.name.value==="createdTime")w.assignCreatedTime=!0;else if(K.name.value==="updatedTime")w.assignUpdatedTime=!0;else if(K.name.value==="expiresAt")w.expiresAt=!0;else if(K.name.value==="allow"){let B=w.authorizedRoles=[];for(let k of K.arguments)k.name.value==="role"&&B.push(k.value.value)}}O.typeName=A,A==="Query"&&(h=O)}function p(S){let A=f.get(S.type);A?S.properties=A.properties:S.type==="array"?p(S.elements):hZ.includes(S.type)||(0,CP.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${n}`)}a(p,"connectPropertyType");for(let S of f.values())for(let A of S.properties)p(A);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,qf.dirname)(s),S.tableClass):i.set((0,qf.dirname)(s)+"/"+(S.export.name||S.typeName),S.tableClass));if(h)for(let S of h.properties){let A=f.get(S.type);if(!A)throw new Error(`${S.type} was not found as a Query export`);i.set((0,qf.dirname)(s)+"/"+S.name,A.tableClass)}}}var qf,CP,hZ,mZ,pZ,LP=Re(()=>{qf=require("path");de();CP=M(Qe()),hZ=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any"];a($T,"start");mZ=$T,pZ=$T({ensureTable:ut}).handleFile});async function Gf(e){return SZ?(_l||(_l=TZ(RZ)),(await(await _l).import(e)).namespace):import(e)}async function TZ(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),_l=new Compartment({console,Math,Date,fetch:gZ,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,PP.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:Mt,tables:$r,databases:ze})}};let s=await(0,DP.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),_l}function gZ(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 RZ(){return{Resource:Mt,tables:$r}}var DP,PP,SZ,_l,YT=Re(()=>{ws();de();DP=require("fs/promises"),PP=require("path"),SZ=!1;a(Gf,"secureImport");a(TZ,"getCompartment");a(gZ,"secureOnlyFetch");a(RZ,"getGlobalVars")});var WT={};Fe(WT,{handleFile:()=>AZ});async function AZ(e,t,r,s){let n=new Map,i=(0,MP.pathToFileURL)(r).toString(),o=await Gf(i);u(o.default)&&s.set((0,KT.dirname)(t),o.default),c(o,(0,KT.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?s.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"),n}var MP,KT,UP=Re(()=>{MP=require("url");YT();KT=require("path");a(AZ,"handleFile")});var jT={};Fe(jT,{start:()=>OZ});function OZ({resources:e}){e.set("login",QT),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var QT,vP=Re(()=>{ws();a(OZ,"start");QT=class extends Mt{static{a(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:o}=r;return{data:await s.login(n,i)}}}});var JT=T((GSe,qP)=>{"use strict";var{Readable:NZ}=require("stream"),bZ=1e4;qP.exports={streamAsJSON(e){return new zT({value:e})}};var zT=class extends NZ{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],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(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 n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),BP)}catch(n){yield BP(n)}else yield JSON.stringify(t)}else yield JSON.stringify(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);HP(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>bZ?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 HP(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))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 s of this.activeIterators)t?s.throw(t):s.return();r()}};function BP(e){return console.error(e),JSON.stringify(e.toString())}a(BP,"handleError");function HP(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(HP,"when")});var Ff=T((xSe,GP)=>{"use strict";var yZ=os();GP.exports={writeTransaction:IZ};function IZ(e,t,r){return yZ.writeTransaction(e,t,r)}a(IZ,"writeTransaction")});var $P=T((VSe,kP)=>{"use strict";var wZ=_r(),CZ=as(),FP=v(),LZ=dr(),$Se=Ff(),DZ=require("clone"),ZT=require("alasql"),PZ=Vd(),xP=require("util"),MZ=xP.promisify(CZ.getTableSchema),UZ=xP.promisify(wZ.search),vZ=R(),XT=G();PZ(ZT);kP.exports={update:HZ};var BZ="There was a problem performing this update. Please check the logs and try again.";async function HZ({statement:e,hdb_user:t}){let r=await MZ(e.table.databaseid,e.table.tableid),s=qZ(e.columns);XT.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=DZ(n),c=XT.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=ZT.parse(u).statements[0],l=await UZ(_),d=GZ(s,l);return FZ(o,d,t)}a(HZ,"update");function qZ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=ZT.compile(`SELECT ${r.expression.toString()} AS [${vZ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw FP.error(t),new Error(BZ)}}a(qZ,"createUpdateRecord");function GZ(e,t){return XT.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(GZ,"buildUpdateRecords");async function FZ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await LZ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){FP.error(`Error delete new_attributes from update response: ${i}`)}return n}a(FZ,"updateRecords")});var YP=T((QSe,VP)=>{var xZ=require("alasql"),kZ=_r(),$Z=v(),VZ=os(),tg=require("util"),eg=G(),YZ=R(),KZ=as(),KSe=Ff(),WSe=dr(),WZ="record",QZ="successfully deleted",jZ=tg.callbackify(ZZ),zZ=tg.promisify(kZ.search),JZ=tg.promisify(KZ.getTableSchema);VP.exports={convertDelete:jZ};function XZ(e){return`${e.deleted_hashes.length} ${WZ}${e.deleted_hashes.length===1?"":"s"} ${QZ}`}a(XZ,"generateReturnMessage");async function ZZ({statement:e,hdb_user:t}){let r=await JZ(e.table.databaseid,e.table.tableid);eg.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=eg.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=xZ.parse(o).statements[0],u={operation:YZ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await zZ(c);let _=await VZ.deleteRecords(u);return eg.isEmptyOrZeroLength(_.message)&&(_.message=XZ(_)),delete _.txn_time,_}catch(_){throw $Z.error(_),_.hdb_code?_.message:_}}a(ZZ,"convertDelete")});var zP=T((zSe,jP)=>{"use strict";var e5=Mi(),{hdb_errors:KP}=Z(),{getDatabases:WP}=(de(),te(De));jP.exports={checkSchemaExists:QP,checkSchemaTableExists:t5,schema_describe:e5};async function QP(e){if(!WP()[e])return KP.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(QP,"checkSchemaExists");async function t5(e,t){let r=await QP(e);if(r)return r;if(!WP()[e][t])return KP.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(t5,"checkSchemaTableExists")});var st=T((rTe,hM)=>{"use strict";var qt=j();qt.initSync();var r5=require("fs-extra"),s5=require("semver"),El=require("path"),{monotonicFactory:n5}=require("ulidx"),XP=n5(),i5=require("util"),ZP=require("child_process"),o5=i5.promisify(ZP.exec),a5=ZP.spawn,Oe=ke(),be=R(),ig=G(),ls=v(),xf=Yn(),c5=Ff(),dl=rt(),{onMessageByType:u5}=Qe(),{isMainThread:l5}=require("worker_threads"),{Encoder:_5,decode:og}=require("msgpackr"),eM=new _5,{isEmpty:ko}=ig,tM=Er(),d5=48*36e11,f5=5e9;l5&&u5(be.ITC_EVENT_TYPES.RESTART,()=>{xs=void 0,ja=void 0});var{connect:E5,StorageType:rM,RetentionPolicy:sM,AckPolicy:kf,DeliverPolicy:$f,DiscardPolicy:h5,NatsConnection:XSe,JetStreamManager:ZSe,JetStreamClient:eTe,StringCodec:tTe,JSONCodec:m5,createInbox:ag,headers:p5,ErrorCode:JP}=require("nats"),{PACKAGE_ROOT:S5}=R(),T5=mo(),{recordAction:g5}=(Qn(),te(Zu)),nM=m5(),R5="clustering",A5=T5.engines[Oe.NATS_SERVER_NAME],O5=El.join(S5,"dependencies"),ng=El.join(O5,`${process.platform}-${process.arch}`,Oe.NATS_BINARY_NAME),rg,sg,fl,Wa,Qa;hM.exports={runCommand:iM,checkNATSServerInstalled:N5,createConnection:cg,getConnection:Vf,getJetStreamManager:hl,getJetStream:oM,getNATSReferences:mr,getServerList:y5,createLocalStream:ug,listStreams:aM,deleteLocalStream:I5,getServerConfig:ml,listRemoteStreams:w5,viewStream:C5,viewStreamIterator:L5,publishToStream:D5,createWorkQueueStream:P5,addSourceToWorkStream:uM,request:U5,removeSourceFromWorkStream:_M,reloadNATS:lg,reloadNATSHub:v5,reloadNATSLeaf:B5,extractServerName:lM,requestErrorHandler:H5,updateWorkStream:q5,createLocalTableStream:fM,createTableStreams:G5,purgeTableStream:EM,purgeSchemaTableStreams:F5,getStreamInfo:x5,updateLocalStreams:$5,closeConnection:b5,getJsmServerName:pl,addNatsMsgHeader:cM,updateIngestStreamConsumer:M5};async function iM(e,t=void 0){let{stdout:r,stderr:s}=await o5(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
8
8
|
`,""));return r.replace(`
|
|
9
|
-
`,"")}a(tM,"runCommand");async function T5(){try{await zZ.access(tg)}catch{return!1}let e=await tM(`${tg} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return XZ.eq(t,p5)}a(T5,"checkNATSServerInstalled");async function ig(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await zP.getClusterUser();if(ko(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}us.trace("create nats connection called");let i=await u5({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile:qt.get(be.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:qt.get(be.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:qt.get(be.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return us.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(ig,"createConnection");async function g5(){Fs&&(await Fs.drain(),Fs=void 0,Ka=void 0,Wa=void 0,Qa=void 0)}a(g5,"closeConnection");var Fs,Qa;async function $f(){return Qa||(Qa=ig(qt.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Fs=await Qa),Fs||Qa}a($f,"getConnection");async function hl(){if(Ka)return Ka;ko(Fs)&&await $f();let{domain:e}=ml(be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ko(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ka=await Fs.jetstreamManager({domain:e}),Ka}a(hl,"getJetStreamManager");async function rM(){if(Wa)return Wa;ko(Fs)&&await $f();let{domain:e}=ml(be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ko(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Wa=Fs.jetstream({domain:e}),Wa}a(rM,"getJetStream");async function mr(){let e=Fs||await $f(),t=Ka||await hl(),r=Wa||await rM();return{connection:e,jsm:t,js:r}}a(mr,"getNATSReferences");async function R5(e){let t=qt.get(be.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await zP.getClusterUser(),n=await ig(t,r,s),i=ng(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=eM.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await rg.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(R5,"getServerList");async function og(e,t){let{jsm:r}=await mr(),s=qt.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=qt.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=qt.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:XP.File,retention:ZP.Limits,subjects:t,discard:l5.Old,max_msgs:n,max_bytes:i,max_age:s})}a(og,"createLocalStream");async function sM(){let{jsm:e}=await mr(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(sM,"listStreams");async function A5(e){let{jsm:t}=await mr();await t.streams.delete(e)}a(A5,"deleteLocalStream");async function O5(e){let{connection:t}=await mr(),r=[],s=ng(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(eM.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(O5,"listRemoteStreams");async function N5(e,t=void 0,r=void 0){let{jsm:s,js:n}=await mr(),i=QP(),o={durable_name:i,ack_policy:xf.Explicit};t&&(o.deliver_policy=kf.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.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=sg(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(Oe.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(N5,"viewStream");async function*b5(e,t=void 0,r=void 0){let{jsm:s,js:n}=await mr(),i=QP(),o={durable_name:i,ack_policy:xf.Explicit};t&&(o.deliver_policy=kf.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.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=sg(_.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(Oe.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(b5,"viewStreamIterator");async function y5(e,t,r,s){us.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=nM(s,r);let{js:n}=await mr(),i=await pl(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:JP.encode(s);try{us.trace(`publishToStream publishing to subject: ${o}`),h5(c.length,"bytes-sent",e,s.operation,"replication"),await n.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return cM(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){us.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await og(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(y5,"publishToStream");function nM(e,t){t===void 0&&(t=d5());let r=qt.get(be.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Oe.MSG_HEADERS.ORIGIN)&&r&&t.append(Oe.MSG_HEADERS.ORIGIN,r),t}a(nM,"addNatsMsgHeader");function ml(e){e=e.toLowerCase();let t=El.join(qt.get(be.CONFIG_PARAMS.ROOTPATH),m5);if(e===be.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ko(eg)&&(eg={port:dl.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:dl.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.HUB,config_file:Oe.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:El.join(t,Oe.PID_FILES.HUB),hdb_nats_path:t}),eg;if(e===be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ko(ZT)&&(ZT={port:dl.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:dl.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.LEAF,config_file:Oe.NATS_CONFIG_FILES.LEAF_SERVER,domain:dl.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.LEAF,pid_file_path:El.join(t,Oe.PID_FILES.LEAF),hdb_nats_path:t}),ZT;us.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(ml,"getServerConfig");async function I5(e){let{jsm:t}=await mr(),r=await pl();try{await t.streams.add({name:e.stream_name,storage:XP.File,retention:ZP.Limits,max_age:a5,max_bytes:c5,subjects:[`${Oe.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:xf.Explicit,durable_name:e.durable_name,deliver_policy:kf.All,max_ack_pending:1e4});else throw s}}a(I5,"createWorkQueueStream");async function w5(){let{jsm:e}=await mr();(await e.consumers.info(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(us.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name),us.info("Adding pull consumer to ingest stream"),await e.consumers.add(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:xf.Explicit,durable_name:Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:kf.All,max_ack_pending:1e4}))}a(w5,"updateIngestStreamConsumer");async function iM(e,t,r){let{jsm:s}=await mr(),n=await s.streams.info(t),i=oM(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=Ff.createNatsTableStreamName(c,u),l=i===e,d,f,E=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let S=0,m=n.config.sources.length;S<m;S++)if(d=n.config.sources[S],f=S,l&&d.name===_||!l&&d.name===_&&d.external&&d.external.api===`$JS.${e}.API`){E=!0;break}if(E===!0){if(d.opt_start_time===o)return;let S=`txn.${c}.${u}.${e}`;await s.streams.purge(t,{filter:S}),n.config.sources.splice(f,1),await s.streams.update(t,n.config)}let h={name:_,opt_start_time:o,filter_subject:`${Oe.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(iM,"addSourceToWorkStream");function oM(e){return e.split(".")[1]}a(oM,"extractServerName");async function aM(e,t,r){let{jsm:s}=await mr(),{schema:n,table:i}=r,o=`txn.${n}.${i}.${e}`;await s.streams.purge(t,{filter:o});let c=Ff.createNatsTableStreamName(n,i),u=await s.streams.info(t);if(!Array.isArray(u.config.sources)||u.config.sources.length===0)return;let _=u.config.sources.length,l;for(;_--;)if(l=u.config.sources[_],l.name===c&&l.external.api===`$JS.${e}.API`){u.config.sources.splice(_,1);break}await s.streams.update(t,u.config)}a(aM,"removeSourceFromWorkStream");async function C5(e,t,r=2e4,s=ng()){if(!rg.isObject(t))throw new Error("data param must be an object");let n=JP.encode(t),{connection:i}=await mr(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return sg(c.data)}a(C5,"request");function ag(e){return new Promise(async(t,r)=>{let s=r5(tg,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(ag,"reloadNATS");async function L5(){let{pid_file_path:e}=ml(be.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await ag(e)}a(L5,"reloadNATSHub");async function D5(){let{pid_file_path:e}=ml(be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await ag(e)}a(D5,"reloadNATSLeaf");function P5(e,t,r){let s;switch(e.code){case WP.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case WP.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(P5,"requestErrorHandler");async function M5(e,t){let r=t+Oe.SERVER_SUFFIX.LEAF;await cM(async()=>{e.subscribe===!0?await iM(r,Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await aM(r,Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(M5,"updateWorkStream");function cM(e){return s5.writeTransaction(be.SYSTEM_SCHEMA_NAME,be.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(cM,"exclusiveLock");async function uM(e,t){let r=Ff.createNatsTableStreamName(e,t),s=await pl(),n=H5(e,t,s);await og(r,[n])}a(uM,"createLocalTableStream");async function U5(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await uM(s,n)}}a(U5,"createTableStreams");async function lM(e,t){if(qt.get(be.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Ff.createNatsTableStreamName(e,t),{jsm:s}=await mr();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")us.warn(r);else throw r}}a(lM,"purgeTableStream");async function v5(e,t){if(qt.get(be.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await lM(e,t[r])}a(v5,"purgeSchemaTableStreams");async function B5(e){return(await hl()).streams.info(e)}a(B5,"getStreamInfo");function H5(e,t,r){return`${Oe.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(H5,"createSubjectName");async function pl(){if(fl)return fl;if(fl=(await hl())?.nc?.info?.server_name,fl===void 0)throw new Error("Unable to get jetstream manager server name");return fl}a(pl,"getJsmServerName");async function q5(){let e=await hl(),t=await pl(),r=await sM();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=G5(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===Oe.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Oe.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;us.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;us.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");us.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(q5,"updateLocalStreams");function G5(e){let{config:t}=e,r=!1;if(t.name===Oe.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=qt.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=qt.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=qt.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(G5,"updateStreamLimits")});var Wf=T((tTe,hM)=>{"use strict";var ja=Id(),Ja=KP(),F5=U(),x5=require("uuid").v4,eTe=require("clone"),Yf=$n(),za=A(),k5=require("util"),xi=is(),{handleHDBError:pr,hdb_errors:$5}=Z(),{HDB_ERROR_MSGS:Vf,HTTP_STATUS_CODES:Sr}=$5,{SchemaEventMsg:Kf}=Ls(),dM=st(),{getDatabases:V5}=(de(),te(De)),{transformReq:Xa}=G();hM.exports={createSchema:Y5,createSchemaStructure:fM,createTable:K5,createTableStructure:EM,createAttribute:z5,dropSchema:W5,dropTable:Q5,dropAttribute:j5,getBackup:X5};async function Y5(e){let t=await fM(e);return Yf.signalSchemaChange(new Kf(process.pid,e.operation,e.schema)),t}a(Y5,"createSchema");async function fM(e){let t=ja.schema_object(e);if(t)throw pr(t,t.message,Sr.BAD_REQUEST,void 0,void 0,!0);if(Xa(e),!await Ja.checkSchemaExists(e.schema))throw pr(new Error,Vf.SCHEMA_EXISTS_ERR(e.schema),Sr.BAD_REQUEST,za.LOG_LEVELS.ERROR,Vf.SCHEMA_EXISTS_ERR(e.schema),!0);return await xi.createSchema(e),`database '${e.schema}' successfully created`}a(fM,"createSchemaStructure");async function K5(e){return Xa(e),e.hash_attribute=e.primary_key??e.hash_attribute,await EM(e)}a(K5,"createTable");async function EM(e){let t=ja.create_table_object(e);if(t)throw pr(t,t.message,Sr.BAD_REQUEST,void 0,void 0,!0);if(ja.validateTableResidence(e.residence),!await Ja.checkSchemaTableExists(e.schema,e.table))throw pr(new Error,Vf.TABLE_EXISTS_ERR(e.schema,e.table),Sr.BAD_REQUEST,za.LOG_LEVELS.ERROR,Vf.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:x5(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await xi.createTable(s,e);else throw pr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Sr.BAD_REQUEST);else await xi.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(EM,"createTableStructure");async function W5(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=ja.schema_object(e),s=t??r;if(s)throw pr(s,s.message,Sr.BAD_REQUEST,void 0,void 0,!0);Xa(e);let n=await Ja.checkSchemaExists(e.schema);if(n)throw pr(new Error,n,Sr.NOT_FOUND,za.LOG_LEVELS.ERROR,n,!0);let i=await Ja.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await xi.dropSchema(e),Yf.signalSchemaChange(new Kf(process.pid,e.operation,e.schema)),await dM.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(W5,"dropSchema");async function Q5(e){let t=ja.table_object(e);if(t)throw pr(t,t.message,Sr.BAD_REQUEST,void 0,void 0,!0);Xa(e);let r=await Ja.checkSchemaTableExists(e.schema,e.table);if(r)throw pr(new Error,r,Sr.NOT_FOUND,za.LOG_LEVELS.ERROR,r,!0);return await xi.dropTable(e),await dM.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(Q5,"dropTable");async function j5(e){let t=ja.attribute_object(e);if(t)throw pr(t,t.message,Sr.BAD_REQUEST,void 0,void 0,!0);Xa(e);let r=await Ja.checkSchemaTableExists(e.schema,e.table);if(r)throw pr(new Error,r,Sr.NOT_FOUND,za.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw pr(new Error,"You cannot drop a hash attribute",Sr.BAD_REQUEST,void 0,void 0,!0);if(za.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw pr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Sr.BAD_REQUEST,void 0,void 0,!0);try{return await xi.dropAttribute(e),J5(e),Yf.signalSchemaChange(new Kf(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw F5.error(`Got an error deleting attribute ${k5.inspect(e)}.`),s}}a(j5,"dropAttribute");function J5(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(J5,"dropAttributeFromGlobal");async function z5(e){Xa(e);let t=V5()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw pr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Sr.BAD_REQUEST,void 0,void 0,!0);return await xi.createAttribute(e),Yf.signalSchemaChange(new Kf(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(z5,"createAttribute");function X5(e){return xi.getBackup(e)}a(X5,"getBackup")});var pM=T((sTe,mM)=>{"use strict";var{OPERATIONS_ENUM:Z5}=A(),cg=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=Z5.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};mM.exports=cg});var ug=T((oTe,AM)=>{"use strict";var e8=is(),iTe=pM(),Qf=G(),jf=A(),t8=Q(),{handleHDBError:SM,hdb_errors:r8}=Z(),{HDB_ERROR_MSGS:TM,HTTP_STATUS_CODES:gM}=r8,s8=Object.values(jf.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),RM="To use this operation audit log must be enabled in harperdb-config.yaml";AM.exports=n8;async function n8(e){if(Qf.isEmpty(e.schema))throw new Error(TM.SCHEMA_REQUIRED_ERR);if(Qf.isEmpty(e.table))throw new Error(TM.TABLE_REQUIRED_ERR);if(!t8.get(jf.CONFIG_PARAMS.LOGGING_AUDITLOG))throw SM(new Error,RM,gM.BAD_REQUEST,jf.LOG_LEVELS.ERROR,RM,!0);let t=Qf.checkSchemaTableExist(e.schema,e.table);if(t)throw SM(new Error,t,gM.NOT_FOUND,jf.LOG_LEVELS.ERROR,t,!0);if(!Qf.isEmpty(e.search_type)&&s8.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await e8.readAuditLog(e)}a(n8,"readAuditLog")});var NM=T((cTe,OM)=>{"use strict";var{OPERATIONS_ENUM:i8}=A(),lg=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=i8.GET_BACKUP,this.schema=t,this.table=r}};OM.exports=lg});var IM=T((dTe,yM)=>{"use strict";var o8=is(),lTe=NM(),_g=G(),a8=A(),_Te=Q(),{handleHDBError:c8,hdb_errors:u8}=Z(),{HDB_ERROR_MSGS:bM,HTTP_STATUS_CODES:l8}=u8;yM.exports=_8;async function _8(e){if(_g.isEmpty(e.schema))throw new Error(bM.SCHEMA_REQUIRED_ERR);if(_g.isEmpty(e.table))throw new Error(bM.TABLE_REQUIRED_ERR);let t=_g.checkSchemaTableExist(e.schema,e.table);if(t)throw c8(new Error,t,l8.NOT_FOUND,a8.LOG_LEVELS.ERROR,t,!0);return await o8.getBackup(read_audit_log_object)}a(_8,"getBackup")});var MM=T((ETe,PM)=>{var ki=require("validate.js"),CM=Ve(),Za=A(),{handleHDBError:d8,hdb_errors:f8}=Z(),{HDB_ERROR_MSGS:nt,HTTP_STATUS_CODES:E8}=f8,dg=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),h8={STRUCTURE_USER:"structure_user"},wM=Object.values(Za.ROLE_TYPES_ENUM),m8="attribute_permissions",p8="attribute_name",{PERMS_CRUD_ENUM:ec}=Za,S8=[m8,...Object.values(ec)],LM=[ec.READ,ec.INSERT,ec.UPDATE],T8=[p8,...LM];function g8(e){let t=dg();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,DM(e,t)}a(g8,"addRoleValidation");function R8(e){let t=dg();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,DM(e,t)}a(R8,"alterRoleValidation");function A8(e){let t=dg();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,CM.validateObject(e,t)}a(A8,"dropRoleValidation");var O8=["operation","role","id","permission","hdb_user","hdb_auth_header"];function DM(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)O8.includes(s[o])||n.push(s[o]);n.length>0&&_t(nt.INVALID_ROLE_JSON_KEYS(n),r);let i=CM.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{_t(o,r)}),e.permission){let o=N8(e);o&&_t(o,r),wM.forEach(c=>{e.permission[c]&&!ki.isBoolean(e.permission[c])&&_t(nt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(wM.indexOf(o)<0){if(o===h8.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]||_t(nt.SCHEMA_NOT_FOUND(d),r)}continue}_t(nt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){_t(nt.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]){_t(nt.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{S8.includes(l)||_t(nt.INVALID_PERM_KEY(l),r,o,u)}),Object.values(ec).forEach(l=>{ki.isDefined(_[l])?ki.isBoolean(_[l])||_t(nt.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):_t(nt.TABLE_PERM_MISSING(l),r,o,u)}),ki.isDefined(_.attribute_permissions)){if(!ki.isArray(_.attribute_permissions)){_t(nt.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{_t(nt.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(S=>{!T8.includes(S)&&S!==ec.DELETE&&_t(nt.INVALID_ATTR_PERM_KEY(S),r,o,u)}),!ki.isDefined(E.attribute_name)){_t(nt.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){_t(nt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}LM.forEach(S=>{ki.isDefined(E[S])?ki.isBoolean(E[S])||_t(nt.ATTR_PERM_NOT_BOOLEAN(S,h),r,o,u):_t(nt.ATTR_PERM_MISSING(S,h),r,o,u)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${u}`;_t(nt.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return b8(r)}a(DM,"customValidate");PM.exports={addRoleValidation:g8,alterRoleValidation:R8,dropRoleValidation:A8};function N8(e){let{operation:t,permission:r}=e;if(t===Za.OPERATIONS_ENUM.ADD_ROLE||t===Za.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return nt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Za.ROLE_TYPES_ENUM.SUPER_USER:Za.ROLE_TYPES_ENUM.CLUSTER_USER;return nt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(N8,"validateNoSUPerms");function b8(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:nt.ROLE_PERMS_ERROR,...e};return d8(new Error,s,E8.BAD_REQUEST)}else return null}a(b8,"generateRolePermResponse");function _t(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(_t,"addPermError")});var Xf=T((mTe,HM)=>{"use strict";var UM=dr(),vM=_r(),y8=Uo(),Eg=MM(),hg=$n(),I8=require("uuid").v4,w8=require("util"),Jf=A(),C8=G(),mg=vM.searchByValue,L8=vM.searchByHash,D8=w8.promisify(y8.delete),P8=Ds(),M8=Pa(),{hdb_errors:U8,handleHDBError:tc}=Z(),{HDB_ERROR_MSGS:BM,HTTP_STATUS_CODES:zf}=U8,{UserEventMsg:pg}=Ls();HM.exports={addRole:v8,alterRole:B8,dropRole:H8,listRoles:q8};function fg(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(fg,"scrubRoleDetails");async function v8(e){let t=Eg.addRoleValidation(e);if(t)throw t;e=fg(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await mg(r)||[])}catch(i){throw tc(i)}if(s&&s.length>0)throw tc(new Error,BM.ROLE_ALREADY_EXISTS(e.role),zf.CONFLICT,void 0,void 0,!0);e.id||(e.id=I8());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await UM.insert(n),hg.signalUserChange(new pg(process.pid)),e=fg(e),e}a(v8,"addRole");async function B8(e){let t=Eg.alterRoleValidation(e);if(t)throw t;e=fg(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await UM.update(r)}catch(n){throw tc(n)}if(s&&s?.message==="updated 0 of 1 records")throw tc(new Error,"Invalid role id",zf.BAD_REQUEST,void 0,void 0,!0);return await hg.signalUserChange(new pg(process.pid)),e}a(B8,"alterRole");async function H8(e){let t=Eg.dropRoleValidation(e);if(t)throw tc(new Error,t,zf.BAD_REQUEST,void 0,void 0,!0);let r=new M8(Jf.SYSTEM_SCHEMA_NAME,Jf.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await L8(r));if(s.length===0)throw tc(new Error,BM.ROLE_NOT_FOUND,zf.NOT_FOUND,void 0,void 0,!0);let n=new P8(Jf.SYSTEM_SCHEMA_NAME,Jf.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await mg(n)),o=!1;if(C8.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await D8(c),hg.signalUserChange(new pg(process.pid)),`${s[0].role} successfully deleted`}a(H8,"dropRole");async function q8(){return mg({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(q8,"listRoles")});var xM=T((STe,FM)=>{"use strict";var G8=Q(),$i=require("joi"),F8=Ve(),qM=require("moment"),x8=require("fs-extra"),Sg=require("path"),k8=require("lodash"),Sl=A(),{LOG_LEVELS:$o}=A(),$8="YYYY-MM-DD hh:mm:ss",V8=Sg.resolve(__dirname,"../logs");FM.exports=function(e){return F8.validateBySchema(e,Y8)};var Y8=$i.object({from:$i.custom(GM),until:$i.custom(GM),level:$i.valid($o.NOTIFY,$o.FATAL,$o.ERROR,$o.WARN,$o.INFO,$o.DEBUG,$o.TRACE),order:$i.valid("asc","desc"),limit:$i.number().min(1),start:$i.number().min(0),log_name:$i.custom(K8)});function GM(e,t){if(qM(e,qM.ISO_8601).format($8)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(GM,"validateDatetime");function K8(e,t){if(k8.invert(Sl.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=G8.get(Sl.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Sl.LOG_NAMES.HDB:e,i=n===Sl.LOG_NAMES.INSTALL?Sg.join(V8,Sl.LOG_NAMES.INSTALL):Sg.join(s,n);return x8.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(K8,"validateReadLogPath")});var gg=T((gTe,$M)=>{"use strict";var Zf=A(),W8=U(),Q8=Q(),j8=xM(),Tg=require("path"),kM=require("fs-extra"),{once:J8}=require("events"),{handleHDBError:z8,hdb_errors:X8}=Z(),{PACKAGE_ROOT:Z8}=A(),e6=Tg.join(Z8,"logs"),t6=1e3,r6=200;$M.exports=s6;async function s6(e){let t=j8(e);if(t)throw z8(t,t.message,X8.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Q8.get(Zf.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?Zf.LOG_NAMES.HDB:e.log_name,n=s===Zf.LOG_NAMES.INSTALL?Tg.join(e6,Zf.LOG_NAMES.INSTALL):Tg.join(r,s),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?t6:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,S=0;f==="desc"&&!u&&!l&&(S=Math.max(kM.statSync(n).size-(h+5)*r6,0));let m=kM.createReadStream(n,{start:S});m.on("error",F=>{W8.error(F)});let g=0,R=[],b="",V;m.on("data",F=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=b+F;let W=0,B;for(;(B=w.exec(F))&&!m.destroyed;){V&&(V.message=F.slice(W,B.index),$(V));let[k,se,Ie]=B,ie=Ie.split("] ["),Yt=ie[0],Ge=ie[1];ie.splice(0,2),V={timestamp:se,thread:Yt,level:Ge,tags:ie,message:""},W=B.index+k.length}b=F.slice(W)}),m.on("end",F=>{m.destroyed||V&&(V.message=b.trim(),$(V))}),m.resume();function $(F){let w,W,B;switch(!0){case(i&&c&&_):w=new Date(F.timestamp),W=new Date(u),B=new Date(l),F.level===o&&w>=W&&w<=B&&g<E?g++:F.level===o&&w>=W&&w<=B&&(Vi(F,f,R),g++,g===h&&m.destroy());break;case(i&&c):w=new Date(F.timestamp),W=new Date(u),F.level===o&&w>=W&&g<E?g++:F.level===o&&w>=W&&(Vi(F,f,R),g++,g===h&&m.destroy());break;case(i&&_):w=new Date(F.timestamp),B=new Date(l),F.level===o&&w<=B&&g<E?g++:F.level===o&&w<=B&&(Vi(F,f,R),g++,g===h&&m.destroy());break;case(c&&_):w=new Date(F.timestamp),W=new Date(u),B=new Date(l),w>=W&&w<=B&&g<E?g++:w>=W&&w<=B&&(Vi(F,f,R),g++,g===h&&m.destroy());break;case i:F.level===o&&g<E?g++:F.level===o&&(Vi(F,f,R),g++,g===h&&m.destroy());break;case c:w=new Date(F.timestamp),W=new Date(u),w>=W&&g<E?g++:w>=W&&g>=E&&(Vi(F,f,R),g++,g===h&&m.destroy());break;case _:w=new Date(F.timestamp),B=new Date(l),w<=B&&g<E?g++:w<=B&&g>=E&&(Vi(F,f,R),g++,g===h&&m.destroy());break;default:g<E?g++:(Vi(F,f,R),g++,g===h&&m.destroy())}}return a($,"onLogMessage"),await J8(m,"close"),R}a(s6,"readLog");function Vi(e,t,r){t==="desc"?n6(e,r):t==="asc"?i6(e,r):r.push(e)}a(Vi,"pushLineToResult");function n6(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(n6,"insertDescending");function i6(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(i6,"insertAscending")});var tE=T((bTe,WM)=>{"use strict";var Rg=require("joi"),{string:eE,boolean:VM,date:o6}=Rg.types(),a6=Ve(),{validateSchemaExists:ATe,validateTableExists:OTe,validateSchemaName:NTe}=an(),c6=A(),u6=ke(),YM=Q();YM.initSync();var l6=eE.invalid(YM.get(c6.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(u6.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(),KM={operation:eE.valid("add_node","update_node"),node_name:l6,subscriptions:Rg.array().items({table:eE.optional(),schema:eE.required(),subscribe:VM.required(),publish:VM.required().custom(d6),start_time:o6.iso()}).min(1).required()};function _6(e){return a6.validateBySchema(e,Rg.object(KM))}a(_6,"addUpdateNodeValidator");function d6(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(d6,"checkForFalsy");WM.exports={addUpdateNodeValidator:_6,validation_schema:KM}});var jM=T((ITe,QM)=>{var f6=Ve(),E6={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};QM.exports=function(e){return f6.validateObject(e,E6)}});var rE=T((wTe,JM)=>{"use strict";var h6=A().OPERATIONS_ENUM,Ag=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=h6.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};JM.exports=Ag});var XM=T((LTe,zM)=>{"use strict";var m6={OPERATION:"operation",REFRESH:"refresh"},Og=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Ng=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};zM.exports={JWTTokens:Og,TOKEN_TYPE_ENUM:m6,JWTRSAKeys:Ng}});var Rl=T((PTe,rU)=>{"use strict";var gl=require("jsonwebtoken"),bg=require("fs-extra"),yg=G(),ls=A(),{handleHDBError:Tr,hdb_errors:p6}=Z(),{HTTP_STATUS_CODES:gr,AUTHENTICATION_ERROR_MSGS:Rr}=p6,Tl=U(),ZM=tf(),Cg=Er(),S6=dr().update,T6=rE(),g6=$n(),{UserEventMsg:R6}=Ls(),Yi=Q();Yi.initSync();var Ig=require("path"),{JWTTokens:A6,JWTRSAKeys:O6,TOKEN_TYPE_ENUM:sE}=XM(),N6=Yi.get(ls.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Yi.get(ls.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",b6=Yi.get(ls.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Yi.get(ls.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",nE="RS256",wg;rU.exports={createTokens:y6,validateOperationToken:w6,refreshOperationToken:I6,validateRefreshToken:tU};async function y6(e){if(yg.isEmpty(e)||typeof e!="object")throw Tr(new Error,Rr.INVALID_AUTH_OBJECT,gr.BAD_REQUEST,void 0,void 0,!0);if(yg.isEmpty(e.username))throw Tr(new Error,Rr.USERNAME_REQUIRED,gr.BAD_REQUEST,void 0,void 0,!0);if(yg.isEmpty(e.password))throw Tr(new Error,Rr.PASSWORD_REQUIRED,gr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Cg.findAndValidateUser(e.username,e.password),!t)throw Tr(new Error,Rr.INVALID_CREDENTIALS,gr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw Tl.error(f),Tr(new Error,Rr.INVALID_CREDENTIALS,gr.UNAUTHORIZED,void 0,void 0,!0)}let r=await iE(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await eU(i,r.private_key,r.passphrase),c=await gl.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:b6,algorithm:nE,subject:sE.REFRESH}),u=ZM.hash(c),_=new T6(ls.SYSTEM_SCHEMA_NAME,ls.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await S6(_)}catch(f){Tl.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw Tr(new Error,Rr.REFRESH_TOKEN_SAVE_FAILED,gr.INTERNAL_SERVER_ERROR);return g6.signalUserChange(new R6(process.pid)),new A6(o,c)}a(y6,"createTokens");async function eU(e,t,r){return await gl.sign(e,{key:t,passphrase:r},{expiresIn:N6,algorithm:nE,subject:sE.OPERATION})}a(eU,"signOperationToken");async function iE(){if(wg===void 0)try{let e=Ig.join(Yi.getHdbBasePath(),ls.LICENSE_KEY_DIR_NAME,ls.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Ig.join(Yi.getHdbBasePath(),ls.LICENSE_KEY_DIR_NAME,ls.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Ig.join(Yi.getHdbBasePath(),ls.LICENSE_KEY_DIR_NAME,ls.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await bg.readFile(e)).toString(),n=(await bg.readFile(t)).toString(),i=(await bg.readFile(r)).toString();wg=new O6(i,n,s)}catch(e){throw Tl.error(e),Tr(new Error,Rr.NO_ENCRYPTION_KEYS,gr.INTERNAL_SERVER_ERROR)}return wg}a(iE,"getJWTRSAKeys");async function I6(e){if(!e)throw Tr(new Error,Rr.INVALID_BODY,gr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Tr(new Error,Rr.REFRESH_TOKEN_REQUIRED,gr.BAD_REQUEST,void 0,void 0,!0);await tU(e.refresh_token);let t=await iE(),r=await gl.decode(e.refresh_token);return{operation_token:await eU({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(I6,"refreshOperationToken");async function w6(e){try{let t=await iE(),r=await gl.verify(e,t.public_key,{algorithms:nE,subject:sE.OPERATION});return await Cg.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Tl.warn(t),t.name&&t.name==="TokenExpiredError"?Tr(new Error,Rr.TOKEN_EXPIRED,gr.FORBIDDEN):Tr(new Error,Rr.INVALID_TOKEN,gr.UNAUTHORIZED)}}a(w6,"validateOperationToken");async function tU(e){let t;try{let r=await iE(),s=await gl.verify(e,r.public_key,{algorithms:nE,subject:sE.REFRESH});t=await Cg.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Tl.warn(r),r.name&&r.name==="TokenExpiredError"?Tr(new Error,Rr.TOKEN_EXPIRED,gr.FORBIDDEN):Tr(new Error,Rr.INVALID_TOKEN,gr.UNAUTHORIZED)}if(!ZM.validate(t.refresh_token,e))throw Tr(new Error,Rr.INVALID_TOKEN,gr.UNAUTHORIZED);return t}a(tU,"validateRefreshToken")});var Lg=T((vTe,iU)=>{"use strict";var C6=jM(),rc=require("passport"),L6=require("passport-local").Strategy,D6=require("passport-http").BasicStrategy,P6=require("util"),M6=Er(),nU=P6.callbackify(M6.findAndValidateUser),UTe=Mr(),U6=A(),sU=Rl();rc.use(new L6(function(e,t,r){nU(e,t,r)}));rc.use(new D6(function(e,t,r){nU(e,t,r)}));rc.serializeUser(function(e,t){t(null,e)});rc.deserializeUser(function(e,t){t(null,e)});function v6(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":rc.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===U6.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?sU.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):sU.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:rc.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(v6,"authorize");function B6(e,t){let r=C6(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n?.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);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]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(B6,"checkPermissions");iU.exports={authorize:v6,checkPermissions:B6}});var sc=T((HTe,oU)=>{"use strict";var Dg=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},Pg=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};oU.exports={Node:Dg,NodeSubscription:Pg}});var cU=T((GTe,aU)=>{"use strict";var H6=A().OPERATIONS_ENUM,Mg=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=H6.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};aU.exports=Mg});var Al=T((xTe,uU)=>{"use strict";var Ug=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},vg=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,o,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};uU.exports={RemotePayloadObject:Ug,RemotePayloadSubscription:vg}});var _U=T(($Te,lU)=>{"use strict";var Bg=class{static{a(this,"TableSizeObject")}constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};lU.exports=Bg});var EU=T((QTe,fU)=>{"use strict";var q6=_U(),YTe=Ke(),dU=Me(),G6=U(),{getSchemaPath:KTe,getTransactionAuditStorePath:WTe}=Be(),{getDatabases:F6}=(de(),te(De));fU.exports=x6;async function x6(e){let t=new q6;try{let r=F6()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await dU.environmentDataSize(schema_path,e.name),o=await dU.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=s.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=n.entryCount}catch(r){G6.warn(`unable to stat table dbi due to ${r}`)}return t}a(x6,"lmdbGetTableSize")});var mU=T((JTe,hU)=>{"use strict";var Hg=class{static{a(this,"SystemInformationObject")}constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};hU.exports=Hg});var zn=T((ege,gU)=>{"use strict";var k6=require("fs-extra"),$6=require("path"),Xt=require("systeminformation"),Ki=U(),V6=st(),qg=ke(),aE=A(),Y6=EU(),TU=Mi(),{getThreadInfo:pU}=Qe(),Qg=Q();Qg.initSync();var K6=mU(),{openEnvironment:XTe}=Me(),{getSchemaPath:ZTe}=Be(),{database:W6}=(de(),te(De)),oE;gU.exports={getHDBProcessInfo:kg,getNetworkInfo:Vg,getDiskInfo:$g,getMemoryInfo:xg,getCPUInfo:Fg,getTimeInfo:Gg,getSystemInformation:Yg,systemInformation:Q6,getTableSize:Kg,getMetrics:Wg};function Gg(){return Xt.time()}a(Gg,"getTimeInfo");async function Fg(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,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:S,raw_currentload_user:m,cpus:g,...R}=await Xt.currentLoad();return R.cpus=[],g.forEach(b=>{let{raw_load:V,raw_load_idle:$,raw_load_irq:F,raw_load_nice:w,raw_load_system:W,raw_load_user:B,...k}=b;R.cpus.push(k)}),l.current_load=R,l}catch(e){return Ki.error(`error in getCPUInfo: ${e}`),{}}}a(Fg,"getCPUInfo");async function xg(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Xt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Ki.error(`error in getMemoryInfo: ${e}`),{}}}a(xg,"getMemoryInfo");async function kg(){let e={core:[],clustering:[]};try{let t=await Xt.processes(),r;try{r=Number.parseInt(await k6.readFile($6.join(Qg.get(aE.CONFIG_PARAMS.ROOTPATH),aE.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===aE.NODE_ERROR_CODES.ENOENT)Ki.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return Ki.error(`error in getHDBProcessInfo: ${t}`),e}}a(kg,"getHDBProcessInfo");async function $g(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...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 Ki.error(`error in getDiskInfo: ${t}`),e}}a($g,"getDiskInfo");async function Vg(){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(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=s;e.interfaces.push(f)}),(await Xt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return Ki.error(`error in getNetworkInfo: ${t}`),e}}a(Vg,"getNetworkInfo");async function Yg(){if(oE!==void 0)return oE;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,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,oE=e,oE}catch(t){return Ki.error(`error in getSystemInformation: ${t}`),e}}a(Yg,"getSystemInformation");async function Kg(){let e=[],t=await TU.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await Y6(s));return e}a(Kg,"getTableSize");async function Wg(){let e=await TU.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=W6({database:r,table:n}),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}}),s[n]=o}catch(i){Ki.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(Wg,"getMetrics");async function SU(){if(Qg.get(aE.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await V6.getNATSReferences(),r=await t.streams.info(qg.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(qg.WORK_QUEUE_CONSUMER_NAMES.stream_name,qg.WORK_QUEUE_CONSUMER_NAMES.durable_name),n={ingest:{stream:{...r.state},consumer:{num_ack_pending:s._info.num_ack_pending,num_redelivered:s._info.num_redelivered,num_waiting:s._info.num_waiting,num_pending:s._info.num_pending}}};return r.config?.sources&&(n.ingest.stream.sources=r.config.sources),n}}a(SU,"getNatsStreamInfo");async function Q6(e){let t=new K6;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await Yg(),t.time=Gg(),t.cpu=await Fg(),t.memory=await xg(),t.disk=await $g(),t.network=await Vg(),t.harperdb_processes=await kg(),t.table_size=await Kg(),t.metrics=await Wg(),t.threads=await pU(),t.replication=await SU(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await Yg();break;case"time":t.time=Gg();break;case"cpu":t.cpu=await Fg();break;case"memory":t.memory=await xg();break;case"disk":t.disk=await $g();break;case"network":t.network=await Vg();break;case"harperdb_processes":t.harperdb_processes=await kg();break;case"table_size":t.table_size=await Kg();break;case"database_metrics":case"metrics":t.metrics=await Wg();break;case"threads":t.threads=await pU();break;case"replication":t.replication=await SU();break;default:break}return t}a(Q6,"systemInformation")});var Xn=T((nge,NU)=>{"use strict";var j6=dr(),jg=G(),J6=require("util"),Vo=A(),RU=Q();RU.initSync();var z6=Lg(),AU=_r(),{Node:rge,NodeSubscription:sge}=sc(),X6=Pa(),Z6=cU(),{RemotePayloadObject:e9,RemotePayloadSubscription:t9}=Al(),{handleHDBError:r9,hdb_errors:s9}=Z(),{HTTP_STATUS_CODES:n9,HDB_ERROR_MSGS:i9}=s9,o9=Ds(),a9=zn(),c9=po(),{getDatabases:u9}=(de(),te(De)),l9=J6.promisify(z6.authorize),_9=AU.searchByHash,d9=AU.searchByValue;NU.exports={authHeaderToUser:f9,isEmpty:E9,getNodeRecord:h9,upsertNodeRecord:m9,buildNodePayloads:p9,checkClusteringEnabled:S9,getAllNodeRecords:T9,getSystemInfo:g9,reverseSubscription:OU};async function f9(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await l9(t,null),e}a(f9,"authHeaderToUser");function E9(e){return e==null}a(E9,"isEmpty");async function h9(e){let t=new X6(Vo.SYSTEM_SCHEMA_NAME,Vo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return _9(t)}a(h9,"getNodeRecord");async function m9(e){let t=new Z6(Vo.SYSTEM_SCHEMA_NAME,Vo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return j6.upsert(t)}a(m9,"upsertNodeRecord");function OU(e){if(jg.isEmpty(e.subscribe)||jg.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(OU,"reverseSubscription");function p9(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=jg.getTableHashAttribute(u,_),{subscribe:d,publish:f}=OU(c),E=u9()[u]?.[_],h=new t9(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new e9(r,t,n,s)}a(p9,"buildNodePayloads");function S9(){if(!RU.get(Vo.CONFIG_PARAMS.CLUSTERING_ENABLED))throw r9(new Error,i9.CLUSTERING_NOT_ENABLED,n9.BAD_REQUEST,void 0,void 0,!0)}a(S9,"checkClusteringEnabled");async function T9(){let e=new o9(Vo.SYSTEM_SCHEMA_NAME,Vo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await d9(e))}a(T9,"getAllNodeRecords");async function g9(){let e=await a9.getSystemInformation();return{hdb_version:c9.version(),node_version:e.node_version,platform:e.platform}}a(g9,"getSystemInfo")});var Jg=T((oge,PU)=>{"use strict";var cE=st(),bU=G(),yU=ke(),IU=A(),uE=U(),wU=Wf(),R9=Bu(),{RemotePayloadObject:A9}=Al(),{handleHDBError:CU,hdb_errors:O9}=Z(),{HTTP_STATUS_CODES:LU}=O9,{NodeSubscription:DU}=sc();PU.exports=N9;async function N9(e,t){let r;try{r=await cE.request(`${t}.${yU.REQUEST_SUFFIX}`,new A9(IU.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),uE.trace("Response from remote describe all request:",r)}catch(o){uE.error(`addNode received error from describe all request to remote node: ${o}`);let c=cE.requestErrorHandler(o,"add_node",t);throw CU(new Error,c,LU.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===yU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw CU(new Error,o,LU.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===IU.SYSTEM_SCHEMA_NAME){await cE.createLocalTableStream(c,u);let h=new DU(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=bU.doesSchemaExist(c),l=s[c]!==void 0,d=u?bU.doesTableExist(c,u):!0,f=u?s?.[c]?.[u]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(uE.trace(`addNode creating schema: ${c}`),await wU.createSchema({operation:"create_schema",schema:c})),!d&&f){uE.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new R9(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await wU.createTable(h)}await cE.createLocalTableStream(c,u);let E=new DU(c,u,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(N9,"reviewSubscriptions")});var bl=T((cge,vU)=>{"use strict";var{handleHDBError:lE,hdb_errors:b9}=Z(),{HTTP_STATUS_CODES:_E}=b9,{addUpdateNodeValidator:y9}=tE(),Ol=U(),UU=A(),MU=ke(),I9=G(),zg=st(),Nl=Xn(),w9=Q(),C9=Jg(),{Node:L9,NodeSubscription:D9}=sc(),{broadcast:P9}=Qe(),M9="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",U9="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",v9=w9.get(UU.CONFIG_PARAMS.CLUSTERING_NODENAME);vU.exports=B9;async function B9(e,t=!1){Ol.trace("addNode called with:",e),Nl.checkClusteringEnabled();let r=y9(e);if(r)throw lE(r,r.message,_E.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Nl.getNodeRecord(s);if(!I9.isEmptyOrZeroLength(d))throw lE(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,_E.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await C9(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=M9,o;let c=Nl.buildNodePayloads(n,v9,UU.OPERATIONS_ENUM.ADD_NODE,await Nl.getSystemInfo());Ol.trace("addNode sending remote payload:",c);let u;try{u=await zg.request(`${s}.${MU.REQUEST_SUFFIX}`,c)}catch(d){Ol.error(`addNode received error from request: ${d}`);let f=zg.requestErrorHandler(d,"add_node",s);throw lE(new Error,f,_E.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===MU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw lE(new Error,d,_E.INTERNAL_SERVER_ERROR,"error",d)}Ol.trace(u);let _=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];Ol.trace("Add node updating work stream for node:",s,"subscriptions:",E),await zg.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new D9(E.schema,E.table,E.publish,E.subscribe))}let l=new L9(s,_,u.system_info);return await Nl.upsertNodeRecord(l),P9({type:"nats_update"}),i.length>0?o.message=U9:o.message=`Successfully added '${s}' to manifest`,o}a(B9,"addNode")});var Zg=T((lge,qU)=>{"use strict";var{handleHDBError:dE,hdb_errors:H9}=Z(),{HTTP_STATUS_CODES:fE}=H9,{addUpdateNodeValidator:q9}=tE(),yl=U(),HU=A(),BU=ke(),G9=G(),Xg=st(),Il=Xn(),F9=Q(),{cloneDeep:x9}=require("lodash"),k9=Jg(),{NodeSubscription:$9}=sc(),{broadcast:V9}=Qe(),Y9="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",K9="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",W9=F9.get(HU.CONFIG_PARAMS.CLUSTERING_NODENAME);qU.exports=Q9;async function Q9(e){yl.trace("updateNode called with:",e),Il.checkClusteringEnabled();let t=q9(e);if(t)throw dE(t,t.message,fE.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=x9(await Il.getNodeRecord(r));if(G9.isEmptyOrZeroLength(s))throw dE(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,fE.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await k9(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=Y9,o;let c=Il.buildNodePayloads(n,W9,HU.OPERATIONS_ENUM.UPDATE_NODE,await Il.getSystemInfo());yl.trace("updateNode sending remote payload:",c);let u;try{u=await Xg.request(`${r}.${BU.REQUEST_SUFFIX}`,c)}catch(_){yl.error(`updateNode received error from request: ${_}`);let l=Xg.requestErrorHandler(_,"update_node",r);throw dE(new Error,l,fE.INTERNAL_SERVER_ERROR,"error",l)}if(u.status===BU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${r}: ${u.message}`;throw dE(new Error,_,fE.INTERNAL_SERVER_ERROR,"error",_)}yl.trace(u);for(let _=0,l=n.length;_<l;_++){let d=n[_];yl.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await Xg.updateWorkStream(d,r),n[_].start_time===void 0&&delete n[_].start_time}return await j9(s[0],n,u.system_info),i.length>0?o.message=K9:o.message=`Successfully updated '${r}'`,o}a(Q9,"updateNode");async function j9(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=s.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new $9(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Il.upsertNodeRecord(s),V9({type:"nats_update"})}a(j9,"updateNodeTable")});var $U=T((dge,kU)=>{"use strict";var xU=require("joi"),{string:GU}=xU.types(),J9=Ve(),FU=A(),z9=Q(),X9=ke();kU.exports=Z9;function Z9(e){let t=GU.invalid(z9.get(FU.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(X9.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=xU.object({operation:GU.valid(FU.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return J9.validateBySchema(e,r)}a(Z9,"removeNodeValidator")});var hE=T((Ege,jU)=>{"use strict";var{handleHDBError:VU,hdb_errors:e7}=Z(),{HTTP_STATUS_CODES:YU}=e7,t7=$U(),wl=U(),KU=Xn(),r7=G(),EE=A(),WU=ke(),QU=st(),s7=Q(),{RemotePayloadObject:n7}=Al(),{NodeSubscription:i7}=sc(),o7=vu(),a7=Uo(),{broadcast:c7}=Qe(),u7=s7.get(EE.CONFIG_PARAMS.CLUSTERING_NODENAME);jU.exports=l7;async function l7(e){wl.trace("removeNode called with:",e),KU.checkClusteringEnabled();let t=t7(e);if(t)throw VU(t,t.message,YU.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await KU.getNodeRecord(r);if(r7.isEmptyOrZeroLength(s))throw VU(new Error,`Node '${r}' was not found.`,YU.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new n7(EE.OPERATIONS_ENUM.REMOVE_NODE,u7,[]),i,o=!1;try{i=await QU.request(`${r}.${WU.REQUEST_SUFFIX}`,n),wl.trace("Remove node reply from remote node:",r,i)}catch(u){wl.error("removeNode received error from request:",u),o=!0}for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];wl.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new i7(l.schema,l.table,!1,!1);await QU.updateWorkStream(d,r)}let c=new o7(EE.SYSTEM_SCHEMA_NAME,EE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await a7.deleteRecord(c),c7({type:"nats_update"}),i?.status===WU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(wl.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(l7,"removeNode")});var XU=T((mge,zU)=>{"use strict";var JU=require("joi"),{string:_7,array:d7}=JU.types(),f7=Ve(),E7=tE();zU.exports=h7;function h7(e){let t=JU.object({operation:_7.valid("configure_cluster").required(),connections:d7.items(E7.validation_schema).required()});return f7.validateBySchema(e,t)}a(h7,"configureClusterValidator")});var pE=T((Sge,sv)=>{"use strict";var m7=A(),mE=U(),p7=G(),S7=hE(),T7=bl(),ZU=Xn(),g7=XU(),{handleHDBError:ev,hdb_errors:R7}=Z(),{HTTP_STATUS_CODES:tv}=R7,A7="Configure cluster complete.",O7="Failed to configure the cluster. Check the logs for more details.",N7="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";sv.exports=b7;async function b7(e){mE.trace("configure cluster called with:",e),ZU.checkClusteringEnabled();let t=g7(e);if(t)throw ev(t,t.message,tv.BAD_REQUEST,void 0,void 0,!0);let r=await ZU.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(rv(S7,{operation:m7.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);mE.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(rv(T7,E,E.node_name))}let c=await Promise.allSettled(i);mE.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=n.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(mE.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let S=h?.value?.result;typeof S=="string"&&S.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(p7.isEmptyOrZeroLength(u))return{message:A7,connections:_};if(l)return{message:N7,failed_nodes:u,connections:_};throw ev(new Error,O7,tv.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(b7,"configureCluster");async function rv(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(rv,"functionWrapper")});var iv=T((gge,nv)=>{"use strict";var SE=require("joi"),y7=Ve(),{validateSchemaExists:I7,validateTableExists:w7,validateSchemaName:C7}=an(),L7=SE.object({operation:SE.string().valid("purge_stream"),schema:SE.string().custom(I7).custom(C7).required(),table:SE.string().custom(w7).required()});function D7(e){return y7.validateBySchema(e,L7)}a(D7,"purgeStreamValidator");nv.exports=D7});var eR=T((Age,ov)=>{"use strict";var{handleHDBError:P7,hdb_errors:M7}=Z(),{HTTP_STATUS_CODES:U7}=M7,v7=iv(),B7=st(),H7=Xn();ov.exports=q7;async function q7(e){let t=v7(e);if(t)throw P7(t,t.message,U7.BAD_REQUEST,void 0,void 0,!0);H7.checkClusteringEnabled();let{schema:r,table:s}=e;return await B7.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(q7,"purgeStream")});var gE=T((Nge,dv)=>{"use strict";var rR=Xn(),G7=st(),uv=Q(),TE=A(),Yo=ke(),F7=G(),tR=U(),{RemotePayloadObject:x7}=Al(),{ErrorCode:av}=require("nats"),cv=uv.get(TE.CONFIG_PARAMS.CLUSTERING_ENABLED),lv=uv.get(TE.CONFIG_PARAMS.CLUSTERING_NODENAME);dv.exports={clusterStatus:k7,buildNodeStatus:_v};async function k7(){let e={node_name:lv,is_enabled:cv,connections:[]};if(!cv)return e;let t=await rR.getAllNodeRecords();if(F7.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(_v(t[s],e.connections));return await Promise.allSettled(r),e}a(k7,"clusterStatus");async function _v(e,t){let r=e.name,s=new x7(TE.OPERATIONS_ENUM.CLUSTER_STATUS,lv,void 0,await rR.getSystemInfo()),n,i,o=Yo.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await G7.request(Yo.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Yo.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Yo.CLUSTER_STATUS_STATUSES.CLOSED,tR.error(`Error getting node status from ${r} `,n))}catch(u){tR.warn(`Error getting node status from ${r}`,u),u.code===av.NoResponders?o=Yo.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===av.Timeout?o=Yo.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Yo.CLUSTER_STATUS_STATUSES.CLOSED}let c=new $7(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==TE.PRE_4_0_0_VERSION&&await rR.upsertNodeRecord(u)}catch(u){tR.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(_v,"buildNodeStatus");function $7(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a($7,"NodeStatusObject")});var AE=T((yge,fv)=>{"use strict";var{handleHDBError:V7,hdb_errors:Y7}=Z(),{HTTP_STATUS_CODES:K7}=Y7,W7=st(),Q7=Xn(),sR=G(),RE=require("joi"),j7=Ve(),J7=2e3,z7=RE.object({timeout:RE.number().min(1),connected_nodes:RE.boolean(),routes:RE.boolean()});fv.exports=X7;async function X7(e){Q7.checkClusteringEnabled();let t=j7.validateBySchema(e,z7);if(t)throw V7(t,t.message,K7.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||sR.autoCastBoolean(s),o=n===void 0||sR.autoCastBoolean(n),c={nodes:[]},u=await W7.getServerList(r??J7),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(S=>{h.connected_nodes.includes(S.name.slice(0,-4))||h.connected_nodes.push(S.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(S=>({host:S.split(":")[0],port:sR.autoCast(S.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(X7,"clusterNetwork")});var pv=T((wge,mv)=>{"use strict";var nR=require("joi"),Ev=Ve(),{route_constraints:hv}=iT();mv.exports={setRoutesValidator:Z7,deleteRoutesValidator:eee};function Z7(e){let t=nR.object({server:nR.valid("hub","leaf").required(),routes:hv.required()});return Ev.validateBySchema(e,t)}a(Z7,"setRoutesValidator");function eee(e){let t=nR.object({routes:hv.required()});return Ev.validateBySchema(e,t)}a(eee,"deleteRoutesValidator")});var NE=T((Lge,Rv)=>{"use strict";var Ko=rt(),iR=G(),OE=A(),Sv=pv(),{handleHDBError:Tv,hdb_errors:tee}=Z(),{HTTP_STATUS_CODES:gv}=tee,ree="cluster routes successfully set",see="cluster routes successfully deleted";Rv.exports={setRoutes:nee,getRoutes:iee,deleteRoutes:oee};function nee(e){let t=Sv.setRoutesValidator(e);if(t)throw Tv(t,t.message,gv.BAD_REQUEST,void 0,void 0,!0);let r=Ko.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=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=iR.autoCast(_.port);let l=s.some(f=>f.host===_.host&&f.port===_.port),d=n.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(s.push(_),o.push(_))}return e.server==="hub"?Ko.updateConfigValue(OE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Ko.updateConfigValue(OE.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:ree,set:o,skipped:i}}a(nee,"setRoutes");function iee(){let e=Ko.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(iee,"getRoutes");function oee(e){let t=Sv.deleteRoutesValidator(e);if(t)throw Tv(t,t.message,gv.BAD_REQUEST,void 0,void 0,!0);let r=Ko.getClusteringRoutes(),s=r.hub_routes,n=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=s.length;E<h;E++){let S=s[E];if(d.host===S.host&&d.port===S.port){s.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,S=n.length;h<S;h++){let m=n[h];if(d.host===m.host&&d.port===m.port){n.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(s=iR.isEmptyOrZeroLength(s)?null:s,Ko.updateConfigValue(OE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=iR.isEmptyOrZeroLength(n)?null:n,Ko.updateConfigValue(OE.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:see,deleted:i,skipped:o}}a(oee,"deleteRoutes")});var Ov=T((Pge,Av)=>{"use strict";var Cl=require("alasql"),Wo=require("recursive-iterator"),xs=U(),aee=G(),Ll=A(),oR=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,uee(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(n=>Ll.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!Ll.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Ll.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=cee(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(_=>!Ll.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new Cl.yy.Column({columnid:_});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function cee(e){return e.filter(t=>t[Ll.PERMS_CRUD_ENUM.READ])}a(cee,"filterReadRestrictedAttrs");function uee(e,t,r,s,n){lee(e,t,r,s,n)}a(uee,"interpretAST");function Dl(e,t,r,s,n){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),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(Dl,"addSchemaTableToMap");function lee(e,t,r,s,n){if(!e){xs.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Cl.yy.Insert?Eee(e,t,r):e instanceof Cl.yy.Select?_ee(e,t,r,s,n):e instanceof Cl.yy.Update?dee(e,t,r):e instanceof Cl.yy.Delete?fee(e,t,r):xs.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(lee,"getRecordAttributesAST");function _ee(e,t,r,s,n){if(!e){xs.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(aee.isEmptyOrZeroLength(i)){xs.error("No schema specified");return}e.from.forEach(c=>{Dl(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Dl(c.table,t,r,s,n)});let o=new Wo(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{xs.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 Wo(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{xs.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 Wo(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=n.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{xs.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 Wo(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{xs.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(_ee,"getSelectAttributes");function dee(e,t,r){if(!e){xs.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Wo(e.columns),n=e.table.databaseid;Dl(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&aR(e.table.tableid,n,i.columnid,t,r)}a(dee,"getUpdateAttributes");function fee(e,t,r){if(!e){xs.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Wo(e.where),n=e.table.databaseid;Dl(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&aR(e.table.tableid,n,i.columnid,t,r)}a(fee,"getDeleteAttributes");function Eee(e,t,r){if(!e){xs.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Wo(e.columns),n=e.into.databaseid;Dl(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&aR(e.into.tableid,n,i.columnid,t,r)}a(Eee,"getInsertAttributes");function aR(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(aR,"pushAttribute");Av.exports=oR});var yE=T((Uge,Iv)=>{var bE=Ku(),Nv=require("chalk"),Kr=U(),bv=require("prompt"),{promisify:hee}=require("util"),cR=A(),mee=require("fs-extra"),pee=require("path"),See=G(),Tee=po(),yv=Q();yv.initSync();var gee=require("moment"),Ree=hee(bv.get),Aee=pee.join(yv.getHdbBasePath(),cR.LICENSE_KEY_DIR_NAME,cR.LICENSE_FILE_NAME,cR.LICENSE_FILE_NAME);Iv.exports={getFingerprint:Nee,setLicense:Oee,parseLicense:uR,register:bee,getRegistrationInfo:Iee};async function Oee(e){if(e&&e.key&&e.company){try{Kr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await uR(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Kr.error(r),Kr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Oee,"setLicense");async function Nee(){let e={};try{e=await bE.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Kr.error(r),Kr.error(t),new Error(r)}return e}a(Nee,"getFingerprint");async function uR(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Kr.info("Validating license input...");let r=bE.validateLicense(e,t);if(Kr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Kr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Kr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Kr.info("writing license to disk"),await mee.writeFile(Aee,JSON.stringify({license_key:e,company:t}))}catch(s){throw Kr.error("Failed to write License"),s}return"Registration successful."}a(uR,"parseLicense");async function bee(){let e=await yee();return uR(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(bee,"register");async function yee(){let e=await bE.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:Nv.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:Nv.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{bv.start()}catch(s){Kr.error(s)}let r;try{r=await Ree(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(yee,"promptForRegistration");async function Iee(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await bE.getLicense()}catch(r){throw Kr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(See.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Tee.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=gee.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Iee,"getRegistrationInfo")});var Cv=T((Bge,wv)=>{"use strict";var wee=ke(),lR=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+wee.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};wv.exports=lR});var Pv=T((qge,Dv)=>{"use strict";var Lv=ke(),_R=class{static{a(this,"LeafConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+Lv.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+Lv.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"}};Dv.exports=_R});var Uv=T((Fge,Mv)=>{"use strict";var dR=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};Mv.exports=dR});var Bv=T((kge,vv)=>{"use strict";var Cee=ke(),fR=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Cee.SERVER_SUFFIX.ADMIN,this.password=r}};vv.exports=fR});var DE=T((Vge,Gv)=>{"use strict";var nc=require("path"),CE=require("fs-extra"),Lee=Cv(),Dee=Pv(),Pee=Uv(),Mee=Bv(),ER=Er(),oc=G(),Ar=rt(),wE=A(),Pl=ke(),{CONFIG_PARAMS:it}=wE,Ml=U(),Ul=Q(),Hv=Kn(),hR=st(),ic="clustering",Uee=1e4,qv=5;Gv.exports={generateNatsConfig:Bee,removeNatsConfig:Hee,getHubConfigPath:vee};function vee(){let e=Ul.get(it.ROOTPATH);return nc.join(e,ic,Pl.NATS_CONFIG_FILES.HUB_SERVER)}a(vee,"getHubConfigPath");async function Bee(e=!1,t=void 0){Ul.initSync();let r=Ul.get(it.ROOTPATH),s=nc.join(r,ic,Pl.PID_FILES.HUB),n=nc.join(r,ic,Pl.PID_FILES.LEAF),i=Ar.getConfigFromFile(it.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=nc.join(r,ic,Pl.NATS_CONFIG_FILES.HUB_SERVER),c=nc.join(r,ic,Pl.NATS_CONFIG_FILES.LEAF_SERVER),u=Ar.getConfigFromFile(it.CLUSTERING_TLS_CERTIFICATE),_=Ar.getConfigFromFile(it.CLUSTERING_TLS_PRIVATEKEY),l=Ar.getConfigFromFile(it.CLUSTERING_TLS_CERT_AUTH),d=Ar.getConfigFromFile(it.CLUSTERING_TLS_INSECURE),f=Ar.getConfigFromFile(it.CLUSTERING_TLS_VERIFY),E=Ar.getConfigFromFile(it.CLUSTERING_NODENAME),h=Ar.getConfigFromFile(it.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await hR.checkNATSServerInstalled()||LE("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let S=await ER.listUsers(),m=Ar.getConfigFromFile(it.CLUSTERING_USER),g=await ER.getClusterUser();(oc.isEmpty(g)||g.active!==!0)&&LE(`Invalid cluster user '${m}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await IE(it.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await IE(it.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await IE(it.CLUSTERING_HUBSERVER_NETWORK_PORT),await IE(it.CLUSTERING_LEAFSERVER_NETWORK_PORT));let R=[],b=[];for(let[k,se]of S.entries())se.role.role===wE.ROLE_TYPES_ENUM.CLUSTER_USER&&se.active&&(R.push(new Mee(se.username,Hv.decrypt(se.hash))),b.push(new Pee(se.username,Hv.decrypt(se.hash))));let V=[],{hub_routes:$}=Ar.getClusteringRoutes();if(!oc.isEmptyOrZeroLength($))for(let k of $)V.push(`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@${k.host}:${k.port}`);let F=new Lee(Ar.getConfigFromFile(it.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,Ar.getConfigFromFile(it.CLUSTERING_HUBSERVER_CLUSTER_NAME),Ar.getConfigFromFile(it.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),V,R,b);l==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=oc.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===wE.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await CE.writeJson(o,F),Ml.trace(`Hub server config written to ${o}`));let w=`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,W=`tls://${g.uri_encoded_name}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,B=new Dee(Ar.getConfigFromFile(it.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[w],[W],R,b,u,_,l,d);l==null&&delete B.tls.ca_file,(t===void 0||t===wE.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await CE.writeJson(c,B),Ml.trace(`Leaf server config written to ${c}`))}a(Bee,"generateNatsConfig");async function IE(e){let t=Ul.get(e);return oc.isEmpty(t)&&LE(`port undefined for '${e}'`),await oc.isPortTaken(t)&&LE(`'${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(IE,"isPortAvailable");function LE(e){let t=`Error generating clustering config: ${e}`;Ml.error(t),console.error(t),process.exit(1)}a(LE,"generateNatsConfigError");async function Hee(e){let{port:t,config_file:r}=hR.getServerConfig(e),{username:s,decrypt_hash:n}=await ER.getClusterUser(),i=0,o=2e3;for(;i<qv;){try{let _=await hR.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){Ml.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=qv)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 oc.async_set_timeout(o*(i*2))}let c="0".repeat(Uee),u=nc.join(Ul.get(it.ROOTPATH),ic,r);await CE.writeFile(u,c),await CE.remove(u),Ml.notify(e,"started.")}a(Hee,"removeNatsConfig")});var Yv=T((Kge,Vv)=>{"use strict";var Wr=Q(),qee=Ku(),le=A(),vl=ke(),Zn=require("path"),{PACKAGE_ROOT:ME}=A(),Fv=Q(),PE=G(),ac="/dev/null",Gee=Zn.join(ME,"launchServiceScripts"),xv=Zn.join(ME,"utility/scripts"),Fee=Zn.join(xv,le.HDB_RESTART_SCRIPT),kv=Zn.resolve(ME,"dependencies",`${process.platform}-${process.arch}`,vl.NATS_BINARY_NAME);function $v(){let t=qee.licenseSearch().ram_allocation||le.RAM_ALLOCATION_ENUM.DEFAULT,r=le.MEM_SETTING_KEY+t,s={[le.PROCESS_NAME_ENV_PROP]:le.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return PE.noBootFile()&&(s[le.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=PE.getEnvCliRootPath()),{name:le.PROCESS_DESCRIPTORS.HDB,script:le.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:ME}}a($v,"generateMainServerConfig");var xee=9930;function kee(){Wr.initSync(!0);let e=Wr.get(le.CONFIG_PARAMS.ROOTPATH),t=Zn.join(e,"clustering",vl.NATS_CONFIG_FILES.HUB_SERVER),r=Zn.join(Wr.get(le.HDB_SETTINGS_NAMES.LOG_PATH_KEY),le.LOG_NAMES.HDB),s=Fv.get(le.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=vl.LOG_LEVEL_FLAGS[Wr.get(le.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:le.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==xee?"-"+s:""),script:kv,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[le.PROCESS_NAME_ENV_PROP]:le.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Wr.get(le.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ac,i.error_file=ac),i}a(kee,"generateNatsHubServerConfig");var $ee=9940;function Vee(){Wr.initSync(!0);let e=Wr.get(le.CONFIG_PARAMS.ROOTPATH),t=Zn.join(e,"clustering",vl.NATS_CONFIG_FILES.LEAF_SERVER),r=Zn.join(Wr.get(le.HDB_SETTINGS_NAMES.LOG_PATH_KEY),le.LOG_NAMES.HDB),s=Fv.get(le.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=vl.LOG_LEVEL_FLAGS[Wr.get(le.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:le.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==$ee?"-"+s:""),script:kv,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[le.PROCESS_NAME_ENV_PROP]:le.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Wr.get(le.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ac,i.error_file=ac),i}a(Vee,"generateNatsLeafServerConfig");function Yee(){Wr.initSync();let e=Zn.join(Wr.get(le.CONFIG_PARAMS.LOGGING_ROOT),le.LOG_NAMES.HDB),t={name:le.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:le.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[le.PROCESS_NAME_ENV_PROP]:le.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Gee,autorestart:!1};return Wr.get(le.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=ac,t.error_file=ac),t}a(Yee,"generateClusteringUpgradeV4ServiceConfig");function Kee(){let e={[le.PROCESS_NAME_ENV_PROP]:le.PROCESS_DESCRIPTORS.RESTART_HDB};return PE.noBootFile()&&(e[le.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=PE.getEnvCliRootPath()),{...{name:le.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:xv},script:Fee}}a(Kee,"generateRestart");function Wee(){return{apps:[$v()]}}a(Wee,"generateAllServiceConfigs");Vv.exports={generateAllServiceConfigs:Wee,generateMainServerConfig:$v,generateRestart:Kee,generateNatsHubServerConfig:kee,generateNatsLeafServerConfig:Vee,generateClusteringUpgradeV4ServiceConfig:Yee}});var cc=T((jge,nB)=>{"use strict";var Ne=A(),Qee=G(),ei=DE(),Bl=st(),Sn=ke(),Wi=Yv(),UE=Q(),Qi=U(),jee=Xn(),{startWorker:Kv,onMessageFromWorkers:Jee}=Qe(),zee=zn(),Qge=require("util"),Xee=require("child_process"),Zee=require("fs"),{execFile:ete}=Xee,Te;nB.exports={enterPM2Mode:tte,start:ji,stop:mR,reload:Qv,restart:jv,list:pR,describe:zv,connect:ti,kill:ote,startAllServices:ate,startService:SR,getUniqueServicesList:Xv,restartAllServices:cte,isServiceRegistered:Zv,reloadStopStart:eB,restartHdb:Jv,deleteProcess:nte,startClusteringProcesses:rB,startClusteringThreads:sB,isHdbRestartRunning:ite,isClusteringRunning:lte,stopClustering:ute,reloadClustering:_te};var Hl=!1;Jee(e=>{e.type==="restart"&&UE.initSync(!0)});function tte(){Hl=!0}a(tte,"enterPM2Mode");function ti(){return Te||(Te=require("pm2")),new Promise((e,t)=>{Te.connect((r,s)=>{Qi.setupConsoleLogging(),r&&t(r),e(s)})})}a(ti,"connect");var Or,rte=10,Wv;function ji(e,t=!1){if(Hl)return ste(e);let r=ete(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Or.indexOf(r);o>-1&&Or.splice(o,1),!Wv&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<rte&&(Zee.existsSync(ei.getHubConfigPath())?ji(e):(await ei.generateNatsConfig(!0),ji(e),await new Promise(c=>setTimeout(c,3e3)),await ei.removeNatsConfig(Ne.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ei.removeNatsConfig(Ne.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=UE.get(Ne.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&Sn.LOG_LEVEL_HIERARCHY[o]>=Sn.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Sn.LOG_LEVELS.ERR||l===Sn.LOG_LEVELS.WRN?Qi.OUTPUTS.STDERR:Qi.OUTPUTS.STDOUT;Qi.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=Sn.LOG_LEVELS[f]}if(Sn.LOG_LEVEL_HIERARCHY[o]>=Sn.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===Sn.LOG_LEVELS.ERR||l===Sn.LOG_LEVELS.WRN?Qi.OUTPUTS.STDERR:Qi.OUTPUTS.STDOUT;Qi.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),Or=[],!Or&&!t){let i=a(()=>{Wv=!0,Or&&(Or.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)}Or.push(r)}a(ji,"start");function ste(e){return new Promise(async(t,r)=>{try{await ti()}catch(s){r(s)}Te.start(e,(s,n)=>{s&&(Te.disconnect(),r(s)),Te.disconnect(),t(n)})})}a(ste,"startWithPM2");function mR(e){if(!Hl){for(let t of Or||[])t.name===e&&(Or.splice(Or.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await ti()}catch(s){r(s)}Te.stop(e,async(s,n)=>{s&&(Te.disconnect(),r(s)),Te.delete(e,(i,o)=>{i&&(Te.disconnect(),r(s)),Te.disconnect(),t(o)})})})}a(mR,"stop");function Qv(e){return new Promise(async(t,r)=>{try{await ti()}catch(s){r(s)}Te.reload(e,(s,n)=>{s&&(Te.disconnect(),r(s)),Te.disconnect(),t(n)})})}a(Qv,"reload");function jv(e){if(!Hl)for(let t of Or||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await ti()}catch(s){r(s)}Te.restart(e,(s,n)=>{Te.disconnect(),t(n)})})}a(jv,"restart");function nte(e){return new Promise(async(t,r)=>{try{await ti()}catch(s){r(s)}Te.delete(e,(s,n)=>{s&&(Te.disconnect(),r(s)),Te.disconnect(),t(n)})})}a(nte,"deleteProcess");async function Jv(){await ji(Wi.generateRestart())}a(Jv,"restartHdb");async function ite(){let e=await pR();for(let t in e)if(e[t].name===Ne.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(ite,"isHdbRestartRunning");function pR(){return new Promise(async(e,t)=>{try{await ti()}catch(r){t(r)}Te.list((r,s)=>{r&&(Te.disconnect(),t(r)),Te.disconnect(),e(s)})})}a(pR,"list");function zv(e){return new Promise(async(t,r)=>{try{await ti()}catch(s){r(s)}Te.describe(e,(s,n)=>{s&&(Te.disconnect(),r(s)),Te.disconnect(),t(n)})})}a(zv,"describe");function ote(){if(!Hl){for(let e of Or||[])e.kill();Or=[];return}return new Promise(async(e,t)=>{try{await ti()}catch(r){t(r)}Te.killDaemon((r,s)=>{r&&(Te.disconnect(),t(r)),Te.disconnect(),e(s)})})}a(ote,"kill");async function ate(){try{await rB(),await sB(),await ji(Wi.generateAllServiceConfigs())}catch(e){throw Te?.disconnect(),e}}a(ate,"startAllServices");async function SR(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ne.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Wi.generateMainServerConfig();break;case Ne.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Wi.generateNatsIngestServiceConfig();break;case Ne.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Wi.generateNatsReplyServiceConfig();break;case Ne.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Wi.generateNatsHubServerConfig(),await ji(r,t),await ei.removeNatsConfig(e);return;case Ne.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Wi.generateNatsLeafServerConfig(),await ji(r,t),await ei.removeNatsConfig(e);return;case Ne.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Wi.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await ji(r)}catch(r){throw Te?.disconnect(),r}}a(SR,"startService");async function Xv(){try{let e=await pR(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw Te?.disconnect(),e}}a(Xv,"getUniqueServicesList");async function cte(e=[]){try{let t=!1,r=await Xv();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Ne.PROCESS_DESCRIPTORS.HDB?t=!0:await jv(o))}t&&await eB(Ne.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Te?.disconnect(),t}}a(cte,"restartAllServices");async function Zv(e){if(Or?.find(r=>r.name===e))return!0;let t=await zee.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(Zv,"isServiceRegistered");async function eB(e){let t=e===Ne.PROCESS_DESCRIPTORS.HDB?UE.get(Ne.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):UE.get(Ne.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await zv(e),s=Qee.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await mR(e),await SR(e)):e===Ne.PROCESS_DESCRIPTORS.HDB?await Jv():await Qv(e)}a(eB,"reloadStopStart");var tB;async function rB(e=!1){for(let t in Ne.CLUSTERING_PROCESSES){let r=Ne.CLUSTERING_PROCESSES[t];await SR(r,e)}}a(rB,"startClusteringProcesses");async function sB(){tB=Kv(Ne.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ne.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Bl.createWorkQueueStream(Sn.WORK_QUEUE_CONSUMER_NAMES),await Bl.updateIngestStreamConsumer(),await Bl.updateLocalStreams();let e=await jee.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ne.PRE_4_0_0_VERSION){Qi.info("Starting clustering upgrade 4.0.0 process"),Kv(Ne.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(sB,"startClusteringThreads");async function ute(){for(let e in Ne.CLUSTERING_PROCESSES)if(e!==Ne.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ne.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await tB.terminate();else{let t=Ne.CLUSTERING_PROCESSES[e];await mR(t)}}a(ute,"stopClustering");async function lte(){for(let e in Ne.CLUSTERING_PROCESSES){let t=Ne.CLUSTERING_PROCESSES[e];if(await Zv(t)===!1)return!1}return!0}a(lte,"isClusteringRunning");async function _te(){await ei.generateNatsConfig(!0),await Bl.reloadNATSHub(),await Bl.reloadNATSLeaf(),await ei.removeNatsConfig(Ne.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ei.removeNatsConfig(Ne.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(_te,"reloadClustering")});var Qo=T((zge,_B)=>{"use strict";var dte=require("minimist"),{isMainThread:RR,parentPort:aB}=require("worker_threads"),Xe=A(),{PROCESS_DESCRIPTORS_VALIDATE:ql}=Xe,Tn=U(),AR=G(),vE=DE(),uc=st(),TR=ke(),cB=rt(),gn=cc(),iB=zn(),fte=Eo(),{restartWorkers:BE,onMessageByType:Ete}=Qe(),{handleHDBError:hte,hdb_errors:mte}=Z(),{HTTP_STATUS_CODES:pte}=mte,HE=Q();HE.initSync();var Gl=`Restarting HarperDB. This may take up to ${Xe.RESTART_TIMEOUT_MS/1e3} seconds.`,Ste="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",oB="Clustering is not enabled so cannot be restarted",Tte="Invalid service",lc,_s;_B.exports={restart:uB,restartService:OR};RR&&Ete(Xe.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?OR({service:e.workerType}):uB({operation:"restart"})});async function uB(e){_s=Object.keys(e).length===0,lc=await gn.isServiceRegistered(Xe.HDB_PROC_DESCRIPTOR);let t=dte(process.argv);if(t.service){await OR(t);return}if(_s&&!lc){console.error(Ste);return}if(_s&&console.log(Gl),lc){gn.enterPM2Mode(),Tn.notify(Gl);let r=fte(Object.keys(Xe.CONFIG_PARAM_MAP),!0);return AR.isEmptyOrZeroLength(Object.keys(r))||cB.updateConfigValue(void 0,void 0,r,!0,!0),Rte(),Gl}return RR?(Tn.notify(Gl),setTimeout(()=>{BE()},50)):aB.postMessage({type:Xe.ITC_EVENT_TYPES.RESTART}),Gl}a(uB,"restart");async function OR(e){let{service:t}=e;if(Xe.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw hte(new Error,Tte,pte.BAD_REQUEST,void 0,void 0,!0);if(lc=await gn.isServiceRegistered(Xe.HDB_PROC_DESCRIPTOR),!RR)return aB.postMessage({type:Xe.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case ql.clustering:if(!HE.get(Xe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=oB;break}_s&&console.log("Restarting clustering"),Tn.notify("Restarting clustering"),await lB();break;case ql.clustering_config:case ql["clustering config"]:if(!HE.get(Xe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=oB;break}_s&&console.log("Restarting clustering_config"),Tn.notify("Restarting clustering_config"),await gn.reloadClustering();break;case"custom_functions":case"custom functions":case ql.harperdb:case ql.http_workers:if(_s&&!lc){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}_s&&console.log("Restarting http_workers"),Tn.notify("Restarting http_workers"),_s?await gn.restart(Xe.HDB_PROC_DESCRIPTOR):setTimeout(()=>{BE("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Tn.error(r),_s&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(OR,"restartService");async function gte(){await uc.publishToStream(`${TR.SUBJECT_PREFIXES.TXN}.${TR.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,TR.WORK_QUEUE_CONSUMER_NAMES.stream_name,uc.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(gte,"postDummyNatsMsg");async function Rte(){await lB(),await gn.restart(Xe.HDB_PROC_DESCRIPTOR),await AR.async_set_timeout(2e3),HE.get(Xe.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await gR(),_s&&(await uc.closeConnection(),process.exit(0))}a(Rte,"restartPM2Mode");async function lB(){if(!cB.getConfigFromFile(Xe.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await iB.getHDBProcessInfo()).clustering.length===0)Tn.trace("Clustering not running, restart will start clustering services"),await vE.generateNatsConfig(!0),await gn.startClusteringProcesses(),await gn.startClusteringThreads(),await gR(),_s&&await uc.closeConnection();else{await gte(),await vE.generateNatsConfig(!0),lc?(Tn.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await gn.restart(Xe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await gn.restart(Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await iB.getHDBProcessInfo()).clustering.forEach(n=>{Tn.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await AR.async_set_timeout(3e3),await gR(),await uc.updateLocalStreams(),_s&&await uc.closeConnection(),Tn.trace("Restart clustering restarting ingest and reply service threads");let t=BE(Xe.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=BE(Xe.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(lB,"restartClustering");async function gR(){await vE.removeNatsConfig(Xe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await vE.removeNatsConfig(Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(gR,"removeNatsConfig")});var AB=T((eRe,RB)=>{"use strict";var Zge=require("lodash"),Nr=A(),{handleHDBError:dB,hdb_errors:Ate}=Z(),{HDB_ERROR_MSGS:Ote,HTTP_STATUS_CODES:Nte}=Ate,NR=U();RB.exports={getRolePermissions:yte};var jo=Object.create(null),bte=a(e=>({key:e,perms:{}}),"perms_template_obj"),mB=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),pB=a((e=!1,t=!1,r=!1,s=!1)=>({[Nr.PERMS_CRUD_ENUM.READ]:e,[Nr.PERMS_CRUD_ENUM.INSERT]:t,[Nr.PERMS_CRUD_ENUM.UPDATE]:r,[Nr.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),bR=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...pB(t,r,s,n)}),"table_perms_template"),fB=a((e,t=pB())=>({attribute_name:e,describe:gB(t),[Fl]:t[Fl],[yR]:t[yR],[IR]:t[IR]}),"attr_perms_template"),EB=a((e,t=!1)=>({attribute_name:e,describe:t,[Fl]:t}),"timestamp_attr_perms_template"),{READ:Fl,INSERT:yR,UPDATE:IR}=Nr.PERMS_CRUD_ENUM,SB=Object.values(Nr.PERMS_CRUD_ENUM),TB=[Fl,yR,IR];function yte(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[Nr.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(jo[t]&&jo[t].key===s)return jo[t].perms;let n=Ite(e,r);return jo[t]?jo[t].key=s:jo[t]=bte(s),jo[t].perms=n,n}catch(r){if(!e[Nr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Nr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Nr.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw NR.error(s),NR.debug(r),dB(new Error,Ote.OUTDATED_PERMS_TRANSLATION_ERROR,Nte.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
10
|
-
${r.stack}`;throw NR.error(s),dB(new Error)}}}a(yte,"getRolePermissions");function Ite(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Nr.SYSTEM_SCHEMA_NAME]=s[Nr.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=wte(t[i]);return}r[i]=mB(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],u=t[i][o],_=Cte(c,u);r[i].describe||SB.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=bR()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=bR()})}),r}a(Ite,"translateRolePermissions");function wte(e){let t=mB(!0);return Object.keys(e).forEach(r=>{t.tables[r]=bR(!0,!0,!0,!0,!0)}),t}a(wte,"createStructureUserPermissions");function Cte(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return Nr.TIME_STAMP_NAMES.includes(d)&&(f=EB(d,l[Fl])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=fB(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=gB(l),n.attribute_permissions.push(l),c||Lte(l,u)}else if(_!==o){let l;Nr.TIME_STAMP_NAMES.includes(_)?l=EB(_):l=fB(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=hB(n),n}else return e.describe=hB(e),e}a(Cte,"getTableAttrPerms");function hB(e){return SB.filter(t=>e[t]).length>0}a(hB,"getSchemaTableDescribePerm");function gB(e){return TB.filter(t=>e[t]).length>0}a(gB,"getAttributeDescribePerm");function Lte(e,t){TB.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(Lte,"checkForHashPerms")});var OB={};Fe(OB,{Headers:()=>Ji});var Ji,qE=Re(()=>{Ji=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 s=t.toLowerCase();if(!super.has(s))return super.set(s,[t,r])}append(t,r,s){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase(),i=super.get(n);if(i){let o=i[1];s?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(n,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var xl={};Fe(xl,{authentication:()=>DB,bypassAuth:()=>Hte,login:()=>Gte,logout:()=>Fte,start:()=>qte});function Hte(){LB=!0}async function DB(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];if(i){let E=e.isOperationsServer?Ute?Mte:[]:Pte?Dte:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new Ji([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return GE&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),GE&&o.push("Access-Control-Allow-Credentials","true")}}let c,u;if(GE){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(E);if(h>=0){let S=n.indexOf(";",h),m=n.indexOf("=",h);c=n.slice(m+1,S===-1?n.length:S),u=await bB.get(c)}e.session=u||(u={})}e.user=null;let _=a((E,h,S)=>{let m=new xE.AuthAuditLog(E,h,Gt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);m.auth_strategy=S,c&&(m.session_id=c),r.referer&&(m.referer=r.referer),r.origin&&(m.origin=r.origin),h===Gt.AUTH_AUDIT_STATUS.SUCCESS?NB.notify(m):NB.error(m)},"authAuditLog"),l;if(s){if(l=Jo.get(s),!l){let[E,h]=s.split(" "),S,m;try{switch(E){case"Basic":[S,m]=atob(h).split(":"),l=S||m?await Tt.getUser(S,m):null;break;case"Bearer":try{l=await(0,FE.validateOperationToken)(h)}catch(g){if(g.message==="invalid token")try{return await(0,FE.validateRefreshToken)(h),{status:-1}}catch{throw g}}break}}catch(g){return Bte&&(Jo.get(h)||(Jo.set(h,h),_(S,Gt.AUTH_AUDIT_STATUS.FAILURE,E))),{status:401,body:zi({error:g.message},e)}}Jo.set(s,l),vte&&_(l.username,Gt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=l}else u?.user?e.user=await Tt.getUser(u.user,null,!1):LB&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=await(0,IB.getSuperUser)());GE&&(e.session.update=function(E){if(!c){c=(0,wB.v4)();let S=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${c}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",S):d?.headers?.set&&d.headers.set("Set-Cookie",S)}return E.id=c,bB.put(E)},e.login=async function(E,h){e.user=await Tt.getUser(E,h),e.session.update({user:e.user.username})},(l&&!u||u?.user?.username!==l?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let d=await t(e);if(!d)return d;d.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&wi.loginPath?(d.status=302,d.headers.set("Location",wi.loginPath(e))):d.headers.set("WWW-Authenticate","Basic"));let f=o.length;if(f>0){let E=d.headers;E||(d.headers=E=new Ji);for(let h=0;h<f;){let S=o[h++];E.set(S,o[h++])}}return o=null,d}function qte({server:e,port:t}){e.request(DB,{port:t||"all"}),yB||(yB=!0,setInterval(()=>{Jo=new Map},ds.get(Gt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),CB.user.addListener(()=>{Jo=new Map}))}async function Gte(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 Fte(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var IB,FE,wB,ds,Gt,xE,CB,NB,Dte,Pte,Mte,Ute,bB,GE,LB,vte,Bte,Jo,yB,kE=Re(()=>{IB=P(Er());Pr();cu();FE=P(Rl());de();wB=require("uuid"),ds=P(Q()),Gt=P(A()),xE=P(U()),CB=P(Qu());qE();_c();NB=(0,xE.loggerWithTag)("auth-event");ds.initSync();Dte=ds.get(Gt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),Pte=ds.get(Gt.CONFIG_PARAMS.HTTP_CORS),Mte=ds.get(Gt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Ute=ds.get(Gt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),bB=ut({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),GE=ds.get(Gt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,LB=ds.get(Gt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,vte=ds.get(Gt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,Bte=ds.get(Gt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Jo=new Map;Tt.onInvalidatedUser(()=>{Jo=new Map});a(Hte,"bypassAuth");a(DB,"authentication");a(qte,"start");a(Gte,"login");a(Fte,"logout")});var qB=T((uRe,HB)=>{"use strict";var ge=require("joi"),PB=require("fs-extra"),MB=require("path"),si=Ve(),UB=Q(),vB=A(),BB=U(),{hdb_errors:xte}=Z(),{HDB_ERROR_MSGS:Zt}=xte,ri=/^[a-zA-Z0-9-_]+$/;HB.exports={getDropCustomFunctionValidator:$te,setCustomFunctionValidator:Vte,addComponentValidator:Qte,dropCustomFunctionProjectValidator:jte,packageComponentValidator:Jte,deployComponentValidator:zte,setComponentFileValidator:Yte,getComponentFileValidator:Wte,dropComponentFileValidator:Kte};function $E(e,t,r){try{let s=UB.get(vB.CONFIG_PARAMS.COMPONENTSROOT),n=MB.join(s,t);return PB.existsSync(n)?e?t:r.message(Zt.PROJECT_EXISTS):e?r.message(Zt.NO_PROJECT):t}catch(s){return BB.error(s),r.message(Zt.VALIDATION_ERR)}}a($E,"checkProjectExists");function kl(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(kl,"checkFilePath");function kte(e,t,r,s){try{let n=UB.get(vB.CONFIG_PARAMS.COMPONENTSROOT),i=MB.join(n,e,t,r+".js");return PB.existsSync(i)?r:s.message(Zt.NO_FILE)}catch(n){return BB.error(n),s.message(Zt.VALIDATION_ERR)}}a(kte,"checkFileExists");function $te(e){let t=ge.object({project:ge.string().pattern(ri).custom($E.bind(null,!0)).required().messages({"string.pattern.base":Zt.BAD_PROJECT_NAME}),type:ge.string().valid("helpers","routes").required(),file:ge.string().pattern(ri).custom(kte.bind(null,e.project,e.type)).custom(kl).required().messages({"string.pattern.base":Zt.BAD_FILE_NAME})});return si.validateBySchema(e,t)}a($te,"getDropCustomFunctionValidator");function Vte(e){let t=ge.object({project:ge.string().pattern(ri).custom($E.bind(null,!0)).required().messages({"string.pattern.base":Zt.BAD_PROJECT_NAME}),type:ge.string().valid("helpers","routes").required(),file:ge.string().custom(kl).required(),function_content:ge.string().required()});return si.validateBySchema(e,t)}a(Vte,"setCustomFunctionValidator");function Yte(e){let t=ge.object({project:ge.string().pattern(ri).required().messages({"string.pattern.base":Zt.BAD_PROJECT_NAME}),file:ge.string().custom(kl).required(),payload:ge.string().allow("").optional(),encoding:ge.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return si.validateBySchema(e,t)}a(Yte,"setComponentFileValidator");function Kte(e){let t=ge.object({project:ge.string().pattern(ri).required().messages({"string.pattern.base":Zt.BAD_PROJECT_NAME}),file:ge.string().custom(kl).optional()});return si.validateBySchema(e,t)}a(Kte,"dropComponentFileValidator");function Wte(e){let t=ge.object({project:ge.string().required(),file:ge.string().custom(kl).required(),encoding:ge.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return si.validateBySchema(e,t)}a(Wte,"getComponentFileValidator");function Qte(e){let t=ge.object({project:ge.string().pattern(ri).custom($E.bind(null,!1)).required().messages({"string.pattern.base":Zt.BAD_PROJECT_NAME})});return si.validateBySchema(e,t)}a(Qte,"addComponentValidator");function jte(e){let t=ge.object({project:ge.string().pattern(ri).custom($E.bind(null,!0)).required().messages({"string.pattern.base":Zt.BAD_PROJECT_NAME})});return si.validateBySchema(e,t)}a(jte,"dropCustomFunctionProjectValidator");function Jte(e){let t=ge.object({project:ge.string().pattern(ri).required().messages({"string.pattern.base":Zt.BAD_PROJECT_NAME}),skip_node_modules:ge.boolean()});return si.validateBySchema(e,t)}a(Jte,"packageComponentValidator");function zte(e){let t=ge.object({project:ge.string().pattern(ri).required().messages({"string.pattern.base":Zt.BAD_PROJECT_NAME}),payload:ge.string().optional().messages({"string.pattern.base":Zt.BAD_PACKAGE}),package:ge.string().optional()});return si.validateBySchema(e,t)}a(zte,"deployComponentValidator")});var WE=T((_Re,YB)=>{"use strict";var VE=require("joi"),YE=require("path"),GB=require("fs-extra"),{exec:Xte}=require("child_process"),Zte=require("util"),FB=Zte.promisify(Xte),$l=A(),{handleHDBError:dc,hdb_errors:ere}=Z(),{HTTP_STATUS_CODES:fc}=ere,Vl=Q(),tre=Ve(),Ec=U();Vl.initSync();var wR=Vl.get($l.CONFIG_PARAMS.COMPONENTSROOT),xB="npm install --omit=dev --json",rre=`${xB} --dry-run`;YB.exports={installModules:ore,auditModules:are,installAllRootModules:sre,uninstallRootModule:nre,linkHarperdb:ire};async function sre(e=!1){await KE(),await Yl(e?"npm install --ignore-scripts":"npm install",Vl.get($l.CONFIG_PARAMS.ROOTPATH))}a(sre,"installAllRootModules");async function nre(e){await Yl(`npm uninstall ${e}`,Vl.get($l.CONFIG_PARAMS.ROOTPATH))}a(nre,"uninstallRootModule");async function ire(){await KE(),await Yl(`npm link ${$l.PACKAGE_ROOT}`,Vl.get($l.CONFIG_PARAMS.ROOTPATH))}a(ire,"linkHarperdb");async function Yl(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await FB(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
|
|
11
|
-
`,""))}return s&&!s.includes("Debugger listening")&&
|
|
12
|
-
`,"")}a(Yl,"runCommand");async function
|
|
9
|
+
`,"")}a(iM,"runCommand");async function N5(){try{await r5.access(ng)}catch{return!1}let e=await iM(`${ng} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return s5.eq(t,A5)}a(N5,"checkNATSServerInstalled");async function cg(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await tM.getClusterUser();if(ko(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}ls.trace("create nats connection called");let i=await E5({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile:qt.get(be.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:qt.get(be.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:qt.get(be.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return ls.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(cg,"createConnection");async function b5(){xs&&(await xs.drain(),xs=void 0,Wa=void 0,Qa=void 0,ja=void 0)}a(b5,"closeConnection");var xs,ja;async function Vf(){return ja||(ja=cg(qt.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),xs=await ja),xs||ja}a(Vf,"getConnection");async function hl(){if(Wa)return Wa;ko(xs)&&await Vf();let{domain:e}=ml(be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ko(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Wa=await xs.jetstreamManager({domain:e}),Wa}a(hl,"getJetStreamManager");async function oM(){if(Qa)return Qa;ko(xs)&&await Vf();let{domain:e}=ml(be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ko(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Qa=xs.jetstream({domain:e}),Qa}a(oM,"getJetStream");async function mr(){let e=xs||await Vf(),t=Wa||await hl(),r=Qa||await oM();return{connection:e,jsm:t,js:r}}a(mr,"getNATSReferences");async function y5(e){let t=qt.get(be.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await tM.getClusterUser(),n=await cg(t,r,s),i=ag(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=nM.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await ig.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(y5,"getServerList");async function ug(e,t){let{jsm:r}=await mr(),s=qt.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=qt.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=qt.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:rM.File,retention:sM.Limits,subjects:t,discard:h5.Old,max_msgs:n,max_bytes:i,max_age:s})}a(ug,"createLocalStream");async function aM(){let{jsm:e}=await mr(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(aM,"listStreams");async function I5(e){let{jsm:t}=await mr();await t.streams.delete(e)}a(I5,"deleteLocalStream");async function w5(e){let{connection:t}=await mr(),r=[],s=ag(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(nM.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(w5,"listRemoteStreams");async function C5(e,t=void 0,r=void 0){let{jsm:s,js:n}=await mr(),i=XP(),o={durable_name:i,ack_policy:kf.Explicit};t&&(o.deliver_policy=$f.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.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=og(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(Oe.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(C5,"viewStream");async function*L5(e,t=void 0,r=void 0){let{jsm:s,js:n}=await mr(),i=XP(),o={durable_name:i,ack_policy:kf.Explicit};t&&(o.deliver_policy=$f.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.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=og(_.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(Oe.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(L5,"viewStreamIterator");async function D5(e,t,r,s){ls.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=cM(s,r);let{js:n}=await mr(),i=await pl(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:eM.encode(s);try{ls.trace(`publishToStream publishing to subject: ${o}`),g5(c.length,"bytes-sent",e,s.operation,"replication"),await n.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return dM(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){ls.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await ug(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(D5,"publishToStream");function cM(e,t){t===void 0&&(t=p5());let r=qt.get(be.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Oe.MSG_HEADERS.ORIGIN)&&r&&t.append(Oe.MSG_HEADERS.ORIGIN,r),t}a(cM,"addNatsMsgHeader");function ml(e){e=e.toLowerCase();let t=El.join(qt.get(be.CONFIG_PARAMS.ROOTPATH),R5);if(e===be.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ko(sg)&&(sg={port:dl.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:dl.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.HUB,config_file:Oe.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:El.join(t,Oe.PID_FILES.HUB),hdb_nats_path:t}),sg;if(e===be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ko(rg)&&(rg={port:dl.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:dl.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.LEAF,config_file:Oe.NATS_CONFIG_FILES.LEAF_SERVER,domain:dl.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.LEAF,pid_file_path:El.join(t,Oe.PID_FILES.LEAF),hdb_nats_path:t}),rg;ls.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(ml,"getServerConfig");async function P5(e){let{jsm:t}=await mr(),r=await pl();try{await t.streams.add({name:e.stream_name,storage:rM.File,retention:sM.Limits,max_age:d5,max_bytes:f5,subjects:[`${Oe.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:kf.Explicit,durable_name:e.durable_name,deliver_policy:$f.All,max_ack_pending:1e4});else throw s}}a(P5,"createWorkQueueStream");async function M5(){let{jsm:e}=await mr();(await e.consumers.info(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(ls.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name),ls.info("Adding pull consumer to ingest stream"),await e.consumers.add(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:kf.Explicit,durable_name:Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:$f.All,max_ack_pending:1e4}))}a(M5,"updateIngestStreamConsumer");async function uM(e,t,r){let{jsm:s}=await mr(),n=await s.streams.info(t),i=lM(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=xf.createNatsTableStreamName(c,u),l=i===e,d,f,E=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let p=0,S=n.config.sources.length;p<S;p++)if(d=n.config.sources[p],f=p,l&&d.name===_||!l&&d.name===_&&d.external&&d.external.api===`$JS.${e}.API`){E=!0;break}if(E===!0){if(d.opt_start_time===o)return;let p=`txn.${c}.${u}.${e}`;await s.streams.purge(t,{filter:p}),n.config.sources.splice(f,1),await s.streams.update(t,n.config)}let h={name:_,opt_start_time:o,filter_subject:`${Oe.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(uM,"addSourceToWorkStream");function lM(e){return e.split(".")[1]}a(lM,"extractServerName");async function _M(e,t,r){let{jsm:s}=await mr(),{schema:n,table:i}=r,o=`txn.${n}.${i}.${e}`;await s.streams.purge(t,{filter:o});let c=xf.createNatsTableStreamName(n,i),u=await s.streams.info(t);if(!Array.isArray(u.config.sources)||u.config.sources.length===0)return;let _=u.config.sources.length,l;for(;_--;)if(l=u.config.sources[_],l.name===c&&l.external.api===`$JS.${e}.API`){u.config.sources.splice(_,1);break}await s.streams.update(t,u.config)}a(_M,"removeSourceFromWorkStream");async function U5(e,t,r=2e4,s=ag()){if(!ig.isObject(t))throw new Error("data param must be an object");let n=eM.encode(t),{connection:i}=await mr(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return og(c.data)}a(U5,"request");function lg(e){return new Promise(async(t,r)=>{let s=a5(ng,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(lg,"reloadNATS");async function v5(){let{pid_file_path:e}=ml(be.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await lg(e)}a(v5,"reloadNATSHub");async function B5(){let{pid_file_path:e}=ml(be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await lg(e)}a(B5,"reloadNATSLeaf");function H5(e,t,r){let s;switch(e.code){case JP.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case JP.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(H5,"requestErrorHandler");async function q5(e,t){let r=t+Oe.SERVER_SUFFIX.LEAF;await dM(async()=>{e.subscribe===!0?await uM(r,Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await _M(r,Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(q5,"updateWorkStream");function dM(e){return c5.writeTransaction(be.SYSTEM_SCHEMA_NAME,be.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(dM,"exclusiveLock");async function fM(e,t){let r=xf.createNatsTableStreamName(e,t),s=await pl(),n=k5(e,t,s);await ug(r,[n])}a(fM,"createLocalTableStream");async function G5(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await fM(s,n)}}a(G5,"createTableStreams");async function EM(e,t){if(qt.get(be.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=xf.createNatsTableStreamName(e,t),{jsm:s}=await mr();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")ls.warn(r);else throw r}}a(EM,"purgeTableStream");async function F5(e,t){if(qt.get(be.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await EM(e,t[r])}a(F5,"purgeSchemaTableStreams");async function x5(e){return(await hl()).streams.info(e)}a(x5,"getStreamInfo");function k5(e,t,r){return`${Oe.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(k5,"createSubjectName");async function pl(){if(fl)return fl;if(fl=(await hl())?.nc?.info?.server_name,fl===void 0)throw new Error("Unable to get jetstream manager server name");return fl}a(pl,"getJsmServerName");async function $5(){let e=await hl(),t=await pl(),r=await aM();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=V5(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===Oe.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Oe.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;ls.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;ls.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");ls.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a($5,"updateLocalStreams");function V5(e){let{config:t}=e,r=!1;if(t.name===Oe.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=qt.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=qt.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=qt.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(V5,"updateStreamLimits")});var Qf=T((iTe,TM)=>{"use strict";var za=Id(),Ja=zP(),Y5=v(),K5=require("uuid").v4,nTe=require("clone"),Kf=kn(),Xa=R(),W5=require("util"),xi=os(),{handleHDBError:pr,hdb_errors:Q5}=Z(),{HDB_ERROR_MSGS:Yf,HTTP_STATUS_CODES:Sr}=Q5,{SchemaEventMsg:Wf}=Ds(),mM=st(),{getDatabases:j5}=(de(),te(De)),{transformReq:Za}=G();TM.exports={createSchema:z5,createSchemaStructure:pM,createTable:J5,createTableStructure:SM,createAttribute:r8,dropSchema:X5,dropTable:Z5,dropAttribute:e8,getBackup:s8};async function z5(e){let t=await pM(e);return Kf.signalSchemaChange(new Wf(process.pid,e.operation,e.schema)),t}a(z5,"createSchema");async function pM(e){let t=za.schema_object(e);if(t)throw pr(t,t.message,Sr.BAD_REQUEST,void 0,void 0,!0);if(Za(e),!await Ja.checkSchemaExists(e.schema))throw pr(new Error,Yf.SCHEMA_EXISTS_ERR(e.schema),Sr.BAD_REQUEST,Xa.LOG_LEVELS.ERROR,Yf.SCHEMA_EXISTS_ERR(e.schema),!0);return await xi.createSchema(e),`database '${e.schema}' successfully created`}a(pM,"createSchemaStructure");async function J5(e){return Za(e),e.hash_attribute=e.primary_key??e.hash_attribute,await SM(e)}a(J5,"createTable");async function SM(e){let t=za.create_table_object(e);if(t)throw pr(t,t.message,Sr.BAD_REQUEST,void 0,void 0,!0);if(za.validateTableResidence(e.residence),!await Ja.checkSchemaTableExists(e.schema,e.table))throw pr(new Error,Yf.TABLE_EXISTS_ERR(e.schema,e.table),Sr.BAD_REQUEST,Xa.LOG_LEVELS.ERROR,Yf.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:K5(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await xi.createTable(s,e);else throw pr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Sr.BAD_REQUEST);else await xi.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(SM,"createTableStructure");async function X5(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=za.schema_object(e),s=t??r;if(s)throw pr(s,s.message,Sr.BAD_REQUEST,void 0,void 0,!0);Za(e);let n=await Ja.checkSchemaExists(e.schema);if(n)throw pr(new Error,n,Sr.NOT_FOUND,Xa.LOG_LEVELS.ERROR,n,!0);let i=await Ja.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await xi.dropSchema(e),Kf.signalSchemaChange(new Wf(process.pid,e.operation,e.schema)),await mM.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(X5,"dropSchema");async function Z5(e){let t=za.table_object(e);if(t)throw pr(t,t.message,Sr.BAD_REQUEST,void 0,void 0,!0);Za(e);let r=await Ja.checkSchemaTableExists(e.schema,e.table);if(r)throw pr(new Error,r,Sr.NOT_FOUND,Xa.LOG_LEVELS.ERROR,r,!0);return await xi.dropTable(e),await mM.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(Z5,"dropTable");async function e8(e){let t=za.attribute_object(e);if(t)throw pr(t,t.message,Sr.BAD_REQUEST,void 0,void 0,!0);Za(e);let r=await Ja.checkSchemaTableExists(e.schema,e.table);if(r)throw pr(new Error,r,Sr.NOT_FOUND,Xa.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw pr(new Error,"You cannot drop a hash attribute",Sr.BAD_REQUEST,void 0,void 0,!0);if(Xa.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw pr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Sr.BAD_REQUEST,void 0,void 0,!0);try{return await xi.dropAttribute(e),t8(e),Kf.signalSchemaChange(new Wf(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw Y5.error(`Got an error deleting attribute ${W5.inspect(e)}.`),s}}a(e8,"dropAttribute");function t8(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(t8,"dropAttributeFromGlobal");async function r8(e){Za(e);let t=j5()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw pr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Sr.BAD_REQUEST,void 0,void 0,!0);return await xi.createAttribute(e),Kf.signalSchemaChange(new Wf(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(r8,"createAttribute");function s8(e){return xi.getBackup(e)}a(s8,"getBackup")});var RM=T((aTe,gM)=>{"use strict";var{OPERATIONS_ENUM:n8}=R(),_g=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=n8.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};gM.exports=_g});var dg=T((lTe,yM)=>{"use strict";var i8=os(),uTe=RM(),jf=G(),zf=R(),o8=j(),{handleHDBError:AM,hdb_errors:a8}=Z(),{HDB_ERROR_MSGS:OM,HTTP_STATUS_CODES:NM}=a8,c8=Object.values(zf.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),bM="To use this operation audit log must be enabled in harperdb-config.yaml";yM.exports=u8;async function u8(e){if(jf.isEmpty(e.schema))throw new Error(OM.SCHEMA_REQUIRED_ERR);if(jf.isEmpty(e.table))throw new Error(OM.TABLE_REQUIRED_ERR);if(!o8.get(zf.CONFIG_PARAMS.LOGGING_AUDITLOG))throw AM(new Error,bM,NM.BAD_REQUEST,zf.LOG_LEVELS.ERROR,bM,!0);let t=jf.checkSchemaTableExist(e.schema,e.table);if(t)throw AM(new Error,t,NM.NOT_FOUND,zf.LOG_LEVELS.ERROR,t,!0);if(!jf.isEmpty(e.search_type)&&c8.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await i8.readAuditLog(e)}a(u8,"readAuditLog")});var wM=T((dTe,IM)=>{"use strict";var{OPERATIONS_ENUM:l8}=R(),fg=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=l8.GET_BACKUP,this.schema=t,this.table=r}};IM.exports=fg});var DM=T((mTe,LM)=>{"use strict";var _8=os(),ETe=wM(),Eg=G(),d8=R(),hTe=j(),{handleHDBError:f8,hdb_errors:E8}=Z(),{HDB_ERROR_MSGS:CM,HTTP_STATUS_CODES:h8}=E8;LM.exports=m8;async function m8(e){if(Eg.isEmpty(e.schema))throw new Error(CM.SCHEMA_REQUIRED_ERR);if(Eg.isEmpty(e.table))throw new Error(CM.TABLE_REQUIRED_ERR);let t=Eg.checkSchemaTableExist(e.schema,e.table);if(t)throw f8(new Error,t,h8.NOT_FOUND,d8.LOG_LEVELS.ERROR,t,!0);return await _8.getBackup(read_audit_log_object)}a(m8,"getBackup")});var HM=T((STe,BM)=>{var ki=require("validate.js"),MM=Ve(),ec=R(),{handleHDBError:p8,hdb_errors:S8}=Z(),{HDB_ERROR_MSGS:nt,HTTP_STATUS_CODES:T8}=S8,hg=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),g8={STRUCTURE_USER:"structure_user"},PM=Object.values(ec.ROLE_TYPES_ENUM),R8="attribute_permissions",A8="attribute_name",{PERMS_CRUD_ENUM:tc}=ec,O8=[R8,...Object.values(tc)],UM=[tc.READ,tc.INSERT,tc.UPDATE],N8=[A8,...UM];function b8(e){let t=hg();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,vM(e,t)}a(b8,"addRoleValidation");function y8(e){let t=hg();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,vM(e,t)}a(y8,"alterRoleValidation");function I8(e){let t=hg();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,MM.validateObject(e,t)}a(I8,"dropRoleValidation");var w8=["operation","role","id","permission","hdb_user","hdb_auth_header"];function vM(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)w8.includes(s[o])||n.push(s[o]);n.length>0&&_t(nt.INVALID_ROLE_JSON_KEYS(n),r);let i=MM.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{_t(o,r)}),e.permission){let o=C8(e);o&&_t(o,r),PM.forEach(c=>{e.permission[c]&&!ki.isBoolean(e.permission[c])&&_t(nt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(PM.indexOf(o)<0){if(o===g8.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]||_t(nt.SCHEMA_NOT_FOUND(d),r)}continue}_t(nt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){_t(nt.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]){_t(nt.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{O8.includes(l)||_t(nt.INVALID_PERM_KEY(l),r,o,u)}),Object.values(tc).forEach(l=>{ki.isDefined(_[l])?ki.isBoolean(_[l])||_t(nt.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):_t(nt.TABLE_PERM_MISSING(l),r,o,u)}),ki.isDefined(_.attribute_permissions)){if(!ki.isArray(_.attribute_permissions)){_t(nt.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{_t(nt.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=>{!N8.includes(p)&&p!==tc.DELETE&&_t(nt.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!ki.isDefined(E.attribute_name)){_t(nt.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){_t(nt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}UM.forEach(p=>{ki.isDefined(E[p])?ki.isBoolean(E[p])||_t(nt.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):_t(nt.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}`;_t(nt.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return L8(r)}a(vM,"customValidate");BM.exports={addRoleValidation:b8,alterRoleValidation:y8,dropRoleValidation:I8};function C8(e){let{operation:t,permission:r}=e;if(t===ec.OPERATIONS_ENUM.ADD_ROLE||t===ec.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return nt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?ec.ROLE_TYPES_ENUM.SUPER_USER:ec.ROLE_TYPES_ENUM.CLUSTER_USER;return nt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(C8,"validateNoSUPerms");function L8(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:nt.ROLE_PERMS_ERROR,...e};return p8(new Error,s,T8.BAD_REQUEST)}else return null}a(L8,"generateRolePermResponse");function _t(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(_t,"addPermError")});var Zf=T((gTe,xM)=>{"use strict";var qM=dr(),GM=_r(),D8=Uo(),pg=HM(),Sg=kn(),P8=require("uuid").v4,M8=require("util"),Jf=R(),U8=G(),Tg=GM.searchByValue,v8=GM.searchByHash,B8=M8.promisify(D8.delete),H8=Ps(),q8=Ma(),{hdb_errors:G8,handleHDBError:rc}=Z(),{HDB_ERROR_MSGS:FM,HTTP_STATUS_CODES:Xf}=G8,{UserEventMsg:gg}=Ds();xM.exports={addRole:F8,alterRole:x8,dropRole:k8,listRoles:$8};function mg(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(mg,"scrubRoleDetails");async function F8(e){let t=pg.addRoleValidation(e);if(t)throw t;e=mg(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await Tg(r)||[])}catch(i){throw rc(i)}if(s&&s.length>0)throw rc(new Error,FM.ROLE_ALREADY_EXISTS(e.role),Xf.CONFLICT,void 0,void 0,!0);e.id||(e.id=P8());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await qM.insert(n),Sg.signalUserChange(new gg(process.pid)),e=mg(e),e}a(F8,"addRole");async function x8(e){let t=pg.alterRoleValidation(e);if(t)throw t;e=mg(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await qM.update(r)}catch(n){throw rc(n)}if(s&&s?.message==="updated 0 of 1 records")throw rc(new Error,"Invalid role id",Xf.BAD_REQUEST,void 0,void 0,!0);return await Sg.signalUserChange(new gg(process.pid)),e}a(x8,"alterRole");async function k8(e){let t=pg.dropRoleValidation(e);if(t)throw rc(new Error,t,Xf.BAD_REQUEST,void 0,void 0,!0);let r=new q8(Jf.SYSTEM_SCHEMA_NAME,Jf.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await v8(r));if(s.length===0)throw rc(new Error,FM.ROLE_NOT_FOUND,Xf.NOT_FOUND,void 0,void 0,!0);let n=new H8(Jf.SYSTEM_SCHEMA_NAME,Jf.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Tg(n)),o=!1;if(U8.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await B8(c),Sg.signalUserChange(new gg(process.pid)),`${s[0].role} successfully deleted`}a(k8,"dropRole");async function $8(){return Tg({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a($8,"listRoles")});var YM=T((ATe,VM)=>{"use strict";var V8=j(),$i=require("joi"),Y8=Ve(),kM=require("moment"),K8=require("fs-extra"),Rg=require("path"),W8=require("lodash"),Sl=R(),{LOG_LEVELS:$o}=R(),Q8="YYYY-MM-DD hh:mm:ss",j8=Rg.resolve(__dirname,"../logs");VM.exports=function(e){return Y8.validateBySchema(e,z8)};var z8=$i.object({from:$i.custom($M),until:$i.custom($M),level:$i.valid($o.NOTIFY,$o.FATAL,$o.ERROR,$o.WARN,$o.INFO,$o.DEBUG,$o.TRACE),order:$i.valid("asc","desc"),limit:$i.number().min(1),start:$i.number().min(0),log_name:$i.custom(J8)});function $M(e,t){if(kM(e,kM.ISO_8601).format(Q8)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a($M,"validateDatetime");function J8(e,t){if(W8.invert(Sl.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=V8.get(Sl.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Sl.LOG_NAMES.HDB:e,i=n===Sl.LOG_NAMES.INSTALL?Rg.join(j8,Sl.LOG_NAMES.INSTALL):Rg.join(s,n);return K8.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(J8,"validateReadLogPath")});var Og=T((NTe,WM)=>{"use strict";var eE=R(),X8=v(),Z8=j(),e6=YM(),Ag=require("path"),KM=require("fs-extra"),{once:t6}=require("events"),{handleHDBError:r6,hdb_errors:s6}=Z(),{PACKAGE_ROOT:n6}=R(),i6=Ag.join(n6,"logs"),o6=1e3,a6=200;WM.exports=c6;async function c6(e){let t=e6(e);if(t)throw r6(t,t.message,s6.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Z8.get(eE.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?eE.LOG_NAMES.HDB:e.log_name,n=s===eE.LOG_NAMES.INSTALL?Ag.join(i6,eE.LOG_NAMES.INSTALL):Ag.join(r,s),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?o6: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(KM.statSync(n).size-(h+5)*a6,0));let S=KM.createReadStream(n,{start:p});S.on("error",F=>{X8.error(F)});let A=0,g=[],O="",V;S.on("data",F=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=O+F;let K=0,B;for(;(B=w.exec(F))&&!S.destroyed;){V&&(V.message=F.slice(K,B.index),$(V));let[k,se,Ie]=B,ie=Ie.split("] ["),Yt=ie[0],Ge=ie[1];ie.splice(0,2),V={timestamp:se,thread:Yt,level:Ge,tags:ie,message:""},K=B.index+k.length}O=F.slice(K)}),S.on("end",F=>{S.destroyed||V&&(V.message=O.trim(),$(V))}),S.resume();function $(F){let w,K,B;switch(!0){case(i&&c&&_):w=new Date(F.timestamp),K=new Date(u),B=new Date(l),F.level===o&&w>=K&&w<=B&&A<E?A++:F.level===o&&w>=K&&w<=B&&(Vi(F,f,g),A++,A===h&&S.destroy());break;case(i&&c):w=new Date(F.timestamp),K=new Date(u),F.level===o&&w>=K&&A<E?A++:F.level===o&&w>=K&&(Vi(F,f,g),A++,A===h&&S.destroy());break;case(i&&_):w=new Date(F.timestamp),B=new Date(l),F.level===o&&w<=B&&A<E?A++:F.level===o&&w<=B&&(Vi(F,f,g),A++,A===h&&S.destroy());break;case(c&&_):w=new Date(F.timestamp),K=new Date(u),B=new Date(l),w>=K&&w<=B&&A<E?A++:w>=K&&w<=B&&(Vi(F,f,g),A++,A===h&&S.destroy());break;case i:F.level===o&&A<E?A++:F.level===o&&(Vi(F,f,g),A++,A===h&&S.destroy());break;case c:w=new Date(F.timestamp),K=new Date(u),w>=K&&A<E?A++:w>=K&&A>=E&&(Vi(F,f,g),A++,A===h&&S.destroy());break;case _:w=new Date(F.timestamp),B=new Date(l),w<=B&&A<E?A++:w<=B&&A>=E&&(Vi(F,f,g),A++,A===h&&S.destroy());break;default:A<E?A++:(Vi(F,f,g),A++,A===h&&S.destroy())}}return a($,"onLogMessage"),await t6(S,"close"),g}a(c6,"readLog");function Vi(e,t,r){t==="desc"?u6(e,r):t==="asc"?l6(e,r):r.push(e)}a(Vi,"pushLineToResult");function u6(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(u6,"insertDescending");function l6(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(l6,"insertAscending")});var rE=T((CTe,JM)=>{"use strict";var Ng=require("joi"),{string:tE,boolean:QM,date:_6}=Ng.types(),d6=Ve(),{validateSchemaExists:yTe,validateTableExists:ITe,validateSchemaName:wTe}=on(),f6=R(),E6=ke(),jM=j();jM.initSync();var h6=tE.invalid(jM.get(f6.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(E6.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null).required(),zM={operation:tE.valid("add_node","update_node"),node_name:h6,subscriptions:Ng.array().items({table:tE.optional(),schema:tE.required(),subscribe:QM.required(),publish:QM.required().custom(p6),start_time:_6.iso()}).min(1).required()};function m6(e){return d6.validateBySchema(e,Ng.object(zM))}a(m6,"addUpdateNodeValidator");function p6(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(p6,"checkForFalsy");JM.exports={addUpdateNodeValidator:m6,validation_schema:zM}});var ZM=T((DTe,XM)=>{var S6=Ve(),T6={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};XM.exports=function(e){return S6.validateObject(e,T6)}});var sE=T((PTe,eU)=>{"use strict";var g6=R().OPERATIONS_ENUM,bg=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=g6.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};eU.exports=bg});var rU=T((UTe,tU)=>{"use strict";var R6={OPERATION:"operation",REFRESH:"refresh"},yg=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Ig=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};tU.exports={JWTTokens:yg,TOKEN_TYPE_ENUM:R6,JWTRSAKeys:Ig}});var Rl=T((BTe,oU)=>{"use strict";var gl=require("jsonwebtoken"),wg=require("fs-extra"),Cg=G(),_s=R(),{handleHDBError:Tr,hdb_errors:A6}=Z(),{HTTP_STATUS_CODES:gr,AUTHENTICATION_ERROR_MSGS:Rr}=A6,Tl=v(),sU=tf(),Pg=Er(),O6=dr().update,N6=sE(),b6=kn(),{UserEventMsg:y6}=Ds(),Yi=j();Yi.initSync();var Lg=require("path"),{JWTTokens:I6,JWTRSAKeys:w6,TOKEN_TYPE_ENUM:nE}=rU(),C6=Yi.get(_s.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Yi.get(_s.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",L6=Yi.get(_s.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Yi.get(_s.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",iE="RS256",Dg;oU.exports={createTokens:D6,validateOperationToken:M6,refreshOperationToken:P6,validateRefreshToken:iU};async function D6(e){if(Cg.isEmpty(e)||typeof e!="object")throw Tr(new Error,Rr.INVALID_AUTH_OBJECT,gr.BAD_REQUEST,void 0,void 0,!0);if(Cg.isEmpty(e.username))throw Tr(new Error,Rr.USERNAME_REQUIRED,gr.BAD_REQUEST,void 0,void 0,!0);if(Cg.isEmpty(e.password))throw Tr(new Error,Rr.PASSWORD_REQUIRED,gr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Pg.findAndValidateUser(e.username,e.password),!t)throw Tr(new Error,Rr.INVALID_CREDENTIALS,gr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw Tl.error(f),Tr(new Error,Rr.INVALID_CREDENTIALS,gr.UNAUTHORIZED,void 0,void 0,!0)}let r=await oE(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await nU(i,r.private_key,r.passphrase),c=await gl.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:L6,algorithm:iE,subject:nE.REFRESH}),u=sU.hash(c),_=new N6(_s.SYSTEM_SCHEMA_NAME,_s.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await O6(_)}catch(f){Tl.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw Tr(new Error,Rr.REFRESH_TOKEN_SAVE_FAILED,gr.INTERNAL_SERVER_ERROR);return b6.signalUserChange(new y6(process.pid)),new I6(o,c)}a(D6,"createTokens");async function nU(e,t,r){return await gl.sign(e,{key:t,passphrase:r},{expiresIn:C6,algorithm:iE,subject:nE.OPERATION})}a(nU,"signOperationToken");async function oE(){if(Dg===void 0)try{let e=Lg.join(Yi.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,_s.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Lg.join(Yi.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,_s.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Lg.join(Yi.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,_s.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await wg.readFile(e)).toString(),n=(await wg.readFile(t)).toString(),i=(await wg.readFile(r)).toString();Dg=new w6(i,n,s)}catch(e){throw Tl.error(e),Tr(new Error,Rr.NO_ENCRYPTION_KEYS,gr.INTERNAL_SERVER_ERROR)}return Dg}a(oE,"getJWTRSAKeys");async function P6(e){if(!e)throw Tr(new Error,Rr.INVALID_BODY,gr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Tr(new Error,Rr.REFRESH_TOKEN_REQUIRED,gr.BAD_REQUEST,void 0,void 0,!0);await iU(e.refresh_token);let t=await oE(),r=await gl.decode(e.refresh_token);return{operation_token:await nU({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(P6,"refreshOperationToken");async function M6(e){try{let t=await oE(),r=await gl.verify(e,t.public_key,{algorithms:iE,subject:nE.OPERATION});return await Pg.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Tl.warn(t),t.name&&t.name==="TokenExpiredError"?Tr(new Error,Rr.TOKEN_EXPIRED,gr.FORBIDDEN):Tr(new Error,Rr.INVALID_TOKEN,gr.UNAUTHORIZED)}}a(M6,"validateOperationToken");async function iU(e){let t;try{let r=await oE(),s=await gl.verify(e,r.public_key,{algorithms:iE,subject:nE.REFRESH});t=await Pg.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Tl.warn(r),r.name&&r.name==="TokenExpiredError"?Tr(new Error,Rr.TOKEN_EXPIRED,gr.FORBIDDEN):Tr(new Error,Rr.INVALID_TOKEN,gr.UNAUTHORIZED)}if(!sU.validate(t.refresh_token,e))throw Tr(new Error,Rr.INVALID_TOKEN,gr.UNAUTHORIZED);return t}a(iU,"validateRefreshToken")});var Mg=T((GTe,uU)=>{"use strict";var U6=ZM(),sc=require("passport"),v6=require("passport-local").Strategy,B6=require("passport-http").BasicStrategy,H6=require("util"),q6=Er(),cU=H6.callbackify(q6.findAndValidateUser),qTe=Mr(),G6=R(),aU=Rl();sc.use(new v6(function(e,t,r){cU(e,t,r)}));sc.use(new B6(function(e,t,r){cU(e,t,r)}));sc.serializeUser(function(e,t){t(null,e)});sc.deserializeUser(function(e,t){t(null,e)});function F6(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":sc.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===G6.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?aU.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):aU.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:sc.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(F6,"authorize");function x6(e,t){let r=U6(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n?.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);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]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(x6,"checkPermissions");uU.exports={authorize:F6,checkPermissions:x6}});var nc=T((xTe,lU)=>{"use strict";var Ug=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},vg=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};lU.exports={Node:Ug,NodeSubscription:vg}});var dU=T(($Te,_U)=>{"use strict";var k6=R().OPERATIONS_ENUM,Bg=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=k6.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};_U.exports=Bg});var Al=T((YTe,fU)=>{"use strict";var Hg=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},qg=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,o,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};fU.exports={RemotePayloadObject:Hg,RemotePayloadSubscription:qg}});var hU=T((WTe,EU)=>{"use strict";var Gg=class{static{a(this,"TableSizeObject")}constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};EU.exports=Gg});var SU=T((XTe,pU)=>{"use strict";var $6=hU(),jTe=Ke(),mU=Me(),V6=v(),{getSchemaPath:zTe,getTransactionAuditStorePath:JTe}=Be(),{getDatabases:Y6}=(de(),te(De));pU.exports=K6;async function K6(e){let t=new $6;try{let r=Y6()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await mU.environmentDataSize(schema_path,e.name),o=await mU.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=s.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=n.entryCount}catch(r){V6.warn(`unable to stat table dbi due to ${r}`)}return t}a(K6,"lmdbGetTableSize")});var gU=T((ege,TU)=>{"use strict";var Fg=class{static{a(this,"SystemInformationObject")}constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};TU.exports=Fg});var zn=T((nge,NU)=>{"use strict";var W6=require("fs-extra"),Q6=require("path"),Xt=require("systeminformation"),Ki=v(),j6=st(),xg=ke(),cE=R(),z6=SU(),OU=Mi(),{getThreadInfo:RU}=Qe(),Jg=j();Jg.initSync();var J6=gU(),{openEnvironment:rge}=Me(),{getSchemaPath:sge}=Be(),{database:X6}=(de(),te(De)),aE;NU.exports={getHDBProcessInfo:Yg,getNetworkInfo:Wg,getDiskInfo:Kg,getMemoryInfo:Vg,getCPUInfo:$g,getTimeInfo:kg,getSystemInformation:Qg,systemInformation:Z6,getTableSize:jg,getMetrics:zg};function kg(){return Xt.time()}a(kg,"getTimeInfo");async function $g(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,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:A,...g}=await Xt.currentLoad();return g.cpus=[],A.forEach(O=>{let{raw_load:V,raw_load_idle:$,raw_load_irq:F,raw_load_nice:w,raw_load_system:K,raw_load_user:B,...k}=O;g.cpus.push(k)}),l.current_load=g,l}catch(e){return Ki.error(`error in getCPUInfo: ${e}`),{}}}a($g,"getCPUInfo");async function Vg(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Xt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Ki.error(`error in getMemoryInfo: ${e}`),{}}}a(Vg,"getMemoryInfo");async function Yg(){let e={core:[],clustering:[]};try{let t=await Xt.processes(),r;try{r=Number.parseInt(await W6.readFile(Q6.join(Jg.get(cE.CONFIG_PARAMS.ROOTPATH),cE.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===cE.NODE_ERROR_CODES.ENOENT)Ki.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return Ki.error(`error in getHDBProcessInfo: ${t}`),e}}a(Yg,"getHDBProcessInfo");async function Kg(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...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 Ki.error(`error in getDiskInfo: ${t}`),e}}a(Kg,"getDiskInfo");async function Wg(){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(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=s;e.interfaces.push(f)}),(await Xt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return Ki.error(`error in getNetworkInfo: ${t}`),e}}a(Wg,"getNetworkInfo");async function Qg(){if(aE!==void 0)return aE;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,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,aE=e,aE}catch(t){return Ki.error(`error in getSystemInformation: ${t}`),e}}a(Qg,"getSystemInformation");async function jg(){let e=[],t=await OU.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await z6(s));return e}a(jg,"getTableSize");async function zg(){let e=await OU.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=X6({database:r,table:n}),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}}),s[n]=o}catch(i){Ki.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(zg,"getMetrics");async function AU(){if(Jg.get(cE.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await j6.getNATSReferences(),r=await t.streams.info(xg.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(xg.WORK_QUEUE_CONSUMER_NAMES.stream_name,xg.WORK_QUEUE_CONSUMER_NAMES.durable_name),n={ingest:{stream:{...r.state},consumer:{num_ack_pending:s._info.num_ack_pending,num_redelivered:s._info.num_redelivered,num_waiting:s._info.num_waiting,num_pending:s._info.num_pending}}};return r.config?.sources&&(n.ingest.stream.sources=r.config.sources),n}}a(AU,"getNatsStreamInfo");async function Z6(e){let t=new J6;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await Qg(),t.time=kg(),t.cpu=await $g(),t.memory=await Vg(),t.disk=await Kg(),t.network=await Wg(),t.harperdb_processes=await Yg(),t.table_size=await jg(),t.metrics=await zg(),t.threads=await RU(),t.replication=await AU(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await Qg();break;case"time":t.time=kg();break;case"cpu":t.cpu=await $g();break;case"memory":t.memory=await Vg();break;case"disk":t.disk=await Kg();break;case"network":t.network=await Wg();break;case"harperdb_processes":t.harperdb_processes=await Yg();break;case"table_size":t.table_size=await jg();break;case"database_metrics":case"metrics":t.metrics=await zg();break;case"threads":t.threads=await RU();break;case"replication":t.replication=await AU();break;default:break}return t}a(Z6,"systemInformation")});var Jn=T((cge,wU)=>{"use strict";var e9=dr(),Xg=G(),t9=require("util"),Vo=R(),bU=j();bU.initSync();var r9=Mg(),yU=_r(),{Node:oge,NodeSubscription:age}=nc(),s9=Ma(),n9=dU(),{RemotePayloadObject:i9,RemotePayloadSubscription:o9}=Al(),{handleHDBError:a9,hdb_errors:c9}=Z(),{HTTP_STATUS_CODES:u9,HDB_ERROR_MSGS:l9}=c9,_9=Ps(),d9=zn(),f9=po(),{getDatabases:E9}=(de(),te(De)),h9=t9.promisify(r9.authorize),m9=yU.searchByHash,p9=yU.searchByValue;wU.exports={authHeaderToUser:S9,isEmpty:T9,getNodeRecord:g9,upsertNodeRecord:R9,buildNodePayloads:A9,checkClusteringEnabled:O9,getAllNodeRecords:N9,getSystemInfo:b9,reverseSubscription:IU};async function S9(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await h9(t,null),e}a(S9,"authHeaderToUser");function T9(e){return e==null}a(T9,"isEmpty");async function g9(e){let t=new s9(Vo.SYSTEM_SCHEMA_NAME,Vo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return m9(t)}a(g9,"getNodeRecord");async function R9(e){let t=new n9(Vo.SYSTEM_SCHEMA_NAME,Vo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return e9.upsert(t)}a(R9,"upsertNodeRecord");function IU(e){if(Xg.isEmpty(e.subscribe)||Xg.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(IU,"reverseSubscription");function A9(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=Xg.getTableHashAttribute(u,_),{subscribe:d,publish:f}=IU(c),E=E9()[u]?.[_],h=new o9(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new i9(r,t,n,s)}a(A9,"buildNodePayloads");function O9(){if(!bU.get(Vo.CONFIG_PARAMS.CLUSTERING_ENABLED))throw a9(new Error,l9.CLUSTERING_NOT_ENABLED,u9.BAD_REQUEST,void 0,void 0,!0)}a(O9,"checkClusteringEnabled");async function N9(){let e=new _9(Vo.SYSTEM_SCHEMA_NAME,Vo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await p9(e))}a(N9,"getAllNodeRecords");async function b9(){let e=await d9.getSystemInformation();return{hdb_version:f9.version(),node_version:e.node_version,platform:e.platform}}a(b9,"getSystemInfo")});var Zg=T((lge,BU)=>{"use strict";var uE=st(),CU=G(),LU=ke(),DU=R(),lE=v(),PU=Qf(),y9=Bu(),{RemotePayloadObject:I9}=Al(),{handleHDBError:MU,hdb_errors:w9}=Z(),{HTTP_STATUS_CODES:UU}=w9,{NodeSubscription:vU}=nc();BU.exports=C9;async function C9(e,t){let r;try{r=await uE.request(`${t}.${LU.REQUEST_SUFFIX}`,new I9(DU.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),lE.trace("Response from remote describe all request:",r)}catch(o){lE.error(`addNode received error from describe all request to remote node: ${o}`);let c=uE.requestErrorHandler(o,"add_node",t);throw MU(new Error,c,UU.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===LU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw MU(new Error,o,UU.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===DU.SYSTEM_SCHEMA_NAME){await uE.createLocalTableStream(c,u);let h=new vU(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=CU.doesSchemaExist(c),l=s[c]!==void 0,d=u?CU.doesTableExist(c,u):!0,f=u?s?.[c]?.[u]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(lE.trace(`addNode creating schema: ${c}`),await PU.createSchema({operation:"create_schema",schema:c})),!d&&f){lE.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new y9(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await PU.createTable(h)}await uE.createLocalTableStream(c,u);let E=new vU(c,u,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(C9,"reviewSubscriptions")});var bl=T((dge,GU)=>{"use strict";var{handleHDBError:_E,hdb_errors:L9}=Z(),{HTTP_STATUS_CODES:dE}=L9,{addUpdateNodeValidator:D9}=rE(),Ol=v(),qU=R(),HU=ke(),P9=G(),eR=st(),Nl=Jn(),M9=j(),U9=Zg(),{Node:v9,NodeSubscription:B9}=nc(),{broadcast:H9}=Qe(),q9="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",G9="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",F9=M9.get(qU.CONFIG_PARAMS.CLUSTERING_NODENAME);GU.exports=x9;async function x9(e,t=!1){Ol.trace("addNode called with:",e),Nl.checkClusteringEnabled();let r=D9(e);if(r)throw _E(r,r.message,dE.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Nl.getNodeRecord(s);if(!P9.isEmptyOrZeroLength(d))throw _E(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,dE.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await U9(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=q9,o;let c=Nl.buildNodePayloads(n,F9,qU.OPERATIONS_ENUM.ADD_NODE,await Nl.getSystemInfo());Ol.trace("addNode sending remote payload:",c);let u;try{u=await eR.request(`${s}.${HU.REQUEST_SUFFIX}`,c)}catch(d){Ol.error(`addNode received error from request: ${d}`);let f=eR.requestErrorHandler(d,"add_node",s);throw _E(new Error,f,dE.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===HU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw _E(new Error,d,dE.INTERNAL_SERVER_ERROR,"error",d)}Ol.trace(u);let _=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];Ol.trace("Add node updating work stream for node:",s,"subscriptions:",E),await eR.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new B9(E.schema,E.table,E.publish,E.subscribe))}let l=new v9(s,_,u.system_info);return await Nl.upsertNodeRecord(l),H9({type:"nats_update"}),i.length>0?o.message=G9:o.message=`Successfully added '${s}' to manifest`,o}a(x9,"addNode")});var rR=T((Ege,kU)=>{"use strict";var{handleHDBError:fE,hdb_errors:k9}=Z(),{HTTP_STATUS_CODES:EE}=k9,{addUpdateNodeValidator:$9}=rE(),yl=v(),xU=R(),FU=ke(),V9=G(),tR=st(),Il=Jn(),Y9=j(),{cloneDeep:K9}=require("lodash"),W9=Zg(),{NodeSubscription:Q9}=nc(),{broadcast:j9}=Qe(),z9="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",J9="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",X9=Y9.get(xU.CONFIG_PARAMS.CLUSTERING_NODENAME);kU.exports=Z9;async function Z9(e){yl.trace("updateNode called with:",e),Il.checkClusteringEnabled();let t=$9(e);if(t)throw fE(t,t.message,EE.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=K9(await Il.getNodeRecord(r));if(V9.isEmptyOrZeroLength(s))throw fE(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,EE.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await W9(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=z9,o;let c=Il.buildNodePayloads(n,X9,xU.OPERATIONS_ENUM.UPDATE_NODE,await Il.getSystemInfo());yl.trace("updateNode sending remote payload:",c);let u;try{u=await tR.request(`${r}.${FU.REQUEST_SUFFIX}`,c)}catch(_){yl.error(`updateNode received error from request: ${_}`);let l=tR.requestErrorHandler(_,"update_node",r);throw fE(new Error,l,EE.INTERNAL_SERVER_ERROR,"error",l)}if(u.status===FU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${r}: ${u.message}`;throw fE(new Error,_,EE.INTERNAL_SERVER_ERROR,"error",_)}yl.trace(u);for(let _=0,l=n.length;_<l;_++){let d=n[_];yl.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await tR.updateWorkStream(d,r),n[_].start_time===void 0&&delete n[_].start_time}return await e7(s[0],n,u.system_info),i.length>0?o.message=J9:o.message=`Successfully updated '${r}'`,o}a(Z9,"updateNode");async function e7(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=s.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new Q9(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Il.upsertNodeRecord(s),j9({type:"nats_update"})}a(e7,"updateNodeTable")});var WU=T((mge,KU)=>{"use strict";var YU=require("joi"),{string:$U}=YU.types(),t7=Ve(),VU=R(),r7=j(),s7=ke();KU.exports=n7;function n7(e){let t=$U.invalid(r7.get(VU.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(s7.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=YU.object({operation:$U.valid(VU.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return t7.validateBySchema(e,r)}a(n7,"removeNodeValidator")});var mE=T((Sge,ZU)=>{"use strict";var{handleHDBError:QU,hdb_errors:i7}=Z(),{HTTP_STATUS_CODES:jU}=i7,o7=WU(),wl=v(),zU=Jn(),a7=G(),hE=R(),JU=ke(),XU=st(),c7=j(),{RemotePayloadObject:u7}=Al(),{NodeSubscription:l7}=nc(),_7=vu(),d7=Uo(),{broadcast:f7}=Qe(),E7=c7.get(hE.CONFIG_PARAMS.CLUSTERING_NODENAME);ZU.exports=h7;async function h7(e){wl.trace("removeNode called with:",e),zU.checkClusteringEnabled();let t=o7(e);if(t)throw QU(t,t.message,jU.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await zU.getNodeRecord(r);if(a7.isEmptyOrZeroLength(s))throw QU(new Error,`Node '${r}' was not found.`,jU.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new u7(hE.OPERATIONS_ENUM.REMOVE_NODE,E7,[]),i,o=!1;try{i=await XU.request(`${r}.${JU.REQUEST_SUFFIX}`,n),wl.trace("Remove node reply from remote node:",r,i)}catch(u){wl.error("removeNode received error from request:",u),o=!0}for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];wl.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new l7(l.schema,l.table,!1,!1);await XU.updateWorkStream(d,r)}let c=new _7(hE.SYSTEM_SCHEMA_NAME,hE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await d7.deleteRecord(c),f7({type:"nats_update"}),i?.status===JU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(wl.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(h7,"removeNode")});var rv=T((gge,tv)=>{"use strict";var ev=require("joi"),{string:m7,array:p7}=ev.types(),S7=Ve(),T7=rE();tv.exports=g7;function g7(e){let t=ev.object({operation:m7.valid("configure_cluster").required(),connections:p7.items(T7.validation_schema).required()});return S7.validateBySchema(e,t)}a(g7,"configureClusterValidator")});var SE=T((Age,av)=>{"use strict";var R7=R(),pE=v(),A7=G(),O7=mE(),N7=bl(),sv=Jn(),b7=rv(),{handleHDBError:nv,hdb_errors:y7}=Z(),{HTTP_STATUS_CODES:iv}=y7,I7="Configure cluster complete.",w7="Failed to configure the cluster. Check the logs for more details.",C7="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";av.exports=L7;async function L7(e){pE.trace("configure cluster called with:",e),sv.checkClusteringEnabled();let t=b7(e);if(t)throw nv(t,t.message,iv.BAD_REQUEST,void 0,void 0,!0);let r=await sv.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(ov(O7,{operation:R7.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);pE.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(ov(N7,E,E.node_name))}let c=await Promise.allSettled(i);pE.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=n.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(pE.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(A7.isEmptyOrZeroLength(u))return{message:I7,connections:_};if(l)return{message:C7,failed_nodes:u,connections:_};throw nv(new Error,w7,iv.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(L7,"configureCluster");async function ov(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(ov,"functionWrapper")});var uv=T((Nge,cv)=>{"use strict";var TE=require("joi"),D7=Ve(),{validateSchemaExists:P7,validateTableExists:M7,validateSchemaName:U7}=on(),v7=TE.object({operation:TE.string().valid("purge_stream"),schema:TE.string().custom(P7).custom(U7).required(),table:TE.string().custom(M7).required()});function B7(e){return D7.validateBySchema(e,v7)}a(B7,"purgeStreamValidator");cv.exports=B7});var sR=T((yge,lv)=>{"use strict";var{handleHDBError:H7,hdb_errors:q7}=Z(),{HTTP_STATUS_CODES:G7}=q7,F7=uv(),x7=st(),k7=Jn();lv.exports=$7;async function $7(e){let t=F7(e);if(t)throw H7(t,t.message,G7.BAD_REQUEST,void 0,void 0,!0);k7.checkClusteringEnabled();let{schema:r,table:s}=e;return await x7.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a($7,"purgeStream")});var RE=T((wge,mv)=>{"use strict";var iR=Jn(),V7=st(),fv=j(),gE=R(),Yo=ke(),Y7=G(),nR=v(),{RemotePayloadObject:K7}=Al(),{ErrorCode:_v}=require("nats"),dv=fv.get(gE.CONFIG_PARAMS.CLUSTERING_ENABLED),Ev=fv.get(gE.CONFIG_PARAMS.CLUSTERING_NODENAME);mv.exports={clusterStatus:W7,buildNodeStatus:hv};async function W7(){let e={node_name:Ev,is_enabled:dv,connections:[]};if(!dv)return e;let t=await iR.getAllNodeRecords();if(Y7.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(hv(t[s],e.connections));return await Promise.allSettled(r),e}a(W7,"clusterStatus");async function hv(e,t){let r=e.name,s=new K7(gE.OPERATIONS_ENUM.CLUSTER_STATUS,Ev,void 0,await iR.getSystemInfo()),n,i,o=Yo.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await V7.request(Yo.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Yo.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Yo.CLUSTER_STATUS_STATUSES.CLOSED,nR.error(`Error getting node status from ${r} `,n))}catch(u){nR.warn(`Error getting node status from ${r}`,u),u.code===_v.NoResponders?o=Yo.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===_v.Timeout?o=Yo.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Yo.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Q7(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==gE.PRE_4_0_0_VERSION&&await iR.upsertNodeRecord(u)}catch(u){nR.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(hv,"buildNodeStatus");function Q7(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(Q7,"NodeStatusObject")});var OE=T((Lge,pv)=>{"use strict";var{handleHDBError:j7,hdb_errors:z7}=Z(),{HTTP_STATUS_CODES:J7}=z7,X7=st(),Z7=Jn(),oR=G(),AE=require("joi"),eee=Ve(),tee=2e3,ree=AE.object({timeout:AE.number().min(1),connected_nodes:AE.boolean(),routes:AE.boolean()});pv.exports=see;async function see(e){Z7.checkClusteringEnabled();let t=eee.validateBySchema(e,ree);if(t)throw j7(t,t.message,J7.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||oR.autoCastBoolean(s),o=n===void 0||oR.autoCastBoolean(n),c={nodes:[]},u=await X7.getServerList(r??tee),_={};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:oR.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(see,"clusterNetwork")});var Rv=T((Pge,gv)=>{"use strict";var aR=require("joi"),Sv=Ve(),{route_constraints:Tv}=cT();gv.exports={setRoutesValidator:nee,deleteRoutesValidator:iee};function nee(e){let t=aR.object({server:aR.valid("hub","leaf").required(),routes:Tv.required()});return Sv.validateBySchema(e,t)}a(nee,"setRoutesValidator");function iee(e){let t=aR.object({routes:Tv.required()});return Sv.validateBySchema(e,t)}a(iee,"deleteRoutesValidator")});var bE=T((Uge,bv)=>{"use strict";var Ko=rt(),cR=G(),NE=R(),Av=Rv(),{handleHDBError:Ov,hdb_errors:oee}=Z(),{HTTP_STATUS_CODES:Nv}=oee,aee="cluster routes successfully set",cee="cluster routes successfully deleted";bv.exports={setRoutes:uee,getRoutes:lee,deleteRoutes:_ee};function uee(e){let t=Av.setRoutesValidator(e);if(t)throw Ov(t,t.message,Nv.BAD_REQUEST,void 0,void 0,!0);let r=Ko.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=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=cR.autoCast(_.port);let l=s.some(f=>f.host===_.host&&f.port===_.port),d=n.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(s.push(_),o.push(_))}return e.server==="hub"?Ko.updateConfigValue(NE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Ko.updateConfigValue(NE.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:aee,set:o,skipped:i}}a(uee,"setRoutes");function lee(){let e=Ko.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(lee,"getRoutes");function _ee(e){let t=Av.deleteRoutesValidator(e);if(t)throw Ov(t,t.message,Nv.BAD_REQUEST,void 0,void 0,!0);let r=Ko.getClusteringRoutes(),s=r.hub_routes,n=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=s.length;E<h;E++){let p=s[E];if(d.host===p.host&&d.port===p.port){s.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=n.length;h<p;h++){let S=n[h];if(d.host===S.host&&d.port===S.port){n.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(s=cR.isEmptyOrZeroLength(s)?null:s,Ko.updateConfigValue(NE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=cR.isEmptyOrZeroLength(n)?null:n,Ko.updateConfigValue(NE.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:cee,deleted:i,skipped:o}}a(_ee,"deleteRoutes")});var Iv=T((Bge,yv)=>{"use strict";var Cl=require("alasql"),Wo=require("recursive-iterator"),ks=v(),dee=G(),Ll=R(),uR=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,Eee(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(n=>Ll.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!Ll.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Ll.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=fee(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(_=>!Ll.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new Cl.yy.Column({columnid:_});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function fee(e){return e.filter(t=>t[Ll.PERMS_CRUD_ENUM.READ])}a(fee,"filterReadRestrictedAttrs");function Eee(e,t,r,s,n){hee(e,t,r,s,n)}a(Eee,"interpretAST");function Dl(e,t,r,s,n){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),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(Dl,"addSchemaTableToMap");function hee(e,t,r,s,n){if(!e){ks.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Cl.yy.Insert?Tee(e,t,r):e instanceof Cl.yy.Select?mee(e,t,r,s,n):e instanceof Cl.yy.Update?pee(e,t,r):e instanceof Cl.yy.Delete?See(e,t,r):ks.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(hee,"getRecordAttributesAST");function mee(e,t,r,s,n){if(!e){ks.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(dee.isEmptyOrZeroLength(i)){ks.error("No schema specified");return}e.from.forEach(c=>{Dl(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Dl(c.table,t,r,s,n)});let o=new Wo(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{ks.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 Wo(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{ks.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 Wo(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=n.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{ks.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 Wo(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{ks.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(mee,"getSelectAttributes");function pee(e,t,r){if(!e){ks.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Wo(e.columns),n=e.table.databaseid;Dl(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&lR(e.table.tableid,n,i.columnid,t,r)}a(pee,"getUpdateAttributes");function See(e,t,r){if(!e){ks.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Wo(e.where),n=e.table.databaseid;Dl(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&lR(e.table.tableid,n,i.columnid,t,r)}a(See,"getDeleteAttributes");function Tee(e,t,r){if(!e){ks.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Wo(e.columns),n=e.into.databaseid;Dl(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&lR(e.into.tableid,n,i.columnid,t,r)}a(Tee,"getInsertAttributes");function lR(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(lR,"pushAttribute");yv.exports=uR});var IE=T((qge,Dv)=>{var yE=Ku(),wv=require("chalk"),Kr=v(),Cv=require("prompt"),{promisify:gee}=require("util"),_R=R(),Ree=require("fs-extra"),Aee=require("path"),Oee=G(),Nee=po(),Lv=j();Lv.initSync();var bee=require("moment"),yee=gee(Cv.get),Iee=Aee.join(Lv.getHdbBasePath(),_R.LICENSE_KEY_DIR_NAME,_R.LICENSE_FILE_NAME,_R.LICENSE_FILE_NAME);Dv.exports={getFingerprint:Cee,setLicense:wee,parseLicense:dR,register:Lee,getRegistrationInfo:Pee};async function wee(e){if(e&&e.key&&e.company){try{Kr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await dR(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Kr.error(r),Kr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(wee,"setLicense");async function Cee(){let e={};try{e=await yE.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Kr.error(r),Kr.error(t),new Error(r)}return e}a(Cee,"getFingerprint");async function dR(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Kr.info("Validating license input...");let r=yE.validateLicense(e,t);if(Kr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Kr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Kr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Kr.info("writing license to disk"),await Ree.writeFile(Iee,JSON.stringify({license_key:e,company:t}))}catch(s){throw Kr.error("Failed to write License"),s}return"Registration successful."}a(dR,"parseLicense");async function Lee(){let e=await Dee();return dR(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Lee,"register");async function Dee(){let e=await yE.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:wv.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:wv.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{Cv.start()}catch(s){Kr.error(s)}let r;try{r=await yee(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(Dee,"promptForRegistration");async function Pee(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await yE.getLicense()}catch(r){throw Kr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Oee.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Nee.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=bee.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Pee,"getRegistrationInfo")});var Mv=T((Fge,Pv)=>{"use strict";var Mee=ke(),fR=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+Mee.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};Pv.exports=fR});var Bv=T((kge,vv)=>{"use strict";var Uv=ke(),ER=class{static{a(this,"LeafConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+Uv.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+Uv.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"}};vv.exports=ER});var qv=T((Vge,Hv)=>{"use strict";var hR=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};Hv.exports=hR});var Fv=T((Kge,Gv)=>{"use strict";var Uee=ke(),mR=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Uee.SERVER_SUFFIX.ADMIN,this.password=r}};Gv.exports=mR});var PE=T((Qge,$v)=>{"use strict";var ic=require("path"),LE=require("fs-extra"),vee=Mv(),Bee=Bv(),Hee=qv(),qee=Fv(),pR=Er(),ac=G(),Ar=rt(),CE=R(),Pl=ke(),{CONFIG_PARAMS:it}=CE,Ml=v(),Ul=j(),xv=Yn(),SR=st(),oc="clustering",Gee=1e4,kv=5;$v.exports={generateNatsConfig:xee,removeNatsConfig:kee,getHubConfigPath:Fee};function Fee(){let e=Ul.get(it.ROOTPATH);return ic.join(e,oc,Pl.NATS_CONFIG_FILES.HUB_SERVER)}a(Fee,"getHubConfigPath");async function xee(e=!1,t=void 0){Ul.initSync();let r=Ul.get(it.ROOTPATH),s=ic.join(r,oc,Pl.PID_FILES.HUB),n=ic.join(r,oc,Pl.PID_FILES.LEAF),i=Ar.getConfigFromFile(it.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=ic.join(r,oc,Pl.NATS_CONFIG_FILES.HUB_SERVER),c=ic.join(r,oc,Pl.NATS_CONFIG_FILES.LEAF_SERVER),u=Ar.getConfigFromFile(it.CLUSTERING_TLS_CERTIFICATE),_=Ar.getConfigFromFile(it.CLUSTERING_TLS_PRIVATEKEY),l=Ar.getConfigFromFile(it.CLUSTERING_TLS_CERT_AUTH),d=Ar.getConfigFromFile(it.CLUSTERING_TLS_INSECURE),f=Ar.getConfigFromFile(it.CLUSTERING_TLS_VERIFY),E=Ar.getConfigFromFile(it.CLUSTERING_NODENAME),h=Ar.getConfigFromFile(it.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await SR.checkNATSServerInstalled()||DE("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await pR.listUsers(),S=Ar.getConfigFromFile(it.CLUSTERING_USER),A=await pR.getClusterUser();(ac.isEmpty(A)||A.active!==!0)&&DE(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await wE(it.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await wE(it.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await wE(it.CLUSTERING_HUBSERVER_NETWORK_PORT),await wE(it.CLUSTERING_LEAFSERVER_NETWORK_PORT));let g=[],O=[];for(let[k,se]of p.entries())se.role.role===CE.ROLE_TYPES_ENUM.CLUSTER_USER&&se.active&&(g.push(new qee(se.username,xv.decrypt(se.hash))),O.push(new Hee(se.username,xv.decrypt(se.hash))));let V=[],{hub_routes:$}=Ar.getClusteringRoutes();if(!ac.isEmptyOrZeroLength($))for(let k of $)V.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${k.host}:${k.port}`);let F=new vee(Ar.getConfigFromFile(it.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,Ar.getConfigFromFile(it.CLUSTERING_HUBSERVER_CLUSTER_NAME),Ar.getConfigFromFile(it.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),V,g,O);l==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=ac.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===CE.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await LE.writeJson(o,F),Ml.trace(`Hub server config written to ${o}`));let w=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,K=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,B=new Bee(Ar.getConfigFromFile(it.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[w],[K],g,O,u,_,l,d);l==null&&delete B.tls.ca_file,(t===void 0||t===CE.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await LE.writeJson(c,B),Ml.trace(`Leaf server config written to ${c}`))}a(xee,"generateNatsConfig");async function wE(e){let t=Ul.get(e);return ac.isEmpty(t)&&DE(`port undefined for '${e}'`),await ac.isPortTaken(t)&&DE(`'${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(wE,"isPortAvailable");function DE(e){let t=`Error generating clustering config: ${e}`;Ml.error(t),console.error(t),process.exit(1)}a(DE,"generateNatsConfigError");async function kee(e){let{port:t,config_file:r}=SR.getServerConfig(e),{username:s,decrypt_hash:n}=await pR.getClusterUser(),i=0,o=2e3;for(;i<kv;){try{let _=await SR.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){Ml.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=kv)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 ac.async_set_timeout(o*(i*2))}let c="0".repeat(Gee),u=ic.join(Ul.get(it.ROOTPATH),oc,r);await LE.writeFile(u,c),await LE.remove(u),Ml.notify(e,"started.")}a(kee,"removeNatsConfig")});var jv=T((zge,Qv)=>{"use strict";var Wr=j(),$ee=Ku(),le=R(),vl=ke(),Xn=require("path"),{PACKAGE_ROOT:UE}=R(),Vv=j(),ME=G(),cc="/dev/null",Vee=Xn.join(UE,"launchServiceScripts"),Yv=Xn.join(UE,"utility/scripts"),Yee=Xn.join(Yv,le.HDB_RESTART_SCRIPT),Kv=Xn.resolve(UE,"dependencies",`${process.platform}-${process.arch}`,vl.NATS_BINARY_NAME);function Wv(){let t=$ee.licenseSearch().ram_allocation||le.RAM_ALLOCATION_ENUM.DEFAULT,r=le.MEM_SETTING_KEY+t,s={[le.PROCESS_NAME_ENV_PROP]:le.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return ME.noBootFile()&&(s[le.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=ME.getEnvCliRootPath()),{name:le.PROCESS_DESCRIPTORS.HDB,script:le.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:UE}}a(Wv,"generateMainServerConfig");var Kee=9930;function Wee(){Wr.initSync(!0);let e=Wr.get(le.CONFIG_PARAMS.ROOTPATH),t=Xn.join(e,"clustering",vl.NATS_CONFIG_FILES.HUB_SERVER),r=Xn.join(Wr.get(le.HDB_SETTINGS_NAMES.LOG_PATH_KEY),le.LOG_NAMES.HDB),s=Vv.get(le.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=vl.LOG_LEVEL_FLAGS[Wr.get(le.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:le.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==Kee?"-"+s:""),script:Kv,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[le.PROCESS_NAME_ENV_PROP]:le.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Wr.get(le.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=cc,i.error_file=cc),i}a(Wee,"generateNatsHubServerConfig");var Qee=9940;function jee(){Wr.initSync(!0);let e=Wr.get(le.CONFIG_PARAMS.ROOTPATH),t=Xn.join(e,"clustering",vl.NATS_CONFIG_FILES.LEAF_SERVER),r=Xn.join(Wr.get(le.HDB_SETTINGS_NAMES.LOG_PATH_KEY),le.LOG_NAMES.HDB),s=Vv.get(le.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=vl.LOG_LEVEL_FLAGS[Wr.get(le.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:le.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==Qee?"-"+s:""),script:Kv,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[le.PROCESS_NAME_ENV_PROP]:le.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Wr.get(le.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=cc,i.error_file=cc),i}a(jee,"generateNatsLeafServerConfig");function zee(){Wr.initSync();let e=Xn.join(Wr.get(le.CONFIG_PARAMS.LOGGING_ROOT),le.LOG_NAMES.HDB),t={name:le.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:le.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[le.PROCESS_NAME_ENV_PROP]:le.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Vee,autorestart:!1};return Wr.get(le.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=cc,t.error_file=cc),t}a(zee,"generateClusteringUpgradeV4ServiceConfig");function Jee(){let e={[le.PROCESS_NAME_ENV_PROP]:le.PROCESS_DESCRIPTORS.RESTART_HDB};return ME.noBootFile()&&(e[le.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=ME.getEnvCliRootPath()),{...{name:le.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:Yv},script:Yee}}a(Jee,"generateRestart");function Xee(){return{apps:[Wv()]}}a(Xee,"generateAllServiceConfigs");Qv.exports={generateAllServiceConfigs:Xee,generateMainServerConfig:Wv,generateRestart:Jee,generateNatsHubServerConfig:Wee,generateNatsLeafServerConfig:jee,generateClusteringUpgradeV4ServiceConfig:zee}});var uc=T((Zge,cB)=>{"use strict";var Ne=R(),Zee=G(),Zn=PE(),Bl=st(),pn=ke(),Wi=jv(),vE=j(),Qi=v(),ete=Jn(),{startWorker:zv,onMessageFromWorkers:tte}=Qe(),rte=zn(),Xge=require("util"),ste=require("child_process"),nte=require("fs"),{execFile:ite}=ste,Te;cB.exports={enterPM2Mode:ote,start:ji,stop:TR,reload:Xv,restart:Zv,list:gR,describe:tB,connect:ei,kill:_te,startAllServices:dte,startService:RR,getUniqueServicesList:rB,restartAllServices:fte,isServiceRegistered:sB,reloadStopStart:nB,restartHdb:eB,deleteProcess:ute,startClusteringProcesses:oB,startClusteringThreads:aB,isHdbRestartRunning:lte,isClusteringRunning:hte,stopClustering:Ete,reloadClustering:mte};var Hl=!1;tte(e=>{e.type==="restart"&&vE.initSync(!0)});function ote(){Hl=!0}a(ote,"enterPM2Mode");function ei(){return Te||(Te=require("pm2")),new Promise((e,t)=>{Te.connect((r,s)=>{Qi.setupConsoleLogging(),r&&t(r),e(s)})})}a(ei,"connect");var Or,ate=10,Jv;function ji(e,t=!1){if(Hl)return cte(e);let r=ite(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Or.indexOf(r);o>-1&&Or.splice(o,1),!Jv&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<ate&&(nte.existsSync(Zn.getHubConfigPath())?ji(e):(await Zn.generateNatsConfig(!0),ji(e),await new Promise(c=>setTimeout(c,3e3)),await Zn.removeNatsConfig(Ne.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Zn.removeNatsConfig(Ne.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=vE.get(Ne.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&pn.LOG_LEVEL_HIERARCHY[o]>=pn.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===pn.LOG_LEVELS.ERR||l===pn.LOG_LEVELS.WRN?Qi.OUTPUTS.STDERR:Qi.OUTPUTS.STDOUT;Qi.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=pn.LOG_LEVELS[f]}if(pn.LOG_LEVEL_HIERARCHY[o]>=pn.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===pn.LOG_LEVELS.ERR||l===pn.LOG_LEVELS.WRN?Qi.OUTPUTS.STDERR:Qi.OUTPUTS.STDOUT;Qi.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),Or=[],!Or&&!t){let i=a(()=>{Jv=!0,Or&&(Or.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)}Or.push(r)}a(ji,"start");function cte(e){return new Promise(async(t,r)=>{try{await ei()}catch(s){r(s)}Te.start(e,(s,n)=>{s&&(Te.disconnect(),r(s)),Te.disconnect(),t(n)})})}a(cte,"startWithPM2");function TR(e){if(!Hl){for(let t of Or||[])t.name===e&&(Or.splice(Or.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await ei()}catch(s){r(s)}Te.stop(e,async(s,n)=>{s&&(Te.disconnect(),r(s)),Te.delete(e,(i,o)=>{i&&(Te.disconnect(),r(s)),Te.disconnect(),t(o)})})})}a(TR,"stop");function Xv(e){return new Promise(async(t,r)=>{try{await ei()}catch(s){r(s)}Te.reload(e,(s,n)=>{s&&(Te.disconnect(),r(s)),Te.disconnect(),t(n)})})}a(Xv,"reload");function Zv(e){if(!Hl)for(let t of Or||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await ei()}catch(s){r(s)}Te.restart(e,(s,n)=>{Te.disconnect(),t(n)})})}a(Zv,"restart");function ute(e){return new Promise(async(t,r)=>{try{await ei()}catch(s){r(s)}Te.delete(e,(s,n)=>{s&&(Te.disconnect(),r(s)),Te.disconnect(),t(n)})})}a(ute,"deleteProcess");async function eB(){await ji(Wi.generateRestart())}a(eB,"restartHdb");async function lte(){let e=await gR();for(let t in e)if(e[t].name===Ne.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(lte,"isHdbRestartRunning");function gR(){return new Promise(async(e,t)=>{try{await ei()}catch(r){t(r)}Te.list((r,s)=>{r&&(Te.disconnect(),t(r)),Te.disconnect(),e(s)})})}a(gR,"list");function tB(e){return new Promise(async(t,r)=>{try{await ei()}catch(s){r(s)}Te.describe(e,(s,n)=>{s&&(Te.disconnect(),r(s)),Te.disconnect(),t(n)})})}a(tB,"describe");function _te(){if(!Hl){for(let e of Or||[])e.kill();Or=[];return}return new Promise(async(e,t)=>{try{await ei()}catch(r){t(r)}Te.killDaemon((r,s)=>{r&&(Te.disconnect(),t(r)),Te.disconnect(),e(s)})})}a(_te,"kill");async function dte(){try{await oB(),await aB(),await ji(Wi.generateAllServiceConfigs())}catch(e){throw Te?.disconnect(),e}}a(dte,"startAllServices");async function RR(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ne.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Wi.generateMainServerConfig();break;case Ne.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Wi.generateNatsIngestServiceConfig();break;case Ne.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Wi.generateNatsReplyServiceConfig();break;case Ne.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Wi.generateNatsHubServerConfig(),await ji(r,t),await Zn.removeNatsConfig(e);return;case Ne.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Wi.generateNatsLeafServerConfig(),await ji(r,t),await Zn.removeNatsConfig(e);return;case Ne.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Wi.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await ji(r)}catch(r){throw Te?.disconnect(),r}}a(RR,"startService");async function rB(){try{let e=await gR(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw Te?.disconnect(),e}}a(rB,"getUniqueServicesList");async function fte(e=[]){try{let t=!1,r=await rB();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Ne.PROCESS_DESCRIPTORS.HDB?t=!0:await Zv(o))}t&&await nB(Ne.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Te?.disconnect(),t}}a(fte,"restartAllServices");async function sB(e){if(Or?.find(r=>r.name===e))return!0;let t=await rte.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(sB,"isServiceRegistered");async function nB(e){let t=e===Ne.PROCESS_DESCRIPTORS.HDB?vE.get(Ne.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):vE.get(Ne.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await tB(e),s=Zee.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await TR(e),await RR(e)):e===Ne.PROCESS_DESCRIPTORS.HDB?await eB():await Xv(e)}a(nB,"reloadStopStart");var iB;async function oB(e=!1){for(let t in Ne.CLUSTERING_PROCESSES){let r=Ne.CLUSTERING_PROCESSES[t];await RR(r,e)}}a(oB,"startClusteringProcesses");async function aB(){iB=zv(Ne.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ne.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Bl.createWorkQueueStream(pn.WORK_QUEUE_CONSUMER_NAMES),await Bl.updateIngestStreamConsumer(),await Bl.updateLocalStreams();let e=await ete.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ne.PRE_4_0_0_VERSION){Qi.info("Starting clustering upgrade 4.0.0 process"),zv(Ne.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(aB,"startClusteringThreads");async function Ete(){for(let e in Ne.CLUSTERING_PROCESSES)if(e!==Ne.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ne.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await iB.terminate();else{let t=Ne.CLUSTERING_PROCESSES[e];await TR(t)}}a(Ete,"stopClustering");async function hte(){for(let e in Ne.CLUSTERING_PROCESSES){let t=Ne.CLUSTERING_PROCESSES[e];if(await sB(t)===!1)return!1}return!0}a(hte,"isClusteringRunning");async function mte(){await Zn.generateNatsConfig(!0),await Bl.reloadNATSHub(),await Bl.reloadNATSLeaf(),await Zn.removeNatsConfig(Ne.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Zn.removeNatsConfig(Ne.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(mte,"reloadClustering")});var Qo=T((tRe,hB)=>{"use strict";var pte=require("minimist"),{isMainThread:NR,parentPort:_B}=require("worker_threads"),Xe=R(),{PROCESS_DESCRIPTORS_VALIDATE:ql}=Xe,Sn=v(),bR=G(),BE=PE(),lc=st(),AR=ke(),dB=rt(),Tn=uc(),uB=zn(),Ste=Eo(),{restartWorkers:HE,onMessageByType:Tte}=Qe(),{handleHDBError:gte,hdb_errors:Rte}=Z(),{HTTP_STATUS_CODES:Ate}=Rte,qE=j();qE.initSync();var Gl=`Restarting HarperDB. This may take up to ${Xe.RESTART_TIMEOUT_MS/1e3} seconds.`,Ote="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",lB="Clustering is not enabled so cannot be restarted",Nte="Invalid service",_c,ds;hB.exports={restart:fB,restartService:yR};NR&&Tte(Xe.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?yR({service:e.workerType}):fB({operation:"restart"})});async function fB(e){ds=Object.keys(e).length===0,_c=await Tn.isServiceRegistered(Xe.HDB_PROC_DESCRIPTOR);let t=pte(process.argv);if(t.service){await yR(t);return}if(ds&&!_c){console.error(Ote);return}if(ds&&console.log(Gl),_c){Tn.enterPM2Mode(),Sn.notify(Gl);let r=Ste(Object.keys(Xe.CONFIG_PARAM_MAP),!0);return bR.isEmptyOrZeroLength(Object.keys(r))||dB.updateConfigValue(void 0,void 0,r,!0,!0),yte(),Gl}return NR?(Sn.notify(Gl),setTimeout(()=>{HE()},50)):_B.postMessage({type:Xe.ITC_EVENT_TYPES.RESTART}),Gl}a(fB,"restart");async function yR(e){let{service:t}=e;if(Xe.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw gte(new Error,Nte,Ate.BAD_REQUEST,void 0,void 0,!0);if(_c=await Tn.isServiceRegistered(Xe.HDB_PROC_DESCRIPTOR),!NR)return _B.postMessage({type:Xe.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case ql.clustering:if(!qE.get(Xe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=lB;break}ds&&console.log("Restarting clustering"),Sn.notify("Restarting clustering"),await EB();break;case ql.clustering_config:case ql["clustering config"]:if(!qE.get(Xe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=lB;break}ds&&console.log("Restarting clustering_config"),Sn.notify("Restarting clustering_config"),await Tn.reloadClustering();break;case"custom_functions":case"custom functions":case ql.harperdb:case ql.http_workers:if(ds&&!_c){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}ds&&console.log("Restarting http_workers"),Sn.notify("Restarting http_workers"),ds?await Tn.restart(Xe.HDB_PROC_DESCRIPTOR):setTimeout(()=>{HE("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Sn.error(r),ds&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(yR,"restartService");async function bte(){await lc.publishToStream(`${AR.SUBJECT_PREFIXES.TXN}.${AR.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,AR.WORK_QUEUE_CONSUMER_NAMES.stream_name,lc.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(bte,"postDummyNatsMsg");async function yte(){await EB(),await Tn.restart(Xe.HDB_PROC_DESCRIPTOR),await bR.async_set_timeout(2e3),qE.get(Xe.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await OR(),ds&&(await lc.closeConnection(),process.exit(0))}a(yte,"restartPM2Mode");async function EB(){if(!dB.getConfigFromFile(Xe.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await uB.getHDBProcessInfo()).clustering.length===0)Sn.trace("Clustering not running, restart will start clustering services"),await BE.generateNatsConfig(!0),await Tn.startClusteringProcesses(),await Tn.startClusteringThreads(),await OR(),ds&&await lc.closeConnection();else{await bte(),await BE.generateNatsConfig(!0),_c?(Sn.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Tn.restart(Xe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Tn.restart(Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await uB.getHDBProcessInfo()).clustering.forEach(n=>{Sn.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await bR.async_set_timeout(3e3),await OR(),await lc.updateLocalStreams(),ds&&await lc.closeConnection(),Sn.trace("Restart clustering restarting ingest and reply service threads");let t=HE(Xe.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=HE(Xe.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(EB,"restartClustering");async function OR(){await BE.removeNatsConfig(Xe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await BE.removeNatsConfig(Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(OR,"removeNatsConfig")});var yB=T((nRe,bB)=>{"use strict";var sRe=require("lodash"),Nr=R(),{handleHDBError:mB,hdb_errors:Ite}=Z(),{HDB_ERROR_MSGS:wte,HTTP_STATUS_CODES:Cte}=Ite,IR=v();bB.exports={getRolePermissions:Dte};var jo=Object.create(null),Lte=a(e=>({key:e,perms:{}}),"perms_template_obj"),gB=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),RB=a((e=!1,t=!1,r=!1,s=!1)=>({[Nr.PERMS_CRUD_ENUM.READ]:e,[Nr.PERMS_CRUD_ENUM.INSERT]:t,[Nr.PERMS_CRUD_ENUM.UPDATE]:r,[Nr.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),wR=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...RB(t,r,s,n)}),"table_perms_template"),pB=a((e,t=RB())=>({attribute_name:e,describe:NB(t),[Fl]:t[Fl],[CR]:t[CR],[LR]:t[LR]}),"attr_perms_template"),SB=a((e,t=!1)=>({attribute_name:e,describe:t,[Fl]:t}),"timestamp_attr_perms_template"),{READ:Fl,INSERT:CR,UPDATE:LR}=Nr.PERMS_CRUD_ENUM,AB=Object.values(Nr.PERMS_CRUD_ENUM),OB=[Fl,CR,LR];function Dte(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[Nr.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(jo[t]&&jo[t].key===s)return jo[t].perms;let n=Pte(e,r);return jo[t]?jo[t].key=s:jo[t]=Lte(s),jo[t].perms=n,n}catch(r){if(!e[Nr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Nr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Nr.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw IR.error(s),IR.debug(r),mB(new Error,wte.OUTDATED_PERMS_TRANSLATION_ERROR,Cte.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
10
|
+
${r.stack}`;throw IR.error(s),mB(new Error)}}}a(Dte,"getRolePermissions");function Pte(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Nr.SYSTEM_SCHEMA_NAME]=s[Nr.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=Mte(t[i]);return}r[i]=gB(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],u=t[i][o],_=Ute(c,u);r[i].describe||AB.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=wR()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=wR()})}),r}a(Pte,"translateRolePermissions");function Mte(e){let t=gB(!0);return Object.keys(e).forEach(r=>{t.tables[r]=wR(!0,!0,!0,!0,!0)}),t}a(Mte,"createStructureUserPermissions");function Ute(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return Nr.TIME_STAMP_NAMES.includes(d)&&(f=SB(d,l[Fl])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=pB(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=NB(l),n.attribute_permissions.push(l),c||vte(l,u)}else if(_!==o){let l;Nr.TIME_STAMP_NAMES.includes(_)?l=SB(_):l=pB(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=TB(n),n}else return e.describe=TB(e),e}a(Ute,"getTableAttrPerms");function TB(e){return AB.filter(t=>e[t]).length>0}a(TB,"getSchemaTableDescribePerm");function NB(e){return OB.filter(t=>e[t]).length>0}a(NB,"getAttributeDescribePerm");function vte(e,t){OB.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(vte,"checkForHashPerms")});var IB={};Fe(IB,{Headers:()=>zi});var zi,GE=Re(()=>{zi=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 s=t.toLowerCase();if(!super.has(s))return super.set(s,[t,r])}append(t,r,s){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase(),i=super.get(n);if(i){let o=i[1];s?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(n,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var xl={};Fe(xl,{authentication:()=>vB,bypassAuth:()=>kte,login:()=>Vte,logout:()=>Yte,start:()=>$te});function kte(){UB=!0}async function vB(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?Gte?qte:[]:Hte?Bte:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new zi([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return FE&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),FE&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(FE){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(E);if(h>=0){let p=n.indexOf(";",h),S=n.indexOf("=",h);u=n.slice(S+1,p===-1?n.length:p),_=await CB.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new kE.AuthAuditLog(E,h,Gt.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===Gt.AUTH_AUDIT_STATUS.SUCCESS?wB.notify(S):wB.error(S)},"authAuditLog"),d;if(s){if(d=zo.get(s),!d){let[E,h]=s.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await Tt.getUser(p,S):null;break;case"Bearer":try{d=await(0,xE.validateOperationToken)(h)}catch(A){if(A.message==="invalid token")try{return await(0,xE.validateRefreshToken)(h),c({status:-1})}catch{throw A}}break}}catch(A){return xte&&(zo.get(h)||(zo.set(h,h),l(p,Gt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:Ji({error:A.message},e)})}zo.set(s,d),Fte&&l(d.username,Gt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await Tt.getUser(_.user,null,!1):UB&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=await(0,DB.getSuperUser)());FE&&(e.session.update=function(E){if(!u){u=(0,PB.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.id=u,CB.put(E)},e.login=async function(E,h){e.user=await Tt.getUser(E,h),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")&&wi.loginPath?(f.status=302,f.headers.set("Location",wi.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 zi);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function $te({server:e,port:t}){e.request(vB,{port:t||"all"}),LB||(LB=!0,setInterval(()=>{zo=new Map},Es.get(Gt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),MB.user.addListener(()=>{zo=new Map}))}async function Vte(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 Yte(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var DB,xE,PB,Es,Gt,kE,MB,wB,Bte,Hte,qte,Gte,CB,FE,UB,Fte,xte,zo,LB,$E=Re(()=>{DB=M(Er());Pr();uu();xE=M(Rl());de();PB=require("uuid"),Es=M(j()),Gt=M(R()),kE=M(v()),MB=M(Qu());GE();dc();wB=(0,kE.loggerWithTag)("auth-event");Es.initSync();Bte=Es.get(Gt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),Hte=Es.get(Gt.CONFIG_PARAMS.HTTP_CORS),qte=Es.get(Gt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Gte=Es.get(Gt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),CB=ut({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),FE=Es.get(Gt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,UB=Es.get(Gt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,Fte=Es.get(Gt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,xte=Es.get(Gt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,zo=new Map;Tt.onInvalidatedUser(()=>{zo=new Map});a(kte,"bypassAuth");a(vB,"authentication");a($te,"start");a(Vte,"login");a(Yte,"logout")});var kB=T((fRe,xB)=>{"use strict";var ge=require("joi"),BB=require("fs-extra"),HB=require("path"),ri=Ve(),qB=j(),GB=R(),FB=v(),{hdb_errors:Kte}=Z(),{HDB_ERROR_MSGS:Zt}=Kte,ti=/^[a-zA-Z0-9-_]+$/;xB.exports={getDropCustomFunctionValidator:Qte,setCustomFunctionValidator:jte,addComponentValidator:Zte,dropCustomFunctionProjectValidator:ere,packageComponentValidator:tre,deployComponentValidator:rre,setComponentFileValidator:zte,getComponentFileValidator:Xte,dropComponentFileValidator:Jte};function VE(e,t,r){try{let s=qB.get(GB.CONFIG_PARAMS.COMPONENTSROOT),n=HB.join(s,t);return BB.existsSync(n)?e?t:r.message(Zt.PROJECT_EXISTS):e?r.message(Zt.NO_PROJECT):t}catch(s){return FB.error(s),r.message(Zt.VALIDATION_ERR)}}a(VE,"checkProjectExists");function kl(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(kl,"checkFilePath");function Wte(e,t,r,s){try{let n=qB.get(GB.CONFIG_PARAMS.COMPONENTSROOT),i=HB.join(n,e,t,r+".js");return BB.existsSync(i)?r:s.message(Zt.NO_FILE)}catch(n){return FB.error(n),s.message(Zt.VALIDATION_ERR)}}a(Wte,"checkFileExists");function Qte(e){let t=ge.object({project:ge.string().pattern(ti).custom(VE.bind(null,!0)).required().messages({"string.pattern.base":Zt.BAD_PROJECT_NAME}),type:ge.string().valid("helpers","routes").required(),file:ge.string().pattern(ti).custom(Wte.bind(null,e.project,e.type)).custom(kl).required().messages({"string.pattern.base":Zt.BAD_FILE_NAME})});return ri.validateBySchema(e,t)}a(Qte,"getDropCustomFunctionValidator");function jte(e){let t=ge.object({project:ge.string().pattern(ti).custom(VE.bind(null,!0)).required().messages({"string.pattern.base":Zt.BAD_PROJECT_NAME}),type:ge.string().valid("helpers","routes").required(),file:ge.string().custom(kl).required(),function_content:ge.string().required()});return ri.validateBySchema(e,t)}a(jte,"setCustomFunctionValidator");function zte(e){let t=ge.object({project:ge.string().pattern(ti).required().messages({"string.pattern.base":Zt.BAD_PROJECT_NAME}),file:ge.string().custom(kl).required(),payload:ge.string().allow("").optional(),encoding:ge.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ri.validateBySchema(e,t)}a(zte,"setComponentFileValidator");function Jte(e){let t=ge.object({project:ge.string().pattern(ti).required().messages({"string.pattern.base":Zt.BAD_PROJECT_NAME}),file:ge.string().custom(kl).optional()});return ri.validateBySchema(e,t)}a(Jte,"dropComponentFileValidator");function Xte(e){let t=ge.object({project:ge.string().required(),file:ge.string().custom(kl).required(),encoding:ge.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ri.validateBySchema(e,t)}a(Xte,"getComponentFileValidator");function Zte(e){let t=ge.object({project:ge.string().pattern(ti).custom(VE.bind(null,!1)).required().messages({"string.pattern.base":Zt.BAD_PROJECT_NAME})});return ri.validateBySchema(e,t)}a(Zte,"addComponentValidator");function ere(e){let t=ge.object({project:ge.string().pattern(ti).custom(VE.bind(null,!0)).required().messages({"string.pattern.base":Zt.BAD_PROJECT_NAME})});return ri.validateBySchema(e,t)}a(ere,"dropCustomFunctionProjectValidator");function tre(e){let t=ge.object({project:ge.string().pattern(ti).required().messages({"string.pattern.base":Zt.BAD_PROJECT_NAME}),skip_node_modules:ge.boolean()});return ri.validateBySchema(e,t)}a(tre,"packageComponentValidator");function rre(e){let t=ge.object({project:ge.string().pattern(ti).required().messages({"string.pattern.base":Zt.BAD_PROJECT_NAME}),payload:ge.string().optional().messages({"string.pattern.base":Zt.BAD_PACKAGE}),package:ge.string().optional()});return ri.validateBySchema(e,t)}a(rre,"deployComponentValidator")});var QE=T((hRe,jB)=>{"use strict";var YE=require("joi"),KE=require("path"),$B=require("fs-extra"),{exec:sre}=require("child_process"),nre=require("util"),VB=nre.promisify(sre),$l=R(),{handleHDBError:fc,hdb_errors:ire}=Z(),{HTTP_STATUS_CODES:Ec}=ire,Vl=j(),ore=Ve(),hc=v();Vl.initSync();var DR=Vl.get($l.CONFIG_PARAMS.COMPONENTSROOT),YB="npm install --omit=dev --json",are=`${YB} --dry-run`;jB.exports={installModules:_re,auditModules:dre,installAllRootModules:cre,uninstallRootModule:ure,linkHarperdb:lre};async function cre(e=!1){await WE(),await Yl(e?"npm install --ignore-scripts":"npm install",Vl.get($l.CONFIG_PARAMS.ROOTPATH))}a(cre,"installAllRootModules");async function ure(e){await Yl(`npm uninstall ${e}`,Vl.get($l.CONFIG_PARAMS.ROOTPATH))}a(ure,"uninstallRootModule");async function lre(){await WE(),await Yl(`npm link ${$l.PACKAGE_ROOT}`,Vl.get($l.CONFIG_PARAMS.ROOTPATH))}a(lre,"linkHarperdb");async function Yl(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await VB(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
|
|
11
|
+
`,""))}return s&&!s.includes("Debugger listening")&&hc.error("Error running NPM command:",e,s),hc.trace(r,s),r.replace(`
|
|
12
|
+
`,"")}a(Yl,"runCommand");async function _re(e){hc.info(`starting installModules for request: ${e}`);let t=QB(e);if(t)throw fc(t,t.message,Ec.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?are:YB;await WE(),await WB(r);let i={};for(let o=0,c=r.length;o<c;o++){let u=r[o];i[u]={npm_output:null,npm_error:null};let _=KE.join(DR,u),l,d=null;try{let{stdout:f,stderr:E}=await VB(n,{cwd:_});l=f?f.replace(`
|
|
13
13
|
`,""):null,d=E?E.replace(`
|
|
14
|
-
`,""):null}catch(f){f.stderr?i[u].npm_error=
|
|
15
|
-
`);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(kB,"parseNPMStdErr");async function are(e){Ec.info(`starting auditModules for request: ${e}`);let t=VB(e);if(t)throw dc(t,t.message,fc.BAD_REQUEST);let{projects:r}=e;await KE(),await $B(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=YE.join(wR,o);s[o]={npm_output:null,npm_error:null};try{let u=await Yl("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=kB(u.stderr)}}return Ec.info(`finished auditModules with response ${s}`),s}a(are,"auditModules");async function KE(){try{return await Yl("npm -v"),!0}catch{throw dc(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",fc.BAD_REQUEST,void 0,void 0,!0)}}a(KE,"checkNPMInstalled");async function $B(e){if(!Array.isArray(e)||e.length===0)throw dc(new Error,"projects argument must be an array with at least 1 element",fc.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=YE.join(wR,i.toString());if(!await GB.pathExists(o)){t.push(i);continue}let u=YE.join(o,"package.json");await GB.pathExists(u)||r.push(i)}if(t.length>0)throw dc(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,fc.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw dc(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,fc.BAD_REQUEST,void 0,void 0,!0)}a($B,"checkProjectPaths");function VB(e){let t=VE.object({projects:VE.array().min(1).items(VE.string()).required(),dry_run:VE.boolean().default(!1)});return tre.validateBySchema(e,t)}a(VB,"modulesValidator")});var LR=T((fRe,JB)=>{"use strict";var hc=require("fs-extra"),CR=require("path"),QE=U(),KB=G(),jE=A(),jB=Q(),cre=rt();JB.exports=ure;async function ure(){let e=lre(),t=jB.get(jE.CONFIG_PARAMS.ROOTPATH),r=CR.join(t,"package.json"),s={dependencies:{harperdb:"file:"+jE.PACKAGE_ROOT}},n=CR.join(t,"node_modules");await hc.ensureDir(n);let i,o=!0,c=!1;try{i=await hc.readJson(r)}catch(u){if(KB.isEmptyOrZeroLength(e))return;if(u.code!==jE.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!KB.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await WB(_);s.dependencies[u]=l+_}if(!o){QE.notify("Installing components"),await QB(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await WB(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(QE.notify("Removing component",u),c=!0);c&&(QE.notify("Updating components."),await QB(r,s,i))}a(ure,"installComponents");function lre(){let e=cre.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(lre,"getComponentsConfig");async function WB(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":CR.extname(e)||await hc.pathExists(e)?"file:":"github:"}a(WB,"getPkgPrefix");async function QB(e,t,r){QE.trace("npm installing components package.json",t),await hc.writeFile(e,JSON.stringify(t,null," "));try{await WE().installAllRootModules(jB.get(jE.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await hc.writeFile(e,JSON.stringify(r,null," ")):await hc.unlink(e),s}}a(QB,"installPackages")});var JE=T((mRe,eH)=>{"use strict";var He=require("fs-extra"),DR=require("fast-glob"),he=require("path"),XB=require("tar-fs"),hRe=require("uuid").v4,PR=require("normalize-path"),Rn=qB(),It=U(),qe=A(),dt=Q(),Kl=rt(),_re=G(),{PACKAGE_ROOT:dre}=A(),{handleHDBError:wt,hdb_errors:fre}=Z(),{basename:Ere}=require("path"),hre=LR(),ZB=Q(),mre=A(),{Readable:pre}=require("stream"),{HDB_ERROR_MSGS:zo,HTTP_STATUS_CODES:Ct}=fre,Sre=he.join(dre,"application-template"),zB=he.join(dt.get(qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function Tre(){It.trace("getting custom api status");let e={};try{e={port:dt.get(qe.CONFIG_PARAMS.HTTP_PORT),directory:dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw wt(new Error,zo.FUNCTION_STATUS,Ct.INTERNAL_SERVER_ERROR,It.ERR,t)}return e}a(Tre,"customFunctionsStatus");function gre(){It.trace("getting custom api endpoints");let e={},t=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT);try{DR.sync(PR(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:DR.sync(PR(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:DR.sync(PR(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw wt(new Error,zo.GET_FUNCTIONS,Ct.INTERNAL_SERVER_ERROR,It.ERR,r)}return e}a(gre,"getCustomFunctions");function Rre(e){e.project&&(e.project=he.parse(e.project).name),e.file&&(e.file=he.parse(e.file).name);let t=Rn.getDropCustomFunctionValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);It.trace("getting custom api endpoint file content");let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e,o=he.join(r,s,n,i+".js");try{return He.readFileSync(o,{encoding:"utf8"})}catch(c){throw wt(new Error,zo.GET_FUNCTION,Ct.INTERNAL_SERVER_ERROR,It.ERR,c)}}a(Rre,"getCustomFunction");function Are(e){e.project&&(e.project=he.parse(e.project).name),e.file&&(e.file=he.parse(e.file).name);let t=Rn.setCustomFunctionValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);It.trace("setting custom function file content");let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i,function_content:o}=e;try{return He.outputFileSync(he.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw wt(new Error,zo.SET_FUNCTION,Ct.INTERNAL_SERVER_ERROR,It.ERR,c)}}a(Are,"setCustomFunction");function Ore(e){e.project&&(e.project=he.parse(e.project).name),e.file&&(e.file=he.parse(e.file).name);let t=Rn.getDropCustomFunctionValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);It.trace("dropping custom function file");let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e;try{return He.unlinkSync(he.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw wt(new Error,zo.DROP_FUNCTION,Ct.INTERNAL_SERVER_ERROR,It.ERR,o)}}a(Ore,"dropCustomFunction");function Nre(e){e.project&&(e.project=he.parse(e.project).name);let t=Rn.addComponentValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);It.trace("adding component");let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;try{let n=he.join(r,s);return He.mkdirSync(n,{recursive:!0}),He.copySync(Sre,n),`Successfully added project: ${s}`}catch(n){throw wt(new Error,zo.ADD_FUNCTION,Ct.INTERNAL_SERVER_ERROR,It.ERR,n)}}a(Nre,"addComponent");function bre(e){e.project&&(e.project=he.parse(e.project).name);let t=Rn.dropCustomFunctionProjectValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);It.trace("dropping custom function project");let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e,n=dt.get(qe.CONFIG_PARAMS.APPS);if(!_re.isEmptyOrZeroLength(n)){let i=!1;for(let[o,c]of n.entries())if(c.name===s){n.splice(o,1),i=!0;break}if(i)return Kl.updateConfigValue(qe.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=he.join(r,s);return He.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw wt(new Error,zo.DROP_FUNCTION_PROJECT,Ct.INTERNAL_SERVER_ERROR,It.ERR,i)}}a(bre,"dropCustomFunctionProject");async function yre(e){e.project&&(e.project=he.parse(e.project).name);let t=Rn.packageComponentValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;It.trace("packaging component",s);let n;try{n=await He.realpath(he.join(r,s))}catch(u){if(u.code!==qe.NODE_ERROR_CODES.ENOENT)throw u;try{n=await He.realpath(he.join(dt.get(qe.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(_){if(_.code===qe.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await He.ensureDir(zB);let i=he.join(zB,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(he.join(n,"node_modules"))}),XB.pack(n,o).pipe(He.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=He.readFileSync(i,{encoding:"base64"});return await He.remove(i),{project:s,payload:c}}a(yre,"packageComponent");async function Ire(e){e.project&&(e.project=he.parse(e.project).name);let t=Rn.deployComponentValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,payload:n,package:i}=e;if(It.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(n){o=he.join(r,s),i="file:"+o,await He.ensureDir(o);let f=pre.from(Buffer.from(n,"base64"));await new Promise((h,S)=>{f.pipe(XB.extract(o,{finish:h})).on("error",S)});let E=await He.readdir(o);E.length===1&&E[0]==="package"&&(await He.copy(he.join(o,"package"),o),await He.remove(he.join(o,"package")))}if(Kl.updateConfigValue(`${s}_package`,i,void 0,!1,!1,!0),!n){await hre();let f=ZB.get(mre.CONFIG_PARAMS.ROOTPATH);o=he.join(f,"node_modules",s)}let c=new Map;c.isWorker=!0;let u=(XE(),te(zE)),_;u.setErrorReporter(f=>_=f);let l=Ere(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return It.info("Installed component"),`Successfully deployed: ${s}`}a(Ire,"deployComponent");async function wre(){let e=Kl.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{let u=await He.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=he.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await He.stat(d),E={name:he.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c},"walk_dir"),s=await r(dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{name:dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT).split(he.sep).slice(-1).pop(),entries:t});for(let o of s.entries)if(o.package){let c=await r(he.join(dt.get(qe.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(XE(),te(zE)).component_errors;for(let o of t){let c=i.get(o.name);c?o.error=i.get(o.name):c===void 0&&(o.error="The component has not been loaded yet (may need a restart)")}return s}a(wre,"getComponents");async function Cre(e){let t=Rn.getComponentFileValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);let s=Kl.getConfigObj()[e.project]||e.project==="harperdb"?he.join(ZB.get(qe.CONFIG_PARAMS.ROOTPATH),"node_modules"):dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{return await He.readFile(he.join(s,e.project,e.file),n)}catch(i){throw i.code===qe.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${he.join(e.project,e.file)}'`):i}}a(Cre,"getComponentFile");async function Lre(e){let t=Rn.setComponentFileValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=he.join(dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await He.ensureFile(s),await He.outputFile(s,e.payload,r)):await He.ensureDir(s),"Successfully set component: "+e.file}a(Lre,"setComponentFile");async function Dre(e){let t=Rn.dropComponentFileValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);let r=e.file?he.join(e.project,e.file):e.project,s=he.join(dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),r);return await He.pathExists(s)&&await He.remove(s),Kl.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(Dre,"dropComponent");eH.exports={customFunctionsStatus:Tre,getCustomFunctions:gre,getCustomFunction:Rre,setCustomFunction:Are,dropCustomFunction:Ore,addComponent:Nre,dropCustomFunctionProject:bre,packageComponent:yre,deployComponent:Ire,getComponents:wre,getComponentFile:Cre,setComponentFile:Lre,dropComponent:Dre}});var MR=T((SRe,rH)=>{"use strict";var An=require("joi"),tH=Ve();rH.exports={readTransactionLogValidator:Pre,deleteTransactionLogsBeforeValidator:Mre};function Pre(e){let t=An.object({schema:An.string().required(),table:An.string().required(),from:An.date().timestamp(),to:An.date().timestamp(),limit:An.number().min(1)});return tH.validateBySchema(e,t)}a(Pre,"readTransactionLogValidator");function Mre(e){let t=An.object({schema:An.string().required(),table:An.string().required(),timestamp:An.date().timestamp().required()});return tH.validateBySchema(e,t)}a(Mre,"deleteTransactionLogsBeforeValidator")});var eh=T((gRe,aH)=>{"use strict";var UR=A(),ZE=st(),sH=G(),nH=Q(),iH=Kn(),{handleHDBError:mc,hdb_errors:Ure}=Z(),{HTTP_STATUS_CODES:pc}=Ure,{readTransactionLogValidator:vre,deleteTransactionLogsBeforeValidator:Bre}=MR(),oH="This operation relies on clustering and cannot run with it disable.",Hre="Logs successfully deleted from transaction log.",qre="All logs successfully deleted from transaction log.";aH.exports={readTransactionLog:Gre,deleteTransactionLogsBefore:Fre};async function*Gre(e){let t=vre(e);if(t)throw mc(t,t.message,pc.BAD_REQUEST,void 0,void 0,!0);if(!nH.get(UR.CONFIG_PARAMS.CLUSTERING_ENABLED))throw mc(new Error,oH,pc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=sH.checkSchemaTableExist(r,s);if(n)throw mc(new Error,n,pc.NOT_FOUND,void 0,void 0,!0);let i=iH.createNatsTableStreamName(r,s),o=await ZE.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let u=Math.floor(c?.nats_timestamp/1e6);if(e.to&&u>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===UR.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(Gre,"readTransactionLog");async function Fre(e){let t=Bre(e);if(t)throw mc(t,t.message,pc.BAD_REQUEST,void 0,void 0,!0);if(!nH.get(UR.CONFIG_PARAMS.CLUSTERING_ENABLED))throw mc(new Error,oH,pc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=sH.checkSchemaTableExist(r,s);if(i)throw mc(new Error,i,pc.NOT_FOUND,void 0,void 0,!0);let o=iH.createNatsTableStreamName(r,s),{jsm:c}=await ZE.getNATSReferences(),u=await ZE.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=Hre,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=qre):d=(await ZE.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(Fre,"deleteTransactionLogsBefore")});var uH=T((ARe,cH)=>{"use strict";var vR=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};cH.exports=vR});var _H=T((NRe,lH)=>{"use strict";var BR=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};lH.exports=BR});var qR=T((yRe,fH)=>{"use strict";var dH=uH(),xre=_H(),{HDB_ERROR_MSGS:kre}=Mr(),HR=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=kre.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new dH(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new xre(c,n[c]);i.push(u)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new dH(r,s,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};fH.exports=HR});var nh=T((wRe,CH)=>{"use strict";var GR=dr(),th=_r(),hs=Wf(),jl=Mi(),FR=Uo(),$re=ug(),Vre=IM(),Jl=Er(),rh=Xf(),Rt=U(),Yre=gg(),Kre=bl(),Wre=Zg(),Qre=hE(),jre=pE(),Jre=eR(),zre=gE(),Xre=AE(),xR=NE(),ni=G(),Zre=Ov(),kR=yE(),mH=Qo(),Es=A(),pH=AB(),ese=zn(),SH=Rl(),TH=(kE(),te(xl)),gH=rt(),Qr=JE(),tse=require("alasql"),RH=eh(),AH=WE(),OH=qR(),{handleHDBError:br,hdb_errors:NH}=Z(),{HDB_ERROR_MSGS:Ft,HTTP_STATUS_CODES:Wl}=NH,H=new Map,bH="delete",Xi="insert",ii="read",Xo="update",Ql="describe",EH=jl.describeSchema.name,hH=jl.describeTable.name,yH={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},rse="catchup",sse="handleGetJob",nse="handleGetJobsByStartDate",sh={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},ise=[hs.createTable.name,hs.createAttribute.name,hs.dropTable.name,hs.dropAttribute.name],IH={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},x=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};H.set(GR.insert.name,new x(!1,[Xi]));H.set(GR.update.name,new x(!1,[Xo]));H.set(GR.upsert.name,new x(!1,[Xi,Xo]));H.set(th.searchByConditions.name,new x(!1,[ii]));H.set(th.searchByHash.name,new x(!1,[ii]));H.set(th.searchByValue.name,new x(!1,[ii]));H.set(th.search.name,new x(!1,[ii]));H.set(hs.createSchema.name,new x(!0,[]));H.set(hs.createTable.name,new x(!0,[]));H.set(hs.createAttribute.name,new x(!1,[Xi]));H.set(hs.dropSchema.name,new x(!0,[]));H.set(hs.dropTable.name,new x(!0,[]));H.set(hs.dropAttribute.name,new x(!0,[]));H.set(jl.describeSchema.name,new x(!1,[ii]));H.set(jl.describeTable.name,new x(!1,[ii]));H.set(FR.deleteRecord.name,new x(!1,[bH]));H.set(Jl.addUser.name,new x(!0,[]));H.set(Jl.alterUser.name,new x(!0,[]));H.set(Jl.dropUser.name,new x(!0,[]));H.set(Jl.listUsersExternal.name,new x(!0,[]));H.set(rh.listRoles.name,new x(!0,[]));H.set(rh.addRole.name,new x(!0,[]));H.set(rh.alterRole.name,new x(!0,[]));H.set(rh.dropRole.name,new x(!0,[]));H.set(Yre.name,new x(!0,[]));H.set(Kre.name,new x(!0,[]));H.set(Wre.name,new x(!0,[]));H.set(Qre.name,new x(!0,[]));H.set(jre.name,new x(!0,[]));H.set(Jre.name,new x(!0,[]));H.set(xR.setRoutes.name,new x(!0,[]));H.set(xR.getRoutes.name,new x(!0,[]));H.set(xR.deleteRoutes.name,new x(!0,[]));H.set(gH.setConfiguration.name,new x(!0,[]));H.set(zre.clusterStatus.name,new x(!0,[]));H.set(Xre.name,new x(!0,[]));H.set(kR.getFingerprint.name,new x(!0,[]));H.set(kR.setLicense.name,new x(!0,[]));H.set(FR.deleteFilesBefore.name,new x(!0,[]));H.set(FR.deleteAuditLogsBefore.name,new x(!0,[]));H.set(mH.restart.name,new x(!0,[]));H.set(mH.restartService.name,new x(!0,[]));H.set($re.name,new x(!0,[]));H.set(Vre.name,new x(!0,[ii]));H.set(ese.systemInformation.name,new x(!0,[]));H.set(gH.getConfiguration.name,new x(!0,[]));H.set(RH.readTransactionLog.name,new x(!0,[]));H.set(RH.deleteTransactionLogsBefore.name,new x(!0,[]));H.set(AH.installModules.name,new x(!0,[]));H.set(AH.auditModules.name,new x(!0,[]));H.set(SH.createTokens.name,new x(!1,[]));H.set(SH.refreshOperationToken.name,new x(!1,[]));H.set(TH.login.name,new x(!1,[]));H.set(TH.logout.name,new x(!1,[]));H.set(Qr.customFunctionsStatus.name,new x(!0,[]));H.set(Qr.getCustomFunctions.name,new x(!0,[]));H.set(Qr.getComponents.name,new x(!0,[]));H.set(Qr.getComponentFile.name,new x(!0,[]));H.set(Qr.setComponentFile.name,new x(!0,[]));H.set(Qr.dropComponent.name,new x(!0,[]));H.set(Qr.getCustomFunction.name,new x(!0,[]));H.set(Qr.setCustomFunction.name,new x(!0,[]));H.set(Qr.dropCustomFunction.name,new x(!0,[]));H.set(Qr.addComponent.name,new x(!0,[]));H.set(Qr.dropCustomFunctionProject.name,new x(!0,[]));H.set(Qr.packageComponent.name,new x(!0,[]));H.set(Qr.deployComponent.name,new x(!0,[]));H.set(kR.getRegistrationInfo.name,new x(!1,[]));H.set(Jl.userInfo.name,new x(!1,[]));H.set(jl.describeAll.name,new x(!1,[]));H.set(sse,new x(!1,[]));H.set(nse,new x(!0,[]));H.set(rse,new x(!0,[]));H.set(sh.CSV_DATA_LOAD,new x(!1,[Xi,Xo]));H.set(sh.CSV_URL_LOAD,new x(!1,[Xi,Xo]));H.set(sh.CSV_FILE_LOAD,new x(!1,[Xi,Xo]));H.set(sh.IMPORT_FROM_S3,new x(!1,[Xi,Xo]));H.set(IH.EXPORT_TO_S3,new x(!0,[]));H.set(IH.EXPORT_LOCAL,new x(!0,[]));H.set(Es.VALID_SQL_OPS_ENUM.DELETE,new x(!1,[bH]));H.set(Es.VALID_SQL_OPS_ENUM.SELECT,new x(!1,[ii]));H.set(Es.VALID_SQL_OPS_ENUM.INSERT,new x(!1,[Xi]));H.set(Es.VALID_SQL_OPS_ENUM.UPDATE,new x(!1,[Xo]));CH.exports={verifyPerms:ase,verifyPermsAst:ose,verifyBulkLoadAttributePerms:use};function ose(e,t,r){if(ni.isEmptyOrZeroLength(e))throw Rt.info("verify_perms_ast has an empty user parameter"),br(new Error);if(ni.isEmptyOrZeroLength(t))throw Rt.info("verify_perms_ast has an empty user parameter"),br(new Error);if(ni.isEmptyOrZeroLength(r))throw Rt.info("verify_perms_ast has a null operation parameter"),br(new Error);try{let s=new OH,n=new Zre(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw Rt.info("No schemas defined in verifyPermsAst(), will not continue."),br(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&yH[r])throw br(new Error,Ft.DROP_SYSTEM,Wl.FORBIDDEN);if(c&&!u)return null;let _=pH.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof tse.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=n.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let l=wH(t,r,o,s);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=n.getAttributesBySchemaTableName(f,d[E]),S=VR(t.role.permission,f,d[E]);$R(h,S,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw br(s)}}a(ose,"verifyPermsAst");function ase(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Rt.info("null required parameter in verifyPerms"),br(new Error,Ft.DEFAULT_INVALID_REQUEST,Wl.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new OH;if(ni.isEmptyOrZeroLength(e.hdb_user.role)||ni.isEmptyOrZeroLength(e.hdb_user.role.permission))return Rt.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Ft.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,l=o.has(Es.SYSTEM_SCHEMA_NAME)||n===Es.SYSTEM_SCHEMA_NAME;if(l&&yH[r])throw br(new Error,Ft.DROP_SYSTEM,Wl.FORBIDDEN);if(u&&!l||_===!0&&(r===hs.createSchema.name||r===hs.dropSchema.name))return null;if(ise.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let d=pH.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===EH||r===hH){if(n===Es.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ft.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===EH&&(!d[n]||!d[n][Ql]))return c.handleInvalidItem(Ft.SCHEMA_NOT_FOUND(n));if(r===hH&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][Ql]))return c.handleInvalidItem(Ft.TABLE_NOT_FOUND(n,i))}}let f=wH(e.hdb_user,r,o,c,s);if(f)return f;if(H.get(r)&&H.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&Es.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let S=[],m=d[n].tables[i];m[Es.PERMS_CRUD_ENUM.READ]&&(m.attribute_permissions.length>0?m.attribute_permissions.filter(R=>R[Es.PERMS_CRUD_ENUM.READ]).forEach(R=>{S.push(R.attribute_name)}):S=global.hdb_schema[n][i].attributes.map(g=>g.attribute),e.get_attributes=S)}let E=cse(e),h=VR(e.hdb_user.role.permission,n,i);return $R(E,h,r,i,n,c,s),c.getPermsResponse()}a(ase,"verifyPerms");function wH(e,t,r,s,n){if(ni.arrayHasEmptyValues([e,t,r]))throw Rt.info("hasPermissions has an invalid parameter"),br(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||H.get(t).requires_su))return null;if(!H.get(t))throw Rt.info(`operation ${t} not found.`),br(new Error,Ft.OP_NOT_FOUND(t),Wl.BAD_REQUEST);if(H.get(t)&&H.get(t).requires_su)return Rt.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Ft.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][Ql]===!1){s.addInvalidItem(Ft.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Ft.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[Ql]===!1)s.addInvalidItem(Ft.TABLE_NOT_FOUND(u,l));else try{let f=[],E=H.get(t).perms;!ni.isEmpty(n)&&E.includes(n)&&(E=[n]);for(let h=0;h<E.length;h++){let S=E[h],m=d[S];(m==null||m===!1)&&(Rt.info(`Required ${S} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),f.push(S))}f.length>0&&s.addUnauthorizedTable(u,l,f)}catch(f){let E=Ft.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw Rt.error(E),Rt.error(f),br(NH.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(wH,"hasPermissions");function $R(e,t,r,s,n,i,o){if(!e||!t)throw Rt.info("no attributes specified in checkAttributePerms."),br(new Error);let c=H.get(r).perms;if(!c||c==="")throw Rt.info(`no permissions found for ${r} in checkAttributePerms().`),br(new Error);if(ni.isEmptyOrZeroLength(t))return Rt.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let l of e){let d=t.get(l);if(d){if(d[Ql]===!1){i.addInvalidItem(Ft.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let f of c){if(Es.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==ii)throw br(new Error,Ft.SYSTEM_TIMESTAMP_PERMS_ERR,Wl.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(Ft.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a($R,"checkAttributePerms");function cse(e){let t=new Set;try{if(e.action)return t;if(e.operation===Es.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){Rt.info(r)}return t}a(cse,"getRecordAttributes");function VR(e,t,r){let s=new Map;if(ni.isEmpty(e))return Rt.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{Rt.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(VR,"getAttributePermissions");function use(e,t,r,s,n,i,o){let c=new Set(i),u=VR(e,s,n);$R(c,u,t,n,s,o,r)}a(use,"verifyBulkLoadAttributePerms")});var oh=T((LRe,UH)=>{"use strict";UH.exports={evaluateSQL:Ase,processAST:MH,convertSQLToAST:PH,checkASTPermissions:DH};var lse=dr(),LH=require("util"),_se=LH.callbackify(lse.insert),dse=_r().search,fse=GP().update,Ese=LH.callbackify(fse),hse=xP().convertDelete,Zi=require("alasql"),mse=nh(),ih=U(),pse=Vd(),Sse=G(),zl=A(),{hdb_errors:Tse,handleHDBError:YR}=Z(),{HTTP_STATUS_CODES:KR}=Tse;pse(Zi);var gse=403,Rse="There was a problem performing this insert. Please check the logs and try again.",WR=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Ase(e,t){let r=e.parsed_sql_object;if(!r){r=PH(e.sql);let s,n=r.ast.statements[0];if(n instanceof Zi.yy.Insert?s=n.into.databaseid:n instanceof Zi.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof Zi.yy.Update||n instanceof Zi.yy.Delete?s=n.table.databaseid:ih.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Zi.yy.Select)&&Sse.isEmptyOrZeroLength(s))return t("No schema specified",null)}MH(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(Ase,"evaluateSQL");function DH(e,t){let r;try{r=mse.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(DH,"checkASTPermissions");function PH(e){let t=new WR;if(!e)throw YR(new Error,"The 'sql' parameter is missing from the request body",KR.BAD_REQUEST);try{let r=e.trim(),s=Zi.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
|
|
16
|
-
`);throw s[1]?YR(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,KR.BAD_REQUEST):YR(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",KR.BAD_REQUEST)}return t}a(PH,"convertSQLToAST");function MH(e,t,r){try{let s=Ose;if(!e.bypass_auth&&!t.permissions_checked){let i=DH(e,t);if(i&&i.length>0)return r(gse,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case zl.VALID_SQL_OPS_ENUM.SELECT:s=dse,n=t.ast.statements[0];break;case zl.VALID_SQL_OPS_ENUM.INSERT:s=Nse;break;case zl.VALID_SQL_OPS_ENUM.UPDATE:s=Ese;break;case zl.VALID_SQL_OPS_ENUM.DELETE:s=hse;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(MH,"processAST");function Ose(e,t){ih.info(e),t("unknown sql statement")}a(Ose,"nullFunction");function Nse({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=bse(i,e.values)}catch(o){return r(o)}_se(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){ih.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(Nse,"convertInsert");function bse(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=Zi.compile(`SELECT ${n.toString()} AS [${zl.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw ih.error(r),new Error(Rse)}}a(bse,"createDataObjects")});var QR=T((PRe,BH)=>{"use strict";var{S3:yse,GetObjectCommand:Ise}=require("@aws-sdk/client-s3");BH.exports={getFileStreamFromS3:wse,getS3AuthObj:vH};async function wse(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await vH(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Ise(r))).Body}a(wse,"getFileStreamFromS3");function vH(e,t,r){return new yse({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(vH,"getS3AuthObj")});var ah=T((URe,KH)=>{"use strict";var GH=_r(),Cse=oh(),Lse=QR(),{AsyncParser:Dse,Transform:Pse}=require("json2csv"),Zl=require("stream"),jr=G(),jR=require("fs-extra"),Mse=require("path"),ms=U(),{promisify:FH}=require("util"),Xl=G(),{handleHDBError:ft,hdb_errors:Use}=Z(),{HDB_ERROR_MSGS:yr,HTTP_STATUS_CODES:Et}=Use,{streamAsJSON:vse}=QT(),{Upload:Bse}=require("@aws-sdk/lib-storage"),HH=["search_by_value","search_by_hash","sql"],qH=["json","csv"],xH="json",kH="csv",Hse="Successfully exported JSON locally.",qse="Successfully exported CSV locally.",Gse=1e3,Fse=GH.searchByHash,xse=GH.searchByValue,kse=FH(Cse.evaluateSQL),$se=FH(Zl.finished);KH.exports={export_to_s3:Wse,export_local:Vse,toCsvStream:$H};async function Vse(e){ms.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=VH(e);if(!jr.isEmpty(t))throw ms.error(t),ft(new Error,t,Et.BAD_REQUEST,void 0,void 0,!0);if(jr.isEmpty(e.path))throw ms.error(yr.MISSING_VALUE("path")),ft(new Error,yr.MISSING_VALUE("path"),Et.BAD_REQUEST,void 0,void 0,!0);let r=(jr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(Mse.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=jr.buildFolderPath(e.path,r);await Yse(e.path);let n=await YH(e);return await Kse(s,e.format,n)}a(Vse,"export_local");async function Yse(e){if(ms.trace("in confirmPath"),jr.isEmptyOrZeroLength(e))throw ft(new Error,`Invalid path: ${e}`,Et.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await jR.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,ms.error(s),ft(new Error,s,Et.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw ms.error(r),ft(new Error,r,Et.BAD_REQUEST,void 0,void 0,!0)}return!0}a(Yse,"confirmPath");async function Kse(e,t,r){if(ms.trace("in saveToLocal"),Xl.isEmptyOrZeroLength(e))throw ft(new Error,yr.INVALID_VALUE("file_path"),Et.BAD_REQUEST,void 0,void 0,!0);if(Xl.isEmptyOrZeroLength(t))throw ft(new Error,yr.INVALID_VALUE("Source format"),Et.BAD_REQUEST,void 0,void 0,!0);if(Xl.isEmpty(r))throw ft(new Error,yr.NOT_FOUND("Data"),Et.BAD_REQUEST,void 0,void 0,!0);if(t===xH){let s=jR.createWriteStream(e);return vse(r).pipe(s),await $se(s),{message:Hse,path:e}}else if(t===kH){let s=jR.createWriteStream(e),n=Zl.Readable.from(r),i={},o={objectMode:!0};return await new Dse(i,o).fromInput(n).toOutput(s).promise(!1),{message:qse,path:e}}throw ft(new Error,yr.INVALID_VALUE("format"),Et.BAD_REQUEST)}a(Kse,"saveToLocal");async function Wse(e){if(!e.s3||Object.keys(e.s3).length===0)throw ft(new Error,yr.MISSING_VALUE("S3 object"),Et.BAD_REQUEST);if(jr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw ft(new Error,yr.MISSING_VALUE("aws_access_key_id"),Et.BAD_REQUEST);if(jr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw ft(new Error,yr.MISSING_VALUE("aws_secret_access_key"),Et.BAD_REQUEST);if(jr.isEmptyOrZeroLength(e.s3.bucket))throw ft(new Error,yr.MISSING_VALUE("bucket"),Et.BAD_REQUEST);if(jr.isEmptyOrZeroLength(e.s3.key))throw ft(new Error,yr.MISSING_VALUE("key"),Et.BAD_REQUEST);if(jr.isEmptyOrZeroLength(e.s3.region))throw ft(new Error,yr.MISSING_VALUE("region"),Et.BAD_REQUEST);let t=VH(e);if(!jr.isEmpty(t))throw ft(new Error,t,Et.BAD_REQUEST);ms.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await YH(e)}catch(u){throw ms.error(u),u}let s,n=await Lse.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Zl.PassThrough;if(e.format===kH){i=e.s3.key+".csv";let u=$H(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===xH){i=e.s3.key+".json";let u=new Zl.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";l+=E,d!==0&&d%Gse===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw ft(new Error,yr.INVALID_VALUE("format"),Et.BAD_REQUEST);return new Bse({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(Wse,"export_to_s3");function $H(e){let t=Zl.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new Pse(r,s);return t.pipe(n)}a($H,"toCsvStream");function VH(e){if(ms.trace("in exportCoreValidation"),jr.isEmpty(e.format))return"format missing";if(qH.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${qH.join(", ")}`;let t=e.search_operation.operation;if(jr.isEmpty(t))return"search_operation.operation missing";if(HH.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${HH.join(", ")}`}a(VH,"exportCoreValidation");async function YH(e){ms.trace("in getRecords");let t,r;if(Xl.isEmpty(e.search_operation)||Xl.isEmptyOrZeroLength(e.search_operation.operation))throw ft(new Error,yr.INVALID_VALUE("Search operation"),Et.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=xse;break;case"search_by_hash":t=Fse;break;case"sql":t=kse;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,ms.error(r),ft(new Error,r,Et.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(YH,"getRecords")});var e0={};Fe(e0,{contentTypes:()=>zR,findBestSerializer:()=>lh,getDeserializer:()=>Sc,registerContentHandlers:()=>XR,serialize:()=>_h,serializeMessage:()=>zi});function Qse(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function XR(e){e.register(Jse,{serializers:[{regex:/^application\/json$/,serializer:ch.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new Zo.EncoderStream(e_).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?uh.Readable.from((0,On.encodeIter)(t,e_)):(0,On.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,JR.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,On.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Zo.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function lh(e){let r=(e.headers.asObject||e.headers).accept,s,n=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let u of c){let[_,...l]=u.split(/\s*;\s*/),d=1,f={q:1};for(let h of l){let S=h.indexOf("=");f[h.substring(0,S)]=h.substring(S+1)}d=+f.q;let E=xt.get(_);if(E){let h=(E.q||1)*d;h>n&&(s=E,i=E.type||_,n=h,o=f)}}if(!s){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(xt.keys()).join(", "))}};s=xt.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function _h(e,t,r){let s=QH&&t.headers.asObject?.["accept-encoding"]?.includes("br"),n;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),n=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),n=e;else{let i=lh(t);if(r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e);return s&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,oi.createBrotliCompress)({params:{[oi.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?oi.constants.BROTLI_MODE_TEXT:oi.constants.BROTLI_MODE_GENERIC,[oi.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e)}return s&&n?.length>QH?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,oi.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function zi(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return JSON.stringify(e);let r=t.serialize;if(r)return r(e);let s=lh(t);return r=t.serialize=s.serializer.serialize,r(e)}function zse(e){return new Promise((t,r)=>{let s=[];e.on("data",n=>s.push(n)),e.on("end",()=>t(Buffer.concat(s))),e.on("error",r)})}function Sc(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=xt.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=xt.get(e)?.deserialize||jH(e,s);return o=>zse(o).then(i)}return e&&xt.get(e)?.deserialize||jH(e,s)}function jH(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return s=>({contentType:e,data:s.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return JSON.parse(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function Xse(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let s=r.next();return s.then?s.then(n=>({value:t(n.value),done:n.done})):{value:t(s.value),done:s.done}},return(s){return r.return(s)},throw(s){return r.throw(s)}}}}}var ch,JR,On,Zo,oi,uh,JH,zH,XH,e_,xt,zR,WH,ZH,jse,Jse,QH,_c=Re(()=>{ch=P(QT()),JR=P(ah()),On=require("msgpackr"),Zo=require("cbor-x"),oi=require("zlib"),uh=require("stream");Pr();JH=require("../index"),zH=P(Q()),XH=P(A()),e_={useRecords:!1,useToJSON:!0},xt=new Map,zR=xt;Tt.contentTypes=zR;(0,JH._assignPackageExport)("contentTypes",zR);xt.set("application/json",{serializeStream:ch.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});WH=new Zo.Encoder(e_);xt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Zo.EncoderStream(e_).end(e)},serialize:WH.encode,deserialize:WH.decode,q:1});xt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?uh.Readable.from((0,On.encodeIter)(e,e_)):(0,On.pack)(e)},serialize:On.pack,deserialize:On.unpack,q:.9});xt.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,JR.toCsvStream)(e)},q:.1});xt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});xt.set("text/event-stream",{serializeStream:function(e){return uh.Readable.from(Xse(e,this.serialize))},serialize:function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
|
|
14
|
+
`,""):null}catch(f){f.stderr?i[u].npm_error=KB(f.stderr):i[u].npm_error=f.message;continue}try{i[u].npm_output=JSON.parse(l)}catch{i[u].npm_output=l}try{i[u].npm_error=JSON.parse(d)}catch{i[u].npm_error=d}}return hc.info(`finished installModules with response ${i}`),i}a(_re,"installModules");function KB(e){let t='"error": {',r=e.indexOf('"error": {'),s=e.indexOf(`}
|
|
15
|
+
`);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(KB,"parseNPMStdErr");async function dre(e){hc.info(`starting auditModules for request: ${e}`);let t=QB(e);if(t)throw fc(t,t.message,Ec.BAD_REQUEST);let{projects:r}=e;await WE(),await WB(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=KE.join(DR,o);s[o]={npm_output:null,npm_error:null};try{let u=await Yl("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=KB(u.stderr)}}return hc.info(`finished auditModules with response ${s}`),s}a(dre,"auditModules");async function WE(){try{return await Yl("npm -v"),!0}catch{throw fc(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Ec.BAD_REQUEST,void 0,void 0,!0)}}a(WE,"checkNPMInstalled");async function WB(e){if(!Array.isArray(e)||e.length===0)throw fc(new Error,"projects argument must be an array with at least 1 element",Ec.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=KE.join(DR,i.toString());if(!await $B.pathExists(o)){t.push(i);continue}let u=KE.join(o,"package.json");await $B.pathExists(u)||r.push(i)}if(t.length>0)throw fc(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Ec.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw fc(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Ec.BAD_REQUEST,void 0,void 0,!0)}a(WB,"checkProjectPaths");function QB(e){let t=YE.object({projects:YE.array().min(1).items(YE.string()).required(),dry_run:YE.boolean().default(!1)});return ore.validateBySchema(e,t)}a(QB,"modulesValidator")});var MR=T((pRe,eH)=>{"use strict";var mc=require("fs-extra"),PR=require("path"),jE=v(),zB=G(),zE=R(),ZB=j(),fre=rt();eH.exports=Ere;async function Ere(){let e=hre(),t=ZB.get(zE.CONFIG_PARAMS.ROOTPATH),r=PR.join(t,"package.json"),s={dependencies:{harperdb:"file:"+zE.PACKAGE_ROOT}},n=PR.join(t,"node_modules");await mc.ensureDir(n);let i,o=!0,c=!1;try{i=await mc.readJson(r)}catch(u){if(zB.isEmptyOrZeroLength(e))return;if(u.code!==zE.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!zB.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await JB(_);s.dependencies[u]=l+_}if(!o){jE.notify("Installing components"),await XB(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await JB(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(jE.notify("Removing component",u),c=!0);c&&(jE.notify("Updating components."),await XB(r,s,i))}a(Ere,"installComponents");function hre(){let e=fre.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(hre,"getComponentsConfig");async function JB(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":PR.extname(e)||await mc.pathExists(e)?"file:":"github:"}a(JB,"getPkgPrefix");async function XB(e,t,r){jE.trace("npm installing components package.json",t),await mc.writeFile(e,JSON.stringify(t,null," "));try{await QE().installAllRootModules(ZB.get(zE.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await mc.writeFile(e,JSON.stringify(r,null," ")):await mc.unlink(e),s}}a(XB,"installPackages")});var JE=T((gRe,nH)=>{"use strict";var He=require("fs-extra"),UR=require("fast-glob"),he=require("path"),rH=require("tar-fs"),TRe=require("uuid").v4,vR=require("normalize-path"),gn=kB(),It=v(),qe=R(),dt=j(),Kl=rt(),mre=G(),{PACKAGE_ROOT:pre}=R(),{handleHDBError:wt,hdb_errors:Sre}=Z(),{basename:Tre}=require("path"),gre=MR(),sH=j(),Rre=R(),{Readable:Are}=require("stream"),{HDB_ERROR_MSGS:Jo,HTTP_STATUS_CODES:Ct}=Sre,Ore=he.join(pre,"application-template"),tH=he.join(dt.get(qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function Nre(){It.trace("getting custom api status");let e={};try{e={port:dt.get(qe.CONFIG_PARAMS.HTTP_PORT),directory:dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw wt(new Error,Jo.FUNCTION_STATUS,Ct.INTERNAL_SERVER_ERROR,It.ERR,t)}return e}a(Nre,"customFunctionsStatus");function bre(){It.trace("getting custom api endpoints");let e={},t=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT);try{UR.sync(vR(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:UR.sync(vR(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:UR.sync(vR(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw wt(new Error,Jo.GET_FUNCTIONS,Ct.INTERNAL_SERVER_ERROR,It.ERR,r)}return e}a(bre,"getCustomFunctions");function yre(e){e.project&&(e.project=he.parse(e.project).name),e.file&&(e.file=he.parse(e.file).name);let t=gn.getDropCustomFunctionValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);It.trace("getting custom api endpoint file content");let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e,o=he.join(r,s,n,i+".js");try{return He.readFileSync(o,{encoding:"utf8"})}catch(c){throw wt(new Error,Jo.GET_FUNCTION,Ct.INTERNAL_SERVER_ERROR,It.ERR,c)}}a(yre,"getCustomFunction");function Ire(e){e.project&&(e.project=he.parse(e.project).name),e.file&&(e.file=he.parse(e.file).name);let t=gn.setCustomFunctionValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);It.trace("setting custom function file content");let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i,function_content:o}=e;try{return He.outputFileSync(he.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw wt(new Error,Jo.SET_FUNCTION,Ct.INTERNAL_SERVER_ERROR,It.ERR,c)}}a(Ire,"setCustomFunction");function wre(e){e.project&&(e.project=he.parse(e.project).name),e.file&&(e.file=he.parse(e.file).name);let t=gn.getDropCustomFunctionValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);It.trace("dropping custom function file");let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e;try{return He.unlinkSync(he.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw wt(new Error,Jo.DROP_FUNCTION,Ct.INTERNAL_SERVER_ERROR,It.ERR,o)}}a(wre,"dropCustomFunction");function Cre(e){e.project&&(e.project=he.parse(e.project).name);let t=gn.addComponentValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);It.trace("adding component");let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;try{let n=he.join(r,s);return He.mkdirSync(n,{recursive:!0}),He.copySync(Ore,n),`Successfully added project: ${s}`}catch(n){throw wt(new Error,Jo.ADD_FUNCTION,Ct.INTERNAL_SERVER_ERROR,It.ERR,n)}}a(Cre,"addComponent");function Lre(e){e.project&&(e.project=he.parse(e.project).name);let t=gn.dropCustomFunctionProjectValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);It.trace("dropping custom function project");let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e,n=dt.get(qe.CONFIG_PARAMS.APPS);if(!mre.isEmptyOrZeroLength(n)){let i=!1;for(let[o,c]of n.entries())if(c.name===s){n.splice(o,1),i=!0;break}if(i)return Kl.updateConfigValue(qe.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=he.join(r,s);return He.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw wt(new Error,Jo.DROP_FUNCTION_PROJECT,Ct.INTERNAL_SERVER_ERROR,It.ERR,i)}}a(Lre,"dropCustomFunctionProject");async function Dre(e){e.project&&(e.project=he.parse(e.project).name);let t=gn.packageComponentValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;It.trace("packaging component",s);let n;try{n=await He.realpath(he.join(r,s))}catch(u){if(u.code!==qe.NODE_ERROR_CODES.ENOENT)throw u;try{n=await He.realpath(he.join(dt.get(qe.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(_){if(_.code===qe.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await He.ensureDir(tH);let i=he.join(tH,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(he.join(n,"node_modules"))}),rH.pack(n,o).pipe(He.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=He.readFileSync(i,{encoding:"base64"});return await He.remove(i),{project:s,payload:c}}a(Dre,"packageComponent");async function Pre(e){e.project&&(e.project=he.parse(e.project).name);let t=gn.deployComponentValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,payload:n,package:i}=e;if(It.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(n){o=he.join(r,s),i="file:"+o,await He.ensureDir(o);let f=Are.from(Buffer.from(n,"base64"));await new Promise((h,p)=>{f.pipe(rH.extract(o,{finish:h})).on("error",p)});let E=await He.readdir(o);E.length===1&&E[0]==="package"&&(await He.copy(he.join(o,"package"),o),await He.remove(he.join(o,"package")))}if(Kl.updateConfigValue(`${s}_package`,i,void 0,!1,!1,!0),!n){await gre();let f=sH.get(Rre.CONFIG_PARAMS.ROOTPATH);o=he.join(f,"node_modules",s)}let c=new Map;c.isWorker=!0;let u=(ZE(),te(XE)),_;u.setErrorReporter(f=>_=f);let l=Tre(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return It.info("Installed component"),`Successfully deployed: ${s}`}a(Pre,"deployComponent");async function Mre(){let e=Kl.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{let u=await He.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=he.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await He.stat(d),E={name:he.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c},"walk_dir"),s=await r(dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{name:dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT).split(he.sep).slice(-1).pop(),entries:t});for(let o of s.entries)if(o.package){let c=await r(he.join(dt.get(qe.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(ZE(),te(XE)).component_errors;for(let o of t){let c=i.get(o.name);c?o.error=i.get(o.name):c===void 0&&(o.error="The component has not been loaded yet (may need a restart)")}return s}a(Mre,"getComponents");async function Ure(e){let t=gn.getComponentFileValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);let s=Kl.getConfigObj()[e.project]||e.project==="harperdb"?he.join(sH.get(qe.CONFIG_PARAMS.ROOTPATH),"node_modules"):dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{return await He.readFile(he.join(s,e.project,e.file),n)}catch(i){throw i.code===qe.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${he.join(e.project,e.file)}'`):i}}a(Ure,"getComponentFile");async function vre(e){let t=gn.setComponentFileValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=he.join(dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await He.ensureFile(s),await He.outputFile(s,e.payload,r)):await He.ensureDir(s),"Successfully set component: "+e.file}a(vre,"setComponentFile");async function Bre(e){let t=gn.dropComponentFileValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);let r=e.file?he.join(e.project,e.file):e.project,s=he.join(dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),r);return await He.pathExists(s)&&await He.remove(s),Kl.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(Bre,"dropComponent");nH.exports={customFunctionsStatus:Nre,getCustomFunctions:bre,getCustomFunction:yre,setCustomFunction:Ire,dropCustomFunction:wre,addComponent:Cre,dropCustomFunctionProject:Lre,packageComponent:Dre,deployComponent:Pre,getComponents:Mre,getComponentFile:Ure,setComponentFile:vre,dropComponent:Bre}});var BR=T((ARe,oH)=>{"use strict";var Rn=require("joi"),iH=Ve();oH.exports={readTransactionLogValidator:Hre,deleteTransactionLogsBeforeValidator:qre};function Hre(e){let t=Rn.object({schema:Rn.string().required(),table:Rn.string().required(),from:Rn.date().timestamp(),to:Rn.date().timestamp(),limit:Rn.number().min(1)});return iH.validateBySchema(e,t)}a(Hre,"readTransactionLogValidator");function qre(e){let t=Rn.object({schema:Rn.string().required(),table:Rn.string().required(),timestamp:Rn.date().timestamp().required()});return iH.validateBySchema(e,t)}a(qre,"deleteTransactionLogsBeforeValidator")});var th=T((NRe,_H)=>{"use strict";var HR=R(),eh=st(),aH=G(),cH=j(),uH=Yn(),{handleHDBError:pc,hdb_errors:Gre}=Z(),{HTTP_STATUS_CODES:Sc}=Gre,{readTransactionLogValidator:Fre,deleteTransactionLogsBeforeValidator:xre}=BR(),lH="This operation relies on clustering and cannot run with it disable.",kre="Logs successfully deleted from transaction log.",$re="All logs successfully deleted from transaction log.";_H.exports={readTransactionLog:Vre,deleteTransactionLogsBefore:Yre};async function*Vre(e){let t=Fre(e);if(t)throw pc(t,t.message,Sc.BAD_REQUEST,void 0,void 0,!0);if(!cH.get(HR.CONFIG_PARAMS.CLUSTERING_ENABLED))throw pc(new Error,lH,Sc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=aH.checkSchemaTableExist(r,s);if(n)throw pc(new Error,n,Sc.NOT_FOUND,void 0,void 0,!0);let i=uH.createNatsTableStreamName(r,s),o=await eh.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let u=Math.floor(c?.nats_timestamp/1e6);if(e.to&&u>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===HR.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(Vre,"readTransactionLog");async function Yre(e){let t=xre(e);if(t)throw pc(t,t.message,Sc.BAD_REQUEST,void 0,void 0,!0);if(!cH.get(HR.CONFIG_PARAMS.CLUSTERING_ENABLED))throw pc(new Error,lH,Sc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=aH.checkSchemaTableExist(r,s);if(i)throw pc(new Error,i,Sc.NOT_FOUND,void 0,void 0,!0);let o=uH.createNatsTableStreamName(r,s),{jsm:c}=await eh.getNATSReferences(),u=await eh.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=kre,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=$re):d=(await eh.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(Yre,"deleteTransactionLogsBefore")});var fH=T((yRe,dH)=>{"use strict";var qR=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};dH.exports=qR});var hH=T((wRe,EH)=>{"use strict";var GR=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};EH.exports=GR});var xR=T((LRe,pH)=>{"use strict";var mH=fH(),Kre=hH(),{HDB_ERROR_MSGS:Wre}=Mr(),FR=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Wre.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new mH(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new Kre(c,n[c]);i.push(u)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new mH(r,s,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};pH.exports=FR});var ih=T((PRe,MH)=>{"use strict";var kR=dr(),rh=_r(),ms=Qf(),jl=Mi(),$R=Uo(),Qre=dg(),jre=DM(),zl=Er(),sh=Zf(),Rt=v(),zre=Og(),Jre=bl(),Xre=rR(),Zre=mE(),ese=SE(),tse=sR(),rse=RE(),sse=OE(),VR=bE(),si=G(),nse=Iv(),YR=IE(),gH=Qo(),hs=R(),RH=yB(),ise=zn(),AH=Rl(),OH=($E(),te(xl)),NH=rt(),Qr=JE(),ose=require("alasql"),bH=th(),yH=QE(),IH=xR(),{handleHDBError:br,hdb_errors:wH}=Z(),{HDB_ERROR_MSGS:Ft,HTTP_STATUS_CODES:Wl}=wH,H=new Map,CH="delete",Xi="insert",ni="read",Xo="update",Ql="describe",SH=jl.describeSchema.name,TH=jl.describeTable.name,LH={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},ase="catchup",cse="handleGetJob",use="handleGetJobsByStartDate",nh={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},lse=[ms.createTable.name,ms.createAttribute.name,ms.dropTable.name,ms.dropAttribute.name],DH={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},x=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};H.set(kR.insert.name,new x(!1,[Xi]));H.set(kR.update.name,new x(!1,[Xo]));H.set(kR.upsert.name,new x(!1,[Xi,Xo]));H.set(rh.searchByConditions.name,new x(!1,[ni]));H.set(rh.searchByHash.name,new x(!1,[ni]));H.set(rh.searchByValue.name,new x(!1,[ni]));H.set(rh.search.name,new x(!1,[ni]));H.set(ms.createSchema.name,new x(!0,[]));H.set(ms.createTable.name,new x(!0,[]));H.set(ms.createAttribute.name,new x(!1,[Xi]));H.set(ms.dropSchema.name,new x(!0,[]));H.set(ms.dropTable.name,new x(!0,[]));H.set(ms.dropAttribute.name,new x(!0,[]));H.set(jl.describeSchema.name,new x(!1,[ni]));H.set(jl.describeTable.name,new x(!1,[ni]));H.set($R.deleteRecord.name,new x(!1,[CH]));H.set(zl.addUser.name,new x(!0,[]));H.set(zl.alterUser.name,new x(!0,[]));H.set(zl.dropUser.name,new x(!0,[]));H.set(zl.listUsersExternal.name,new x(!0,[]));H.set(sh.listRoles.name,new x(!0,[]));H.set(sh.addRole.name,new x(!0,[]));H.set(sh.alterRole.name,new x(!0,[]));H.set(sh.dropRole.name,new x(!0,[]));H.set(zre.name,new x(!0,[]));H.set(Jre.name,new x(!0,[]));H.set(Xre.name,new x(!0,[]));H.set(Zre.name,new x(!0,[]));H.set(ese.name,new x(!0,[]));H.set(tse.name,new x(!0,[]));H.set(VR.setRoutes.name,new x(!0,[]));H.set(VR.getRoutes.name,new x(!0,[]));H.set(VR.deleteRoutes.name,new x(!0,[]));H.set(NH.setConfiguration.name,new x(!0,[]));H.set(rse.clusterStatus.name,new x(!0,[]));H.set(sse.name,new x(!0,[]));H.set(YR.getFingerprint.name,new x(!0,[]));H.set(YR.setLicense.name,new x(!0,[]));H.set($R.deleteFilesBefore.name,new x(!0,[]));H.set($R.deleteAuditLogsBefore.name,new x(!0,[]));H.set(gH.restart.name,new x(!0,[]));H.set(gH.restartService.name,new x(!0,[]));H.set(Qre.name,new x(!0,[]));H.set(jre.name,new x(!0,[ni]));H.set(ise.systemInformation.name,new x(!0,[]));H.set(NH.getConfiguration.name,new x(!0,[]));H.set(bH.readTransactionLog.name,new x(!0,[]));H.set(bH.deleteTransactionLogsBefore.name,new x(!0,[]));H.set(yH.installModules.name,new x(!0,[]));H.set(yH.auditModules.name,new x(!0,[]));H.set(AH.createTokens.name,new x(!1,[]));H.set(AH.refreshOperationToken.name,new x(!1,[]));H.set(OH.login.name,new x(!1,[]));H.set(OH.logout.name,new x(!1,[]));H.set(Qr.customFunctionsStatus.name,new x(!0,[]));H.set(Qr.getCustomFunctions.name,new x(!0,[]));H.set(Qr.getComponents.name,new x(!0,[]));H.set(Qr.getComponentFile.name,new x(!0,[]));H.set(Qr.setComponentFile.name,new x(!0,[]));H.set(Qr.dropComponent.name,new x(!0,[]));H.set(Qr.getCustomFunction.name,new x(!0,[]));H.set(Qr.setCustomFunction.name,new x(!0,[]));H.set(Qr.dropCustomFunction.name,new x(!0,[]));H.set(Qr.addComponent.name,new x(!0,[]));H.set(Qr.dropCustomFunctionProject.name,new x(!0,[]));H.set(Qr.packageComponent.name,new x(!0,[]));H.set(Qr.deployComponent.name,new x(!0,[]));H.set(YR.getRegistrationInfo.name,new x(!1,[]));H.set(zl.userInfo.name,new x(!1,[]));H.set(jl.describeAll.name,new x(!1,[]));H.set(cse,new x(!1,[]));H.set(use,new x(!0,[]));H.set(ase,new x(!0,[]));H.set(nh.CSV_DATA_LOAD,new x(!1,[Xi,Xo]));H.set(nh.CSV_URL_LOAD,new x(!1,[Xi,Xo]));H.set(nh.CSV_FILE_LOAD,new x(!1,[Xi,Xo]));H.set(nh.IMPORT_FROM_S3,new x(!1,[Xi,Xo]));H.set(DH.EXPORT_TO_S3,new x(!0,[]));H.set(DH.EXPORT_LOCAL,new x(!0,[]));H.set(hs.VALID_SQL_OPS_ENUM.DELETE,new x(!1,[CH]));H.set(hs.VALID_SQL_OPS_ENUM.SELECT,new x(!1,[ni]));H.set(hs.VALID_SQL_OPS_ENUM.INSERT,new x(!1,[Xi]));H.set(hs.VALID_SQL_OPS_ENUM.UPDATE,new x(!1,[Xo]));MH.exports={verifyPerms:dse,verifyPermsAst:_se,verifyBulkLoadAttributePerms:Ese};function _se(e,t,r){if(si.isEmptyOrZeroLength(e))throw Rt.info("verify_perms_ast has an empty user parameter"),br(new Error);if(si.isEmptyOrZeroLength(t))throw Rt.info("verify_perms_ast has an empty user parameter"),br(new Error);if(si.isEmptyOrZeroLength(r))throw Rt.info("verify_perms_ast has a null operation parameter"),br(new Error);try{let s=new IH,n=new nse(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw Rt.info("No schemas defined in verifyPermsAst(), will not continue."),br(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&LH[r])throw br(new Error,Ft.DROP_SYSTEM,Wl.FORBIDDEN);if(c&&!u)return null;let _=RH.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof ose.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=n.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let l=PH(t,r,o,s);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=n.getAttributesBySchemaTableName(f,d[E]),p=WR(t.role.permission,f,d[E]);KR(h,p,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw br(s)}}a(_se,"verifyPermsAst");function dse(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Rt.info("null required parameter in verifyPerms"),br(new Error,Ft.DEFAULT_INVALID_REQUEST,Wl.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new IH;if(si.isEmptyOrZeroLength(e.hdb_user.role)||si.isEmptyOrZeroLength(e.hdb_user.role.permission))return Rt.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Ft.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,l=o.has(hs.SYSTEM_SCHEMA_NAME)||n===hs.SYSTEM_SCHEMA_NAME;if(l&&LH[r])throw br(new Error,Ft.DROP_SYSTEM,Wl.FORBIDDEN);if(u&&!l||_===!0&&(r===ms.createSchema.name||r===ms.dropSchema.name))return null;if(lse.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let d=RH.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===SH||r===TH){if(n===hs.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ft.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===SH&&(!d[n]||!d[n][Ql]))return c.handleInvalidItem(Ft.SCHEMA_NOT_FOUND(n));if(r===TH&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][Ql]))return c.handleInvalidItem(Ft.TABLE_NOT_FOUND(n,i))}}let f=PH(e.hdb_user,r,o,c,s);if(f)return f;if(H.get(r)&&H.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&hs.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[n].tables[i];S[hs.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(g=>g[hs.PERMS_CRUD_ENUM.READ]).forEach(g=>{p.push(g.attribute_name)}):p=global.hdb_schema[n][i].attributes.map(A=>A.attribute),e.get_attributes=p)}let E=fse(e),h=WR(e.hdb_user.role.permission,n,i);return KR(E,h,r,i,n,c,s),c.getPermsResponse()}a(dse,"verifyPerms");function PH(e,t,r,s,n){if(si.arrayHasEmptyValues([e,t,r]))throw Rt.info("hasPermissions has an invalid parameter"),br(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||H.get(t).requires_su))return null;if(!H.get(t))throw Rt.info(`operation ${t} not found.`),br(new Error,Ft.OP_NOT_FOUND(t),Wl.BAD_REQUEST);if(H.get(t)&&H.get(t).requires_su)return Rt.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Ft.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][Ql]===!1){s.addInvalidItem(Ft.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Ft.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[Ql]===!1)s.addInvalidItem(Ft.TABLE_NOT_FOUND(u,l));else try{let f=[],E=H.get(t).perms;!si.isEmpty(n)&&E.includes(n)&&(E=[n]);for(let h=0;h<E.length;h++){let p=E[h],S=d[p];(S==null||S===!1)&&(Rt.info(`Required ${p} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&s.addUnauthorizedTable(u,l,f)}catch(f){let E=Ft.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw Rt.error(E),Rt.error(f),br(wH.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(PH,"hasPermissions");function KR(e,t,r,s,n,i,o){if(!e||!t)throw Rt.info("no attributes specified in checkAttributePerms."),br(new Error);let c=H.get(r).perms;if(!c||c==="")throw Rt.info(`no permissions found for ${r} in checkAttributePerms().`),br(new Error);if(si.isEmptyOrZeroLength(t))return Rt.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let l of e){let d=t.get(l);if(d){if(d[Ql]===!1){i.addInvalidItem(Ft.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let f of c){if(hs.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==ni)throw br(new Error,Ft.SYSTEM_TIMESTAMP_PERMS_ERR,Wl.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(Ft.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a(KR,"checkAttributePerms");function fse(e){let t=new Set;try{if(e.action)return t;if(e.operation===hs.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){Rt.info(r)}return t}a(fse,"getRecordAttributes");function WR(e,t,r){let s=new Map;if(si.isEmpty(e))return Rt.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{Rt.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(WR,"getAttributePermissions");function Ese(e,t,r,s,n,i,o){let c=new Set(i),u=WR(e,s,n);KR(c,u,t,n,s,o,r)}a(Ese,"verifyBulkLoadAttributePerms")});var ah=T((URe,qH)=>{"use strict";qH.exports={evaluateSQL:Ise,processAST:HH,convertSQLToAST:BH,checkASTPermissions:vH};var hse=dr(),UH=require("util"),mse=UH.callbackify(hse.insert),pse=_r().search,Sse=$P().update,Tse=UH.callbackify(Sse),gse=YP().convertDelete,Zi=require("alasql"),Rse=ih(),oh=v(),Ase=Vd(),Ose=G(),Jl=R(),{hdb_errors:Nse,handleHDBError:QR}=Z(),{HTTP_STATUS_CODES:jR}=Nse;Ase(Zi);var bse=403,yse="There was a problem performing this insert. Please check the logs and try again.",zR=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Ise(e,t){let r=e.parsed_sql_object;if(!r){r=BH(e.sql);let s,n=r.ast.statements[0];if(n instanceof Zi.yy.Insert?s=n.into.databaseid:n instanceof Zi.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof Zi.yy.Update||n instanceof Zi.yy.Delete?s=n.table.databaseid:oh.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Zi.yy.Select)&&Ose.isEmptyOrZeroLength(s))return t("No schema specified",null)}HH(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(Ise,"evaluateSQL");function vH(e,t){let r;try{r=Rse.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(vH,"checkASTPermissions");function BH(e){let t=new zR;if(!e)throw QR(new Error,"The 'sql' parameter is missing from the request body",jR.BAD_REQUEST);try{let r=e.trim(),s=Zi.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
|
|
16
|
+
`);throw s[1]?QR(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,jR.BAD_REQUEST):QR(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",jR.BAD_REQUEST)}return t}a(BH,"convertSQLToAST");function HH(e,t,r){try{let s=wse;if(!e.bypass_auth&&!t.permissions_checked){let i=vH(e,t);if(i&&i.length>0)return r(bse,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Jl.VALID_SQL_OPS_ENUM.SELECT:s=pse,n=t.ast.statements[0];break;case Jl.VALID_SQL_OPS_ENUM.INSERT:s=Cse;break;case Jl.VALID_SQL_OPS_ENUM.UPDATE:s=Tse;break;case Jl.VALID_SQL_OPS_ENUM.DELETE:s=gse;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(HH,"processAST");function wse(e,t){oh.info(e),t("unknown sql statement")}a(wse,"nullFunction");function Cse({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=Lse(i,e.values)}catch(o){return r(o)}mse(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){oh.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(Cse,"convertInsert");function Lse(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=Zi.compile(`SELECT ${n.toString()} AS [${Jl.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw oh.error(r),new Error(yse)}}a(Lse,"createDataObjects")});var JR=T((BRe,FH)=>{"use strict";var{S3:Dse,GetObjectCommand:Pse}=require("@aws-sdk/client-s3");FH.exports={getFileStreamFromS3:Mse,getS3AuthObj:GH};async function Mse(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await GH(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Pse(r))).Body}a(Mse,"getFileStreamFromS3");function GH(e,t,r){return new Dse({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(GH,"getS3AuthObj")});var ch=T((qRe,zH)=>{"use strict";var $H=_r(),Use=ah(),vse=JR(),{AsyncParser:Bse,Transform:Hse}=require("json2csv"),Zl=require("stream"),jr=G(),XR=require("fs-extra"),qse=require("path"),ps=v(),{promisify:VH}=require("util"),Xl=G(),{handleHDBError:ft,hdb_errors:Gse}=Z(),{HDB_ERROR_MSGS:yr,HTTP_STATUS_CODES:Et}=Gse,{streamAsJSON:Fse}=JT(),{Upload:xse}=require("@aws-sdk/lib-storage"),xH=["search_by_value","search_by_hash","sql"],kH=["json","csv"],YH="json",KH="csv",kse="Successfully exported JSON locally.",$se="Successfully exported CSV locally.",Vse=1e3,Yse=$H.searchByHash,Kse=$H.searchByValue,Wse=VH(Use.evaluateSQL),Qse=VH(Zl.finished);zH.exports={export_to_s3:Xse,export_local:jse,toCsvStream:WH};async function jse(e){ps.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=QH(e);if(!jr.isEmpty(t))throw ps.error(t),ft(new Error,t,Et.BAD_REQUEST,void 0,void 0,!0);if(jr.isEmpty(e.path))throw ps.error(yr.MISSING_VALUE("path")),ft(new Error,yr.MISSING_VALUE("path"),Et.BAD_REQUEST,void 0,void 0,!0);let r=(jr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(qse.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=jr.buildFolderPath(e.path,r);await zse(e.path);let n=await jH(e);return await Jse(s,e.format,n)}a(jse,"export_local");async function zse(e){if(ps.trace("in confirmPath"),jr.isEmptyOrZeroLength(e))throw ft(new Error,`Invalid path: ${e}`,Et.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await XR.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,ps.error(s),ft(new Error,s,Et.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw ps.error(r),ft(new Error,r,Et.BAD_REQUEST,void 0,void 0,!0)}return!0}a(zse,"confirmPath");async function Jse(e,t,r){if(ps.trace("in saveToLocal"),Xl.isEmptyOrZeroLength(e))throw ft(new Error,yr.INVALID_VALUE("file_path"),Et.BAD_REQUEST,void 0,void 0,!0);if(Xl.isEmptyOrZeroLength(t))throw ft(new Error,yr.INVALID_VALUE("Source format"),Et.BAD_REQUEST,void 0,void 0,!0);if(Xl.isEmpty(r))throw ft(new Error,yr.NOT_FOUND("Data"),Et.BAD_REQUEST,void 0,void 0,!0);if(t===YH){let s=XR.createWriteStream(e);return Fse(r).pipe(s),await Qse(s),{message:kse,path:e}}else if(t===KH){let s=XR.createWriteStream(e),n=Zl.Readable.from(r),i={},o={objectMode:!0};return await new Bse(i,o).fromInput(n).toOutput(s).promise(!1),{message:$se,path:e}}throw ft(new Error,yr.INVALID_VALUE("format"),Et.BAD_REQUEST)}a(Jse,"saveToLocal");async function Xse(e){if(!e.s3||Object.keys(e.s3).length===0)throw ft(new Error,yr.MISSING_VALUE("S3 object"),Et.BAD_REQUEST);if(jr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw ft(new Error,yr.MISSING_VALUE("aws_access_key_id"),Et.BAD_REQUEST);if(jr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw ft(new Error,yr.MISSING_VALUE("aws_secret_access_key"),Et.BAD_REQUEST);if(jr.isEmptyOrZeroLength(e.s3.bucket))throw ft(new Error,yr.MISSING_VALUE("bucket"),Et.BAD_REQUEST);if(jr.isEmptyOrZeroLength(e.s3.key))throw ft(new Error,yr.MISSING_VALUE("key"),Et.BAD_REQUEST);if(jr.isEmptyOrZeroLength(e.s3.region))throw ft(new Error,yr.MISSING_VALUE("region"),Et.BAD_REQUEST);let t=QH(e);if(!jr.isEmpty(t))throw ft(new Error,t,Et.BAD_REQUEST);ps.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await jH(e)}catch(u){throw ps.error(u),u}let s,n=await vse.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Zl.PassThrough;if(e.format===KH){i=e.s3.key+".csv";let u=WH(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===YH){i=e.s3.key+".json";let u=new Zl.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";l+=E,d!==0&&d%Vse===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw ft(new Error,yr.INVALID_VALUE("format"),Et.BAD_REQUEST);return new xse({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(Xse,"export_to_s3");function WH(e){let t=Zl.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new Hse(r,s);return t.pipe(n)}a(WH,"toCsvStream");function QH(e){if(ps.trace("in exportCoreValidation"),jr.isEmpty(e.format))return"format missing";if(kH.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${kH.join(", ")}`;let t=e.search_operation.operation;if(jr.isEmpty(t))return"search_operation.operation missing";if(xH.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${xH.join(", ")}`}a(QH,"exportCoreValidation");async function jH(e){ps.trace("in getRecords");let t,r;if(Xl.isEmpty(e.search_operation)||Xl.isEmptyOrZeroLength(e.search_operation.operation))throw ft(new Error,yr.INVALID_VALUE("Search operation"),Et.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Kse;break;case"search_by_hash":t=Yse;break;case"sql":t=Wse;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,ps.error(r),ft(new Error,r,Et.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(jH,"getRecords")});var n0={};Fe(n0,{contentTypes:()=>eA,findBestSerializer:()=>_h,getDeserializer:()=>Tc,registerContentHandlers:()=>tA,serialize:()=>dh,serializeMessage:()=>Ji});function Zse(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function tA(e){e.register(tne,{serializers:[{regex:/^application\/json$/,serializer:uh.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new Zo.EncoderStream(e_).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?lh.Readable.from((0,An.encodeIter)(t,e_)):(0,An.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,ZR.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,An.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Zo.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function _h(e){let r=(e.headers.asObject||e.headers).accept,s,n=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let u of c){let[_,...l]=u.split(/\s*;\s*/),d=1,f={q:1};for(let h of l){let p=h.indexOf("=");f[h.substring(0,p)]=h.substring(p+1)}d=+f.q;let E=xt.get(_);if(E){let h=(E.q||1)*d;h>n&&(s=E,i=E.type||_,n=h,o=f)}}if(!s){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(xt.keys()).join(", "))}};s=xt.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function dh(e,t,r){let s=XH&&t.headers.asObject?.["accept-encoding"]?.includes("br"),n;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),n=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),n=e;else{let i=_h(t);if(r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e);return s&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,ii.createBrotliCompress)({params:{[ii.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?ii.constants.BROTLI_MODE_TEXT:ii.constants.BROTLI_MODE_GENERIC,[ii.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e)}return s&&n?.length>XH?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,ii.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function Ji(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return JSON.stringify(e);let r=t.serialize;if(r)return r(e);let s=_h(t);return r=t.serialize=s.serializer.serialize,r(e)}function rne(e){return new Promise((t,r)=>{let s=[];e.on("data",n=>s.push(n)),e.on("end",()=>t(Buffer.concat(s))),e.on("error",r)})}function Tc(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=xt.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=xt.get(e)?.deserialize||ZH(e,s);return o=>rne(o).then(i)}return e&&xt.get(e)?.deserialize||ZH(e,s)}function ZH(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return s=>({contentType:e,data:s.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return JSON.parse(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function sne(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let s=r.next();return s.then?s.then(n=>({value:t(n.value),done:n.done})):{value:t(s.value),done:s.done}},return(s){return r.return(s)},throw(s){return r.throw(s)}}}}}var uh,ZR,An,Zo,ii,lh,e0,t0,r0,e_,xt,eA,JH,s0,ene,tne,XH,dc=Re(()=>{uh=M(JT()),ZR=M(ch()),An=require("msgpackr"),Zo=require("cbor-x"),ii=require("zlib"),lh=require("stream");Pr();e0=require("../index"),t0=M(j()),r0=M(R()),e_={useRecords:!1,useToJSON:!0},xt=new Map,eA=xt;Tt.contentTypes=eA;(0,e0._assignPackageExport)("contentTypes",eA);xt.set("application/json",{serializeStream:uh.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});JH=new Zo.Encoder(e_);xt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Zo.EncoderStream(e_).end(e)},serialize:JH.encode,deserialize:JH.decode,q:1});xt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?lh.Readable.from((0,An.encodeIter)(e,e_)):(0,An.pack)(e)},serialize:An.pack,deserialize:An.unpack,q:.9});xt.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,ZR.toCsvStream)(e)},q:.1});xt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});xt.set("text/event-stream",{serializeStream:function(e){return lh.Readable.from(sne(e,this.serialize))},serialize:function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
|
|
17
17
|
`),e.data){let r=e.data;typeof r=="object"&&(r=JSON.stringify(r)),t+="data: "+r+`
|
|
18
18
|
`}return e.id&&(t+="id: "+e.id+`
|
|
19
19
|
`),e.retry&&(t+="retry: "+e.retry+`
|
|
@@ -22,16 +22,16 @@
|
|
|
22
22
|
|
|
23
23
|
`:`data: ${e}
|
|
24
24
|
|
|
25
|
-
`},q:.8});xt.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,s]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let n=t[r];Array.isArray(n)?n.push(s):t.key=[n,s]}else t[r]=s},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});ZH={type:"application/json",serializeStream:ch.streamAsJSON,serialize:JSON.stringify,deserialize:Qse,q:.8};xt.set("*/*",ZH);xt.set("",ZH);a(Qse,"tryJSONParse");a(XR,"registerContentHandlers");jse=require("fastify-plugin"),Jse=jse(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=lh(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(lh,"findBestSerializer");QH=zH.default.get(XH.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(_h,"serialize");a(zi,"serializeMessage");a(zse,"streamToBuffer");a(Sc,"getDeserializer");a(jH,"deserializerUnknownType");a(Xse,"transformIterable")});var dh={};Fe(dh,{start:()=>tne});async function ene(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&od(e);let n=new Ji;try{e.responseHeaders=n;let i=e.url.slice(1),o=eA.getMatch(i);if(!o)return t(e);e.handlerPath=o.path;let c={url:o.relativeURL,async:!0},u=o.Resource,_=r["cache-control"];if(_){_=_.toLowerCase();let S=_.match(/max-age=(\d+)/)?.[1];S&&(e.expiresAt=S*1e3+Date.now()),_.includes("only-if-cached")&&(e.onlyIfCached=!0),_.includes("no-cache")&&(e.noCache=!0),_.includes("no-store")&&(e.noCacheStore=!0),_.includes("stale-if-error")&&(e.staleIfError=!0),_.includes("must-revalidate")&&(e.mustRevalidate=!0)}let l=await We(e,()=>{if(s==="POST"||s==="PUT"||s==="PATCH"||s==="QUERY")try{e.data=Sc(r["content-type"],!0)(e.body)}catch(S){throw new r_.ClientError(S,400)}switch(e.authorize=!0,s){case"GET":case"HEAD":return u.get(c,e);case"POST":return u.post(c,e.data,e);case"PUT":return u.put(c,e.data,e);case"DELETE":return u.delete(c,e);case"PATCH":return u.patch(c,e.data,e);case"OPTIONS":n.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return u.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return u.query(c,e.data,e);case"COPY":return u.copy(c,r.destination,e);case"MOVE":return u.move(c,r.destination,e);case"BREW":throw new r_.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new r_.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,ZR.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){Zse[0]=f;let S=String.fromCharCode(34,(kt[0]&63)+62,(kt[0]>>6)+(kt[1]<<2&63)+62,(kt[1]>>4)+(kt[2]<<4&63)+62,(kt[2]>>2)+62,(kt[3]&63)+62,(kt[3]>>6)+(kt[4]<<2&63)+62,(kt[4]>>4)+(kt[5]<<4&63)+62,(kt[5]>>2)+62,(kt[6]&63)+62,(kt[6]>>6)+(kt[7]<<2&63)+62,34),m=r["if-none-match"];m&&S==m?(l?.onDone&&l.onDone(),d=304,l=void 0):n.setIfNone("ETag",S),ZR.lastModified&&n.setIfNone("Last-Modified",new Date(f).toUTCString())}e.createdResource&&(d=201),e.newLocation&&n.setIfNone("Location",e.newLocation);let E={status:d,headers:n,body:void 0},h=l?.wasLoadedFromSource?.();return h!==void 0&&(E.wasCacheMiss=h,!h&&f&&n.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||f))/1e3))),l!==void 0&&(E.body=_h(l,e,E),s==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?ea.warn(i):ea.info(i):ea.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),n.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:n,body:void 0};return o.body=_h(i.contentType?i:i.toString(),e,o),o}}function tne(e){ZR=e,!t0&&(t0=!0,eA=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return ene(t,r)}),e.server.ws(async(t,r,s)=>{t_++;let n=new bs;r0||(r0=!0,Xu(l=>{t_>0&&l.push({metric:"ws-connections",connections:t_,byThread:!0})}));let i;t.on("error",l=>{i=!0,ea.warn(l)});let o;t.on("message",a(function(d){o||(o=Sc(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{t_--,as(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=eA.getMatch(u);if(as(!!_,"connection","ws","connect"),!_)t.send(zi(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,xr(h=>({count:h.count,total:t_}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await We(r,()=>d.connect(l,n,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=zi(E.value,r);t.send(h),xr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var ea,r_,kt,Zse,ZR,t0,eA,r0,t_,s0=Re(()=>{_c();jn();ea=P(U()),r_=P(Z());ad();ou();Ro();qE();kt=new Uint8Array(8),Zse=new Float64Array(kt.buffer,0,1),ZR={};a(ene,"http");t_=0;a(tne,"start")});var tA=T((YRe,n0)=>{var{recordAction:fh,recordActionBinary:rne}=(jn(),te(Zu)),sne=require("fastify-plugin"),nne=200;n0.exports=sne(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n,i)=>{let o=n.getResponseTime(),c=performance.now(),u=n.context.config,_,l,d;u.isOperation?(_=s.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),fh(o,"duration",_,d,l),rne(n.raw.statusCode<400,"success",_,d,l);let f=nne;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{fh(performance.now()-c,"transfer",_,d,l),fh(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,fh(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var iA=T((KRe,u0)=>{var Sh=require("clone"),Th=Ve(),ine=G(),mh=A(),one=U(),Eh=require("fs"),rA=require("joi"),{string:ph}=rA.types(),{hdb_errors:ane,handleHDBError:s_}=Z(),{HDB_ERROR_MSGS:cne,HTTP_STATUS_CODES:hh}=ane,{common_validators:Tc}=an(),i0=1e9,o0=" is required",une=["insert","update","upsert"],sA={database:{presence:!1,format:Tc.schema_format,length:Tc.schema_length},schema:{presence:!1,format:Tc.schema_format,length:Tc.schema_length},table:{presence:!0,format:Tc.schema_format,length:Tc.schema_length},action:{inclusion:{within:une,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},lne={schema:ph.required(),table:ph.required(),action:ph.valid("insert","update","upsert")},{AWS_ACCESS_KEY:_ne,AWS_SECRET:dne,AWS_BUCKET:fne,AWS_FILE_KEY:Ene,REGION:hne}=mh.S3_BUCKET_AUTH_KEYS,mne={s3:{presence:!0},[`s3.${_ne}`]:{presence:!0,type:"String"},[`s3.${dne}`]:{presence:!0,type:"String"},[`s3.${fne}`]:{presence:!0,type:"String"},[`s3.${Ene}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${hne}`]:{presence:!0,type:"String"}},a0=Sh(sA);a0.data.presence={message:o0};var c0=Sh(sA);c0.file_path.presence={message:o0};var pne=Object.assign(Sh(sA),mne),nA=Sh(lne);nA.csv_url=ph.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();nA.passthrough_headers=rA.object();function Sne(e){let t=Th.validateObject(e,a0);return gh(e,t)}a(Sne,"dataObject");function Tne(e){let t=Th.validateBySchema(e,rA.object(nA));return gh(e,t)}a(Tne,"urlObject");function gne(e){let t=Th.validateObject(e,c0);return gh(e,t)}a(gne,"fileObject");function Rne(e){let t=Th.validateObject(e,pne);return gh(e,t)}a(Rne,"s3FileObject");function gh(e,t){if(!t){let r=ine.checkGlobalSchemaTable(e.schema,e.table);if(r)return s_(new Error,r,hh.BAD_REQUEST);if(e.operation===mh.OPERATIONS_ENUM.CSV_FILE_LOAD){try{Eh.accessSync(e.file_path,Eh.constants.R_OK|Eh.constants.F_OK)}catch(s){return s.code===mh.NODE_ERROR_CODES.ENOENT?s_(s,`No such file or directory ${s.path}`,hh.BAD_REQUEST):s.code===mh.NODE_ERROR_CODES.EACCES?s_(s,`Permission denied ${s.path}`,hh.BAD_REQUEST):s_(s)}try{let s=Eh.statSync(e.file_path).size;if(s>i0)return s_(new Error,cne.MAX_FILE_SIZE_ERR(s,i0),hh.BAD_REQUEST)}catch(s){one.error(s),console.error(s)}}}return t}a(gh,"postValidateChecks");u0.exports={dataObject:Sne,urlObject:Tne,fileObject:gne,s3FileObject:Rne}});var oA=T((QRe,l0)=>{"use strict";var n_=U(),Rh=A();async function Ane(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===Rh.OPERATIONS_ENUM.INSERT||t.operation===Rh.OPERATIONS_ENUM.UPDATE||t.operation===Rh.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===Rh.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(n_.info(i.message),i):i.http_resp_msg?(n_.error(`Error calling operation: ${e.name}`),n_.error(i.http_resp_msg),i):(n_.error(`Error calling operation: ${e.name}`),n_.error(i),i)}}a(Ane,"callOperationFunctionAsAwait");l0.exports={callOperationFunctionAsAwait:Ane}});var d0=T((JRe,_0)=>{"use strict";var aA=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}},cA=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};_0.exports={BulkLoadFileObject:aA,BulkLoadDataObject:cA}});var E0=T((XRe,f0)=>{"use strict";var uA=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};f0.exports=uA});var hA=T((nAe,D0)=>{"use strict";var Ah=dr(),Nh=iA(),One=require("needle"),ks=A(),eAe=ke(),gc=G(),{handleHDBError:Ze,hdb_errors:O0}=Z(),{HTTP_STATUS_CODES:$t,HDB_ERROR_MSGS:At,CHECK_LOGS_WRAPPER:ra}=O0,Rc=U(),lA=require("papaparse");gc.promisifyPapaParse();var $s=require("fs-extra"),Nne=require("path"),{chain:h0}=require("stream-chain"),m0=require("stream-json/streamers/StreamArray"),p0=require("stream-json/utils/Batch"),S0=require("stream-chain/utils/comp"),{finished:T0}=require("stream"),bne=Q(),N0=oA(),yne=QR(),{BulkLoadFileObject:dA,BulkLoadDataObject:Ine}=d0(),fA=qR(),{verifyBulkLoadAttributePerms:b0}=nh(),tAe=E0(),rAe=st(),sAe=Kn(),{databases:wne}=(de(),te(De)),{coerceType:Cne}=(bf(),te(LT)),g0="No records parsed from csv file.",ta=`${bne.get("HDB_ROOT")}/tmp`,{schema_regex:Lne}=an(),R0=1024*1024*2,A0=5e3,Dne={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};D0.exports={csvDataLoad:Pne,csvURLLoad:Mne,csvFileLoad:Une,importFromS3:vne};async function Pne(e,t){let r=Nh.dataObject(e);if(r)throw Ze(r,r.message,$t.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=w0(e.schema,e.table),i=lA.parse(e.data,{header:!0,skipEmptyLines:!0,transform:_A.bind(null,n),dynamicTyping:!1}),o=new fA;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&b0(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw Ze(new Error,c,$t.BAD_REQUEST,void 0,void 0,!0);let u=new Ine(e.action,e.schema,e.table,i.data);return s=await N0.callOperationFunctionAsAwait(C0,u,null),s.message===g0?g0:L0(s.records,s.number_written)}catch(n){throw sa(n)}}a(Pne,"csvDataLoad");async function Mne(e){let t=Nh.urlObject(e);if(t)throw Ze(t,t.message,$t.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${ta}/${r}`;try{await Bne(e,r)}catch(n){throw Rc.error(At.DOWNLOAD_FILE_ERR(r)+" - "+n),Ze(n,ra(At.DOWNLOAD_FILE_ERR(r)))}try{let n=new dA(this.job_operation_function.name,e.action,e.schema,e.table,s,ks.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await EA(n);return await Oh(s),i}catch(n){throw await Oh(s),sa(n)}}a(Mne,"csvURLLoad");async function Une(e){let t=Nh.fileObject(e);if(t)throw Ze(t,t.message,$t.BAD_REQUEST,void 0,void 0,!0);let r=new dA(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,ks.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await EA(r)}catch(s){throw sa(s)}}a(Une,"csvFileLoad");async function vne(e){let t=Nh.s3FileObject(e);if(t)throw Ze(t,t.message,$t.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=Nne.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${ta}/${n}`;let i=new dA(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await Hne(n,e);let o=await EA(i);return await Oh(r),o}catch(s){throw await Oh(r),sa(s)}}a(vne,"importFromS3");async function Bne(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await One("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw Ze(s,n,s.statusCode,ks.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}Gne(r,e.csv_url),await qne(t,r.raw)}a(Bne,"downloadCSVFile");async function Hne(e,t){try{let r=`${ta}/${e}`;await $s.mkdirp(ta),await $s.writeFile(`${ta}/${e}`,"",{flag:"a+"});let s=await $s.createWriteStream(r),n=await yne.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){Rc.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Rc.error(At.S3_DOWNLOAD_ERR+" - "+r),Ze(r,ra(At.S3_DOWNLOAD_ERR))}}a(Hne,"downloadFileFromS3");async function qne(e,t){try{await $s.mkdirp(ta),await $s.writeFile(`${ta}/${e}`,t)}catch(r){throw Rc.error(At.WRITE_TEMP_FILE_ERR),Ze(r,ra(At.DEFAULT_BULK_LOAD_ERR))}}a(qne,"writeFileToTempFolder");async function Oh(e){if(e)try{await $s.access(e),await $s.unlink(e)}catch{Rc.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Oh,"deleteTempFile");function Gne(e,t){if(e.statusCode!==O0.HTTP_STATUS_CODES.OK)throw Ze(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,$t.BAD_REQUEST);if(!Dne[e.headers["content-type"]])throw Ze(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,$t.BAD_REQUEST);if(!e.raw)throw Ze(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,$t.BAD_REQUEST)}a(Gne,"validateURLResponse");async function EA(e){try{let t;switch(e.file_type){case ks.VALID_S3_FILE_TYPES.CSV:t=await Fne(e);break;case ks.VALID_S3_FILE_TYPES.JSON:t=await xne(e);break;default:throw Ze(new Error,At.DEFAULT_BULK_LOAD_ERR,$t.BAD_REQUEST,ks.LOG_LEVELS.ERROR,At.INVALID_FILE_EXT_ERR(e))}return L0(t.records,t.number_written)}catch(t){throw sa(t)}}a(EA,"fileLoad");async function y0(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await Ah.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&b0(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=Ze(c);r(u)}}a(y0,"validateChunk");async function I0(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;gc.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!gc.isEmpty(c)&&!gc.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await N0.callOperationFunctionAsAwait(C0,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=Ze(c,ra(At.INSERT_CSV_ERR),$t.INTERNAL_SERVER_ERROR,ks.LOG_LEVELS.ERROR,At.INSERT_CSV_ERR+" - "+c);r(u)}}a(I0,"insertChunk");async function Fne(e){let t={records:0,number_written:0},r=w0(e.schema,e.table);try{let s=new fA,n=$s.createReadStream(e.file_path,{highWaterMark:R0});n.setEncoding("utf8"),await lA.parsePromise(n,y0.bind(null,e,s),_A.bind(null,r));let i=s.getPermsResponse();if(i)throw Ze(new Error,i,$t.BAD_REQUEST);return n=$s.createReadStream(e.file_path,{highWaterMark:R0}),n.setEncoding("utf8"),await lA.parsePromise(n,I0.bind(null,e,t),_A.bind(null,r)),n.destroy(),t}catch(s){throw Ze(s,ra(At.PAPA_PARSE_ERR),$t.INTERNAL_SERVER_ERROR,ks.LOG_LEVELS.ERROR,At.PAPA_PARSE_ERR+s)}}a(Fne,"callPapaParse");function w0(e,t){let r=wne[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>Cne(i,n));return s}a(w0,"createTransformMap");function _A(e,t,r){let s=e.get(r);return s?s(t):gc.autoCast(t)}a(_A,"typeFunction");async function xne(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new fA,n=h0([$s.createReadStream(e.file_path,{encoding:"utf-8"}),m0.withParser(),c=>c.value,new p0({batchSize:A0}),S0(async c=>{await y0(e,s,r,c)})]);await new Promise((c,u)=>{T0(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw Ze(new Error,i,$t.BAD_REQUEST);let o=h0([$s.createReadStream(e.file_path,{encoding:"utf-8"}),m0.withParser(),c=>c.value,new p0({batchSize:A0}),S0(async c=>{await I0(e,t,r,c)})]);return await new Promise((c,u)=>{T0(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw Ze(s,ra(At.INSERT_JSON_ERR),$t.INTERNAL_SERVER_ERROR,ks.LOG_LEVELS.ERROR,At.INSERT_JSON_ERR+s)}}a(xne,"insertJson");async function C0(e){let t={};try{e.data&&e.data.length>0&&kne(e.data[0])?t=await $ne(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Rc.info(t.message))}catch(r){throw sa(r)}return t}a(C0,"callBulkFileLoad");function kne(e){let t=Object.keys(e);for(let r of t)if(!Lne.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(kne,"validateColumnNames");async function $ne(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=Ah.insert;break;case"update":i=Ah.update;break;case"upsert":i=Ah.upsert;break;default:throw Ze(new Error,At.INVALID_ACTION_PARAM_ERR(s),$t.BAD_REQUEST,ks.LOG_LEVELS.ERROR,At.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let l=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][l])>=0&&e.splice(d,1)}let u=gc.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw sa(o)}}a($ne,"bulkFileLoad");function L0(e,t){return`successfully loaded ${t} of ${e} records`}a(L0,"buildResponseMsg");function sa(e){return Ze(e,ra(At.DEFAULT_BULK_LOAD_ERR),$t.INTERNAL_SERVER_ERROR,ks.LOG_LEVELS.ERROR,At.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(sa,"buildTopLevelErrMsg")});var M0=T((oAe,P0)=>{"use strict";var mA=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};P0.exports=mA});var B0=T((cAe,v0)=>{"use strict";var Vne=A(),U0=require("moment"),Yne=require("uuid").v4,pA=class{static{a(this,"JobObject")}constructor(){this.id=Yne(),this.type=void 0,this.start_datetime=U0().valueOf(),this.created_datetime=U0().valueOf(),this.end_datetime=void 0,this.status=Vne.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};v0.exports=pA});var SA=T((lAe,k0)=>{"use strict";var Kne=require("uuid").v4,G0=dr(),F0=_r(),Wne=Ds(),Qne=Pa(),jne=M0(),et=A(),Jne=B0(),zne=rE(),ps=U(),Xne=Nu(),Ac=G(),{promisify:Zne}=require("util"),na=require("moment"),eie=oh(),bh=iA(),H0=KS(),{deleteTransactionLogsBeforeValidator:tie}=MR(),{handleHDBError:rie,hdb_errors:sie}=Z(),{HTTP_STATUS_CODES:nie}=sie,q0=F0.searchByValue,iie=F0.searchByHash,oie=G0.insert,aie=Zne(eie.evaluateSQL),cie=G0.update;k0.exports={addJob:_ie,updateJob:fie,handleGetJob:uie,handleGetJobsByStartDate:lie,getJobById:x0};async function uie(e){try{let t=await x0(e.id);return Ac.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw ps.error("There was an error getting job",t),new Error(r)}}a(uie,"handleGetJob");async function lie(e){try{let t=await die(e);if(ps.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=na(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=na(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw ps.error(r),new Error(r)}}a(lie,"handleGetJobsByStartDate");async function _ie(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Ac.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return ps.info(l),t.error=l,t}if(!et.JOB_TYPE_ENUM[e.operation])return ps.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case et.OPERATIONS_ENUM.CSV_FILE_LOAD:s=bh.fileObject(e);break;case et.OPERATIONS_ENUM.CSV_URL_LOAD:s=bh.urlObject(e);break;case et.OPERATIONS_ENUM.CSV_DATA_LOAD:s=bh.dataObject(e);break;case et.OPERATIONS_ENUM.IMPORT_FROM_S3:s=bh.s3FileObject(e);break;case et.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case et.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=H0(e,"date");break;case et.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=H0(e,"timestamp");break;case et.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=tie(e);break;default:break}if(s)throw rie(s,s.message,nie.BAD_REQUEST,void 0,void 0,!0);let n=new Jne;n.type=e.operation===et.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?et.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new Wne(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await q0(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return ps.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=Kne();try{o=await q0(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return ps.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return ps.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new Xne(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await oie(u)}catch(l){return ps.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${n.operation} and id ${n.id}`;else{let l=`Created a job with type ${n.type} and id ${n.id}`;t.message=l,t.createdJob=n,t.success=!0,ps.trace(l)}return t}a(_ie,"addJob");async function die(e){let t=na(e.from_date,na.ISO_8601),r=na(e.to_date,na.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new jne(s,e.hdb_user);try{return await aie(n)}catch(i){throw ps.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(die,"getJobsInDateRange");async function x0(e){if(Ac.isEmptyOrZeroLength(e))return Ac.errorizeMessage("Invalid job ID specified.");let t=new Qne(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await iie(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return ps.error(s),Ac.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(x0,"getJobById");async function fie(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Ac.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===et.JOB_STATUS_ENUM.COMPLETE||e.status===et.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=na().valueOf());let t=new zne(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await cie(t),r}a(fie,"updateJob")});var Q0=T((dAe,W0)=>{"use strict";var $0=G(),Ir=A(),Eie=require("moment"),yh=hA(),Ih=U(),V0=SA(),Y0=ah(),K0=Uo(),hie=Qe(),mie=eh(),TA=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function pie(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if($0.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if($0.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Ir.JOB_TYPE_ENUM.csv_file_load:await ai(e,yh.csvFileLoad);break;case Ir.JOB_TYPE_ENUM.csv_url_load:await ai(e,yh.csvURLLoad);break;case Ir.JOB_TYPE_ENUM.csv_data_load:await ai(e,yh.csvDataLoad);break;case Ir.JOB_TYPE_ENUM.import_from_s3:await ai(e,yh.importFromS3);break;case Ir.JOB_TYPE_ENUM.empty_trash:break;case Ir.JOB_TYPE_ENUM.export_local:await ai(e,Y0.export_local);break;case Ir.JOB_TYPE_ENUM.export_to_s3:await ai(e,Y0.export_to_s3);break;case Ir.JOB_TYPE_ENUM.delete_files_before:case Ir.JOB_TYPE_ENUM.delete_records_before:await ai(e,K0.deleteFilesBefore);break;case Ir.JOB_TYPE_ENUM.delete_audit_logs_before:await ai(e,K0.deleteAuditLogsBefore);break;case Ir.JOB_TYPE_ENUM.delete_transaction_logs_before:await ai(e,mie.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(pie,"parseMessage");async function ai(e,t){try{e.job.status=Ir.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Eie().valueOf(),await V0.updateJob(e.job),await Sie(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):Ih.error(`There was an error running ${t.name} job with id ${e.job.id}`),Ih.error(s),e.job.message=s,e.job.status=Ir.JOB_STATUS_ENUM.ERROR;try{await V0.updateJob(e.job)}catch(n){throw Ih.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(ai,"runJob");async function Sie(e){Ih.trace("launching job thread:",e),hie.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Ir.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(Sie,"launchJobThread");W0.exports={parseMessage:pie,RunnerMessage:TA}});var J0=T((EAe,j0)=>{"use strict";var gA=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};j0.exports=gA});var dq=T((mAe,yA)=>{"use strict";var Dh=_r(),OA=oh(),wh=hA(),ci=Wf(),Ch=Mi(),o_=Uo(),Tie=ug(),i_=Er(),Lh=Xf(),Vt=JE(),Ot=U(),gie=gg(),Rie=bl(),Aie=Zg(),Oie=hE(),Nie=pE(),bie=eR(),yie=gE(),Iie=AE(),RA=NE(),z0=ah(),wie=nh(),NA=SA(),M=A(),{hdb_errors:c_,handleHDBError:a_}=Z(),{HTTP_STATUS_CODES:X0}=c_,AA=yE(),Z0=Qo(),cq=require("util"),Oc=dr(),Cie=os(),Lie=zn(),eq=Q0(),tq=Rl(),rq=(kE(),te(xl)),sq=rt(),nq=eh(),iq=WE(),{setServerUtilities:Die}=(bf(),te(LT)),{CONTEXT:Pie}=(Is(),te(Xm)),{_assignPackageExport:Mie}=require("../index"),{transformReq:Uie}=G(),{server:vie}=(Pr(),te(So)),Bie=oA(),oq=Dh.searchByHash,Hie=Dh.searchByValue,qie=cq.promisify(Dh.search),Gie=cq.promisify(OA.evaluateSQL),Fie={[M.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[M.OPERATIONS_ENUM.CREATE_TABLE]:!0,[M.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[M.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[M.OPERATIONS_ENUM.DROP_TABLE]:!0,[M.OPERATIONS_ENUM.DROP_SCHEMA]:!0},q=J0();async function uq(e,t){try{if(e.body.operation!=="read_log"&&(Ot.log_level===M.LOG_LEVELS.INFO||Ot.log_level===M.LOG_LEVELS.DEBUG||Ot.log_level===M.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;Ot.info(o)}}catch(s){Ot.error(s)}let r=await Bie.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Fie[e.body.operation]&&Cie.setSchemaDataToGlobal(s=>{s&&Ot.error(s)}),r}a(uq,"processLocalTransaction");var aq=kie();yA.exports={chooseOperation:lq,getOperationFunction:_q,operation:bA,processLocalTransaction:uq};Die(yA.exports);vie.operation=bA;function lq(e){let t;try{t=_q(e)}catch(n){throw Ot.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=OA.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=OA.checkASTPermissions(e,i);if(o)throw Ot.error(`${X0.FORBIDDEN} from operation ${e.operation}`),Ot.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),a_(new Error,o,c_.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==M.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==M.OPERATIONS_ENUM.LOGIN&&e.operation!==M.OPERATIONS_ENUM.LOGOUT){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=wie.verifyPerms(i,n);if(o)throw Ot.error(`${X0.FORBIDDEN} from operation ${e.operation}`),Ot.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),a_(new Error,o,c_.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw a_(n,"There was an error when trying to choose an operation path")}return r}a(lq,"chooseOperation");function _q(e){if(Ot.trace(`getOperationFunction with operation: ${e.operation}`),aq.has(e.operation))return aq.get(e.operation);throw a_(new Error,c_.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),c_.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(_q,"getOperationFunction");Mie("operation",bA);function bA(e,t){e.hdb_user=this[Pie]?.user,e.bypass_auth=!t;let r=lq(e);return uq({body:e},r)}a(bA,"operation");async function xie(e){Ot.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[M.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case M.OPERATIONS_ENUM.INSERT:o=await Oc.insert(i);break;case M.OPERATIONS_ENUM.UPDATE:o=await Oc.update(i);break;case M.OPERATIONS_ENUM.UPSERT:o=await Oc.upsert(i);break;case M.OPERATIONS_ENUM.DELETE:o=await o_.deleteRecord(i);break;default:Ot.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Ot.info("Invalid operation in transaction"),Ot.error(o)}}a(xie,"catchup");async function Nn(e){Uie(e);let t,r;try{r=await NA.addJob(e),t=r.createdJob,Ot.info("addJob result",r);let s=new eq.RunnerMessage(t,e);return await eq.parseMessage(s),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw Ot.error(n),a_(s,n)}}a(Nn,"executeJob");function kie(){let e=new Map;return e.set(M.OPERATIONS_ENUM.INSERT,new q(Oc.insert)),e.set(M.OPERATIONS_ENUM.UPDATE,new q(Oc.update)),e.set(M.OPERATIONS_ENUM.UPSERT,new q(Oc.upsert)),e.set(M.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new q(Dh.searchByConditions)),e.set(M.OPERATIONS_ENUM.SEARCH_BY_HASH,new q(oq)),e.set(M.OPERATIONS_ENUM.SEARCH_BY_ID,new q(oq)),e.set(M.OPERATIONS_ENUM.SEARCH_BY_VALUE,new q(Hie)),e.set(M.OPERATIONS_ENUM.SEARCH,new q(qie)),e.set(M.OPERATIONS_ENUM.SQL,new q(Gie)),e.set(M.OPERATIONS_ENUM.CSV_DATA_LOAD,new q(Nn,wh.csvDataLoad)),e.set(M.OPERATIONS_ENUM.CSV_FILE_LOAD,new q(Nn,wh.csvFileLoad)),e.set(M.OPERATIONS_ENUM.CSV_URL_LOAD,new q(Nn,wh.csvURLLoad)),e.set(M.OPERATIONS_ENUM.IMPORT_FROM_S3,new q(Nn,wh.importFromS3)),e.set(M.OPERATIONS_ENUM.CREATE_SCHEMA,new q(ci.createSchema)),e.set(M.OPERATIONS_ENUM.CREATE_DATABASE,new q(ci.createSchema)),e.set(M.OPERATIONS_ENUM.CREATE_TABLE,new q(ci.createTable)),e.set(M.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new q(ci.createAttribute)),e.set(M.OPERATIONS_ENUM.DROP_SCHEMA,new q(ci.dropSchema)),e.set(M.OPERATIONS_ENUM.DROP_DATABASE,new q(ci.dropSchema)),e.set(M.OPERATIONS_ENUM.DROP_TABLE,new q(ci.dropTable)),e.set(M.OPERATIONS_ENUM.DROP_ATTRIBUTE,new q(ci.dropAttribute)),e.set(M.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new q(Ch.describeSchema)),e.set(M.OPERATIONS_ENUM.DESCRIBE_DATABASE,new q(Ch.describeSchema)),e.set(M.OPERATIONS_ENUM.DESCRIBE_TABLE,new q(Ch.describeTable)),e.set(M.OPERATIONS_ENUM.DESCRIBE_ALL,new q(Ch.describeAll)),e.set(M.OPERATIONS_ENUM.DELETE,new q(o_.deleteRecord)),e.set(M.OPERATIONS_ENUM.ADD_USER,new q(i_.addUser)),e.set(M.OPERATIONS_ENUM.ALTER_USER,new q(i_.alterUser)),e.set(M.OPERATIONS_ENUM.DROP_USER,new q(i_.dropUser)),e.set(M.OPERATIONS_ENUM.LIST_USERS,new q(i_.listUsersExternal)),e.set(M.OPERATIONS_ENUM.LIST_ROLES,new q(Lh.listRoles)),e.set(M.OPERATIONS_ENUM.ADD_ROLE,new q(Lh.addRole)),e.set(M.OPERATIONS_ENUM.ALTER_ROLE,new q(Lh.alterRole)),e.set(M.OPERATIONS_ENUM.DROP_ROLE,new q(Lh.dropRole)),e.set(M.OPERATIONS_ENUM.USER_INFO,new q(i_.userInfo)),e.set(M.OPERATIONS_ENUM.READ_LOG,new q(gie)),e.set(M.OPERATIONS_ENUM.ADD_NODE,new q(Rie)),e.set(M.OPERATIONS_ENUM.UPDATE_NODE,new q(Aie)),e.set(M.OPERATIONS_ENUM.REMOVE_NODE,new q(Oie)),e.set(M.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new q(Nie)),e.set(M.OPERATIONS_ENUM.PURGE_STREAM,new q(bie)),e.set(M.OPERATIONS_ENUM.SET_CONFIGURATION,new q(sq.setConfiguration)),e.set(M.OPERATIONS_ENUM.CLUSTER_STATUS,new q(yie.clusterStatus)),e.set(M.OPERATIONS_ENUM.CLUSTER_NETWORK,new q(Iie)),e.set(M.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new q(RA.setRoutes)),e.set(M.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new q(RA.getRoutes)),e.set(M.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new q(RA.deleteRoutes)),e.set(M.OPERATIONS_ENUM.EXPORT_TO_S3,new q(Nn,z0.export_to_s3)),e.set(M.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new q(Nn,o_.deleteFilesBefore)),e.set(M.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new q(Nn,o_.deleteFilesBefore)),e.set(M.OPERATIONS_ENUM.EXPORT_LOCAL,new q(Nn,z0.export_local)),e.set(M.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new q(NA.handleGetJobsByStartDate)),e.set(M.OPERATIONS_ENUM.GET_JOB,new q(NA.handleGetJob)),e.set(M.OPERATIONS_ENUM.GET_FINGERPRINT,new q(AA.getFingerprint)),e.set(M.OPERATIONS_ENUM.SET_LICENSE,new q(AA.setLicense)),e.set(M.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new q(AA.getRegistrationInfo)),e.set(M.OPERATIONS_ENUM.RESTART,new q(Z0.restart)),e.set(M.OPERATIONS_ENUM.RESTART_SERVICE,new q(Z0.restartService)),e.set(M.OPERATIONS_ENUM.CATCHUP,new q(xie)),e.set(M.OPERATIONS_ENUM.SYSTEM_INFORMATION,new q(Lie.systemInformation)),e.set(M.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new q(Nn,o_.deleteAuditLogsBefore)),e.set(M.OPERATIONS_ENUM.READ_AUDIT_LOG,new q(Tie)),e.set(M.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new q(tq.createTokens)),e.set(M.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new q(tq.refreshOperationToken)),e.set(M.OPERATIONS_ENUM.LOGIN,new q(rq.login)),e.set(M.OPERATIONS_ENUM.LOGOUT,new q(rq.logout)),e.set(M.OPERATIONS_ENUM.GET_CONFIGURATION,new q(sq.getConfiguration)),e.set(M.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new q(Vt.customFunctionsStatus)),e.set(M.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new q(Vt.getCustomFunctions)),e.set(M.OPERATIONS_ENUM.GET_COMPONENT_FILE,new q(Vt.getComponentFile)),e.set(M.OPERATIONS_ENUM.GET_COMPONENTS,new q(Vt.getComponents)),e.set(M.OPERATIONS_ENUM.SET_COMPONENT_FILE,new q(Vt.setComponentFile)),e.set(M.OPERATIONS_ENUM.DROP_COMPONENT,new q(Vt.dropComponent)),e.set(M.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new q(Vt.getCustomFunction)),e.set(M.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new q(Vt.setCustomFunction)),e.set(M.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new q(Vt.dropCustomFunction)),e.set(M.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new q(Vt.addComponent)),e.set(M.OPERATIONS_ENUM.ADD_COMPONENT,new q(Vt.addComponent)),e.set(M.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new q(Vt.dropCustomFunctionProject)),e.set(M.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new q(Vt.packageComponent)),e.set(M.OPERATIONS_ENUM.PACKAGE_COMPONENT,new q(Vt.packageComponent)),e.set(M.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new q(Vt.deployComponent)),e.set(M.OPERATIONS_ENUM.DEPLOY_COMPONENT,new q(Vt.deployComponent)),e.set(M.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new q(nq.readTransactionLog)),e.set(M.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new q(Nn,nq.deleteTransactionLogsBefore)),e.set(M.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new q(iq.installModules)),e.set(M.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new q(iq.auditModules)),e.set(M.OPERATIONS_ENUM.GET_BACKUP,new q(ci.getBackup)),e}a(kie,"initializeOperationFunctionMap")});var Mh=T((SAe,hq)=>{"use strict";var IA=A(),$ie=G(),u_=U(),{handleHDBError:wA,hdb_errors:Ph}=Z(),{isMainThread:Vie}=require("worker_threads"),{Readable:Yie}=require("stream"),fq=require("os"),Kie=require("util"),Wie=Lg(),Qie=Kie.promisify(Wie.authorize),Eq=dq(),{createGzip:jie,constants:Jie}=require("zlib");function zie(e){let t=`Found an uncaught exception with message: ${e.message}. ${fq.EOL}Stack: ${e.stack} ${fq.EOL}Terminating ${Vie?"HDB":"thread"}.`;console.error(t),u_.fatal(t),process.exit(1)}a(zie,"handleServerUncaughtException");function Xie(e,t,r){if(u_[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let s=e.statusCode?e.statusCode:Ph.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(s).send({error:e}):r.code(s).send(e.message?{error:e.message}:e)}a(Xie,"serverErrorHandler");function Zie(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=wA(new Error,"Invalid JSON.",Ph.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if($ie.isEmpty(e.body.operation)){let s=wA(new Error,"Request body must include an 'operation' property.",Ph.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(Zie,"reqBodyValidationHandler");function eoe(e,t,r){let s;e.body.operation!==IA.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==IA.OPERATIONS_ENUM.LOGIN&&e.body.operation!==IA.OPERATIONS_ENUM.LOGOUT?Qie(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{u_.warn(n),u_.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(wA(n,i,Ph.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.hdb_auth_header=e.headers.authorization,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(eoe,"authHandler");async function toe(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=Eq.chooseOperation(e.body);let n=await Eq.processLocalTransaction(e,s);if(n instanceof Yie&&n.headers){for(let[i,o]of n.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),n=n.pipe(jie({level:Jie.Z_BEST_SPEED})))}return n}catch(n){throw u_.error(n),n}}a(toe,"handlePostRequest");hq.exports={authHandler:eoe,handlePostRequest:toe,handleServerUncaughtException:zie,serverErrorHandler:Xie,reqBodyValidationHandler:Zie}});var Tq=T((gAe,Sq)=>{"use strict";var roe=require("fastify-plugin"),{handlePostRequest:mq,authHandler:soe,reqBodyValidationHandler:noe}=Mh();async function ioe(e){e.decorate("hdbCore",{preValidation:[noe,soe],request:t=>pq(mq(t,response)),requestWithoutAuthentication:(t,r)=>pq(mq(t,r,!0))})}a(ioe,"hdbCore");async function pq(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}a(pq,"convertAsyncIterators");Sq.exports=roe(ioe)});var Rq=T((AAe,gq)=>{"use strict";var CA=require("fs"),Nc=Q();Nc.initSync();var{CONFIG_PARAMS:l_}=A(),ooe=1024*1024*1024;function aoe(e){let t=Nc.get(l_.HTTP_TIMEOUT),r=Nc.get(l_.HTTP_KEEPALIVETIMEOUT),s={bodyLimit:ooe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=Nc.get(l_.TLS_PRIVATEKEY),i=Nc.get(l_.TLS_CERTIFICATE),o=Nc.get(l_.TLS_CERTIFICATEAUTHORITY);s.https={allowHTTP1:!0,key:CA.readFileSync(`${n}`),cert:CA.readFileSync(i)+(o?`
|
|
25
|
+
`},q:.8});xt.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,s]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let n=t[r];Array.isArray(n)?n.push(s):t.key=[n,s]}else t[r]=s},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});s0={type:"application/json",serializeStream:uh.streamAsJSON,serialize:JSON.stringify,deserialize:Zse,q:.8};xt.set("*/*",s0);xt.set("",s0);a(Zse,"tryJSONParse");a(tA,"registerContentHandlers");ene=require("fastify-plugin"),tne=ene(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=_h(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(_h,"findBestSerializer");XH=t0.default.get(r0.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(dh,"serialize");a(Ji,"serializeMessage");a(rne,"streamToBuffer");a(Tc,"getDeserializer");a(ZH,"deserializerUnknownType");a(sne,"transformIterable")});var fh={};Fe(fh,{start:()=>one});async function ine(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&od(e);let n=new zi;try{e.responseHeaders=n;let i=e.url.slice(1),o=sA.getMatch(i);if(!o)return t(e);e.handlerPath=o.path;let c={url:o.relativeURL,async:!0},u=o.Resource,_=r["cache-control"];if(_){_=_.toLowerCase();let p=_.match(/max-age=(\d+)/)?.[1];p&&(e.expiresAt=p*1e3+Date.now()),_.includes("only-if-cached")&&(e.onlyIfCached=!0),_.includes("no-cache")&&(e.noCache=!0),_.includes("no-store")&&(e.noCacheStore=!0),_.includes("stale-if-error")&&(e.staleIfError=!0),_.includes("must-revalidate")&&(e.mustRevalidate=!0)}let l=await We(e,()=>{if(s==="POST"||s==="PUT"||s==="PATCH"||s==="QUERY")try{e.data=Tc(r["content-type"],!0)(e.body)}catch(p){throw new r_.ClientError(p,400)}switch(e.authorize=!0,s){case"GET":case"HEAD":return u.get(c,e);case"POST":return u.post(c,e.data,e);case"PUT":return u.put(c,e.data,e);case"DELETE":return u.delete(c,e);case"PATCH":return u.patch(c,e.data,e);case"OPTIONS":n.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return u.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return u.query(c,e.data,e);case"COPY":return u.copy(c,r.destination,e);case"MOVE":return u.move(c,r.destination,e);case"BREW":throw new r_.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new r_.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,rA.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){nne[0]=f;let p=String.fromCharCode(34,(kt[0]&63)+62,(kt[0]>>6)+(kt[1]<<2&63)+62,(kt[1]>>4)+(kt[2]<<4&63)+62,(kt[2]>>2)+62,(kt[3]&63)+62,(kt[3]>>6)+(kt[4]<<2&63)+62,(kt[4]>>4)+(kt[5]<<4&63)+62,(kt[5]>>2)+62,(kt[6]&63)+62,(kt[6]>>6)+(kt[7]<<2&63)+62,34),S=r["if-none-match"];S&&p==S?(l?.onDone&&l.onDone(),d=304,l=void 0):n.setIfNone("ETag",p),rA.lastModified&&n.setIfNone("Last-Modified",new Date(f).toUTCString())}e.createdResource&&(d=201),e.newLocation&&n.setIfNone("Location",e.newLocation);let E={status:d,headers:n,body:void 0},h=l?.wasLoadedFromSource?.();return h!==void 0&&(E.wasCacheMiss=h,!h&&f&&n.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||f))/1e3))),l!==void 0&&(E.body=dh(l,e,E),s==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?ea.warn(i):ea.info(i):ea.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),n.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:n,body:void 0};return o.body=dh(i.contentType?i:i.toString(),e,o),o}}function one(e){rA=e,!i0&&(i0=!0,sA=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return ine(t,r)}),e.server.ws(async(t,r,s)=>{t_++;let n=new ys;o0||(o0=!0,Xu(l=>{t_>0&&l.push({metric:"ws-connections",connections:t_,byThread:!0})}));let i;t.on("error",l=>{i=!0,ea.warn(l)});let o;t.on("message",a(function(d){o||(o=Tc(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{t_--,cs(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=sA.getMatch(u);if(cs(!!_,"connection","ws","connect"),!_)t.send(Ji(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,xr(h=>({count:h.count,total:t_}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await We(r,()=>d.connect(l,n,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=Ji(E.value,r);t.send(h),xr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var ea,r_,kt,nne,rA,i0,sA,o0,t_,a0=Re(()=>{dc();Qn();ea=M(v()),r_=M(Z());ad();au();Ro();GE();kt=new Uint8Array(8),nne=new Float64Array(kt.buffer,0,1),rA={};a(ine,"http");t_=0;a(one,"start")});var nA=T((jRe,c0)=>{var{recordAction:Eh,recordActionBinary:ane}=(Qn(),te(Zu)),cne=require("fastify-plugin"),une=200;c0.exports=cne(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n,i)=>{let o=n.getResponseTime(),c=performance.now(),u=n.context.config,_,l,d;u.isOperation?(_=s.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),Eh(o,"duration",_,d,l),ane(n.raw.statusCode<400,"success",_,d,l);let f=une;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Eh(performance.now()-c,"transfer",_,d,l),Eh(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,Eh(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var cA=T((zRe,f0)=>{var Th=require("clone"),gh=Ve(),lne=G(),ph=R(),_ne=v(),hh=require("fs"),iA=require("joi"),{string:Sh}=iA.types(),{hdb_errors:dne,handleHDBError:s_}=Z(),{HDB_ERROR_MSGS:fne,HTTP_STATUS_CODES:mh}=dne,{common_validators:gc}=on(),u0=1e9,l0=" is required",Ene=["insert","update","upsert"],oA={database:{presence:!1,format:gc.schema_format,length:gc.schema_length},schema:{presence:!1,format:gc.schema_format,length:gc.schema_length},table:{presence:!0,format:gc.schema_format,length:gc.schema_length},action:{inclusion:{within:Ene,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},hne={schema:Sh.required(),table:Sh.required(),action:Sh.valid("insert","update","upsert")},{AWS_ACCESS_KEY:mne,AWS_SECRET:pne,AWS_BUCKET:Sne,AWS_FILE_KEY:Tne,REGION:gne}=ph.S3_BUCKET_AUTH_KEYS,Rne={s3:{presence:!0},[`s3.${mne}`]:{presence:!0,type:"String"},[`s3.${pne}`]:{presence:!0,type:"String"},[`s3.${Sne}`]:{presence:!0,type:"String"},[`s3.${Tne}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${gne}`]:{presence:!0,type:"String"}},_0=Th(oA);_0.data.presence={message:l0};var d0=Th(oA);d0.file_path.presence={message:l0};var Ane=Object.assign(Th(oA),Rne),aA=Th(hne);aA.csv_url=Sh.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();aA.passthrough_headers=iA.object();function One(e){let t=gh.validateObject(e,_0);return Rh(e,t)}a(One,"dataObject");function Nne(e){let t=gh.validateBySchema(e,iA.object(aA));return Rh(e,t)}a(Nne,"urlObject");function bne(e){let t=gh.validateObject(e,d0);return Rh(e,t)}a(bne,"fileObject");function yne(e){let t=gh.validateObject(e,Ane);return Rh(e,t)}a(yne,"s3FileObject");function Rh(e,t){if(!t){let r=lne.checkGlobalSchemaTable(e.schema,e.table);if(r)return s_(new Error,r,mh.BAD_REQUEST);if(e.operation===ph.OPERATIONS_ENUM.CSV_FILE_LOAD){try{hh.accessSync(e.file_path,hh.constants.R_OK|hh.constants.F_OK)}catch(s){return s.code===ph.NODE_ERROR_CODES.ENOENT?s_(s,`No such file or directory ${s.path}`,mh.BAD_REQUEST):s.code===ph.NODE_ERROR_CODES.EACCES?s_(s,`Permission denied ${s.path}`,mh.BAD_REQUEST):s_(s)}try{let s=hh.statSync(e.file_path).size;if(s>u0)return s_(new Error,fne.MAX_FILE_SIZE_ERR(s,u0),mh.BAD_REQUEST)}catch(s){_ne.error(s),console.error(s)}}}return t}a(Rh,"postValidateChecks");f0.exports={dataObject:One,urlObject:Nne,fileObject:bne,s3FileObject:yne}});var uA=T((XRe,E0)=>{"use strict";var n_=v(),Ah=R();async function Ine(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===Ah.OPERATIONS_ENUM.INSERT||t.operation===Ah.OPERATIONS_ENUM.UPDATE||t.operation===Ah.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===Ah.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(n_.info(i.message),i):i.http_resp_msg?(n_.error(`Error calling operation: ${e.name}`),n_.error(i.http_resp_msg),i):(n_.error(`Error calling operation: ${e.name}`),n_.error(i),i)}}a(Ine,"callOperationFunctionAsAwait");E0.exports={callOperationFunctionAsAwait:Ine}});var m0=T((eAe,h0)=>{"use strict";var lA=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}},_A=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};h0.exports={BulkLoadFileObject:lA,BulkLoadDataObject:_A}});var S0=T((rAe,p0)=>{"use strict";var dA=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};p0.exports=dA});var SA=T((cAe,v0)=>{"use strict";var Oh=dr(),bh=cA(),wne=require("needle"),$s=R(),nAe=ke(),Rc=G(),{handleHDBError:Ze,hdb_errors:I0}=Z(),{HTTP_STATUS_CODES:$t,HDB_ERROR_MSGS:At,CHECK_LOGS_WRAPPER:ra}=I0,Ac=v(),fA=require("papaparse");Rc.promisifyPapaParse();var Vs=require("fs-extra"),Cne=require("path"),{chain:T0}=require("stream-chain"),g0=require("stream-json/streamers/StreamArray"),R0=require("stream-json/utils/Batch"),A0=require("stream-chain/utils/comp"),{finished:O0}=require("stream"),Lne=j(),w0=uA(),Dne=JR(),{BulkLoadFileObject:hA,BulkLoadDataObject:Pne}=m0(),mA=xR(),{verifyBulkLoadAttributePerms:C0}=ih(),iAe=S0(),oAe=st(),aAe=Yn(),{databases:Mne}=(de(),te(De)),{coerceType:Une}=(yf(),te(MT)),N0="No records parsed from csv file.",ta=`${Lne.get("HDB_ROOT")}/tmp`,{schema_regex:vne}=on(),b0=1024*1024*2,y0=5e3,Bne={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};v0.exports={csvDataLoad:Hne,csvURLLoad:qne,csvFileLoad:Gne,importFromS3:Fne};async function Hne(e,t){let r=bh.dataObject(e);if(r)throw Ze(r,r.message,$t.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=P0(e.schema,e.table),i=fA.parse(e.data,{header:!0,skipEmptyLines:!0,transform:EA.bind(null,n),dynamicTyping:!1}),o=new mA;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&C0(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw Ze(new Error,c,$t.BAD_REQUEST,void 0,void 0,!0);let u=new Pne(e.action,e.schema,e.table,i.data);return s=await w0.callOperationFunctionAsAwait(M0,u,null),s.message===N0?N0:U0(s.records,s.number_written)}catch(n){throw sa(n)}}a(Hne,"csvDataLoad");async function qne(e){let t=bh.urlObject(e);if(t)throw Ze(t,t.message,$t.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${ta}/${r}`;try{await xne(e,r)}catch(n){throw Ac.error(At.DOWNLOAD_FILE_ERR(r)+" - "+n),Ze(n,ra(At.DOWNLOAD_FILE_ERR(r)))}try{let n=new hA(this.job_operation_function.name,e.action,e.schema,e.table,s,$s.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await pA(n);return await Nh(s),i}catch(n){throw await Nh(s),sa(n)}}a(qne,"csvURLLoad");async function Gne(e){let t=bh.fileObject(e);if(t)throw Ze(t,t.message,$t.BAD_REQUEST,void 0,void 0,!0);let r=new hA(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,$s.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await pA(r)}catch(s){throw sa(s)}}a(Gne,"csvFileLoad");async function Fne(e){let t=bh.s3FileObject(e);if(t)throw Ze(t,t.message,$t.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=Cne.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${ta}/${n}`;let i=new hA(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await kne(n,e);let o=await pA(i);return await Nh(r),o}catch(s){throw await Nh(r),sa(s)}}a(Fne,"importFromS3");async function xne(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await wne("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw Ze(s,n,s.statusCode,$s.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}Vne(r,e.csv_url),await $ne(t,r.raw)}a(xne,"downloadCSVFile");async function kne(e,t){try{let r=`${ta}/${e}`;await Vs.mkdirp(ta),await Vs.writeFile(`${ta}/${e}`,"",{flag:"a+"});let s=await Vs.createWriteStream(r),n=await Dne.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){Ac.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Ac.error(At.S3_DOWNLOAD_ERR+" - "+r),Ze(r,ra(At.S3_DOWNLOAD_ERR))}}a(kne,"downloadFileFromS3");async function $ne(e,t){try{await Vs.mkdirp(ta),await Vs.writeFile(`${ta}/${e}`,t)}catch(r){throw Ac.error(At.WRITE_TEMP_FILE_ERR),Ze(r,ra(At.DEFAULT_BULK_LOAD_ERR))}}a($ne,"writeFileToTempFolder");async function Nh(e){if(e)try{await Vs.access(e),await Vs.unlink(e)}catch{Ac.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Nh,"deleteTempFile");function Vne(e,t){if(e.statusCode!==I0.HTTP_STATUS_CODES.OK)throw Ze(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,$t.BAD_REQUEST);if(!Bne[e.headers["content-type"]])throw Ze(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,$t.BAD_REQUEST);if(!e.raw)throw Ze(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,$t.BAD_REQUEST)}a(Vne,"validateURLResponse");async function pA(e){try{let t;switch(e.file_type){case $s.VALID_S3_FILE_TYPES.CSV:t=await Yne(e);break;case $s.VALID_S3_FILE_TYPES.JSON:t=await Kne(e);break;default:throw Ze(new Error,At.DEFAULT_BULK_LOAD_ERR,$t.BAD_REQUEST,$s.LOG_LEVELS.ERROR,At.INVALID_FILE_EXT_ERR(e))}return U0(t.records,t.number_written)}catch(t){throw sa(t)}}a(pA,"fileLoad");async function L0(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await Oh.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&C0(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=Ze(c);r(u)}}a(L0,"validateChunk");async function D0(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;Rc.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!Rc.isEmpty(c)&&!Rc.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await w0.callOperationFunctionAsAwait(M0,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=Ze(c,ra(At.INSERT_CSV_ERR),$t.INTERNAL_SERVER_ERROR,$s.LOG_LEVELS.ERROR,At.INSERT_CSV_ERR+" - "+c);r(u)}}a(D0,"insertChunk");async function Yne(e){let t={records:0,number_written:0},r=P0(e.schema,e.table);try{let s=new mA,n=Vs.createReadStream(e.file_path,{highWaterMark:b0});n.setEncoding("utf8"),await fA.parsePromise(n,L0.bind(null,e,s),EA.bind(null,r));let i=s.getPermsResponse();if(i)throw Ze(new Error,i,$t.BAD_REQUEST);return n=Vs.createReadStream(e.file_path,{highWaterMark:b0}),n.setEncoding("utf8"),await fA.parsePromise(n,D0.bind(null,e,t),EA.bind(null,r)),n.destroy(),t}catch(s){throw Ze(s,ra(At.PAPA_PARSE_ERR),$t.INTERNAL_SERVER_ERROR,$s.LOG_LEVELS.ERROR,At.PAPA_PARSE_ERR+s)}}a(Yne,"callPapaParse");function P0(e,t){let r=Mne[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>Une(i,n));return s}a(P0,"createTransformMap");function EA(e,t,r){let s=e.get(r);return s?s(t):Rc.autoCast(t)}a(EA,"typeFunction");async function Kne(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new mA,n=T0([Vs.createReadStream(e.file_path,{encoding:"utf-8"}),g0.withParser(),c=>c.value,new R0({batchSize:y0}),A0(async c=>{await L0(e,s,r,c)})]);await new Promise((c,u)=>{O0(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw Ze(new Error,i,$t.BAD_REQUEST);let o=T0([Vs.createReadStream(e.file_path,{encoding:"utf-8"}),g0.withParser(),c=>c.value,new R0({batchSize:y0}),A0(async c=>{await D0(e,t,r,c)})]);return await new Promise((c,u)=>{O0(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw Ze(s,ra(At.INSERT_JSON_ERR),$t.INTERNAL_SERVER_ERROR,$s.LOG_LEVELS.ERROR,At.INSERT_JSON_ERR+s)}}a(Kne,"insertJson");async function M0(e){let t={};try{e.data&&e.data.length>0&&Wne(e.data[0])?t=await Qne(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Ac.info(t.message))}catch(r){throw sa(r)}return t}a(M0,"callBulkFileLoad");function Wne(e){let t=Object.keys(e);for(let r of t)if(!vne.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Wne,"validateColumnNames");async function Qne(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=Oh.insert;break;case"update":i=Oh.update;break;case"upsert":i=Oh.upsert;break;default:throw Ze(new Error,At.INVALID_ACTION_PARAM_ERR(s),$t.BAD_REQUEST,$s.LOG_LEVELS.ERROR,At.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let l=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][l])>=0&&e.splice(d,1)}let u=Rc.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw sa(o)}}a(Qne,"bulkFileLoad");function U0(e,t){return`successfully loaded ${t} of ${e} records`}a(U0,"buildResponseMsg");function sa(e){return Ze(e,ra(At.DEFAULT_BULK_LOAD_ERR),$t.INTERNAL_SERVER_ERROR,$s.LOG_LEVELS.ERROR,At.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(sa,"buildTopLevelErrMsg")});var H0=T((lAe,B0)=>{"use strict";var TA=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};B0.exports=TA});var F0=T((dAe,G0)=>{"use strict";var jne=R(),q0=require("moment"),zne=require("uuid").v4,gA=class{static{a(this,"JobObject")}constructor(){this.id=zne(),this.type=void 0,this.start_datetime=q0().valueOf(),this.created_datetime=q0().valueOf(),this.end_datetime=void 0,this.status=jne.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};G0.exports=gA});var RA=T((EAe,K0)=>{"use strict";var Jne=require("uuid").v4,$0=dr(),V0=_r(),Xne=Ps(),Zne=Ma(),eie=H0(),et=R(),tie=F0(),rie=sE(),Ss=v(),sie=Nu(),Oc=G(),{promisify:nie}=require("util"),na=require("moment"),iie=ah(),yh=cA(),x0=jS(),{deleteTransactionLogsBeforeValidator:oie}=BR(),{handleHDBError:aie,hdb_errors:cie}=Z(),{HTTP_STATUS_CODES:uie}=cie,k0=V0.searchByValue,lie=V0.searchByHash,_ie=$0.insert,die=nie(iie.evaluateSQL),fie=$0.update;K0.exports={addJob:mie,updateJob:Sie,handleGetJob:Eie,handleGetJobsByStartDate:hie,getJobById:Y0};async function Eie(e){try{let t=await Y0(e.id);return Oc.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw Ss.error("There was an error getting job",t),new Error(r)}}a(Eie,"handleGetJob");async function hie(e){try{let t=await pie(e);if(Ss.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=na(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=na(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw Ss.error(r),new Error(r)}}a(hie,"handleGetJobsByStartDate");async function mie(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Oc.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return Ss.info(l),t.error=l,t}if(!et.JOB_TYPE_ENUM[e.operation])return Ss.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case et.OPERATIONS_ENUM.CSV_FILE_LOAD:s=yh.fileObject(e);break;case et.OPERATIONS_ENUM.CSV_URL_LOAD:s=yh.urlObject(e);break;case et.OPERATIONS_ENUM.CSV_DATA_LOAD:s=yh.dataObject(e);break;case et.OPERATIONS_ENUM.IMPORT_FROM_S3:s=yh.s3FileObject(e);break;case et.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case et.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=x0(e,"date");break;case et.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=x0(e,"timestamp");break;case et.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=oie(e);break;default:break}if(s)throw aie(s,s.message,uie.BAD_REQUEST,void 0,void 0,!0);let n=new tie;n.type=e.operation===et.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?et.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new Xne(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await k0(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return Ss.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=Jne();try{o=await k0(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return Ss.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Ss.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new sie(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await _ie(u)}catch(l){return Ss.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${n.operation} and id ${n.id}`;else{let l=`Created a job with type ${n.type} and id ${n.id}`;t.message=l,t.createdJob=n,t.success=!0,Ss.trace(l)}return t}a(mie,"addJob");async function pie(e){let t=na(e.from_date,na.ISO_8601),r=na(e.to_date,na.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new eie(s,e.hdb_user);try{return await die(n)}catch(i){throw Ss.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(pie,"getJobsInDateRange");async function Y0(e){if(Oc.isEmptyOrZeroLength(e))return Oc.errorizeMessage("Invalid job ID specified.");let t=new Zne(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await lie(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Ss.error(s),Oc.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(Y0,"getJobById");async function Sie(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Oc.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===et.JOB_STATUS_ENUM.COMPLETE||e.status===et.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=na().valueOf());let t=new rie(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await fie(t),r}a(Sie,"updateJob")});var X0=T((mAe,J0)=>{"use strict";var W0=G(),Ir=R(),Tie=require("moment"),Ih=SA(),wh=v(),Q0=RA(),j0=ch(),z0=Uo(),gie=Qe(),Rie=th(),AA=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Aie(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if(W0.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(W0.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Ir.JOB_TYPE_ENUM.csv_file_load:await oi(e,Ih.csvFileLoad);break;case Ir.JOB_TYPE_ENUM.csv_url_load:await oi(e,Ih.csvURLLoad);break;case Ir.JOB_TYPE_ENUM.csv_data_load:await oi(e,Ih.csvDataLoad);break;case Ir.JOB_TYPE_ENUM.import_from_s3:await oi(e,Ih.importFromS3);break;case Ir.JOB_TYPE_ENUM.empty_trash:break;case Ir.JOB_TYPE_ENUM.export_local:await oi(e,j0.export_local);break;case Ir.JOB_TYPE_ENUM.export_to_s3:await oi(e,j0.export_to_s3);break;case Ir.JOB_TYPE_ENUM.delete_files_before:case Ir.JOB_TYPE_ENUM.delete_records_before:await oi(e,z0.deleteFilesBefore);break;case Ir.JOB_TYPE_ENUM.delete_audit_logs_before:await oi(e,z0.deleteAuditLogsBefore);break;case Ir.JOB_TYPE_ENUM.delete_transaction_logs_before:await oi(e,Rie.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(Aie,"parseMessage");async function oi(e,t){try{e.job.status=Ir.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Tie().valueOf(),await Q0.updateJob(e.job),await Oie(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):wh.error(`There was an error running ${t.name} job with id ${e.job.id}`),wh.error(s),e.job.message=s,e.job.status=Ir.JOB_STATUS_ENUM.ERROR;try{await Q0.updateJob(e.job)}catch(n){throw wh.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(oi,"runJob");async function Oie(e){wh.trace("launching job thread:",e),gie.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Ir.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(Oie,"launchJobThread");J0.exports={parseMessage:Aie,RunnerMessage:AA}});var eq=T((SAe,Z0)=>{"use strict";var OA=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};Z0.exports=OA});var mq=T((gAe,CA)=>{"use strict";var Ph=_r(),yA=ah(),Ch=SA(),ai=Qf(),Lh=Mi(),o_=Uo(),Nie=dg(),i_=Er(),Dh=Zf(),Vt=JE(),Ot=v(),bie=Og(),yie=bl(),Iie=rR(),wie=mE(),Cie=SE(),Lie=sR(),Die=RE(),Pie=OE(),NA=bE(),tq=ch(),Mie=ih(),IA=RA(),U=R(),{hdb_errors:c_,handleHDBError:a_}=Z(),{HTTP_STATUS_CODES:rq}=c_,bA=IE(),sq=Qo(),dq=require("util"),Nc=dr(),Uie=as(),vie=zn(),nq=X0(),iq=Rl(),oq=($E(),te(xl)),aq=rt(),cq=th(),uq=QE(),{setServerUtilities:Bie}=(yf(),te(MT)),{CONTEXT:Hie}=(ws(),te(ep)),{_assignPackageExport:qie}=require("../index"),{transformReq:Gie}=G(),{server:Fie}=(Pr(),te(So)),xie=uA(),lq=Ph.searchByHash,kie=Ph.searchByValue,$ie=dq.promisify(Ph.search),Vie=dq.promisify(yA.evaluateSQL),Yie={[U.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[U.OPERATIONS_ENUM.CREATE_TABLE]:!0,[U.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[U.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[U.OPERATIONS_ENUM.DROP_TABLE]:!0,[U.OPERATIONS_ENUM.DROP_SCHEMA]:!0},q=eq();async function fq(e,t){try{if(e.body.operation!=="read_log"&&(Ot.log_level===U.LOG_LEVELS.INFO||Ot.log_level===U.LOG_LEVELS.DEBUG||Ot.log_level===U.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;Ot.info(o)}}catch(s){Ot.error(s)}let r=await xie.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Yie[e.body.operation]&&Uie.setSchemaDataToGlobal(s=>{s&&Ot.error(s)}),r}a(fq,"processLocalTransaction");var _q=Wie();CA.exports={chooseOperation:Eq,getOperationFunction:hq,operation:wA,processLocalTransaction:fq};Bie(CA.exports);Fie.operation=wA;function Eq(e){let t;try{t=hq(e)}catch(n){throw Ot.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=yA.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=yA.checkASTPermissions(e,i);if(o)throw Ot.error(`${rq.FORBIDDEN} from operation ${e.operation}`),Ot.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),a_(new Error,o,c_.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==U.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==U.OPERATIONS_ENUM.LOGIN&&e.operation!==U.OPERATIONS_ENUM.LOGOUT){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=Mie.verifyPerms(i,n);if(o)throw Ot.error(`${rq.FORBIDDEN} from operation ${e.operation}`),Ot.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),a_(new Error,o,c_.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw a_(n,"There was an error when trying to choose an operation path")}return r}a(Eq,"chooseOperation");function hq(e){if(Ot.trace(`getOperationFunction with operation: ${e.operation}`),_q.has(e.operation))return _q.get(e.operation);throw a_(new Error,c_.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),c_.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(hq,"getOperationFunction");qie("operation",wA);function wA(e,t){e.hdb_user=this[Hie]?.user,e.bypass_auth=!t;let r=Eq(e);return fq({body:e},r)}a(wA,"operation");async function Kie(e){Ot.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[U.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case U.OPERATIONS_ENUM.INSERT:o=await Nc.insert(i);break;case U.OPERATIONS_ENUM.UPDATE:o=await Nc.update(i);break;case U.OPERATIONS_ENUM.UPSERT:o=await Nc.upsert(i);break;case U.OPERATIONS_ENUM.DELETE:o=await o_.deleteRecord(i);break;default:Ot.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Ot.info("Invalid operation in transaction"),Ot.error(o)}}a(Kie,"catchup");async function On(e){Gie(e);let t,r;try{r=await IA.addJob(e),t=r.createdJob,Ot.info("addJob result",r);let s=new nq.RunnerMessage(t,e);return await nq.parseMessage(s),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw Ot.error(n),a_(s,n)}}a(On,"executeJob");function Wie(){let e=new Map;return e.set(U.OPERATIONS_ENUM.INSERT,new q(Nc.insert)),e.set(U.OPERATIONS_ENUM.UPDATE,new q(Nc.update)),e.set(U.OPERATIONS_ENUM.UPSERT,new q(Nc.upsert)),e.set(U.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new q(Ph.searchByConditions)),e.set(U.OPERATIONS_ENUM.SEARCH_BY_HASH,new q(lq)),e.set(U.OPERATIONS_ENUM.SEARCH_BY_ID,new q(lq)),e.set(U.OPERATIONS_ENUM.SEARCH_BY_VALUE,new q(kie)),e.set(U.OPERATIONS_ENUM.SEARCH,new q($ie)),e.set(U.OPERATIONS_ENUM.SQL,new q(Vie)),e.set(U.OPERATIONS_ENUM.CSV_DATA_LOAD,new q(On,Ch.csvDataLoad)),e.set(U.OPERATIONS_ENUM.CSV_FILE_LOAD,new q(On,Ch.csvFileLoad)),e.set(U.OPERATIONS_ENUM.CSV_URL_LOAD,new q(On,Ch.csvURLLoad)),e.set(U.OPERATIONS_ENUM.IMPORT_FROM_S3,new q(On,Ch.importFromS3)),e.set(U.OPERATIONS_ENUM.CREATE_SCHEMA,new q(ai.createSchema)),e.set(U.OPERATIONS_ENUM.CREATE_DATABASE,new q(ai.createSchema)),e.set(U.OPERATIONS_ENUM.CREATE_TABLE,new q(ai.createTable)),e.set(U.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new q(ai.createAttribute)),e.set(U.OPERATIONS_ENUM.DROP_SCHEMA,new q(ai.dropSchema)),e.set(U.OPERATIONS_ENUM.DROP_DATABASE,new q(ai.dropSchema)),e.set(U.OPERATIONS_ENUM.DROP_TABLE,new q(ai.dropTable)),e.set(U.OPERATIONS_ENUM.DROP_ATTRIBUTE,new q(ai.dropAttribute)),e.set(U.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new q(Lh.describeSchema)),e.set(U.OPERATIONS_ENUM.DESCRIBE_DATABASE,new q(Lh.describeSchema)),e.set(U.OPERATIONS_ENUM.DESCRIBE_TABLE,new q(Lh.describeTable)),e.set(U.OPERATIONS_ENUM.DESCRIBE_ALL,new q(Lh.describeAll)),e.set(U.OPERATIONS_ENUM.DELETE,new q(o_.deleteRecord)),e.set(U.OPERATIONS_ENUM.ADD_USER,new q(i_.addUser)),e.set(U.OPERATIONS_ENUM.ALTER_USER,new q(i_.alterUser)),e.set(U.OPERATIONS_ENUM.DROP_USER,new q(i_.dropUser)),e.set(U.OPERATIONS_ENUM.LIST_USERS,new q(i_.listUsersExternal)),e.set(U.OPERATIONS_ENUM.LIST_ROLES,new q(Dh.listRoles)),e.set(U.OPERATIONS_ENUM.ADD_ROLE,new q(Dh.addRole)),e.set(U.OPERATIONS_ENUM.ALTER_ROLE,new q(Dh.alterRole)),e.set(U.OPERATIONS_ENUM.DROP_ROLE,new q(Dh.dropRole)),e.set(U.OPERATIONS_ENUM.USER_INFO,new q(i_.userInfo)),e.set(U.OPERATIONS_ENUM.READ_LOG,new q(bie)),e.set(U.OPERATIONS_ENUM.ADD_NODE,new q(yie)),e.set(U.OPERATIONS_ENUM.UPDATE_NODE,new q(Iie)),e.set(U.OPERATIONS_ENUM.REMOVE_NODE,new q(wie)),e.set(U.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new q(Cie)),e.set(U.OPERATIONS_ENUM.PURGE_STREAM,new q(Lie)),e.set(U.OPERATIONS_ENUM.SET_CONFIGURATION,new q(aq.setConfiguration)),e.set(U.OPERATIONS_ENUM.CLUSTER_STATUS,new q(Die.clusterStatus)),e.set(U.OPERATIONS_ENUM.CLUSTER_NETWORK,new q(Pie)),e.set(U.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new q(NA.setRoutes)),e.set(U.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new q(NA.getRoutes)),e.set(U.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new q(NA.deleteRoutes)),e.set(U.OPERATIONS_ENUM.EXPORT_TO_S3,new q(On,tq.export_to_s3)),e.set(U.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new q(On,o_.deleteFilesBefore)),e.set(U.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new q(On,o_.deleteFilesBefore)),e.set(U.OPERATIONS_ENUM.EXPORT_LOCAL,new q(On,tq.export_local)),e.set(U.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new q(IA.handleGetJobsByStartDate)),e.set(U.OPERATIONS_ENUM.GET_JOB,new q(IA.handleGetJob)),e.set(U.OPERATIONS_ENUM.GET_FINGERPRINT,new q(bA.getFingerprint)),e.set(U.OPERATIONS_ENUM.SET_LICENSE,new q(bA.setLicense)),e.set(U.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new q(bA.getRegistrationInfo)),e.set(U.OPERATIONS_ENUM.RESTART,new q(sq.restart)),e.set(U.OPERATIONS_ENUM.RESTART_SERVICE,new q(sq.restartService)),e.set(U.OPERATIONS_ENUM.CATCHUP,new q(Kie)),e.set(U.OPERATIONS_ENUM.SYSTEM_INFORMATION,new q(vie.systemInformation)),e.set(U.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new q(On,o_.deleteAuditLogsBefore)),e.set(U.OPERATIONS_ENUM.READ_AUDIT_LOG,new q(Nie)),e.set(U.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new q(iq.createTokens)),e.set(U.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new q(iq.refreshOperationToken)),e.set(U.OPERATIONS_ENUM.LOGIN,new q(oq.login)),e.set(U.OPERATIONS_ENUM.LOGOUT,new q(oq.logout)),e.set(U.OPERATIONS_ENUM.GET_CONFIGURATION,new q(aq.getConfiguration)),e.set(U.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new q(Vt.customFunctionsStatus)),e.set(U.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new q(Vt.getCustomFunctions)),e.set(U.OPERATIONS_ENUM.GET_COMPONENT_FILE,new q(Vt.getComponentFile)),e.set(U.OPERATIONS_ENUM.GET_COMPONENTS,new q(Vt.getComponents)),e.set(U.OPERATIONS_ENUM.SET_COMPONENT_FILE,new q(Vt.setComponentFile)),e.set(U.OPERATIONS_ENUM.DROP_COMPONENT,new q(Vt.dropComponent)),e.set(U.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new q(Vt.getCustomFunction)),e.set(U.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new q(Vt.setCustomFunction)),e.set(U.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new q(Vt.dropCustomFunction)),e.set(U.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new q(Vt.addComponent)),e.set(U.OPERATIONS_ENUM.ADD_COMPONENT,new q(Vt.addComponent)),e.set(U.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new q(Vt.dropCustomFunctionProject)),e.set(U.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new q(Vt.packageComponent)),e.set(U.OPERATIONS_ENUM.PACKAGE_COMPONENT,new q(Vt.packageComponent)),e.set(U.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new q(Vt.deployComponent)),e.set(U.OPERATIONS_ENUM.DEPLOY_COMPONENT,new q(Vt.deployComponent)),e.set(U.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new q(cq.readTransactionLog)),e.set(U.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new q(On,cq.deleteTransactionLogsBefore)),e.set(U.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new q(uq.installModules)),e.set(U.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new q(uq.auditModules)),e.set(U.OPERATIONS_ENUM.GET_BACKUP,new q(ai.getBackup)),e}a(Wie,"initializeOperationFunctionMap")});var Uh=T((AAe,Tq)=>{"use strict";var LA=R(),Qie=G(),u_=v(),{handleHDBError:DA,hdb_errors:Mh}=Z(),{isMainThread:jie}=require("worker_threads"),{Readable:zie}=require("stream"),pq=require("os"),Jie=require("util"),Xie=Mg(),Zie=Jie.promisify(Xie.authorize),Sq=mq(),{createGzip:eoe,constants:toe}=require("zlib");function roe(e){let t=`Found an uncaught exception with message: ${e.message}. ${pq.EOL}Stack: ${e.stack} ${pq.EOL}Terminating ${jie?"HDB":"thread"}.`;console.error(t),u_.fatal(t),process.exit(1)}a(roe,"handleServerUncaughtException");function soe(e,t,r){if(u_[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let s=e.statusCode?e.statusCode:Mh.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(s).send({error:e}):r.code(s).send(e.message?{error:e.message}:e)}a(soe,"serverErrorHandler");function noe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=DA(new Error,"Invalid JSON.",Mh.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(Qie.isEmpty(e.body.operation)){let s=DA(new Error,"Request body must include an 'operation' property.",Mh.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(noe,"reqBodyValidationHandler");function ioe(e,t,r){let s;e.body.operation!==LA.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==LA.OPERATIONS_ENUM.LOGIN&&e.body.operation!==LA.OPERATIONS_ENUM.LOGOUT?Zie(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{u_.warn(n),u_.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(DA(n,i,Mh.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.hdb_auth_header=e.headers.authorization,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(ioe,"authHandler");async function ooe(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=Sq.chooseOperation(e.body);let n=await Sq.processLocalTransaction(e,s);if(n instanceof zie&&n.headers){for(let[i,o]of n.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),n=n.pipe(eoe({level:toe.Z_BEST_SPEED})))}return n}catch(n){throw u_.error(n),n}}a(ooe,"handlePostRequest");Tq.exports={authHandler:ioe,handlePostRequest:ooe,handleServerUncaughtException:roe,serverErrorHandler:soe,reqBodyValidationHandler:noe}});var Oq=T((NAe,Aq)=>{"use strict";var aoe=require("fastify-plugin"),{handlePostRequest:gq,authHandler:coe,reqBodyValidationHandler:uoe}=Uh();async function loe(e){e.decorate("hdbCore",{preValidation:[uoe,coe],request:t=>Rq(gq(t,response)),requestWithoutAuthentication:(t,r)=>Rq(gq(t,r,!0))})}a(loe,"hdbCore");async function Rq(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}a(Rq,"convertAsyncIterators");Aq.exports=aoe(loe)});var bq=T((yAe,Nq)=>{"use strict";var PA=require("fs"),bc=j();bc.initSync();var{CONFIG_PARAMS:l_}=R(),_oe=1024*1024*1024;function doe(e){let t=bc.get(l_.HTTP_TIMEOUT),r=bc.get(l_.HTTP_KEEPALIVETIMEOUT),s={bodyLimit:_oe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=bc.get(l_.TLS_PRIVATEKEY),i=bc.get(l_.TLS_CERTIFICATE),o=bc.get(l_.TLS_CERTIFICATEAUTHORITY);s.https={allowHTTP1:!0,key:PA.readFileSync(`${n}`),cert:PA.readFileSync(i)+(o?`
|
|
26
26
|
|
|
27
|
-
`+
|
|
27
|
+
`+PA.readFileSync(o):"")},s.http2=!0}return s}a(doe,"getServerOptions");Nq.exports=doe});var wq=T((wAe,Iq)=>{"use strict";var MA=j();MA.initSync();var{CONFIG_PARAMS:yq}=R();function foe(){let e=MA.get(yq.HTTP_CORSACCESSLIST),t=MA.get(yq.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(s,n)=>n(null,e.indexOf(s)!==-1))),r}a(foe,"getCORSOptions");Iq.exports=foe});var Dq=T((LAe,Lq)=>{"use strict";var Cq=j();Cq.initSync();var Eoe=R();function hoe(){return Cq.get(Eoe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(hoe,"getHeaderTimeoutConfig");Lq.exports=hoe});var BA={};Fe(BA,{customFunctionsServer:()=>Soe,handleFile:()=>poe,ready:()=>Roe});async function poe(e,t,r,s){if(!ci){let c=UA.get(vA.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);ci=Vq(c),Tt.http((await ci).server)}let n=await ci,i=(0,Mq.dirname)(r),o=t.replace(/\/routes\/.*/g,"");if(o.startsWith("/")&&(o=o.slice(1)),!Pq.has(i)){Pq.add(i);try{n.register(goe(i,o))}catch(c){if(c.message==="Root plugin has already booted")Ue.warn(`Could not load root fastify route for ${r}, this may require a restart to install properly`);else throw c}}}async function Soe(){try{Ue.info("In Custom Functions Fastify server"+process.cwd()),Ue.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ue.debug(`Custom Functions server process ${process.pid} starting up.`),await Toe();let e=UA.get(vA.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=ci=await Vq(t)}catch(s){throw Ue.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw Ue.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){Ue.error(`Custom Functions ${process.pid} Error: ${e}`),Ue.error(e),process.exit(1)}}async function Toe(){try{Ue.info("Custom Functions starting configuration."),await Gq.setUsersToGlobal(),Ue.info("Custom Functions completed configuration.")}catch(e){Ue.error(e)}}function goe(e,t){return async function(r){try{Ue.info("Custom Functions starting buildRoutes"),Ue.trace("Loading fastify routes folder "+e),(0,Uq.existsSync)(e)&&r.register(qq.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:Ue.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?Ue.error(n.message):n&&Ue.error(n),o()})}catch(s){Ue.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function Vq(e){Ue.info("Custom Functions starting buildServer.");let t=(0,Fq.default)(e),r=(0,vq.default)(t);r.server.headersTimeout=(0,kq.default)(),r.setErrorHandler($q.serverErrorHandler);let s=(0,xq.default)();return s&&r.register(Bq.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(Hq.default),await r.register(moe),await r.after(),tA(r),Ue.info("Custom Functions completed buildServer."),r}function Roe(){if(ci)return ci.then?ci.then(e=>e.ready()):ci.ready()}var Mq,Uq,vq,Bq,Hq,qq,UA,vA,Ue,moe,Gq,Fq,xq,kq,$q,ci,Pq,Yq=Re(()=>{Mq=require("path"),Uq=require("fs"),vq=M(require("fastify")),Bq=M(require("@fastify/cors")),Hq=M(nA()),qq=M(require("@fastify/autoload")),UA=M(j()),vA=M(R()),Ue=M(v()),moe=M(Oq()),Gq=M(Er()),Fq=M(bq()),xq=M(wq()),kq=M(Dq()),$q=M(Uh());dc();Pr();Pq=new Set;a(poe,"handleFile");a(Soe,"customFunctionsServer");a(Toe,"setUp");a(goe,"buildRouteFolder");a(Vq,"buildServer");a(Roe,"ready")});var HA={};Fe(HA,{start:()=>Aoe});function Aoe(e){return{handleFile(t,r,s){Wq||(Wq=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=Kq.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,Qq.default)(n,(0,jq.realpathSync)(o))}}return i(n)},{runFirst:!0})),Kq.set(r,s)}}}var Qq,jq,Kq,Wq,zq=Re(()=>{Qq=M(require("send")),jq=require("fs"),Kq=new Map;a(Aoe,"start")});var eG=T((GAe,Zq)=>{"use strict";var Ooe=require("cluster"),Ys=j();Ys.initSync();var Xq=R(),BAe=require("util"),ui=v(),qA=require("fs"),Noe=require("fastify"),HAe=mo(),boe=require("@fastify/cors"),yoe=require("@fastify/compress"),Ioe=require("@fastify/static"),woe=nA(),Coe=require("path"),{PACKAGE_ROOT:Loe}=R(),Doe=as(),Poe=G(),Moe=Er(),Uoe=Ku(),{server:voe}=(Pr(),te(So)),{authHandler:Boe,handlePostRequest:Hoe,serverErrorHandler:qoe,reqBodyValidationHandler:Goe}=Uh(),qAe=require("net"),{registerContentHandlers:Foe}=(dc(),te(n0)),xoe=6e4,koe=1024*1024*1024,$oe="TRUE",{CONFIG_PARAMS:li}=Xq,ia;Zq.exports={hdbServer:Jq,start:Jq};async function Jq(e){try{ui.info("In Fastify server"+process.cwd()),ui.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),ui.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Ooe.isMaster,await Voe();let t=Ys.get(li.OPERATIONSAPI_NETWORK_SECUREPORT)!=null;ia=Yoe(t),await ia.ready(),e||(e={}),e.isOperationsServer=!0,ia.server.cantCleanupProperly=!0;try{voe.http(ia.server,e),ia.server.closeIdleConnections||await ia.listen({port:0,host:"::"})}catch(r){throw ia.close(),ui.error(r),ui.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),ui.fatal(t),process.exit(1)}}a(Jq,"operationsServer");async function Voe(){ui.trace("Configuring HarperDB process."),Doe.setSchemaDataToGlobal(),await Moe.setUsersToGlobal(),await Uoe.getLicense()}a(Voe,"setUp");function Yoe(e){ui.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Koe(e),r=Noe(t);r.server.headersTimeout=Qoe(),r.setErrorHandler(qoe);let s=Woe();s&&r.register(boe,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(woe),r.register(yoe),r.register(Ioe,{root:Coe.join(Loe,"studio")}),Foe(r);let n=Ys.get(Xq.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Poe.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Goe,Boe],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Hoe(i,o)}),r.get("/health",()=>"HarperDB is running."),ui.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Yoe,"buildServer");function Koe(e){let t=Ys.get(li.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ys.get(li.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:koe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Ys.get(li.OPERATIONSAPI_TLS_PRIVATEKEY),i=Ys.get(li.OPERATIONSAPI_TLS_CERTIFICATE),o=Ys.get(li.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY),c={allowHTTP1:!0,key:qA.readFileSync(n),cert:qA.readFileSync(i)+(o?`
|
|
28
28
|
|
|
29
|
-
`+vA.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(xoe,"getServerOptions");function koe(){let e=Vs.get(_i.OPERATIONSAPI_NETWORK_CORS),t=Vs.get(_i.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===qoe)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(s,n)=>n(null,t.indexOf(s)!==-1))),r}a(koe,"getCORSOpts");function $oe(){return Vs.get(_i.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Boe}a($oe,"getHeaderTimeoutConfig")});var aG=T((GAe,oG)=>{"use strict";var{decode:Voe}=require("msgpackr"),{isMainThread:Yoe,parentPort:Koe,threadId:HAe}=require("worker_threads"),HA=st(),di=ke(),Woe=A(),__=U(),zq=Q(),Zq=A();Qe();var Qoe=Kn(),{recordAction:joe,recordActionBinary:Joe}=(jn(),te(Zu)),{publishToStream:zoe}=HA,qAe={durable:di.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:di.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Xoe,Zoe,eae,eG,tG;oG.exports={initialize:rG,workQueueListener:iG,setSubscription:tae,setIgnoreOrigin:sae,getDatabaseSubscriptions:rae};async function rG(){tG=!0,__.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await HA.getNATSReferences();Xoe=e,Zoe=e.info.server_name,eae=t,eG=r}a(rG,"initialize");var vh=new Map;function tae(e,t,r){let s=vh.get(e);s||vh.set(e,s=new Map),s.set(t,r),tG||rG().then(iG)}a(tae,"setSubscription");function rae(){return vh}a(rae,"getDatabaseSubscriptions");var sG;function sae(e){sG=e}a(sae,"setIgnoreOrigin");var nG=100,Xq=new Array(nG),Uh=0;async function iG(){let t=await(await eG.consumers.get(di.WORK_QUEUE_CONSUMER_NAMES.stream_name,di.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await Xq[Uh],Xq[Uh]=nae(r).catch(s=>{__.error(s)}),++Uh>=nG&&(Uh=0)}a(iG,"workQueueListener");Yoe||Koe.on("message",async e=>{let{type:t}=e;t===Zq.ITC_EVENT_TYPES.SHUTDOWN&&HA.closeConnection()});async function nae(e){let t=Voe(e.data);joe(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=zq.get(Woe.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(di.MSG_HEADERS.TRANSACTED_NODES)&&r.values(di.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(di.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!sG),Joe(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(di.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;__.trace("processing message:",o,c,_,(l?"records: "+l.map(b=>b?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),__.trace(`messageProcessor nats msg id: ${e.headers.get(di.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:S,user:m,node_name:g}=f||{},R=vh.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:BA(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:S,table:_,onCommit:h,user:m,nodeName:g});else{let b=l.map((V,$)=>({type:BA(o),value:V,expiresAt:E,id:d?.[$],table:_}));for(;u;)b.push({type:BA(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;R.send({type:"transaction",writes:b,table:_,timestamp:S,onCommit:h,user:m,nodeName:g})}zq.get(Zq.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&zoe(e.subject.split(".").slice(0,-1).join("."),Qoe.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){__.error(o)}e.ack()}a(nae,"messageProcessor");function BA(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(BA,"convertOperation")});var $A={};Fe($A,{disableNATS:()=>oae,publishToStream:()=>Gh,setNATSReplicator:()=>qA,setPublishToStream:()=>aae,setSubscription:()=>kA,start:()=>iae});function iae(){Hh.default.get(qh.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&uae()}function oae(e=!0){fG=e}function aae(e,t){Gh=e,kA=t}function uae(){if(fG||process.env._DISABLE_NATS)return;let e=Ms(),t=Object.keys(e);t.push("system");for(let r of t){let s=e[r];for(let n in s){let i=s[n];qA(n,r,i)}}vT((r,s)=>{qA(r.tableName,r.databaseName,r),s&&hG(r)}),!cG&&(cG=!0)}function qA(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(n=>n?.isNATSReplicator))return;r.sourcedFrom(class extends Mt{static{a(this,"NATSReplicator")}put(i){return s(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Le],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Le]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Le],record:i})}invalidate(){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Le]})}static defineSchema(i){hG(i)}static subscribe(){let i=new bs;return kA(t,e,i),i}static subscribeOnThisThread(i){return i<cae}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function s(n){let i=n?.transaction?.nats;if(!i)if(n?.transaction){n.transaction.nats=i=new Bh(n.transaction,n);let o=n.transaction;for(;o.next;)o=o.next;o.next=n.transaction.nats,i.user=n.user,i.context=n}else i=EG;return i}a(s,"getNATSTransaction")}function hG(e){let t=Hh.default.get(qh.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Gh(`${FA.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,xA.createNatsTableStreamName)(e.databaseName,e.tableName),void 0,{operation:"define_schema",schema:e.databaseName,table:e.tableName,attributes:e.attributes,__origin:{timestamp:Date.now(),node_name:t}})}var uG,FA,xA,lG,_G,Hh,qh,dG,fG,Gh,kA,cae,EG,cG,Bh,GA,mG=Re(()=>{de();Is();uG=P(st()),FA=P(ke()),xA=P(Kn());ou();lG=P(aG()),_G=P(ar()),Hh=P(Q()),qh=P(A()),dG=P(U());a(iae,"start");a(oae,"disableNATS");Gh=uG.publishToStream,kA=lG.setSubscription;a(aae,"setPublishToStream");cae=2;a(uae,"assignReplicationSource");a(qA,"setNATSReplicator");a(hG,"publishSchema");Bh=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let s=this.writes_by_db.get(t);s||this.writes_by_db.set(t,s=[]),s.push(r)}commit({timestamp:t}){let r=Hh.default.get(qh.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,i]of this.writes_by_db){let o=[],c=[],u,_;for(let l of i){let d=l.table,f=l.operation=="put"?"upsert":l.operation;u||(dG.trace(`Sending transaction event ${f}`),_=u={operation:f,schema:n,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,f!=="delete"&&f!=="invalidate"&&(u.records=o)),u.table===d&&u.operation===f?(o.push(l.record),c.push(l.id)):_=_.next={operation:f,table:d,id:l.id,record:l.record},l.expiresAt&&(_.expiresAt=l.expiresAt)}u&&s.push(Gh(`${FA.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,xA.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},GA=class extends Bh{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,_G.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};EG=new GA});async function SG({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await VA.getResource(e,{});n=new KA(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await VA.get(e);i&&i.delete()}n=new xh(e,t)}return n}function YA(){return Fh++,Fh>65500&&(Fh=1),Fh}var pG,bc,VA,Fh,xh,KA,TG=Re(()=>{de();cu();pG=P(ar()),bc=P(U());Ro();VA=ut({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]});a(SG,"getSession");Fh=1;a(YA,"getNextMessageId");xh=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,omitCurrent:i,startTime:o}=t,c=n.indexOf("?"),u,_;if(c>-1?(u=n.slice(c),_=n.slice(0,c)):_=n,!_)throw new Error("No topic provided");let l=!1,d;if((_.endsWith("+")||_.endsWith("#"))&&(l=!0,_.endsWith("+")&&(d=!0),_=_.slice(0,_.length-1)),_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");if(_.indexOf("#")>-1||_.indexOf("+")>-1)throw new Error("Only trailing wildcards are supported");let f=this.subscriptions.find(R=>R.topic===n);f&&(f.end(),this.subscriptions.splice(this.subscriptions.indexOf(f),1));let E={search:u,async:!0,user:this.user,startTime:o,omitCurrent:i,isCollection:l,shallowWildcard:d,url:""};o&&(0,bc.trace)("Resuming subscription from",n,"from",o);let h=wi.getMatch(_);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);E.url=h.relativeURL;let S=h.path,m=h.Resource,g=await We(E,async()=>{let R=await m.subscribe(E);if(!R)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let b of R)try{let V;if(b.type&&b.type!=="put"&&b.type!=="delete"&&b.type!=="message"||s&&!s(b))continue;r?(b.topic=n,V=this.needsAcknowledge(b)):(b.acknowledge?.(),V=YA());let $=b.id;Array.isArray($)&&($=Ta($)),$==null&&($=""),this.listener(S+"/"+$,b.value,V,t)}catch(V){(0,bc.warn)(V)}})(),R});return g.topic=n,g.qos=t.qos,this.subscriptions.push(g),g}resume(){}needsAcknowledge(t){let r=YA();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t);r&&r.end()}async publish(t,r){let{topic:s,retain:n}=t;t.data=r,t.user=this.user,t.async=!0;let i=wi.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);t.url=i.relativeURL;let o=i.Resource;return We(t,()=>n?r===void 0?o.delete(t,t):o.put(t,t.data,t):o.publish(t,t.data,t))}setListener(t){this.listener=t}disconnect(){for(let t of this.subscriptions)t.end();this.subscriptions=[]}},KA=class extends xh{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,s){super(t,r),this.sessionRecord=s||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,s){return super.addSubscription(t,r,s)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=YA(),s={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(s.acknowledge=t.acknowledge),this.awaitingAcks.set(r,s),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let s=r.topic;for(let[,n]of this.awaitingAcks)if(n.topic===s&&n.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===s){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,bc.trace)("Received ack",s,r.timestamp),this.sessionRecord.update();return}}for(let n of this.sessionRecord.subscriptions)n.topic===s&&(n.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:s,startTime:n}=t;return s>0&&!n&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,pG.getNextMonotonicTime)()),(0,bc.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),VA.put(this.sessionRecord)),t.qos}}});var QA={};Fe(QA,{start:()=>_ae});async function _ae({server:e,port:t,webSocket:r,securePort:s,requireAuthentication:n}){let i=e.mqtt={requireAuthentication:n};r&&e.ws((o,c,u)=>{if(o.protocol==="mqtt"){let{onMessage:_,onClose:l}=AG(o,(d,f)=>{if(o.send(d),f&&o._socket.writableNeedDrain)return new Promise(E=>this._socket.once("drain",E))},c,Promise.resolve(u).then(()=>c?.user),i);o.on("message",_),o.on("close",l),o.on("error",d=>{(0,Ss.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;lae&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,OG.getSuperUser)());let{onMessage:u,onClose:_}=AG(o,l=>o.write(l),null,c,i);o.on("data",u),o.on("close",_),o.on("error",l=>{(0,Ss.info)("Socket error",l)})},{port:t,securePort:s})}function AG(e,t,r,s,n){RG||(RG=!0,Xu(d=>{kh>0&&d.push({metric:"mqtt-connections",connections:kh,byThread:!0})}));let i;kh++;let o,c={protocolVersion:4},u=(0,$h.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){kh--,i||(i=!0,o?.disconnect(),as(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.on("packet",async d=>{s?.then&&(s=await s),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{s=await Tt.getUser(d.username,d.password.toString()),(0,WA.get)(fi.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&gG.notify({username:s.username,status:fi.AUTH_AUDIT_STATUS.SUCCESS,type:fi.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,WA.get)(fi.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&gG.error({username:s.username,status:fi.AUTH_AUDIT_STATUS.FAILURE,type:fi.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!s&&n.requireAuthentication)return as(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{n.authorizeClient?.(d,s),o=SG({user:s,...d}),o=await o}catch(b){return(0,Ss.error)(b),as(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:b.code||5,returnCode:b.code||128})}as(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((b,V,$,F)=>{try{let w=b.indexOf("/",1),W=w>0?b.slice(0,w):b;f({cmd:"publish",topic:b,payload:E(V),messageId:$||Math.floor(Math.random()*1e8),qos:F.qos},W)}catch(w){(0,Ss.error)(w),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let b of d.subscriptions){let V;try{V=(await o.addSubscription(b,b.qos>=1)).qos||0}catch($){(0,Ss.error)($),V=128}h.push(V)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":for(let b of d.unsubscriptions)o.removeSubscription(b);f({cmd:"unsuback",messageId:d.messageId});break;case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let S=d.qos===2?"pubrec":"puback",m=e.deserialize||(e.deserialize=Sc(r?.headers.get?.("content-type"))),g=d.payload?.length>0?m(d.payload):void 0,R;try{R=await o.publish(d,g)}catch(b){(0,Ss.warn)(b),d.qos>0&&f({cmd:S,messageId:d.messageId,reasonCode:128,returnCode:128},d.topic)}d.qos>0&&f({cmd:S,messageId:d.messageId,reasonCode:R===!1?144:0,returnCode:R===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(),as(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,Ss.error)(h),f({cmd:"disconnect"})}function f(h,S){let m=(0,$h.generate)(h,c);t(m),xr(m.length,"bytes-sent",S,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return zi(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var $h,OG,WA,fi,Ss,gG,lae,RG,kh,NG=Re(()=>{$h=require("mqtt-packet");TG();OG=P(Er());_c();jn();Pr();WA=P(Q()),fi=P(A()),Ss=P(U()),gG=(0,Ss.loggerWithTag)("auth-event"),lae=!0;a(_ae,"start");kh=0;a(AG,"onSocket")});var yG={};Fe(yG,{Request:()=>jA,createReuseportFd:()=>Vh});var bG,jA,JA,zA,Vh,XA=Re(()=>{bG=require("os"),jA=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let s=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=s,this.headers=new zA(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get body(){return this.#e||(this.#e=new JA(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},JA=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},zA=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}forEach(t){for(let[r,s]of this)t(s,r,this)}};(0,bG.platform)()!="win32"&&(Vh=require("node-unix-socket").createReuseportFd)});var zE={};Fe(zE,{component_errors:()=>yc,loadComponent:()=>Yh,loadComponentDirectories:()=>vG,setErrorReporter:()=>hae});function vG(e,t){t&&(eO=t),e&&(tO=e);let r=[];if((0,Ys.existsSync)(ZA)){let n=(0,Ys.readdirSync)(ZA,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Lt.join)(ZA,o);r.push(Yh(c,eO,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Yh(s,eO,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{UG=!0})}function hae(e){E_=e}async function Yh(e,t,r,s,n,i){if(!wG.has(e)){wG.set(e,!0),n&&(tO=n);try{let o;s&&(yc=new Map);let c=(0,Lt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Ys.existsSync)(c)?o=s?(0,MG.getConfigObj)():(0,CG.parseDocument)((0,Ys.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=rO;let u=[],_=s;for(let l in o){let d=o[l];if(yc.set(s?l:(0,Lt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let R=e,b;for(;!(0,Ys.existsSync)(b=(0,Lt.join)(R,"node_modules",l));)if(R=(0,Lt.dirname)(R),R.length<(0,PG.getHdbBasePath)().length){b=null;break}if(b)f=await Yh(b,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=Eae[l];if(!f)continue;u.push(f);let h=a(R=>(R.origin=r,ut(R)),"ensureTable"),S=d.network||(d.port||d.securePort)&&d,m=S?.securePort||S?.https&&S.port,g=!S?.https&&S?.port;if(d_.isMainThread&&(f=await f.startOnMainThread?.({server:Tt,ensureTable:h,port:g,securePort:m,resources:t,...d})||f,s&&S))for(let R of[g,m])try{if(+R&&!IG.includes(R)){let b=sO.get(nO.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);b&&f_.default.warn("Session affinity is not recommended and may cause memory leaks"),(b||!Vh)&&(IG.push(R),iO(R,b))}}catch(b){console.error("Error listening on socket",R,b,l)}if(t.isWorker&&(f=await f.start?.({server:Tt,ensureTable:h,port:g,securePort:m,resources:t,...d})||f),tO.set(f,!0),f.handleFile&&d.files){if(d.files.includes(".."))throw(0,DG.handleHDBError)("Can not reference parent directories");let R=(0,Lt.join)(e,d.files).replace(/\\/g,"/"),b=R.indexOf("/*");if(b>-1&&d.files!==rO[l]?.files&&!(0,Ys.existsSync)(R.slice(0,b)))throw new Error(`The path '${R.slice(0,b)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);for(let V of await(0,LG.default)(R,{onlyFiles:!1,objectMode:!0})){let{path:$,dirent:F}=V;_=!0;let w=(0,Lt.relative)(e,$).replace(/\\/g,"/");if(d.root){let k=d.root;if(k.startsWith("/")&&(k=k.slice(1)),k.endsWith("/")&&(k=k.slice(0,-1)),k+="/",w.startsWith(k))w=w.slice(k.length);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${w}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`)}let W=(0,Lt.basename)(e),B=d.path||"/";B=B.startsWith("/")?B:B.startsWith("./")?"/"+W+B.slice(2):B==="."?"/"+W:"/"+W+"/"+B,B+=(B.endsWith("/")?"":"/")+w;try{if(F.isFile()){let k=await fae($);d_.isMainThread&&await f.setupFile?.(k,B,$,t),t.isWorker&&await f.handleFile?.(k,B,$,t)}else d_.isMainThread&&await f.setupDirectory?.(B,$,t),t.isWorker&&await f.handleDirectory?.(B,$,t)}catch(k){k.message=`Could not load ${F.isFile()?"file":"directory"} '${$}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${k.message}`,E_?.(k),((0,Ic.getWorkerIndex)()===0?console:f_.default).error(k),t.set(d.path||"/",new h_(k)),yc.set(s?l:(0,Lt.basename)(e),k.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,Lt.basename)(e)}' due to: ${h.message}`,E_?.(h),((0,Ic.getWorkerIndex)()===0?console:f_.default).error(h),t.set(d.path||"/",new h_(h),null,!0),yc.set(s?l:(0,Lt.basename)(e),h.message)}}if(d_.isMainThread&&!UG&&i&&(0,Ic.watchDir)(e,async()=>vG()),o.extensionModule)return await qf((0,Lt.join)(e,o.extensionModule));if(!_){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;E_?.(new Error(l)),((0,Ic.getWorkerIndex)()===0?console:f_.default).error(l),yc.set((0,Lt.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,E_?.(o),t.set("",new h_(o))}}}var Ys,Lt,d_,CG,sO,nO,LG,Ic,f_,DG,PG,dae,MG,fae,ZA,tO,UG,eO,yc,Eae,rO,IG,wG,E_,h_,XE=Re(()=>{Ys=require("fs"),Lt=require("path"),d_=require("worker_threads"),CG=require("yaml"),sO=P(Q()),nO=P(A());yP();LP();DP();s0();xq();Kq();LG=P(require("fast-glob")),Ic=P(Qe()),f_=P(U());kT();Pr();DG=P(Z());Is();de();Kh();PG=P(Q()),dae=P(Jq());kE();mG();NG();MG=P(rt());XA();({readFile:fae}=Ys.promises),ZA=sO.get(nO.CONFIG_PARAMS.COMPONENTSROOT),tO=new Map,yc=new Map;a(vG,"loadComponentDirectories");Eae={REST:dh,rest:dh,graphqlSchema:xT,jsResource:VT,fastifyRoutes:MA,login:KT,static:UA,operationsApi:dae,customFunctions:{},http:{},clustering:$A,authentication:xl,mqtt:QA},rO={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(rO,"static",{value:{files:"web/**"}});IG=[],wG=new Map;a(hae,"setErrorReporter");a(Yh,"loadComponent");h_=class extends Mt{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var Wh=T((hOe,HG)=>{var{isMainThread:BG}=require("worker_threads"),{getTables:mae}=(de(),te(De)),{loadComponentDirectories:pae,loadComponent:Sae}=(XE(),te(zE)),{resetResources:Tae}=(cu(),te(xb)),gae=LR(),Rae=rt(),{dirname:Aae}=require("path"),{getConnection:Oae}=st(),Nae=Q(),bae=A(),oO=new Map;async function yae(e=!1){!BG&&Nae.get(bae.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Oae();try{BG&&await gae()}catch(s){console.error(s)}let t=Tae();mae(),t.isWorker=e,await Sae(Aae(Rae.getConfigFilePath()),t,"hdb",!0,oO),await pae(oO,t);let r=[];for(let[s]of oO)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(yae,"loadRootComponents");HG.exports.loadRootComponents=yae});var Qe=T((pOe,to)=>{"use strict";var{Worker:Iae,MessageChannel:wae,parentPort:bn,isMainThread:_O,threadId:Cae,workerData:Ei}=require("worker_threads"),{PACKAGE_ROOT:Lae}=A(),{join:FG,isAbsolute:Dae,extname:Pae}=require("path"),{server:xG}=(Pr(),te(So)),{watch:Mae,readdir:Uae}=require("fs/promises"),{totalmem:qG}=require("os"),Jh=A(),vae=Q(),hi=U(),{randomBytes:Bae}=require("crypto"),{_assignPackageExport:Hae}=require("../index"),qae=A(),Gae=1024*1024,eo=[],Ts=[],Fae=50,dO=1e4,xae="restart",kG="request_thread_info",$G="resource_report",VG="thread_info",YG="added-port",kae="ack",aO;Hae("threads",Ts);to.exports={startWorker:cO,restartWorkers:EO,shutdownWorkers:Wae,workers:eo,setMonitorListener:tce,onMessageFromWorkers:Qae,onMessageByType:zG,broadcast:Jae,broadcastWithAcknowledgement:Xae,setChildListenerByType:Kae,getWorkerIndex:KG,getWorkerCount:WG,getTicketKeys:QG,setMainIsWorker:Vae,setTerminateTimeout:$ae,restartNumber:Ei?.restartNumber||1};Ts.onMessageByType=zG;Ts.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Ts.find(s=>s.threadId===e);if(r)return r.postMessage(t),!0};var fO;function $ae(e){dO=e}a($ae,"setTerminateTimeout");function KG(){return Ei?Ei.workerIndex:fO?0:void 0}a(KG,"getWorkerIndex");function WG(){return Ei?Ei.workerCount:fO?1:void 0}a(WG,"getWorkerCount");function Vae(e){fO=e}a(Vae,"setMainIsWorker");var Qh;function QG(){return Qh||(Qh=_O?Bae(48):Ei.ticketKeys,Qh)}a(QG,"getTicketKeys");Object.defineProperty(xG,"workerIndex",{get(){return KG()}});Object.defineProperty(xG,"workerCount",{get(){return WG()}});var jG={[kG](e,t){Zae(t)},[$G](e,t){ece(t,e)}};function cO(e,t={}){let r=process.constrainedMemory?.()||qG();r=Math.min(r,qG());let s=Math.max(Math.floor(r/Gae/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[],o=[];for(let u of Ts){let _=new wae;_.existingPort=u,i.push(_),o.push(_.port2)}Pae(e)||(e+=".js");let c=new Iae(Dae(e)?e:FG(Lae,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:t.threadCount,name:t.name,restartNumber:to.exports.restartNumber,ticketKeys:QG()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:YG,port:u,threadId:c.threadId},[u]);return zh(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>cO(e,t),c.on("error",u=>{console.error("Worker error:",u),hi.error("Worker error:",u)}),c.on("exit",u=>{eo.splice(eo.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Fae?(t.unexpectedRestarts=c.unexpectedRestarts+1,cO(e,t)):hi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{jG[u.type]?.(u,c)}),eo.push(c),sce(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(cO,"startWorker");var Yae=[Jh.THREAD_TYPES.HTTP];async function EO(e=null,t=2,r=!0){if(_O){if(r){let{loadRootComponents:o}=Wh();await o()}to.exports.restartNumber++,t<1&&(t=t*eo.length);let s=[],n=[];for(let o of eo.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;hi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:to.exports.restartNumber,type:Jh.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Yae.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),dO*2).unref();o.on("exit",()=>{clearTimeout(l),s.splice(s.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(s.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===qae.ITC_EVENT_TYPES.CHILD_STARTED&&(hi.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");hi.trace("Waiting for worker to start",_.threadId),_.on("message",f)});n.push(l),s.length>=t&&await Promise.race(s),n.length>=t&&await Promise.race(n)}}await Promise.all(s),await Promise.all(n);let{restartService:i}=Qo();r&&(e==="http"||!e)&&vae.get(Jh.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else bn.postMessage({type:xae,workerType:e})}a(EO,"restartWorkers");function Kae(e,t){jG[e]=t}a(Kae,"setChildListenerByType");function Wae(e){return EO(e,1/0,!1)}a(Wae,"shutdownWorkers");var JG=[];function Qae(e){JG.push(e)}a(Qae,"onMessageFromWorkers");var uO=new Map;function zG(e,t){let r=uO.get(e);r||uO.set(e,r=[]),r.push(t)}a(zG,"onMessageByType");var jae=10;async function Jae(e){let t=0;for(let r of Ts)try{r.postMessage(e),t++>jae&&(t=0,await new Promise(setImmediate))}catch(s){hi.error("Unable to send message to worker",s)}}a(Jae,"broadcast");var jh=new Map,zae=1;function Xae(e){return new Promise(t=>{let r=0;for(let s of Ts)try{let n=zae++,i=a(()=>{jh.delete(n),--r===0&&t(),s!==bn&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,jh.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of jh)o.port===s&&o()})),s.postMessage(e),r++}catch(n){hi.error("Unable to send message to worker",n)}r===0&&t()})}a(Xae,"broadcastWithAcknowledgement");function Zae(e){e.postMessage({type:VG,workers:XG()})}a(Zae,"sendThreadInfo");function XG(){let e=Date.now();return eo.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(XG,"getChildWorkerInfo");function ece(e,t){e.resources=t,e.resources.updated=Date.now()}a(ece,"recordResourceReport");var lO;function tce(e){lO=e}a(tce,"setMonitorListener");var rce=1e3,GG=!1;function sce(){GG||(GG=!0,setInterval(()=>{for(let e of eo){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}lO&&lO()},rce).unref())}a(sce,"startMonitoring");var nce=1e3;if(bn){zh(bn);for(let e=0,t=Ei.addPorts.length;e<t;e++){let r=Ei.addPorts[e];r.threadId=Ei.addThreadIds[e],zh(r)}setInterval(()=>{let e=process.memoryUsage();bn.postMessage({type:$G,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},nce).unref(),aO=a(()=>new Promise((e,t)=>{bn.on("message",r),bn.postMessage({type:kG});function r(s){s.type===VG&&(bn.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else aO=XG;to.exports.getThreadInfo=aO;function zh(e,t){Ts.push(e),e.on("message",r=>{if(r.type===YG)r.port.threadId=r.threadId,zh(r.port);else if(r.type===kae){let s=jh.get(r.id);s&&s()}else{for(let n of JG)n(r,e);let s=uO.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){hi.error(i)}}}).on("close",()=>{Ts.splice(Ts.indexOf(e),1)}).on("exit",()=>{Ts.splice(Ts.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(zh,"addPort");if(_O){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await Uae(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(FG(s,i.name));try{for await(let{filename:i}of Mae(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await EO(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");to.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else bn.on("message",async e=>{let{type:t}=e;t===Jh.ITC_EVENT_TYPES.SHUTDOWN&&(to.exports.restartNumber=e.restartNumber,bn.unref(),setTimeout(()=>{hi.warn("Thread did not voluntarily terminate",Cae),process.exit(0)},dO).unref())})});var aF=T(S_=>{"use strict";var{isMainThread:ice,parentPort:p_,threadId:wc}=require("worker_threads"),{Socket:oce,createServer:ace}=require("net"),{createServer:cce,IncomingMessage:uce}=require("http"),{createServer:lce}=require("https"),{readFileSync:Cc}=require("fs"),Ks=U(),Dt=Q(),mi=A(),{server:Zh}=(Pr(),te(So)),{WebSocketServer:_ce}=require("ws"),{createServer:dce}=require("tls"),{getTicketKeys:fce,restartNumber:Ece}=Qe(),{Headers:hce}=(qE(),te(OB)),{recordAction:m_,recordActionBinary:mce}=(jn(),te(Zu)),{Request:rF,node_request_key:TOe,createReuseportFd:ZG}=(XA(),te(yG));if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){Ece<=1&&Ks.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:gOe,CONFIG_PARAMS:pce}=mi;Dt.initSync();var Sce=Dt.get(pce.HTTP_SESSIONAFFINITY),yn={};S_.registerServer=gO;S_.httpServer=RO;S_.deliverSocket=TO;S_.startServers=sF;Zh.http=RO;Zh.request=Ace;Zh.socket=Oce;Zh.ws=Nce;var hO=[],mO=[],Tce,oa={},Xh={},gce=[],pO=[];function sF(){return Wh().loadRootComponents(!0).then(()=>{p_?.on("message",t=>{let{port:r,fd:s,data:n}=t;if(s)TO(s,r,n);else if(t.requestId)Rce(t);else if(t.type===mi.ITC_EVENT_TYPES.SHUTDOWN){Ks.trace("received shutdown request",wc);for(let i in yn){Ks.trace("closing server",i,wc);let o=yn[i],c;o.closeIdleConnections?.(),o.close?.(()=>{Ks.trace("closed server",i,wc),clearInterval(c),setTimeout(()=>{console.log("forced close server",i,wc),o.cantCleanupProperly||Ks.warn("Had to forcefully exit the thread",wc),process.exit(0)},o.cantCleanupProperly?2500:5e3).unref()}),c=setTimeout(()=>{o.closeAllConnections?.()},1500).unref()}if(process.env.DEV_MODE)try{require("inspector").close()}catch(i){console.error("Could not close debugger",i)}}}).ref();let e=[];if(ZG&&!Sce)for(let t in yn){let r=yn[t],s;try{s=ZG(+t,"::")}catch(n){console.error(`Unable to bind to port ${t}`,n);continue}e.push(new Promise((n,i)=>{r.listen({fd:s},()=>{n(),Ks.trace("Listening on port "+t,wc)}).on("error",i)}))}Promise.all(e).then(()=>{p_?.postMessage({type:mi.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(sF,"startServers");ice||sF();function TO(e,t,r){let s=e?.read?e:new oce({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),n=yn[t];if(n.isSecure&&(s.startTime=performance.now()),n)typeof n=="function"?n(s):n.emit("connection",s),r&&s.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=yn[t];c?(typeof c=="function"?c(s):c.emit("connection",s),r&&s.emit("data",r)):o<5?i(o+1):(Ks.error(`Server on port ${t} was not registered`),s.destroy())},1e3)},"retry");i(1)}return s}a(TO,"deliverSocket");var eF=new Map;function Rce(e){let{port:t,event:r,data:s,requestId:n}=e,i;switch(i=eF.get(n),r){case"connection":i=TO(void 0,t),eF.set(n,i),i.write=(c,u,_)=>(p_.postMessage({requestId:n,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(p_.postMessage({requestId:n,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),p_.postMessage({requestId:n,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(s,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}a(Rce,"proxyRequest");function gO(e,t){+t||(t=parseInt(Dt.get(mi.CONFIG_PARAMS.HTTP_PORT),10));let r=yn[t];if(r){let s=r.lastServer||r;s.off("unhandled",tF),s.on("unhandled",(n,i)=>{e.cantCleanupProperly&&(r.cantCleanupProperly=!0),e.emit("request",n,i)}),r.lastServer=e}else yn[t]=e;e.on("unhandled",tF)}a(gO,"registerServer");function nF(e){let t=[],r=parseInt(e?.securePort);return r&&t.push({port:r,secure:!0}),r=parseInt(e?.port),r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],Dt.get(mi.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:Dt.get(mi.CONFIG_PARAMS.HTTP_PORT),secure:Dt.get(mi.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Dt.get(mi.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:Dt.get(mi.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),t}a(nF,"getPorts");function RO(e,t){for(let{port:r,secure:s}of nF(t))iF(r,s,t?.isOperationsServer),typeof e=="function"?pO[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):gO(e,r),Xh[r]=SO(pO,r),Tce=SO(gce,r)}a(RO,"httpServer");function iF(e,t,r){if(!oa[e]){let s=r?"operationsApi_network":"http",n={keepAliveTimeout:Dt.get(s+"_keepAliveTimeout"),headersTimeout:Dt.get(s+"_headersTimeout"),requestTimeout:Dt.get(s+"_timeout")};if(t){s=r?"operationsApi_":"";let i=Dt.get(s+"tls_privateKey"),o=Dt.get(s+"tls_certificate"),c=Dt.get(s+"tls_certificateAuthority");Object.assign(n,{key:Cc(i),cert:Cc(o)+(c?`
|
|
29
|
+
`+qA.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(Koe,"getServerOptions");function Woe(){let e=Ys.get(li.OPERATIONSAPI_NETWORK_CORS),t=Ys.get(li.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===$oe)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(s,n)=>n(null,t.indexOf(s)!==-1))),r}a(Woe,"getCORSOpts");function Qoe(){return Ys.get(li.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??xoe}a(Qoe,"getHeaderTimeoutConfig")});var _G=T(($Ae,lG)=>{"use strict";var{decode:joe}=require("msgpackr"),{isMainThread:zoe,parentPort:Joe,threadId:xAe}=require("worker_threads"),FA=st(),_i=ke(),Xoe=R(),__=v(),tG=j(),sG=R();Qe();var Zoe=Yn(),{recordAction:eae,recordActionBinary:tae}=(Qn(),te(Zu)),{publishToStream:rae}=FA,kAe={durable:_i.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:_i.WORK_QUEUE_CONSUMER_NAMES.deliver_group},sae,nae,iae,nG,iG;lG.exports={initialize:oG,workQueueListener:uG,setSubscription:oae,setIgnoreOrigin:cae,getDatabaseSubscriptions:aae};async function oG(){iG=!0,__.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await FA.getNATSReferences();sae=e,nae=e.info.server_name,iae=t,nG=r}a(oG,"initialize");var Bh=new Map;function oae(e,t,r){let s=Bh.get(e);s||Bh.set(e,s=new Map),s.set(t,r),iG||oG().then(uG)}a(oae,"setSubscription");function aae(){return Bh}a(aae,"getDatabaseSubscriptions");var aG;function cae(e){aG=e}a(cae,"setIgnoreOrigin");var cG=100,rG=new Array(cG),vh=0;async function uG(){let t=await(await nG.consumers.get(_i.WORK_QUEUE_CONSUMER_NAMES.stream_name,_i.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await rG[vh],rG[vh]=uae(r).catch(s=>{__.error(s)}),++vh>=cG&&(vh=0)}a(uG,"workQueueListener");zoe||Joe.on("message",async e=>{let{type:t}=e;t===sG.ITC_EVENT_TYPES.SHUTDOWN&&FA.closeConnection()});async function uae(e){let t=joe(e.data);eae(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=tG.get(Xoe.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(_i.MSG_HEADERS.TRANSACTED_NODES)&&r.values(_i.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(_i.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!aG),tae(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(_i.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;__.trace("processing message:",o,c,_,(l?"records: "+l.map(O=>O?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),__.trace(`messageProcessor nats msg id: ${e.headers.get(_i.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:A}=f||{},g=Bh.get(c)?.get(_);if(!g)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,g.send(t);else if(l.length===1&&!u)g.send({type:GA(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:A});else{let O=l.map((V,$)=>({type:GA(o),value:V,expiresAt:E,id:d?.[$],table:_}));for(;u;)O.push({type:GA(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;g.send({type:"transaction",writes:O,table:_,timestamp:p,onCommit:h,user:S,nodeName:A})}tG.get(sG.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&rae(e.subject.split(".").slice(0,-1).join("."),Zoe.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){__.error(o)}e.ack()}a(uae,"messageProcessor");function GA(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(GA,"convertOperation")});var KA={};Fe(KA,{disableNATS:()=>_ae,publishToStream:()=>Fh,setNATSReplicator:()=>xA,setPublishToStream:()=>dae,setSubscription:()=>YA,start:()=>lae});function lae(){qh.default.get(Gh.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Eae()}function _ae(e=!0){pG=e}function dae(e,t){Fh=e,YA=t}function Eae(){if(pG||process.env._DISABLE_NATS)return;let e=Us(),t=Object.keys(e);t.push("system");for(let r of t){let s=e[r];for(let n in s){let i=s[n];xA(n,r,i)}}qT((r,s)=>{xA(r.tableName,r.databaseName,r),s&&TG(r)}),!dG&&(dG=!0)}function xA(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(n=>n?.isNATSReplicator))return;r.sourcedFrom(class extends Mt{static{a(this,"NATSReplicator")}put(i){return s(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Le],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Le]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Le],record:i})}invalidate(){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Le]})}static defineSchema(i){TG(i)}static subscribe(){let i=new ys;return YA(t,e,i),i}static subscribeOnThisThread(i){return i<fae}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function s(n){let i=n?.transaction?.nats;if(!i)if(n?.transaction){n.transaction.nats=i=new Hh(n.transaction,n);let o=n.transaction;for(;o.next;)o=o.next;o.next=n.transaction.nats,i.user=n.user,i.context=n}else i=SG;return i}a(s,"getNATSTransaction")}function TG(e){let t=qh.default.get(Gh.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Fh(`${$A.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,VA.createNatsTableStreamName)(e.databaseName,e.tableName),void 0,{operation:"define_schema",schema:e.databaseName,table:e.tableName,attributes:e.attributes,__origin:{timestamp:Date.now(),node_name:t}})}var fG,$A,VA,EG,hG,qh,Gh,mG,pG,Fh,YA,fae,SG,dG,Hh,kA,gG=Re(()=>{de();ws();fG=M(st()),$A=M(ke()),VA=M(Yn());au();EG=M(_G()),hG=M(ar()),qh=M(j()),Gh=M(R()),mG=M(v());a(lae,"start");a(_ae,"disableNATS");Fh=fG.publishToStream,YA=EG.setSubscription;a(dae,"setPublishToStream");fae=2;a(Eae,"assignReplicationSource");a(xA,"setNATSReplicator");a(TG,"publishSchema");Hh=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let s=this.writes_by_db.get(t);s||this.writes_by_db.set(t,s=[]),s.push(r)}commit({timestamp:t}){let r=qh.default.get(Gh.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,i]of this.writes_by_db){let o=[],c=[],u,_;for(let l of i){let d=l.table,f=l.operation=="put"?"upsert":l.operation;u||(mG.trace(`Sending transaction event ${f}`),_=u={operation:f,schema:n,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,f!=="delete"&&f!=="invalidate"&&(u.records=o)),u.table===d&&u.operation===f?(o.push(l.record),c.push(l.id)):_=_.next={operation:f,table:d,id:l.id,record:l.record},l.expiresAt&&(_.expiresAt=l.expiresAt)}u&&s.push(Fh(`${$A.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,VA.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},kA=class extends Hh{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,hG.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};SG=new kA});async function AG({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await WA.getResource(e,{});n=new jA(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await WA.get(e);i&&i.delete()}n=new kh(e,t)}return n}function QA(){return xh++,xh>65500&&(xh=1),xh}var RG,yc,WA,xh,kh,jA,OG=Re(()=>{de();uu();RG=M(ar()),yc=M(v());Ro();WA=ut({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]});a(AG,"getSession");xh=1;a(QA,"getNextMessageId");kh=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,omitCurrent:i,startTime:o}=t,c=n.indexOf("?"),u,_;if(c>-1?(u=n.slice(c),_=n.slice(0,c)):_=n,!_)throw new Error("No topic provided");let l=!1,d;if((_.endsWith("+")||_.endsWith("#"))&&(l=!0,_.endsWith("+")&&(d=!0),_=_.slice(0,_.length-1)),_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");if(_.indexOf("#")>-1||_.indexOf("+")>-1)throw new Error("Only trailing wildcards are supported");let f=this.subscriptions.find(g=>g.topic===n);f&&(f.end(),this.subscriptions.splice(this.subscriptions.indexOf(f),1));let E={search:u,async:!0,user:this.user,startTime:o,omitCurrent:i,isCollection:l,shallowWildcard:d,url:""};o&&(0,yc.trace)("Resuming subscription from",n,"from",o);let h=wi.getMatch(_);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);E.url=h.relativeURL;let p=h.path,S=h.Resource,A=await We(E,async()=>{let g=await S.subscribe(E);if(!g)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!g[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let O of g)try{let V;if(O.type&&O.type!=="put"&&O.type!=="delete"&&O.type!=="message"||s&&!s(O))continue;r?(O.topic=n,V=this.needsAcknowledge(O)):(O.acknowledge?.(),V=QA());let $=O.id;Array.isArray($)&&($=Ta($)),$==null&&($=""),this.listener(p+"/"+$,O.value,V,t)}catch(V){(0,yc.warn)(V)}})(),g});return A.topic=n,A.qos=t.qos,this.subscriptions.push(A),A}resume(){}needsAcknowledge(t){let r=QA();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t);r&&r.end()}async publish(t,r){let{topic:s,retain:n}=t;t.data=r,t.user=this.user,t.async=!0;let i=wi.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);t.url=i.relativeURL;let o=i.Resource;return We(t,()=>n?r===void 0?o.delete(t,t):o.put(t,t.data,t):o.publish(t,t.data,t))}setListener(t){this.listener=t}disconnect(){for(let t of this.subscriptions)t.end();this.subscriptions=[]}},jA=class extends kh{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,s){super(t,r),this.sessionRecord=s||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,s){return super.addSubscription(t,r,s)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=QA(),s={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(s.acknowledge=t.acknowledge),this.awaitingAcks.set(r,s),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let s=r.topic;for(let[,n]of this.awaitingAcks)if(n.topic===s&&n.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===s){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,yc.trace)("Received ack",s,r.timestamp),this.sessionRecord.update();return}}for(let n of this.sessionRecord.subscriptions)n.topic===s&&(n.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:s,startTime:n}=t;return s>0&&!n&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,RG.getNextMonotonicTime)()),(0,yc.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),WA.put(this.sessionRecord)),t.qos}}});var JA={};Fe(JA,{start:()=>mae});async function mae({server:e,port:t,webSocket:r,securePort:s,requireAuthentication:n}){let i=e.mqtt={requireAuthentication:n};r&&e.ws((o,c,u)=>{if(o.protocol==="mqtt"){let{onMessage:_,onClose:l}=yG(o,(d,f)=>{if(o.send(d),f&&o._socket.writableNeedDrain)return new Promise(E=>this._socket.once("drain",E))},c,Promise.resolve(u).then(()=>c?.user),i);o.on("message",_),o.on("close",l),o.on("error",d=>{(0,Ts.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;hae&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,IG.getSuperUser)());let{onMessage:u,onClose:_}=yG(o,l=>o.write(l),null,c,i);o.on("data",u),o.on("close",_),o.on("error",l=>{(0,Ts.info)("Socket error",l)})},{port:t,securePort:s})}function yG(e,t,r,s,n){bG||(bG=!0,Xu(d=>{$h>0&&d.push({metric:"mqtt-connections",connections:$h,byThread:!0})}));let i;$h++;let o,c={protocolVersion:4},u=(0,Vh.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){$h--,i||(i=!0,o?.disconnect(),cs(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.on("packet",async d=>{s?.then&&(s=await s),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{s=await Tt.getUser(d.username,d.password.toString()),(0,zA.get)(di.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&NG.notify({username:s.username,status:di.AUTH_AUDIT_STATUS.SUCCESS,type:di.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,zA.get)(di.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&NG.error({username:s.username,status:di.AUTH_AUDIT_STATUS.FAILURE,type:di.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!s&&n.requireAuthentication)return cs(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{n.authorizeClient?.(d,s),o=AG({user:s,...d}),o=await o}catch(O){return(0,Ts.error)(O),cs(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:O.code||5,returnCode:O.code||128})}cs(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((O,V,$,F)=>{try{let w=O.indexOf("/",1),K=w>0?O.slice(0,w):O;f({cmd:"publish",topic:O,payload:E(V),messageId:$||Math.floor(Math.random()*1e8),qos:F.qos},K)}catch(w){(0,Ts.error)(w),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let O of d.subscriptions){let V;try{V=(await o.addSubscription(O,O.qos>=1)).qos||0}catch($){(0,Ts.error)($),V=128}h.push(V)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":for(let O of d.unsubscriptions)o.removeSubscription(O);f({cmd:"unsuback",messageId:d.messageId});break;case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let p=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=Tc(r?.headers.get?.("content-type"))),A=d.payload?.length>0?S(d.payload):void 0,g;try{g=await o.publish(d,A)}catch(O){(0,Ts.warn)(O),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128,returnCode:128},d.topic)}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:g===!1?144:0,returnCode:g===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(),cs(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,Ts.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,Vh.generate)(h,c);t(S),xr(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return Ji(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var Vh,IG,zA,di,Ts,NG,hae,bG,$h,wG=Re(()=>{Vh=require("mqtt-packet");OG();IG=M(Er());dc();Qn();Pr();zA=M(j()),di=M(R()),Ts=M(v()),NG=(0,Ts.loggerWithTag)("auth-event"),hae=!0;a(mae,"start");$h=0;a(yG,"onSocket")});var LG={};Fe(LG,{Request:()=>XA,createReuseportFd:()=>Yh});var CG,XA,ZA,eO,Yh,tO=Re(()=>{CG=require("os"),XA=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let s=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=s,this.headers=new eO(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get body(){return this.#e||(this.#e=new ZA(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},ZA=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},eO=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}forEach(t){for(let[r,s]of this)t(s,r,this)}};(0,CG.platform)()!="win32"&&(Yh=require("node-unix-socket").createReuseportFd)});var XE={};Fe(XE,{component_errors:()=>Ic,loadComponent:()=>Kh,loadComponentDirectories:()=>GG,setErrorReporter:()=>gae});function GG(e,t){t&&(sO=t),e&&(nO=e);let r=[];if((0,Ks.existsSync)(rO)){let n=(0,Ks.readdirSync)(rO,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Lt.join)(rO,o);r.push(Kh(c,sO,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Kh(s,sO,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{qG=!0})}function gae(e){E_=e}async function Kh(e,t,r,s,n,i){if(!PG.has(e)){PG.set(e,!0),n&&(nO=n);try{let o;s&&(Ic=new Map);let c=(0,Lt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Ks.existsSync)(c)?o=s?(0,HG.getConfigObj)():(0,MG.parseDocument)((0,Ks.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=iO;let u=[],_=s;for(let l in o){let d=o[l];if(Ic.set(s?l:(0,Lt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let g=e,O;for(;!(0,Ks.existsSync)(O=(0,Lt.join)(g,"node_modules",l));)if(g=(0,Lt.dirname)(g),g.length<(0,BG.getHdbBasePath)().length){O=null;break}if(O)f=await Kh(O,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=Tae[l];if(!f)continue;u.push(f);let h=a(g=>(g.origin=r,ut(g)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,A=!p?.https&&p?.port;if(d_.isMainThread&&(f=await f.startOnMainThread?.({server:Tt,ensureTable:h,port:A,securePort:S,resources:t,...d})||f,s&&p))for(let g of[A,S])try{if(+g&&!DG.includes(g)){let O=oO.get(aO.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);O&&f_.default.warn("Session affinity is not recommended and may cause memory leaks"),(O||!Yh)&&(DG.push(g),cO(g,O))}}catch(O){console.error("Error listening on socket",g,O,l)}if(t.isWorker&&(f=await f.start?.({server:Tt,ensureTable:h,port:A,securePort:S,resources:t,...d})||f),nO.set(f,!0),f.handleFile&&d.files){if(d.files.includes(".."))throw(0,vG.handleHDBError)("Can not reference parent directories");let g=(0,Lt.join)(e,d.files).replace(/\\/g,"/"),O=g.indexOf("/*");if(O>-1&&d.files!==iO[l]?.files&&!(0,Ks.existsSync)(g.slice(0,O)))throw new Error(`The path '${g.slice(0,O)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);for(let V of await(0,UG.default)(g,{onlyFiles:!1,objectMode:!0})){let{path:$,dirent:F}=V;_=!0;let w=(0,Lt.relative)(e,$).replace(/\\/g,"/");if(d.root){let k=d.root;if(k.startsWith("/")&&(k=k.slice(1)),k.endsWith("/")&&(k=k.slice(0,-1)),k+="/",w.startsWith(k))w=w.slice(k.length);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${w}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`)}let K=(0,Lt.basename)(e),B=d.path||"/";B=B.startsWith("/")?B:B.startsWith("./")?"/"+K+B.slice(2):B==="."?"/"+K:"/"+K+"/"+B,B+=(B.endsWith("/")?"":"/")+w;try{if(F.isFile()){let k=await Sae($);d_.isMainThread&&await f.setupFile?.(k,B,$,t),t.isWorker&&await f.handleFile?.(k,B,$,t)}else d_.isMainThread&&await f.setupDirectory?.(B,$,t),t.isWorker&&await f.handleDirectory?.(B,$,t)}catch(k){k.message=`Could not load ${F.isFile()?"file":"directory"} '${$}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${k.message}`,E_?.(k),((0,wc.getWorkerIndex)()===0?console:f_.default).error(k),t.set(d.path||"/",new h_(k)),Ic.set(s?l:(0,Lt.basename)(e),k.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,Lt.basename)(e)}' due to: ${h.message}`,E_?.(h),((0,wc.getWorkerIndex)()===0?console:f_.default).error(h),t.set(d.path||"/",new h_(h),null,!0),Ic.set(s?l:(0,Lt.basename)(e),h.message)}}if(d_.isMainThread&&!qG&&i&&(0,wc.watchDir)(e,async()=>GG()),o.extensionModule)return await Gf((0,Lt.join)(e,o.extensionModule));if(!_){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;E_?.(new Error(l)),((0,wc.getWorkerIndex)()===0?console:f_.default).error(l),Ic.set((0,Lt.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,E_?.(o),t.set("",new h_(o))}}}var Ks,Lt,d_,MG,oO,aO,UG,wc,f_,vG,BG,pae,HG,Sae,rO,nO,qG,sO,Ic,Tae,iO,DG,PG,E_,h_,ZE=Re(()=>{Ks=require("fs"),Lt=require("path"),d_=require("worker_threads"),MG=require("yaml"),oO=M(j()),aO=M(R());LP();UP();vP();a0();Yq();zq();UG=M(require("fast-glob")),wc=M(Qe()),f_=M(v());YT();Pr();vG=M(Z());ws();de();Wh();BG=M(j()),pae=M(eG());$E();gG();wG();HG=M(rt());tO();({readFile:Sae}=Ks.promises),rO=oO.get(aO.CONFIG_PARAMS.COMPONENTSROOT),nO=new Map,Ic=new Map;a(GG,"loadComponentDirectories");Tae={REST:fh,rest:fh,graphqlSchema:VT,jsResource:WT,fastifyRoutes:BA,login:jT,static:HA,operationsApi:pae,customFunctions:{},http:{},clustering:KA,authentication:xl,mqtt:JA},iO={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(iO,"static",{value:{files:"web/**"}});DG=[],PG=new Map;a(gae,"setErrorReporter");a(Kh,"loadComponent");h_=class extends Mt{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var Qh=T((TOe,xG)=>{var{isMainThread:FG}=require("worker_threads"),{getTables:Rae}=(de(),te(De)),{loadComponentDirectories:Aae,loadComponent:Oae}=(ZE(),te(XE)),{resetResources:Nae}=(uu(),te(Yb)),bae=MR(),yae=rt(),{dirname:Iae}=require("path"),{getConnection:wae}=st(),Cae=j(),Lae=R(),uO=new Map;async function Dae(e=!1){!FG&&Cae.get(Lae.CONFIG_PARAMS.CLUSTERING_ENABLED)&&wae();try{FG&&await bae()}catch(s){console.error(s)}let t=Nae();Rae(),t.isWorker=e,await Oae(Iae(yae.getConfigFilePath()),t,"hdb",!0,uO),await Aae(uO,t);let r=[];for(let[s]of uO)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(Dae,"loadRootComponents");xG.exports.loadRootComponents=Dae});var Qe=T((ROe,to)=>{"use strict";var{Worker:Pae,MessageChannel:Mae,parentPort:Nn,isMainThread:EO,threadId:Uae,workerData:fi}=require("worker_threads"),{PACKAGE_ROOT:vae}=R(),{join:VG,isAbsolute:Bae,extname:Hae}=require("path"),{server:YG}=(Pr(),te(So)),{watch:qae,readdir:Gae}=require("fs/promises"),{totalmem:kG}=require("os"),Jh=R(),Fae=j(),Ei=v(),{randomBytes:xae}=require("crypto"),{_assignPackageExport:kae}=require("../index"),$ae=R(),Vae=1024*1024,eo=[],gs=[],Yae=50,hO=1e4,Kae="restart",KG="request_thread_info",WG="resource_report",QG="thread_info",jG="added-port",Wae="ack",lO;kae("threads",gs);to.exports={startWorker:_O,restartWorkers:pO,shutdownWorkers:Xae,workers:eo,setMonitorListener:oce,onMessageFromWorkers:Zae,onMessageByType:tF,broadcast:tce,broadcastWithAcknowledgement:sce,setChildListenerByType:Jae,getWorkerIndex:zG,getWorkerCount:JG,getTicketKeys:XG,setMainIsWorker:jae,setTerminateTimeout:Qae,restartNumber:fi?.restartNumber||1};gs.onMessageByType=tF;gs.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=gs.find(s=>s.threadId===e);if(r)return r.postMessage(t),!0};var mO;function Qae(e){hO=e}a(Qae,"setTerminateTimeout");function zG(){return fi?fi.workerIndex:mO?0:void 0}a(zG,"getWorkerIndex");function JG(){return fi?fi.workerCount:mO?1:void 0}a(JG,"getWorkerCount");function jae(e){mO=e}a(jae,"setMainIsWorker");var jh;function XG(){return jh||(jh=EO?xae(48):fi.ticketKeys,jh)}a(XG,"getTicketKeys");Object.defineProperty(YG,"workerIndex",{get(){return zG()}});Object.defineProperty(YG,"workerCount",{get(){return JG()}});var ZG={[KG](e,t){nce(t)},[WG](e,t){ice(t,e)}};function _O(e,t={}){let r=process.constrainedMemory?.()||kG();r=Math.min(r,kG());let s=Math.max(Math.floor(r/Vae/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[],o=[];for(let u of gs){let _=new Mae;_.existingPort=u,i.push(_),o.push(_.port2)}Hae(e)||(e+=".js");let c=new Pae(Bae(e)?e:VG(vae,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:t.threadCount,name:t.name,restartNumber:to.exports.restartNumber,ticketKeys:XG()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:jG,port:u,threadId:c.threadId},[u]);return Xh(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>_O(e,t),c.on("error",u=>{console.error("Worker error:",u),Ei.error("Worker error:",u)}),c.on("exit",u=>{eo.splice(eo.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Yae?(t.unexpectedRestarts=c.unexpectedRestarts+1,_O(e,t)):Ei.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{ZG[u.type]?.(u,c)}),eo.push(c),cce(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(_O,"startWorker");var zae=[Jh.THREAD_TYPES.HTTP];async function pO(e=null,t=2,r=!0){if(EO){if(r){let{loadRootComponents:o}=Qh();await o()}to.exports.restartNumber++,t<1&&(t=t*eo.length);let s=[],n=[];for(let o of eo.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Ei.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:to.exports.restartNumber,type:Jh.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=zae.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),hO*2).unref();o.on("exit",()=>{clearTimeout(l),s.splice(s.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(s.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===$ae.ITC_EVENT_TYPES.CHILD_STARTED&&(Ei.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");Ei.trace("Waiting for worker to start",_.threadId),_.on("message",f)});n.push(l),s.length>=t&&await Promise.race(s),n.length>=t&&await Promise.race(n)}}await Promise.all(s),await Promise.all(n);let{restartService:i}=Qo();r&&(e==="http"||!e)&&Fae.get(Jh.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Nn.postMessage({type:Kae,workerType:e})}a(pO,"restartWorkers");function Jae(e,t){ZG[e]=t}a(Jae,"setChildListenerByType");function Xae(e){return pO(e,1/0,!1)}a(Xae,"shutdownWorkers");var eF=[];function Zae(e){eF.push(e)}a(Zae,"onMessageFromWorkers");var dO=new Map;function tF(e,t){let r=dO.get(e);r||dO.set(e,r=[]),r.push(t)}a(tF,"onMessageByType");var ece=10;async function tce(e){let t=0;for(let r of gs)try{r.postMessage(e),t++>ece&&(t=0,await new Promise(setImmediate))}catch(s){Ei.error("Unable to send message to worker",s)}}a(tce,"broadcast");var zh=new Map,rce=1;function sce(e){return new Promise(t=>{let r=0;for(let s of gs)try{let n=rce++,i=a(()=>{zh.delete(n),--r===0&&t(),s!==Nn&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,zh.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of zh)o.port===s&&o()})),s.postMessage(e),r++}catch(n){Ei.error("Unable to send message to worker",n)}r===0&&t()})}a(sce,"broadcastWithAcknowledgement");function nce(e){e.postMessage({type:QG,workers:rF()})}a(nce,"sendThreadInfo");function rF(){let e=Date.now();return eo.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(rF,"getChildWorkerInfo");function ice(e,t){e.resources=t,e.resources.updated=Date.now()}a(ice,"recordResourceReport");var fO;function oce(e){fO=e}a(oce,"setMonitorListener");var ace=1e3,$G=!1;function cce(){$G||($G=!0,setInterval(()=>{for(let e of eo){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}fO&&fO()},ace).unref())}a(cce,"startMonitoring");var uce=1e3;if(Nn){Xh(Nn);for(let e=0,t=fi.addPorts.length;e<t;e++){let r=fi.addPorts[e];r.threadId=fi.addThreadIds[e],Xh(r)}setInterval(()=>{let e=process.memoryUsage();Nn.postMessage({type:WG,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},uce).unref(),lO=a(()=>new Promise((e,t)=>{Nn.on("message",r),Nn.postMessage({type:KG});function r(s){s.type===QG&&(Nn.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else lO=rF;to.exports.getThreadInfo=lO;function Xh(e,t){gs.push(e),e.on("message",r=>{if(r.type===jG)r.port.threadId=r.threadId,Xh(r.port);else if(r.type===Wae){let s=zh.get(r.id);s&&s()}else{for(let n of eF)n(r,e);let s=dO.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){Ei.error(i)}}}).on("close",()=>{gs.splice(gs.indexOf(e),1)}).on("exit",()=>{gs.splice(gs.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Xh,"addPort");if(EO){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await Gae(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(VG(s,i.name));try{for await(let{filename:i}of qae(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await pO(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");to.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Nn.on("message",async e=>{let{type:t}=e;t===Jh.ITC_EVENT_TYPES.SHUTDOWN&&(to.exports.restartNumber=e.restartNumber,Nn.unref(),setTimeout(()=>{Ei.warn("Thread did not voluntarily terminate",Uae),process.exit(0)},hO).unref())})});var dF=T(S_=>{"use strict";var{isMainThread:lce,parentPort:p_,threadId:Zh}=require("worker_threads"),{Socket:_ce,createServer:dce}=require("net"),{createServer:fce,IncomingMessage:Ece}=require("http"),{createServer:hce}=require("https"),{readFileSync:Cc}=require("fs"),mi=v(),Dt=j(),hi=R(),{server:tm}=(Pr(),te(So)),{WebSocketServer:mce}=require("ws"),{createServer:pce}=require("tls"),{getTicketKeys:Sce,restartNumber:Tce}=Qe(),{Headers:oF}=(GE(),te(IB)),{recordAction:m_,recordActionBinary:gce}=(Qn(),te(Zu)),{Request:aF,node_request_key:OOe,createReuseportFd:sF}=(tO(),te(LG));if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){Tce<=1&&mi.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:NOe,CONFIG_PARAMS:Rce}=hi;Dt.initSync();var Ace=Dt.get(Rce.HTTP_SESSIONAFFINITY),bn={};S_.registerServer=OO;S_.httpServer=NO;S_.deliverSocket=AO;S_.startServers=cF;tm.http=NO;tm.request=yce;tm.socket=Ice;tm.ws=wce;var SO=[],TO=[],Oce,oa={},em={},Nce=[],gO=[];function cF(){return Qh().loadRootComponents(!0).then(()=>{p_?.on("message",t=>{let{port:r,fd:s,data:n}=t;if(s)AO(s,r,n);else if(t.requestId)bce(t);else if(t.type===hi.ITC_EVENT_TYPES.SHUTDOWN){mi.trace("received shutdown request",Zh);for(let i in bn){let o=bn[i],c;o.closeIdleConnections&&setInterval(()=>{o.closeIdleConnections()},25).unref(),o.close?.(()=>{clearInterval(c),setTimeout(()=>{console.log("forced close server",i,Zh),o.cantCleanupProperly||mi.warn("Had to forcefully exit the thread",Zh),process.exit(0)},5e3).unref()})}if(process.env.DEV_MODE)try{require("inspector").close()}catch(i){console.error("Could not close debugger",i)}}}).ref();let e=[];if(sF&&!Ace)for(let t in bn){let r=bn[t],s;try{s=sF(+t,"::")}catch(n){console.error(`Unable to bind to port ${t}`,n);continue}e.push(new Promise((n,i)=>{r.listen({fd:s},()=>{n(),mi.trace("Listening on port "+t,Zh)}).on("error",i)}))}Promise.all(e).then(()=>{p_?.postMessage({type:hi.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(cF,"startServers");lce||cF();function AO(e,t,r){let s=e?.read?e:new _ce({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),n=bn[t];if(n.isSecure&&(s.startTime=performance.now()),n)typeof n=="function"?n(s):n.emit("connection",s),r&&s.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=bn[t];c?(typeof c=="function"?c(s):c.emit("connection",s),r&&s.emit("data",r)):o<5?i(o+1):(mi.error(`Server on port ${t} was not registered`),s.destroy())},1e3)},"retry");i(1)}return s}a(AO,"deliverSocket");var nF=new Map;function bce(e){let{port:t,event:r,data:s,requestId:n}=e,i;switch(i=nF.get(n),r){case"connection":i=AO(void 0,t),nF.set(n,i),i.write=(c,u,_)=>(p_.postMessage({requestId:n,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(p_.postMessage({requestId:n,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),p_.postMessage({requestId:n,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(s,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}a(bce,"proxyRequest");function OO(e,t){+t||(t=parseInt(Dt.get(hi.CONFIG_PARAMS.HTTP_PORT),10));let r=bn[t];if(r){let s=r.lastServer||r;s.off("unhandled",iF),s.on("unhandled",(n,i)=>{e.cantCleanupProperly&&(r.cantCleanupProperly=!0),e.emit("request",n,i)}),r.lastServer=e}else bn[t]=e;e.on("unhandled",iF)}a(OO,"registerServer");function uF(e){let t=[],r=parseInt(e?.securePort);return r&&t.push({port:r,secure:!0}),r=parseInt(e?.port),r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],Dt.get(hi.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:Dt.get(hi.CONFIG_PARAMS.HTTP_PORT),secure:Dt.get(hi.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Dt.get(hi.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:Dt.get(hi.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),t}a(uF,"getPorts");function NO(e,t){for(let{port:r,secure:s}of uF(t))lF(r,s,t?.isOperationsServer),typeof e=="function"?gO[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):OO(e,r),em[r]=RO(gO,r),Oce=RO(Nce,r)}a(NO,"httpServer");function lF(e,t,r){if(!oa[e]){let s=r?"operationsApi_network":"http",n={keepAliveTimeout:Dt.get(s+"_keepAliveTimeout"),headersTimeout:Dt.get(s+"_headersTimeout"),requestTimeout:Dt.get(s+"_timeout")};if(t){s=r?"operationsApi_":"";let i=Dt.get(s+"tls_privateKey"),o=Dt.get(s+"tls_certificate"),c=Dt.get(s+"tls_certificateAuthority");Object.assign(n,{key:Cc(i),cert:Cc(o)+(c?`
|
|
30
30
|
|
|
31
|
-
`+Cc(c):""),ticketKeys:
|
|
31
|
+
`+Cc(c):""),ticketKeys:Sce()})}oa[e]=(t?hce:fce)(n,async(i,o)=>{try{let u=performance.now(),_=new aF(i,o);r&&(_.isOperationsServer=!0);let l=await em[e](_);if(!l){if(_._nodeResponse.statusCode)return;l=_F(_)}if(l.headers?.set?.("Server","HarperDB"),l.status===-1){for(let g of l.headers||[])o.setHeader(g[0],g[1]);return i.baseRequest=_,o.baseResponse=l,oa[e].emit("unhandled",i,o)}let d=l.status||200,f=performance.now(),E=f-u,h=l.body,p;if(!l.handlesHeaders){let g=l.headers||new oF;if(h?h.length>=0&&(typeof h=="string"?g.set("Content-Length",Buffer.byteLength(h)):g.set("Content-Length",h.length),p=!0):(g.set("Content-Length","0"),p=!0),g.append){let O=`hdb;dur=${E.toFixed(2)}`;l.wasCacheMiss&&(O+=", miss"),g.append("Server-Timing",O,!0)}o.writeHead(d,g&&(g[Symbol.iterator]?Array.from(g):g)),p&&o.end(h)}let S=_.handlerPath,A=_.method;if(m_(E,"duration",S,A,l.wasCacheMiss==null?void 0:l.wasCacheMiss?"cache-miss":"cache-hit"),gce(d<400,"success",S,A),!p)if(h?.pipe){h.pipe(o),h.destroy&&o.on("close",()=>{h.destroy()});let g=0;h.on("data",O=>{g+=O.length}),h.on("end",()=>{m_(performance.now()-f,"transfer",S,A),m_(g,"bytes-sent",S,A)})}else h?.then?h.then(g=>{o.end(g)},c):o.end(h)}catch(u){c(u)}function c(u){let _=u.headers;o.writeHead(u.statusCode||500,_&&(_[Symbol.iterator]?Array.from(_):_)),o.end(u.toString()),u.statusCode?u.statusCode===500?mi.warn(u):mi.info(u):mi.error(u)}a(c,"onError")}),t&&(oa[e].on("secureConnection",i=>{i._parent.startTime&&m_(performance.now()-i._parent.startTime,"tls-handshake",e),m_(i.isSessionReused(),"tls-reused",e)}),oa[e].isSecure=!0),OO(oa[e],e)}return oa[e]}a(lF,"getHTTPServer");function RO(e,t){let r=_F;for(let s=e.length;s>0;){let{listener:n,port:i}=e[--s];if(i===t||i==="all"){let o=r;r=a(c=>n(c,o),"next_callback")}}return r}a(RO,"makeCallbackChain");function _F(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new oF}}a(_F,"unhandled");function yce(e,t){NO(e,{requestOnly:!0,...t})}a(yce,"onRequest");function Ice(e,t){if(t.securePort){let r=Dt.get("tls_privateKey"),s=Dt.get("tls_certificate"),n=Dt.get("tls_certificateAuthority"),i=pce({key:Cc(r),cert:Cc(s)+(n?`
|
|
32
32
|
|
|
33
|
-
`+Cc(n):"")},e);
|
|
34
|
-
`)}a(
|
|
33
|
+
`+Cc(n):"")},e);bn[t.securePort]=i}if(t.port){let r=dce(e);bn[t.port]=r}}a(Ice,"onSocket");Object.defineProperty(Ece.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.startsWith("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});function wce(e,t){for(let{port:r,secure:s}of uF(t)){TO[r]||(TO[r]=new mce({server:lF(r,s)}),TO[r].on("connection",async(i,o)=>{try{let c=new aF(o);c.isWebSocket=!0;let u=em[r](c),_=o.headers["sec-websocket-protocol"]||"";for(let l=0;l<SO.length;l++){let d=SO[l];if(d.protocol){if(d.protocol===_){d.listener(i,c,u);break}}else d.listener(i,c,u)}}catch(c){mi.warn("Error handling WebSocket connection",c)}}));let n=t?.subProtocol||"";SO.push({listener:e,protocol:n}),em[r]=RO(gO,r)}}a(wce,"onWebSocket");function iF(e,t){t.writeHead(404),t.end(`Not found
|
|
34
|
+
`)}a(iF,"defaultNotFound")});var CO={};Fe(CO,{startHTTPThreads:()=>Lce,startSocketServer:()=>cO,updateWorkerIdleness:()=>SF});async function Lce(e=2,t){if(t)yO(0,1,!0);else{let{loadRootComponents:r}=Qh();if(e===0)return(0,ro.setMainIsWorker)(!0),await dF().startServers(),Promise.resolve([]);await r()}for(let r=0;r<e;r++)yO(r,e);return Promise.all(pF)}function yO(e,t=1,r){if(bO++,(0,ro.startWorker)("server/threads/threadServer.js",{name:nm.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===nm.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});pF.push(n),await n,Lc.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=sm.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Lc.indexOf(s);o>-1&&Lc.splice(o,1)}if(a(i,"removeWorker"),Dc){let o=Dc;Dc=[];for(let c of o)mF[c.localPort](null,c)}}}),r){let s=setInterval(()=>{IO?IO=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,ro.shutdownWorkers)(),bO=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function cO(e=0,t){if(typeof e=="string")try{(0,im.existsSync)(e)&&(0,im.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Dce:r=Pce(t):r=wO;let s=(0,Pc.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=mF[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),IO=!0,r(o,(c,u)=>{if(!c){if(fF){let l=o._socket||new Pc.Socket({handle:o,writable:!0,readable:!0});fF.deliverSocket(l,e,u),l.resume()}else bO>0?(Dc.length===0&&setTimeout(()=>{Dc.length>0&&console.warn("Incoming sockets/requests have been queued for workers to start, and no workers have handled them. Check to make sure an error is not preventing workers from starting")},1e4).unref(),o.localPort=e,Dc.push(o)):(console.log("start up a dynamic thread to handle request"),yO(0));xr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new Pc.Socket({handle:o,writable:!0,readable:!0});vce(l,c,e)}xr(!0,"socket-routed")})};let n=mo();hF.info(`HarperDB ${n.version} Server running on port ${e}`)}return s.on("error",n=>{console.error("Error in socket server",n)}),process.env._UNREF_SERVER&&s.unref(),s}function wO(e,t){let r,s=0;for(let n of Lc){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=rm)return rm=i,t(r);s=i}rm=0,t(r)}function Dce(e,t){let r={};e.getpeername(r);let s=r.address,n=Mc.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);wO(e,o=>{Mc.set(s,{worker:o,lastUsed:i}),t(o)})}function Pce(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new Pc.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],_=Mc.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);wO(s,d=>{Mc.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function SF(){rm=0;for(let e of Lc)e.expectedIdle=e.recentELU.idle+Mce,e.requests=1;Lc.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function vce(e,t,r){let s=Uce++;t.postMessage({port:r,requestId:s,event:"connection"}),e.on("data",n=>{let i=n.toString("latin1");t.postMessage({port:r,requestId:s,data:i,event:"data"})}).on("close",n=>{t.postMessage({port:r,requestId:s,event:"close",hadError:n})}).on("error",n=>{t.postMessage({port:r,requestId:s,event:"error",error:n})}).on("drain",n=>{t.postMessage({port:r,requestId:s,event:"drain",error:n})}).on("end",()=>{t.postMessage({port:r,requestId:s,event:"end"})}).resume(),sm.set(s,n=>{n.event=="data"&&e.write(Buffer.from(n.data,"latin1")),n.event=="end"&&(e.end(n.data&&Buffer.from(n.data,"latin1")),sm.delete(s)),n.event=="destroy"&&(e.destroy(),sm.delete(s))})}var ro,Pc,nm,hF,im,Cce,Lc,Dc,mF,fF,bO,pF,IO,rm,EF,Mc,Mce,sm,Uce,Wh=Re(()=>{ro=M(Qe()),Pc=require("net"),nm=M(R()),hF=M(v()),im=require("fs");Qn();({isMainThread:Cce}=require("worker_threads")),Lc=[],Dc=[],mF=[],bO=0,pF=[];Cce&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(Lce,"startHTTPThreads");a(yO,"startHTTPWorker");a(cO,"startSocketServer");rm=0;a(wO,"findMostIdleWorker");EF=36e5,Mc=new Map;a(Dce,"findByRemoteAddressAffinity");a(Pce,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Mc)r.lastUsed+EF<e&&Mc.delete(t)},EF).unref();Mce=1e3;a(SF,"updateWorkerIdleness");(0,ro.setMonitorListener)(SF);sm=new Map,Uce=1;a(vce,"proxySocket")});var DO=T((COe,TF)=>{"use strict";var T_=j();T_.initSync();var Uc=require("fs-extra"),LO=require("path"),vc=R(),Bce=require("crypto"),Hce=require("uuid").v4;TF.exports=qce;function qce(){if(T_.getHdbBasePath()!==void 0){let e=LO.join(T_.getHdbBasePath(),vc.LICENSE_KEY_DIR_NAME,vc.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=LO.join(T_.getHdbBasePath(),vc.LICENSE_KEY_DIR_NAME,vc.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=LO.join(T_.getHdbBasePath(),vc.LICENSE_KEY_DIR_NAME,vc.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Uc.accessSync(r),Uc.accessSync(e),Uc.accessSync(t)}catch(s){if(s.code==="ENOENT"){let n=Hce(),i=Bce.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:n}});Uc.writeFileSync(r,n),Uc.writeFileSync(e,i.privateKey),Uc.writeFileSync(t,i.publicKey)}else throw s}}}a(qce,"checkJWTTokenExist")});var RF=T((DOe,gF)=>{"use strict";var PO=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,s){this.info_id=t,this.data_version_num=r,this.hdb_version_num=s}};gF.exports={HdbInfoInsertObject:PO}});var NF=T((MOe,OF)=>{"use strict";var AF=R(),MO=class{static{a(this,"UpgradeObject")}constructor(t,r){this[AF.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[AF.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};OF.exports={UpgradeObject:MO}});var om=T((vOe,yF)=>{"use strict";var Rs=require("prompt"),Bc=require("chalk"),bF=v(),Ws=require("os"),UO=Eo(),vO=["yes","y"];async function Gce(e){let t=`${Ws.EOL}`+Bc.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Ws.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ws.EOL}${Ws.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Ws.EOL}`;Rs.override=UO(["CONFIRM_UPGRADE"]),Rs.start(),Rs.message=t;let r={properties:{CONFIRM_UPGRADE:{description:Bc.magenta(`${Ws.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},s;try{s=await Rs.get([r])}catch(n){return bF.error("There was an error when prompting user about an upgrade."),bF.error(n),!1}return vO.includes(s.CONFIRM_UPGRADE)}a(Gce,"forceUpdatePrompt");async function Fce(e){let t=`${Ws.EOL}`+Bc.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ws.EOL}`);Rs.override=UO(["CONFIRM_DOWNGRADE"]),Rs.start(),Rs.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:Bc.magenta(`${Ws.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},s=await Rs.get([r]);return vO.includes(s.CONFIRM_DOWNGRADE)}a(Fce,"forceDowngradePrompt");async function xce(){let e=`${Ws.EOL}`+Bc.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");Rs.override=UO(["GENERATE_CERTS"]),Rs.start(),Rs.message=e;let t={properties:{GENERATE_CERTS:{description:Bc.magenta(`${Ws.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Rs.get([t]);return vO.includes(r.GENERATE_CERTS)}a(xce,"upgradeCertsPrompt");yF.exports={forceUpdatePrompt:Gce,forceDowngradePrompt:Fce,upgradeCertsPrompt:xce}});var HO=T((HOe,IF)=>{"use strict";var BO=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};IF.exports=BO});var CF=T(($Oe,wF)=>{"use strict";var kce=G(),$ce=rt(),GOe=v(),FOe=require("path"),xOe=require("fs"),kOe=R();wF.exports={getOldPropsValue:Vce};function Vce(e,t,r=!1){let s=t.getRaw(e);return kce.isNotEmptyAndHasValue(s)?s:r?$ce.getDefaultConfig(e):""}a(Vce,"getOldPropsValue")});var MF=T((YOe,PF)=>{"use strict";var so=require("path"),no=require("fs-extra"),Yce=require("properties-reader"),Kce=HO(),ht=v(),{getOldPropsValue:ve}=CF(),{HDB_SETTINGS_NAMES:X,CONFIG_PARAMS:aa}=R(),ca=rt(),am=j(),LF=G(),yn=R(),qO=new Kce("3.1.0"),DF=[];function Wce(){let e=Yce(am.get(X.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),ht.info(t);let r=` ;Settings for the HarperDB process.
|
|
35
35
|
|
|
36
36
|
;The directory selected during install where the database files reside.
|
|
37
37
|
${X.HDB_ROOT_KEY} = ${ve(X.HDB_ROOT_KEY,e)}
|
|
@@ -100,11 +100,11 @@ ${X.CUSTOM_FUNCTIONS_PORT_KEY} = ${ca.getDefaultConfig(aa.HTTP_PORT)}
|
|
|
100
100
|
${X.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${so.join(ve(X.HDB_ROOT_KEY,e),"custom_functions")}
|
|
101
101
|
;Set the max number of processes HarperDB will start for the Custom Functions server
|
|
102
102
|
${X.MAX_CUSTOM_FUNCTION_PROCESSES} = ${ca.getDefaultConfig(aa.HTTP_THREADS)}
|
|
103
|
-
`,s=
|
|
103
|
+
`,s=am.get("settings_path"),n=so.dirname(s),i=so.join(n,"3_1_0_upgrade_settings.bak");try{ht.info(`Backing up old settings file to: ${i}`),no.copySync(s,i)}catch(c){throw ht.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{ht.info("New settings file values for 3.1.0 upgrade:",r),ht.info(`Creating new/upgraded settings file at '${s}'`),no.writeFileSync(s,r),ht.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),ht.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),ht.error(c),no.copySync(i,s),c}am.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),ht.info(o),o}a(Wce,"updateSettingsFile_3_1_0");function Qce(){let e=so.join(LF.getHomeDir(),yn.HDB_HOME_DIR_NAME,yn.LICENSE_KEY_DIR_NAME,yn.LICENSE_FILE_NAME),t=so.join(LF.getHomeDir(),yn.HDB_HOME_DIR_NAME,yn.LICENSE_KEY_DIR_NAME,yn.REG_KEY_FILE_NAME),r=so.join(am.getHdbBasePath(),yn.LICENSE_KEY_DIR_NAME,yn.LICENSE_FILE_NAME),s=so.join(r,yn.LICENSE_FILE_NAME),n=so.join(r,yn.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),ht.info(i);let o="Creating .license directory";console.log(o),ht.info(o),no.mkdirpSync(r);try{no.accessSync(e);try{let c="Moving licence file";console.log(c),ht.info(c),no.moveSync(e,s);let u="License file successfully moved.";console.log(u),ht.info(u)}catch{let u="moving license file failed";console.error(u),ht.error(u)}}catch{let u=`license file '${e}' does not exist.`;console.warn(u),ht.warn(u)}try{no.accessSync(t);try{let c="Moving registration file";console.log(c),ht.info(c),no.moveSync(t,n);let u="Registration file successfully moved.";console.log(u),ht.info(u)}catch{let u="moving registration file failed";console.error(u),ht.error(u)}}catch{let u=`registration file '${t}' does not exist.`;console.warn(u),ht.warn(u)}}a(Qce,"moveLicenseFiles");qO.sync_functions.push(Wce);qO.sync_functions.push(Qce);DF.push(qO);PF.exports=DF});var qF=T((WOe,HF)=>{"use strict";var zr=Me(),{insertRecords:jce}=No(),zce=ar(),io=Ke(),Jce=G(),pi=v(),Xce=G(),In=require("fs-extra"),Si=require("path"),Zce=require("cli-progress"),g_=require("assert"),eue=require("pino"),tue=j();HF.exports=rue;var cm,UF,um,GO,er,R_=!1;async function rue(e=!0){return cm=tue.getHdbBasePath(),UF=Si.join(cm,"schema"),um=Si.join(cm,"4_0_0_upgrade_tmp"),GO=Si.join(cm,"transactions"),console.info("Reindexing upgrade started for schemas"),pi.notify("Reindexing upgrade started for schemas"),await vF(UF,!1,e),await In.pathExists(GO)&&(console.info(`
|
|
104
104
|
|
|
105
|
-
Reindexing upgrade started for transaction logs`),pi.notify("Reindexing upgrade started for transaction logs"),await LF(BO,!0,e)),pi.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(R_?", but errors occurred":"")}a(Xce,"reindexUpgrade");async function LF(e,t,r){let s=await wn.readdir(e),n=s.length;for(let i=0;i<n;i++){let o=s[i],c=Si.join(e,o.toString());if(o===".DS_Store")continue;let u=await wn.readdir(c),_=u.length;for(let l=0;l<_;l++){let d=u[l];if(d!==".DS_Store"&&wn.statSync(Si.join(c,d)).isDirectory())try{await Zce(o,d,t),er.info(`Reindexing started for ${o}.${d}`),pi.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await tue(o,d,c,t,r),er.info(`Reindexing completed for ${o}.${d}`),pi.notify(`Reindexing completed for ${o}.${d}`)}catch(f){R_=!0,f.schema_path=c,f.table_name=d,pi.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),pi.error(f),er.error(f),console.error(f)}}}if(!R_)try{await wn.rm(am,{recursive:!0})}catch{}}a(LF,"processTables");async function Zce(e,t,r){let n=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Si.join(am,n);await wn.ensureDir(am),await wn.writeFile(i,""),er=Jce({level:"debug",formatters:{bindings(){}}},i)}a(Zce,"initPinoLogger");var eue=20;async function tue(e,t,r,s,n){let i;try{i=await Jr.openEnvironment(r,t,s)}catch(R){if(R.message==="MDB_INVALID: File is not an LMDB file"){pi.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),er.error(R);return}throw R}let o=nue(i.dbis),c=Jr.openDBI(i,o),u=Object.keys(i.dbis),_=Jr.statDBI(i,o);er.info(`Old environment stats: ${JSON.stringify(_)}`);let l=new jce.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});l.start(_.entryCount,0,{});let d=await Jr.createEnvironment(r,t,!1);Jr.createDBI(d,o,!1,!0);let f=[];try{for(let R of c.getRange({start:!1}))R.value=Object.assign({},R.value),f.push(R),s||e==="system"&&(t==="hdb_schema"&&(R.key=R.key.toString(),R.value.name=R.value.name.toString()),t==="hdb_table"&&(R.key=R.key.toString(),R.value.schema=R.value.schema.toString(),R.value.name=R.value.name.toString()),t==="hdb_attribute"&&(R.key=R.key.toString(),R.value.schema=R.value.schema.toString(),R.value.table=R.value.table.toString(),R.value.attribute=R.value.attribute.toString())),f.length>eue&&await E();await E()}catch(R){throw R_=!0,er.error(R),R}async function E(){let R,b=f.map(({value:$})=>$);s?R=await Promise.all(b.map($=>rue(d,$))):R=await Yce(d,o,u.filter($=>$!=="__blob__"),b,!1);for(let $=0,F=f.length;$<F;$++){let{key:w,value:W}=f[$];er.info(`Record hash value: ${w} hash: ${o}`);let B;s?B=R[$]:B=R.written_hashes.indexOf(w)>-1,g_(B,!0),sue(d,o,W[o],s),er.info(`Insert success, written hashes: ${R.written_hashes}`),l.increment()}f=[],l.value/l.total*100%10===0&&pi.notify(`${e}.${t} ${l.value}/${l.total} records inserted`),er.info(`${l.value}/${l.total} records inserted`)}a(E,"finishOutstanding"),l.stop();let h=Jr.statDBI(i,o),S=Jr.statDBI(d,o);if(er.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${S.entryCount}`),g_.deepStrictEqual(h.entryCount,S.entryCount),await Jr.closeEnvironment(i),await Jr.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],n){let R=Si.join(r,t),b=Si.join(R,"data.mdb"),V=Si.join(R,"lock.mdb");await wn.unlink(b),await wn.unlink(V),await wn.rmdir(R),er.info(`Deleted old environment files from schema folder: ${b}, ${V}`)}let m=await Jr.openEnvironment(r,t),g=Jr.statDBI(m,o);er.info(`New stats: ${JSON.stringify(S)}. New stats after move: ${JSON.stringify(g)}`),g_.deepStrictEqual(g.entryCount,S.entryCount),await Jr.closeEnvironment(m),delete global.lmdb_map[`${e}.${t}`]}a(tue,"processTable");async function rue(e,t){Jr.initializeDBIs(e,io.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,io.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[io.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[io.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),Qce.isEmpty(t.user_name)||e.dbis[io.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let s of t.hash_values)e.dbis[io.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s,r)})}a(rue,"insertTransaction");function sue(e,t,r,s){let i=e.dbis[t].get(r);g_.deepStrictEqual(typeof i,"object");let o;if(s){let c={[io.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[io.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};o=Object.entries(c)}else o=Object.entries(i);for(let[c,u]of o)if(c!==t&&e.dbis[c]!==void 0&&!Wce.isEmptyOrZeroLength(u))if(s&&c==="hash_value")for(let _=0,l=u.length;_<l;_++){let d=u[_];DF(e,c,d,r)}else DF(e,c,u,r)}a(sue,"validateIndices");function DF(e,t,r,s){try{let n=!1,i=Kce.getIndexedValues(r);if(!i)return;for(let o of i)n=e.dbis[t].doesExist(o,s),n||er.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${s}`),g_.deepStrictEqual(n,!0)}catch(n){R_=!0,er.error(n),console.error(n)}}a(DF,"validateIndex");function nue(e){let t;for(let[r,s]of Object.entries(e))if(s.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}a(nue,"getHashDBI")});var FO=T((YOe,vF)=>{"use strict";var iue=require("mkcert"),cm=require("path"),HO=require("fs-extra"),qO=U(),oue=Q(),GO=A(),Hc=sT(),aue=Eo(),cue=rt();vF.exports={generateKeys:uue,updateConfigCert:UF};async function uue(){let e=oue.getHdbBasePath(),t=cm.join(e,GO.LICENSE_KEY_DIR_NAME),r=await iue.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:365,caKey:Hc.CERTIFICATE_VALUES.key,caCert:Hc.CERTIFICATE_VALUES.cert}),s=cm.join(t,Hc.CERTIFICATE_PEM_NAME),n=cm.join(t,Hc.PRIVATEKEY_PEM_NAME),i=cm.join(t,Hc.CA_PEM_NAME);try{await HO.writeFile(s,r.cert)}catch(o){throw qO.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await HO.writeFile(n,r.key)}catch(o){throw qO.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await HO.writeFile(i,Hc.CERTIFICATE_VALUES.cert)}catch(o){throw qO.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}UF(s,n,i)}a(uue,"generateKeys");function UF(e,t,r){let s=aue(Object.keys(GO.CONFIG_PARAM_MAP),!0),n=GO.CONFIG_PARAMS,i={[n.CLUSTERING_TLS_CERTIFICATE]:s[n.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]?s[n.CLUSTERING_TLS_CERTIFICATE]:e,[n.CLUSTERING_TLS_PRIVATEKEY]:s[n.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]?s[n.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]:t,[n.CLUSTERING_TLS_CERT_AUTH]:s[n.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]?s[n.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]:r,[n.TLS_CERTIFICATE]:s[n.TLS_CERTIFICATE.toLowerCase()]?s[n.TLS_CERTIFICATE.toLowerCase()]:e,[n.TLS_PRIVATEKEY]:s[n.TLS_PRIVATEKEY.toLowerCase()]?s[n.TLS_PRIVATEKEY.toLowerCase()]:t,[n.TLS_CERTIFICATEAUTHORITY]:s[n.TLS_CERTIFICATEAUTHORITY.toLowerCase()]?s[n.TLS_CERTIFICATEAUTHORITY.toLowerCase()]:r};s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(i[n.OPERATIONSAPI_TLS_CERTIFICATE]=s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(i[n.OPERATIONSAPI_TLS_PRIVATEKEY]=s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),s[n.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(i[n.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=s[n.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),cue.updateConfigValue(void 0,void 0,i,!1,!0)}a(UF,"updateConfigCert")});var FF=T((QOe,GF)=>{"use strict";var um=require("path"),oo=require("fs-extra"),lue=UO(),ua=U(),BF=rt(),xO=Q(),Qs=A(),lm=G(),_ue=require("properties-reader"),due=Ds(),fue=rE(),Eue=_r(),WOe=require("util"),hue=Eue.searchByValue,mue=dr(),pue=NE(),Sue=ke(),Tue=MF(),HF=FO(),gue=nm(),N_=new lue("4.0.0"),qF=[],A_,O_;async function Rue(){try{if(await gue.upgradeCertsPrompt()){if(console.log("Generating new certificates."),A_){let t=lm.changeExtension(A_,".bak");await oo.move(A_,t)}if(O_){let t=lm.changeExtension(O_,".bak");await oo.move(O_,t)}await HF.generateKeys()}else console.log("Using existing certificates."),HF.updateConfigCert(A_,O_,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(Rue,"generateNewKeys");async function Aue(){console.log("Updating HarperDB nodes."),ua.info("Updating HarperDB nodes.");let e=[];try{let t=new due(Qs.SYSTEM_SCHEMA_NAME,Qs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await hue(t)),s=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!Sue.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let l=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(l),l}let u={host:c.host,port:c.port};e.push(u);let _=[];for(let l=0,d=c.subscriptions.length;l<d;l++){let f=c.subscriptions[l],E=f.channel.split(":");_.push({schema:E[0],table:E[1],publish:f.publish,subscribe:f.subscribe})}s.push({name:c.name,subscriptions:_,system_info:{hdb_version:Qs.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(lm.isEmptyOrZeroLength(s))return;let n=new fue(Qs.SYSTEM_SCHEMA_NAME,Qs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,s);await mue.update(n)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{pue.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}a(Aue,"updateNodes");async function Oue(){let e=xO.get(Qs.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(um.join("config","settings.js"))){ua.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),ua.info(t);let r=um.dirname(e),s=xO.get(Qs.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),n=um.join(s,"backup","4_0_0_upgrade_settings.bak"),i=um.join(s,Qs.HDB_CONFIG_FILE);try{ua.info(`Backing up old settings file to: ${n}`),console.log(`Backing up old settings file to: ${n}`),oo.copySync(e,n)}catch(d){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),d}try{ua.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),ua.info("Updating env variables with new settings values");let d=BF.initOldConfig(e);A_=d[Qs.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],O_=d[Qs.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],BF.createConfigFile(d)}catch(d){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),d}let o=lm.getPropsFilePath();oo.accessSync(o,oo.constants.F_OK|oo.constants.R_OK);let u=_ue(o).get(Qs.HDB_SETTINGS_NAMES.INSTALL_USER),_=`settings_path = ${i}
|
|
106
|
-
install_user = ${u}`;try{oo.writeFileSync(o,_)}catch(d){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),d}try{xO.initSync(!0)}catch(d){throw console.error("Unable to initialize new properties. Please check the log for details."),d}let l="New settings file for 4.0.0 upgrade successfully created.";try{oo.removeSync(r),console.log(l),ua.info(l)}catch(d){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),d}}a(Oue,"updateSettingsFile_4_0_0");N_.async_functions.push(Oue);N_.async_functions.push(Rue);N_.async_functions.push(Tue);N_.async_functions.push(Aue);qF.push(N_);GF.exports=qF});var kO=T((JOe,VF)=>{"use strict";var la=G(),Nue=A(),xF=U(),{DATA_VERSION:bue,UPGRADE_VERSION:yue}=Nue.UPGRADE_JSON_FIELD_NAMES_ENUM,kF=wF(),_m=FF(),_a=new Map;kF&&kF.forEach(e=>{_a.set(e.version,e)});_m&&_m.forEach(e=>{_a.set(e.version,e)});_m&&_m.forEach(e=>{_a.set(e.version,e)});function Iue(){return[..._a.keys()].sort(la.compareVersions)}a(Iue,"getSortedVersions");function $F(e){let t=e[bue],r=e[yue];return la.isEmptyOrZeroLength(t)||la.isEmptyOrZeroLength(r)?(xF.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),xF.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[..._a.keys()].sort(la.compareVersions).filter(function(s){return la.compareVersions(s,t)>0&&la.compareVersions(s,r)<=0})}a($F,"getVersionsForUpgrade");function wue(e){return $F(e).length>0}a(wue,"hasUpgradesRequired");function Cue(e){return la.isEmptyOrZeroLength(e)?null:_a.has(e)?_a.get(e):null}a(Cue,"getDirectiveByVersion");VF.exports={getSortedVersions:Iue,getDirectiveByVersion:Cue,getVersionsForUpgrade:$F,hasUpgradesRequired:wue}});var dm=T((XOe,jF)=>{"use strict";var Lue=require("util"),$O=require("chalk"),Due=require("os"),KF=dr(),Pue=_r(),zr=A(),WF=mF(),YO=zS(),{UpgradeObject:YF}=TF(),{forceDowngradePrompt:Mue}=nm(),Uue=po(),b_=U(),qc=G(),KO=os(),vue=(de(),te(De)),Bue=kO(),Hue=Lue.promisify(KO.setSchemaDataToGlobal),que=Pue.searchByValue,Gue="info_id",Fue="2.9.9",xue="3.0.0";async function kue(e){let t=new WF.HdbInfoInsertObject(1,e,e),r=new YO.InsertObject(zr.OPERATIONS_ENUM.INSERT,zr.SYSTEM_SCHEMA_NAME,zr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,zr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return KO.setSchemaDataToGlobal(),KF.insert(r)}a(kue,"insertHdbInstallInfo");async function VO(e){let t,r=await QF(),s=new Map([[0,{}]]);for(let c of r)s.set(c.info_id,c);let i=Math.max.apply(null,[...s.keys()])+1;t=new WF.HdbInfoInsertObject(i,e,e);let o=new YO.InsertObject(zr.OPERATIONS_ENUM.INSERT,zr.SYSTEM_SCHEMA_NAME,zr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,zr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await Hue(),KF.insert(o)}a(VO,"insertHdbUpgradeInfo");async function QF(){let e=new YO.NoSQLSeachObject(zr.SYSTEM_SCHEMA_NAME,zr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Gue,zr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await que(e))}catch(r){b_.info(r)}return t}a(QF,"getAllHdbInfoRecords");async function $ue(){let e=await QF();if(e.length===0)return;let t,r=new Map;for(let n of e)r.set(n.info_id,n);let s=Math.max.apply(null,[...r.keys()]);return t=r.get(s),t}a($ue,"getLatestHdbInfoRecord");async function Vue(){b_.info("Checking if HDB software has been updated");try{let e=Uue.version(),t=await $ue(),r;if(qc.isEmpty(t))r=Fue;else if(r=t.data_version_num,qc.compareVersions(r.toString(),e.toString())>0){if(!qc.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log($O.yellow(`This instance's data was last run on version ${r}`)),console.error($O.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${Due.EOL}${zr.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");qc.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log($O.yellow(`This instance's data was last run on version ${r}`)),await Mue(new YF(r,e))?await VO(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(KO.setSchemaDataToGlobal(),Yue(r),e.toString()===r.toString())return;let s=new YF(r,e);if(Bue.hasUpgradesRequired(s))return s;qc.compareVersions(s.data_version.toString(),s.upgrade_version.toString())<0&&(await VO(s.upgrade_version),b_.notify(`HarperDB running on upgraded version: ${s.upgrade_version}`))}catch(e){throw b_.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),b_.fatal(e),e}}a(Vue,"getVersionUpdateInfo");function Yue(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${zr.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in vue.databases.system))throw console.log(t),new Error(t);if(!qc.isEmpty(e)&&e<xue)throw console.log(t),new Error(t)}a(Yue,"checkIfInstallIsSupported");jF.exports={insertHdbInstallInfo:kue,insertHdbUpgradeInfo:VO,getVersionUpdateInfo:Vue}});var ex=T((eNe,ZF)=>{"use strict";var WO=require("joi"),{boolean:Kue,string:JF,number:Wue}=WO.types(),zF=require("fs-extra"),y_=A(),XF=require("path"),Que=Ve();ZF.exports=jue;function jue(e){let t=JF.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=WO.object({[y_.INSTALL_PROMPTS.ROOTPATH]:WO.custom(Jue),[y_.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:Wue.min(0),[y_.INSTALL_PROMPTS.TC_AGREEMENT]:JF.valid("yes","YES","Yes"),[y_.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[y_.INSTALL_PROMPTS.CLUSTERING_ENABLED]:Kue});return Que.validateBySchema(e,r)}a(jue,"installValidator");function Jue(e,t){if(zF.existsSync(XF.join(e,"system/hdb_user/data.mdb"))||zF.existsSync(XF.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(Jue,"validateRootAvailable")});var rx=T((rNe,tx)=>{"use strict";var{mkdirpSync:zue}=require("fs-extra"),Cn=require("path"),Gc=A(),jO=U(),Xue=is(),QO=Gn(),Zue=Be();tx.exports=ele;async function ele(e){jO.trace("Mounting HarperDB"),js(e),js(Cn.join(e,"backup")),js(Cn.join(e,"trash")),js(Cn.join(e,"keys")),js(Cn.join(e,"keys",Gc.LICENSE_FILE_NAME)),js(Cn.join(e,"log")),js(Cn.join(e,"doc")),js(Cn.join(e,"database")),js(Cn.join(e,Gc.TRANSACTIONS_DIR_NAME)),js(Cn.join(e,"clustering","leaf")),js(Cn.join(e,"components")),await tle()}a(ele,"mountHdb");async function tle(){let e=Bu(),t=Object.keys(QO);for(let r=0;r<t.length;r++){let s=t[r],n=QO[s].hash_attribute;try{Zue.initSystemSchemaPaths(Gc.SYSTEM_SCHEMA_NAME,s);let i=new e(Gc.SYSTEM_SCHEMA_NAME,s,n);i.attributes=QO[s].attributes;let o=i.attributes.find(({attribute:c})=>c===n);o.isPrimaryKey=!0,await Xue.createTable(s,i)}catch(i){throw jO.error(`issue creating environment for ${Gc.SYSTEM_SCHEMA_NAME}.${s}: ${i}`),i}}}a(tle,"createLMDBTables");function js(e){zue(e,{mode:Gc.HDB_FILE_PERMISSIONS}),jO.info(`Directory ${e} created`)}a(js,"makeDirectory")});var Em=T((nNe,fx)=>{"use strict";var zO=require("os"),ox=require("inquirer"),Rs=require("fs-extra"),rle=require("properties-reader"),da=require("chalk"),Pn=require("path"),sle=require("human-readable-ids").hri,nle=require("ora"),ile=require("yaml"),mt=U(),uo=Q(),I_=G(),fm=Eo(),ax=dm(),cx=po(),ee=A(),ole=ex(),ale=rx(),XO=rt(),cle=Er(),ule=Xf(),lle=wO(),_le=os(),dle=require("util").promisify,fle=dle(_le.setSchemaDataToGlobal),Ele=FO(),Fc=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),tr=a(e=>da.magenta.bold(e),"HDB_PROMPT_MSG"),hle="https://harperdb.io/legal/end-user-license-agreement",lo=zO.EOL,ao="",mle="yes",sx="Starting HarperDB install...",nx="HarperDB installation was successful.",ix="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",ple="An out of date version of HarperDB is already installed.",JO="It appears that HarperDB is already installed. Exiting install...",Sle="Aborting install",Tle=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),gle=new RegExp(/^[^\s.,*>]+$/),Rle=zO.homedir(),Ale=Pn.join(Rle,ee.HDB_ROOT_DIR_NAME),Ole=9925,Nle="HDB_ADMIN",ble="CLUSTER_USER",wr={DESTINATION:"Please enter a destination for HarperDB:",HDB_PORT:"Please enter a server listening port for HarperDB:",HDB_USERNAME:"Please enter a username for the HDB_ADMIN:",HDB_PASS:"Please enter a password for the HDB_ADMIN:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:"},xc=fm([ee.INSTALL_PROMPTS.HDB_CONFIG]),Dn,ux=!1;fx.exports=lx;lx.createSuperUser=dx;async function lx(){console.log(tr(lo+sx+lo)),mt.notify(sx);let e;xc[ee.INSTALL_PROMPTS.HDB_CONFIG]&&(e=yle());let t=wle();Object.assign(t,e);let r=ole(t);if(r)throw r.message;await Cle(),await Lle(t);let s=await Ile(t);Dn=s[ee.INSTALL_PROMPTS.ROOTPATH],xc[ee.INSTALL_PROMPTS.HDB_CONFIG]&&Pn.dirname(xc[ee.INSTALL_PROMPTS.HDB_CONFIG])===Dn&&(ux=!0),!xc[ee.INSTALL_PROMPTS.HDB_CONFIG]&&await Rs.pathExists(Pn.join(Dn,ee.HDB_CONFIG_FILE))&&(console.error(JO),process.exit());let n=nle({prefixText:tr("Installing"),color:"magenta",spinner:"simpleDots"});if(n.start(),I_.isEmpty(Dn))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");uo.setHdbBasePath(Dn),await ale(Dn),await Dle(),await Ple(s),mt.initLogSettings(!0),await dx(s),await Ule(s),await Ele.generateKeys(),await vle(),lle(),n.stop(),console.log(tr(lo+nx+lo)),mt.notify(nx)}a(lx,"install");function yle(){let e=ile.parseDocument(Rs.readFileSync(xc[ee.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=XO.flattenConfig(e.toJSON());return t[ee.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[ee.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(yle,"getConfigFromFile");async function Ile(e){mt.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Fc,when:co(e[ee.INSTALL_PROMPTS.ROOTPATH],wr.DESTINATION),name:ee.INSTALL_PROMPTS.ROOTPATH,prefix:ao,default:Ale,validate:async n=>Ln(n)?Ln(n):await Rs.pathExists(Pn.join(n,"system","hdb_user.mdb"))?`'${n}' is already in use. Please enter a different path.`:!0,message:tr(wr.DESTINATION)},{type:"input",transformer:Fc,when:co(e[ee.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT],wr.HDB_PORT),name:ee.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:ao,default:Ole,validate:n=>Tle.test(n)?!0:"Invalid port.",message:tr(wr.HDB_PORT)},{type:"input",transformer:Fc,when:co(e[ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],wr.HDB_USERNAME),name:ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:ao,default:Nle,validate:n=>Ln(n)?Ln(n):(t=n,!0),message:tr(wr.HDB_USERNAME)},{type:"password",when:co(e[ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],wr.HDB_PASS),name:ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:ao,validate:n=>Ln(n)?Ln(n):!0,message:tr(wr.HDB_PASS)}];if(I_.autoCastBoolean(e[ee.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let n=[{type:"input",transformer:Fc,when:co(e[ee.INSTALL_PROMPTS.CLUSTERING_NODENAME],wr.NODE_NAME),name:ee.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:ao,default:sle.random(),validate:i=>gle.test(i)?!0:"Invalid node name, must not contain ., * or >",message:tr(wr.NODE_NAME)},{type:"input",transformer:Fc,when:co(e[ee.INSTALL_PROMPTS.CLUSTERING_USER],wr.CLUSTER_USERNAME),name:ee.INSTALL_PROMPTS.CLUSTERING_USER,prefix:ao,default:ble,validate:i=>Ln(i)?Ln(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:tr(wr.CLUSTER_USERNAME)},{type:"password",when:co(e[ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD],wr.CLUSTER_PASS),name:ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:ao,validate:i=>Ln(i)?Ln(i):!0,message:tr(wr.CLUSTER_PASS)}];r.push(...n)}let s=await ox.prompt(r);if(Object.keys(s).length===0)return e;for(let n in s)e[n]===void 0&&(e[n]=s[n]);return e}a(Ile,"installPrompts");function co(e,t){return e!==void 0?(t.includes("password")?(console.log(`${tr(t)} ${da.gray("[hidden]")}`),mt.trace(`${tr(t)} [hidden]`)):(console.log(`${tr(t)} ${e}`),mt.trace(`${tr(t)} ${e}`)),!1):!0}a(co,"displayCmdEnvVar");function Ln(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(Ln,"checkForEmptyValue");function wle(){let e=Object.keys(ee.INSTALL_PROMPTS),t=fm(e),r=fm(Object.keys(ee.CONFIG_PARAM_MAP),!0),s={};for(let n of e){let i=ee.CONFIG_PARAM_MAP[n.toLowerCase()];t[n]?i===void 0?s[n]=t[n]:s[i.toUpperCase()]=t[n]:i!==void 0&&r[i.toLowerCase()]&&(s[n]=r[i.toLowerCase()])}return s}a(wle,"checkForPromptOverride");async function Cle(){mt.trace("Checking for existing install.");let e=I_.getPropsFilePath(),t=await Rs.pathExists(e),r;if(t){mt.trace(`Install found an existing boot prop file at:${e}`);let s=rle(e),n=XO.getConfigValue(ee.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||s.get(ee.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Rs.pathExists(n)}if(!t&&I_.noBootFile()&&(r=!0),r){if(mt.trace(`Install found existing HDB config at:${e}`),await ax.getVersionUpdateInfo()){let n=`Please use \`harperdb upgrade\` to update to ${cx.version()}. Exiting install...`;console.log(lo+da.magenta.bold(ple)),console.log(da.magenta.bold(n)),mt.error(n)}else console.log(lo+da.magenta.bold(JO)),mt.error(JO);process.exit(0)}}a(Cle,"checkForExistingInstall");async function Lle(e){mt.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${hle}${lo}and can be viewed by typing or copying and pasting the URL into your web browser.${lo}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:ao,transformer:Fc,when:co(e[ee.INSTALL_PROMPTS.TC_AGREEMENT],t),name:ee.INSTALL_PROMPTS.TC_AGREEMENT,message:tr(t),validate:n=>n.toLowerCase()==="yes"||n.toLowerCase()==="no"?!0:da.yellow("Please enter 'yes' or 'no'")},s=await ox.prompt([r]);s[ee.INSTALL_PROMPTS.TC_AGREEMENT]&&s[ee.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==mle&&(console.log(da.yellow(ix)),mt.error(ix),process.exit(0))}a(Lle,"termsAgreement");async function Dle(){let e=Pn.join(Dn,ee.HDB_CONFIG_FILE),t;try{t=zO.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
|
|
107
|
-
install_user = ${t}`,s=I_.getHomeDir(),n=Pn.join(s,ee.HDB_HOME_DIR_NAME),i=Pn.join(n,ee.LICENSE_KEY_DIR_NAME);try{Rs.mkdirpSync(n,{mode:ee.HDB_FILE_PERMISSIONS}),Rs.mkdirpSync(i,{mode:ee.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${ee.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Pn.join(n,ee.BOOT_PROPS_FILE_NAME);try{await Rs.writeFile(o,r)}catch(c){throw mt.error(`There was an error creating the boot file at path: ${o}`),c}uo.setProperty(ee.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),uo.setProperty(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),uo.setProperty(uo.BOOT_PROPS_FILE_PATH,o)}}a(Dle,"createBootPropertiesFile");async function Ple(e){mt.trace("Creating HarperDB config file");let t=fm(Object.keys(ee.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{XO.createConfigFile(t),uo.initSync()}catch(r){Mle(r)}}a(Ple,"createConfigFile");function Mle(e){mt.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(Sle);let t=Pn.resolve(uo.get(uo.BOOT_PROPS_FILE_PATH),"../");t&&Rs.removeSync(t),Dn&&(ux?Rs.readdirSync(Dn,{withFileTypes:!0}).forEach(s=>{let n=Pn.join(s.path,s.name);n!==xc[ee.INSTALL_PROMPTS.HDB_CONFIG]&&Rs.removeSync(n)}):Rs.removeSync(Dn)),process.exit(1)}a(Mle,"rollbackInstall");async function _x(e,t){mt.trace("Creating admin user"),await fle();let r;try{r=await ule.addRole(e)}catch(s){if(s.message.includes("already exists"))t=void 0;else throw s.message+="Error creating role",s}if(t)try{t.role=r.role,await cle.addUser(t)}catch(s){throw s.message=`Error creating user - ${s}`,s}}a(_x,"createAdminUser");async function dx(e){mt.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await _x(t,r),delete e[ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(dx,"createSuperUser");async function Ule(e){mt.trace("Creating Cluster user.");let t;e[ee.INSTALL_PROMPTS.CLUSTERING_USER]&&e[ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[ee.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await _x({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[ee.INSTALL_PROMPTS.CLUSTERING_USER],delete e[ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(Ule,"createClusterUser");async function vle(){let e=cx.version();if(e)await ax.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(vle,"insertHdbVersionInfo")});var mx=T((oNe,hx)=>{"use strict";var ZO=G(),Xr=U(),Ex=kO();hx.exports={processDirectives:Ble};async function Ble(e){console.log("Starting upgrade process...");let t=Ex.getVersionsForUpgrade(e),r=Gle(t),s=[],n=r.length;for(let i=0;i<n;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;Xr.notify(c),console.log(c);let u=[],_=[];try{u=Hle(o.sync_functions)}catch(l){throw Xr.error(`Error while running an upgrade script for ${o.version}`),l}try{_=await qle(o.async_functions)}catch(l){throw Xr.error(`Error while running an upgrade script for ${o.version}`),l}s.push(...u,..._)}return s}a(Ble,"processDirectives");function Hle(e){if(ZO.isEmptyOrZeroLength(e))return Xr.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Xr.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Xr.info(`Running function ${r.name}`),!(r instanceof Function)){Xr.info("Variable being processed is not a function");continue}let s=r();Xr.info(s),t.push(s)}return t}a(Hle,"runSyncFunctions");async function qle(e){if(ZO.isEmptyOrZeroLength(e))return Xr.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Xr.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let s=0;s<r;s++){let n=e[s];if(Xr.info(`Running function ${n.name}`),!(n instanceof Function)){Xr.info("Variable being processed is not a function");continue}let i=await n();Xr.info(i),t.push(i)}return t}a(qle,"runAsyncFunctions");function Gle(e){if(ZO.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let s=Ex.getDirectiveByVersion(r);s&&t.push(s)}return t}a(Gle,"getUpgradeDirectivesToInstall")});var rN=T((cNe,Ax)=>{"use strict";var hm=Q();hm.initSync();var gx=require("chalk"),px=require("fs-extra"),gi=U(),Ti=A(),Sx=po(),Fle=mx(),eN=G(),Rx=dm(),xle=nm(),Tx=Gm(),kle=os(),$le=require("util").promisify,Vle=$le(kle.setSchemaDataToGlobal),tN,{UPGRADE_VERSION:mm}=Ti.UPGRADE_JSON_FIELD_NAMES_ENUM;Ax.exports={upgrade:Yle};async function Yle(e){await Vle(),tN===void 0&&(tN=cc()),px.existsSync(hm.get(hm.BOOT_PROPS_FILE_PATH))||(w_("The hdb_boot_properties file was not found. Please install HDB.",Ti.LOG_LEVELS.ERROR),process.exit(1)),px.existsSync(hm.get(Ti.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(w_("The hdb settings file was not found. Please make sure HDB is installed.",Ti.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await Rx.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),w_(`This version of HarperDB is ${Sx.version()}`,Ti.LOG_LEVELS.INFO);let r=t[mm]?t[mm]:Sx.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Ti.HDB_SUPPORT_ADDRESS}`),gi.notify("Missing new version field from upgrade info object"),process.exit(1)),await Kle();let s,n=0;try{s=await xle.forceUpdatePrompt(t)}catch(i){gi.error("There was an error when prompting user about upgrade."),gi.error(i),s=!1,n=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(n)),gi.info(`Starting upgrade to version ${r}`),await Wle(t),w_(`HarperDB was successfully upgraded to version ${t[mm]}`,Ti.LOG_LEVELS.INFO)}a(Yle,"upgrade");async function Kle(){let e=!1,t=await Tx.findPs(Ti.HDB_PROC_NAME);if(eN.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await Tx.findPs("hdb_express");eN.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await tN.list();eN.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(gx.red(r)),gi.error(r),process.exit(1)}}a(Kle,"checkIfRunning");async function Wle(e){try{await Fle.processDirectives(e)}catch(t){throw w_("There was an error during the data upgrade. Please check the logs.",Ti.LOG_LEVELS.ERROR),t}try{await Rx.insertHdbUpgradeInfo(e[mm])}catch(t){gi.error("Error updating the 'hdb_info' system table."),gi.error(t)}}a(Wle,"runUpgrade");function w_(e,t=void 0){t||(t=gi.info),gi[t](e),console.log(gx.magenta(e))}a(w_,"printToLogAndConsole")});var Ix=T((lNe,yx)=>{"use strict";var{promises:nN,createReadStream:Qle,createWriteStream:jle}=require("fs"),{createGzip:Jle}=require("zlib"),{promisify:zle}=require("util"),{pipeline:Xle}=require("stream"),Zle=zle(Xle),e_e=require("path"),Ea=Q();Ea.initSync();var fa=U(),{CONFIG_PARAMS:C_,ITC_EVENT_TYPES:t_e}=A(),{onMessageFromWorkers:r_e}=Qe(),s_e=6e4,n_e="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",i_e="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",sN,Nx;yx.exports=bx;r_e(e=>{e.type===t_e.RESTART&&(Ea.initSync(!0),clearInterval(Nx),Ea.get(C_.LOGGING_ROTATION_ENABLED)&&bx())});async function bx(){try{let e=fa.getLogFilePath(),t=Ea.get(C_.LOGGING_ROTATION_MAXSIZE),r=Ea.get(C_.LOGGING_ROTATION_INTERVAL);if(!t&&!r){fa.error(n_e);return}let s=Ea.get(C_.LOGGING_ROTATION_PATH);if(!s){fa.error(i_e);return}let n;if(t){let o=t.slice(-1),c=t.slice(0,-1);o==="G"?n=c*1e9:o==="M"?n=c*1e6:n=c*1e3}let i;if(r){let o=r.slice(-1),c=r.slice(0,-1);o==="D"?i=c*1440:o==="H"?i=c*60:i=c}sN=Date.now()/6e4,fa.trace("Log rotate enabled, maxSize:",t,"interval:",r),Nx=setInterval(async()=>{if(n){let o;o=await nN.stat(e),o.size>=n&&await Ox(e,s)}i&&Date.now()/6e4-sN>=i&&(await Ox(e,s),sN=Date.now()/6e4)},s_e).unref()}catch(e){fa.error(e)}}a(bx,"logRotator");async function Ox(e,t){let r=Ea.get(C_.LOGGING_ROTATION_COMPRESS),s=e_e.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await Zle(Qle(e),Jle(),jle(s)),await nN.unlink(e)):await nN.rename(e,s),fa.closeLogFile(),fa.notify(`hdb.log rotated, old log moved to ${s}`)}a(Ox,"moveLogFile")});var $c=T((gNe,Ux)=>{"use strict";var As=Q();As.initSync();var dNe=Qo(),Nt=A(),Un=U(),Ri=require("fs-extra"),_o=require("path"),o_e=require("systeminformation"),a_e=wO(),c_e=Em(),iN=require("chalk"),u_e=mo(),Ai=G(),Cx=rt(),Lx=Eo(),wx=DE(),l_e=rN(),__e=Ix(),d_e=require("minimist"),{PACKAGE_ROOT:f_e}=A(),{startHTTPThreads:E_e,startSocketServer:fNe,mostIdleRouting:ENe,remoteAffinityRouting:hNe}=(Kh(),te(yO)),h_e=dm(),{isMainThread:m_e}=require("worker_threads"),mNe=Gn(),pNe=Mi(),SNe=mS(),TNe=Bu(),oN=A(),Mn,kc,p_e="Upgrade complete. Starting HarperDB.",S_e="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",T_e="HarperDB not found, starting install process.",g_e="There was an error during install, check install_log.log for more details. Exiting.",R_e="HarperDB successfully started.";function A_e(){let e=a(()=>{Ri.removeSync(_o.join(As.get(Nt.CONFIG_PARAMS.ROOTPATH),Nt.HDB_PID_FILE)),process.exit(0)},"remove_hdb_pid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}a(A_e,"addExitListeners");async function Dx(e=!1,t=!1){if(console.log(iN.magenta("Starting HarperDB...")),await Mx()===!1){console.log(T_e);try{await c_e()}catch(o){console.error(g_e,o),Un.error(o),process.exit(1)}}let r,s=kc?.service==="clustering";kc?.service&&!s&&(console.error("Unrecognized service argument"),process.exit(1));try{let o=Number.parseInt(await Ri.readFile(_o.join(As.get(Nt.CONFIG_PARAMS.ROOTPATH),Nt.HDB_PID_FILE),"utf8")),c=await o_e.processes();for(let u of c.list)if(u.pid===o){s?r=!0:console.log("HarperDB appears to be already running.");break}}catch{}Mn===void 0&&(Mn=cc()),s&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),As.get(Nt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await wx.generateNatsConfig(),await Mn.startClusteringProcesses(!0),process.exit()),A_e(),await Ri.writeFile(_o.join(As.get(oN.CONFIG_PARAMS.ROOTPATH),oN.HDB_PID_FILE),`${process.pid}`),Un.info("HarperDB PID",process.pid);let n;try{let o=await h_e.getVersionUpdateInfo();o!==void 0&&(n=o[Nt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await l_e.upgrade(o),console.log(p_e))}catch(o){n?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${n}. Exiting HarperDB.`),Un.error(o)):(console.error(S_e),Un.error(o)),process.exit(1)}if(!e){let o=Lx(Object.keys(Nt.CONFIG_PARAM_MAP),!0);!Ai.isEmpty(o)&&!Ai.isEmptyOrZeroLength(Object.keys(o))&&Cx.updateConfigValue(void 0,void 0,o,!0,!0)}a_e(),b_e(),Ai.autoCastBoolean(As.get(Nt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&m_e&&await wx.generateNatsConfig(t)}a(Dx,"initialize");async function O_e(e=!1){try{kc=d_e(process.argv),kc.ROOTPATH&&Cx.updateConfigObject("settings_path",_o.join(kc.ROOTPATH,Nt.HDB_CONFIG_FILE)),await Dx(e,!0);let t=process.env.IS_SCRIPTED_SERVICE&&!kc.service;Ai.autoCastBoolean(As.get(Nt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await Mn.startClusteringProcesses(),await Mn.startClusteringThreads()),await E_e(process.env.DEV_MODE?1:As.get(oN.CONFIG_PARAMS.THREADS)),As.get(Nt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await __e(),t||Px()}catch(t){console.error(t),Un.error(t),process.exit(1)}}a(O_e,"main");function Px(){Un.suppressLogging(()=>{console.log(iN.magenta(""+Ri.readFileSync(_o.join(f_e,"utility/install/ascii_logo.txt")))),console.log(iN.magenta(`|------------- HarperDB ${u_e.version} successfully started ------------|`))}),Un.notify(R_e)}a(Px,"started");async function N_e(){try{Mn===void 0&&(Mn=cc()),Mn.enterPM2Mode(),await Dx(),Ai.autoCastBoolean(As.get(Nt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await Mn.startClusteringProcesses(),await Mn.startService(Nt.PROCESS_DESCRIPTORS.HDB),Px(),process.exit(0)}catch(e){console.error(e),Un.error(e),process.exit(1)}}a(N_e,"launch");function b_e(){let e=_o.join(As.getHdbBasePath(),Nt.LICENSE_KEY_DIR_NAME,Nt.LICENSE_FILE_NAME),t=_o.join(e,Nt.LICENSE_FILE_NAME),r=_o.join(e,Nt.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:s,HARPERDB_LICENSE:n}=Lx(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Ai.isEmpty(s)||Ai.isEmpty(n))return;Ri.mkdirpSync(e),Ri.writeFileSync(r,s),Ri.writeFileSync(t,n)}catch(s){let n=`Failed to write license & fingerprint due to: ${s.message}`;console.error(n),Un.error(n)}}a(b_e,"writeLicenseFromVars");Ux.exports={launch:N_e,main:O_e,isHdbInstalled:Mx};async function Mx(){try{await Ri.stat(Ai.getPropsFilePath()),await Ri.stat(As.get(Nt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Ai.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw Un.error(`Error checking for HDB install - ${e}`),e}return!0}a(Mx,"isHdbInstalled")});var Bx=T((ANe,vx)=>{var y_e=Em(),I_e=U();vx.exports=w_e;async function w_e(){try{await y_e()}catch(e){console.error("There was an error during the install."),console.error(e),I_e.error(e),process.exit(1)}}a(w_e,"install")});var Gx=T((NNe,qx)=>{"use strict";var C_e=yE(),L_e=U(),Hx="Registration failed.";async function D_e(){let e;try{e=await C_e.register()}catch(t){return L_e.error(`Registration error ${t}`),Hx}return e||Hx}a(D_e,"register");qx.exports={register:D_e}});var $x=T((yNe,kx)=>{"use strict";var P_e=U(),M_e=A(),U_e=require("util"),v_e=require("child_process"),Fx=U_e.promisify(v_e.exec),B_e=zn(),L_=cc(),xx="Stopping HarperDB.";kx.exports=H_e;async function H_e(){if(console.log(xx),P_e.notify(xx),await L_.isServiceRegistered(M_e.HDB_PROC_DESCRIPTOR)){L_.enterPM2Mode();let r=await L_.getUniqueServicesList();for(let s in r)await L_.stop(s)}await L_.kill();let t=await B_e.getHDBProcessInfo();t.clustering.forEach(r=>{Fx(`kill ${r.pid}`)}),t.core.forEach(r=>{Fx(`kill ${r.pid}`)})}a(H_e,"stop")});var Qx=T((wNe,Wx)=>{"use strict";var aN=require("fs-extra"),cN=require("path"),q_e=require("yaml"),D_=st(),P_=A(),Vx=ke(),Yx=U(),G_e=Er(),F_e=AE(),x_e=gE(),k_e=zn(),Kx=Q();Kx.initSync();var vn={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored"},Cr={LEAF:"leaf server",HUB:"hub server"},pm;Wx.exports=$_e;async function $_e(){pm=Kx.get(P_.CONFIG_PARAMS.ROOTPATH);let e={harperdb:{status:vn.STOPPED}},t;try{t=Number.parseInt(await aN.readFile(cN.join(pm,P_.HDB_PID_FILE),"utf8"))}catch(s){throw s.code===P_.NODE_ERROR_CODES.ENOENT?new Error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB"):s}let r=await k_e.getHDBProcessInfo();for(let s of r.core)if(s.pid===t){e.harperdb.status=vn.RUNNING,e.harperdb.pid=t;break}if(e.clustering=await V_e(r),e.clustering[Cr.HUB].status===vn.RUNNING&&e.clustering[Cr.LEAF].status===vn.RUNNING){let s=[],n=await F_e({});for(let o of n.nodes){let c={};for(let u in o)c[u.replace("_"," ")]=o[u];s.push(c)}e.clustering.network=s;let i=await x_e.clusterStatus();e.clustering.replication={"node name":i.node_name,"is enabled":i.is_enabled,connections:[]};for(let o of i.connections){let c={};c["node name"]=o?.node_name,c.status=o?.status,c.ports={clustering:o?.ports?.clustering,"operations api":o?.ports?.operations_api},c["latency ms"]=o?.latency_ms,c.uptime=o?.uptime,c.subscriptions=o?.subscriptions,c["system info"]={"hdb version":o?.system_info?.hdb_version,"node version":o?.system_info?.node_version,platform:o?.system_info?.platform},e.clustering.replication.connections.push(c)}await D_.closeConnection()}console.log(q_e.stringify(e)),process.exit()}a($_e,"status");async function V_e(e){let t={[Cr.HUB]:{},[Cr.LEAF]:{}};if(e.clustering.length===0)return t[Cr.HUB].status=vn.STOPPED,t[Cr.LEAF].status=vn.STOPPED,t;let{port:r}=D_.getServerConfig(P_.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:s,decrypt_hash:n}=await G_e.getClusterUser();try{(await D_.createConnection(r,s,n,!1)).close(),t[Cr.HUB].status=vn.RUNNING}catch{t[Cr.HUB].status=vn.ERRORED}let{port:i}=D_.getServerConfig(P_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await D_.createConnection(i,s,n,!1)).close(),t[Cr.LEAF].status=vn.RUNNING}catch{t[Cr.LEAF].status=vn.ERRORED}try{t[Cr.HUB].pid=Number.parseInt(await aN.readFile(cN.join(pm,"clustering",Vx.PID_FILES.HUB),"utf8"))}catch(o){Yx.error(o),t[Cr.HUB].pid=void 0}try{t[Cr.LEAF].pid=Number.parseInt(await aN.readFile(cN.join(pm,"clustering",Vx.PID_FILES.LEAF),"utf8"))}catch(o){Yx.error(o),t[Cr.LEAF].pid=void 0}return t}a(V_e,"getHubLeafStatus")});var rk=T(()=>{"use strict";var Y_e=require("os"),gm=require("https"),jx=require("http"),Oi=require("fs-extra"),K_e=require("yaml"),W_e=require("human-readable-ids").hri,{pipeline:Jx}=require("stream/promises"),{createWriteStream:Rm,ensureDir:Am}=require("fs-extra"),{join:zs}=require("path"),_N=require("lodash"),Q_e=Q(),j_e=zn(),ek=U(),Sm=rt(),{restart:J_e}=Qo(),tk=G(),zx=st(),z_e=os(),{isHdbInstalled:X_e,main:Z_e}=$c(),ede=Em(),dN=A(),{SYSTEM_TABLE_NAMES:Xx,SYSTEM_SCHEMA_NAME:tde,CONFIG_PARAMS:M_,OPERATIONS_ENUM:rr}=dN,rde=9925,sde="info",nde=1e4,ide="clone-node-config.yaml",fN=[Xx.ROLE_TABLE_NAME,Xx.USER_TABLE_NAME],U_=process.env.HDB_LEADER_USERNAME,v_=process.env.HDB_LEADER_PASSWORD,B_=process.env.HDB_LEADER_URL,uN=process.env.HDB_LEADER_CLUSTERING_HOST,ode=process.env.HDB_LEADER_CLUSTERING_PORT,ade=process.env.HDB_FULLY_CONNECTED,lN,Ce,ot,at,EN,Vc,Zr,Js;async function cde(){if(await X_e())throw new Error("Existing install of HarperDB found on clone node.");if(console.info("Cloning node: "+B_),Ce?.rootPath)Vc=Ce.rootPath;else try{Vc=process.env.ROOTPATH?process.env.ROOTPATH:zs(Y_e.homedir(),dN.HDB_ROOT_DIR_NAME)}catch(t){throw console.error(t),new Error("There was an setting default rootPath. Please set 'rootPath' in clone-node-config.yaml")}let e;try{e=zs(Vc,ide),Ce=K_e.parseDocument(Oi.readFileSync(e,"utf8"),{simpleKeys:!0}).toJSON()}catch{console.info(e+" not found, using default config values.")}EN=Ce?.clustering?.nodeName??W_e.random(),ot=await H_({operation:rr.GET_CONFIGURATION}),ot=await JSON.parse(ot.body),process.env.HDB_FETCH==="true"?(await dde(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await _de(),await lde(),await ude(),await fde(),await Ede(),console.info("Successfully cloned node: "+B_)}a(cde,"cloneNode");async function ude(){console.info("Cloning configuration"),lN=ot?.clustering?.enabled;let e={[M_.ROOTPATH]:Vc};if(lN&&Ce?.clustering?.enabled!==!1){if(uN==null)throw new Error("'HDB_LEADER_CLUSTERING_HOST' must be defined");e[M_.CLUSTERING_ENABLED]=!0;let s=ot?.clustering?.hubServer?.cluster?.network?.routes,n=parseInt(ode)||ot?.clustering?.hubServer?.cluster?.network?.port;e[M_.CLUSTERING_USER]=ot?.clustering?.user;let i=Q_e.get(M_.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES);Array.isArray(i)?i.push({host:uN,port:n}):i=[{host:uN,port:n}],Array.isArray(s)&&(i=i.concat(s)),e[M_.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES]=i}let t=Ce?.componentConfig?.exclude;t=t?t.reduce((s,n)=>({...s,[n.name]:!0}),{}):[];for(let s in ot)ot[s]?.package&&!t[s]&&await Sm.addConfig(s,ot[s]);Ce?.databases&&await Sm.addConfig("databases",ot?.schemas);let r;Ce&&(r=Sm.flattenConfig(Ce));for(let s in r){let n=dN.CONFIG_PARAM_MAP[s.toLowerCase()];n&&(e[n]=r[s])}e.rootPath==null&&delete e.rootPath,e?.clustering_nodeName==null&&(e.clustering_nodeName=EN),ek.info("Cloning config:",e),_N.isEmpty(e)||Sm.updateConfigValue(void 0,void 0,e,!1,!0)}a(ude,"cloneConfig");async function lde(){if(console.info("Clone node installing HarperDB."),process.env.TC_AGREEMENT="yes",process.env.ROOTPATH=Vc,!U_)throw new Error("HDB_LEADER_USERNAME is undefined.");if(process.env.HDB_ADMIN_USERNAME=U_,!v_)throw new Error("HDB_LEADER_PASSWORD is undefined.");process.env.HDB_ADMIN_PASSWORD=v_,process.env.OPERATIONSAPI_NETWORK_PORT=Ce?.operationsApi?.network?.port??rde,process.env.CLUSTERING_NODENAME=EN,process.env.CLUSTERING_LOGLEVEL=Ce?.clustering?.logLevel??sde,await ede()}a(lde,"installHDB");async function _de(){console.info("Cloning system database");let e=ha("system");await Am(e);let t=zs(e,"system.mdb"),r=Rm(t,{overwrite:!0}),s=await Zx({operation:rr.GET_BACKUP,database:"system",tables:fN},r);if(await Oi.utimes(t,Date.now(),new Date(s.date)),at=await H_({operation:rr.DESCRIBE_ALL}),at=await JSON.parse(at.body),Zr=Ce?.databaseConfig?.excludeDatabases,Zr=Zr?Zr.reduce((n,i)=>({...n,[i.database]:!0}),{}):{},ot.schemas)for(let n in ot.schemas)Object.keys(ot.schemas[n]).includes("tables")&&(Zr[n]=!0,console.info(`Excluding database '${n}' from clone because leader node has custom pathing configured for one or more of its tables`));Js=Ce?.databaseConfig?.excludeTables,Js=Js?Js.reduce((n,i)=>({...n,[i.database==null?null:i.database+i.table]:!0}),{}):{};for(let n in at){if(Zr[n]){at[n]="excluded";continue}if(_N.isEmpty(at[n]))continue;let i=[],o=!1;for(let f in at[n])Js[n+f]?(o=!0,at[n][f]="excluded"):i.push(f);let c;o?(console.info(`Cloning database: ${n} tables: ${i}`),c={operation:rr.GET_BACKUP,database:n,tables:i}):(console.info(`Cloning database: ${n}`),c={operation:rr.GET_BACKUP,database:n});let u=ha(n);await Am(u);let _=zs(u,n+".mdb"),l=Rm(_,{overwrite:!0}),d=await Zx(c,l);await Oi.utimes(_,Date.now(),new Date(d.date))}}a(_de,"cloneTables");async function dde(){console.info("Cloning system database using fetch");let e=await Tm({operation:rr.GET_BACKUP,database:"system",tables:fN},!0),t=ha("system");await Am(t);let r=zs(t,"system.mdb");if(await Jx(e.body,Rm(r,{overwrite:!0})),await Oi.utimes(r,Date.now(),new Date(e.headers.get("date"))),at=await Tm({operation:rr.DESCRIBE_ALL}),at=await at.json(),Zr=Ce?.databaseConfig?.excludeDatabases,Zr=Zr?Zr.reduce((s,n)=>({...s,[n.database]:!0}),{}):{},ot.schemas)for(let s in ot.schemas)Object.keys(ot.schemas[s]).includes("tables")&&(Zr[s]=!0,console.info(`Excluding database '${s}' from clone because leader node has custom pathing configured for one or more of its tables`));Js=Ce?.databaseConfig?.excludeTables,Js=Js?Js.reduce((s,n)=>({...s,[n.database==null?null:n.database+n.table]:!0}),{}):{};for(let s in at){if(Zr[s]){at[s]="excluded";continue}if(_N.isEmpty(at[s]))continue;let n=[],i=!1;for(let d in at[s])Js[s+d]?(i=!0,at[s][d]="excluded"):n.push(d);if(n.length===0)return;let o;i?(console.info(`Cloning database: ${s} tables: ${n}`),o=await Tm({operation:rr.GET_BACKUP,database:s,tables:n},!0)):(console.info(`Cloning database: ${s}`),o=await Tm({operation:rr.GET_BACKUP,database:s},!0));let c=ha(s);await Am(c);let u=new Date(o.headers.get("date")),_=zs(c,`${u.getTime()}-${s}.mdb`);await Jx(o.body,Rm(_,{overwrite:!0}));let l=zs(c,s+".mdb");await Oi.rename(_,l),await Oi.utimes(l,Date.now(),u)}}a(dde,"cloneTablesFetch");async function Tm(e,t=!1){let r=Ce?.httpsRejectUnauthorized??!1,s=new gm.Agent({rejectUnauthorized:r});r||(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0");let i={Authorization:"Basic "+Buffer.from(U_+":"+v_).toString("base64"),"Content-Type":"application/json"};t&&(i["Accept-Encoding"]="gzip");let o=await fetch(B_,{method:"POST",headers:i,body:JSON.stringify(e),agent:s,compress:!0});if(o.ok)return o;throw console.error(`HTTP Error Response: ${o.status} ${o.statusText}`),new Error(await o.text())}a(Tm,"leaderHttpReqFetch");function ha(e){return Ce?.databases&&Ce?.databases[e]?.path||Ce?.storage&&Ce?.storage?.path||zs(Vc,"database")}a(ha,"getDbFileDir");async function fde(){let{deployComponent:e}=JE(),t=await H_({operation:rr.GET_COMPONENTS});t=await JSON.parse(t.body);let r=[];if(t.entries.length){for(let n of t.entries){if(!n.entries)continue;let i=!1;if(Ce?.componentConfig?.exclude){for(let o of Ce.componentConfig.exclude)if(o?.name!=null&&o.name===n.name){i=!0;break}}i||r.push(n.name)}let s=Ce?.componentConfig?.skipNodeModules!==!1;for(let n of r){console.info("Cloning component: "+n);let i=await H_({operation:rr.PACKAGE_COMPONENT,project:n,skip_node_modules:s}),{payload:o}=await JSON.parse(i.body);await e({payload:o,project:n})}}}a(fde,"cloneComponents");async function Ede(){if(!lN)return;let e=await j_e.getHDBProcessInfo();e.clustering.length===0||e.core.length===0?await Z_e():(console.info(await J_e({operation:rr.RESTART})),await tk.async_set_timeout(nde)),console.info("Clustering cloned tables");let t=Ce?.clusteringConfig?.subscribeToLeaderNode!==!1,r=Ce?.clusteringConfig?.publishToLeaderNode!==!1;await z_e.setSchemaDataToGlobalAsync();let s=bl(),n=await H_({operation:rr.CLUSTER_STATUS});n=await JSON.parse(n.body);let i=[],o=await Oi.stat(zs(ha("system"),"system.mdb"));for(let c of fN)i.push({schema:tde,table:c,subscribe:t,publish:r,start_time:o.mtime.toISOString()});for(let c in at){if(at[c]==="excluded")continue;let u=await Oi.stat(zs(ha(c),c+".mdb"));for(let _ in at[c])at[c][_]!=="excluded"&&i.push({schema:c,table:_,subscribe:t,publish:r,start_time:u.mtime.toISOString()})}if(await zx.createTableStreams(i),ek.info("Sending add_node request to node:",ot?.clustering?.nodeName,"with subscriptions:",i),ade==="true"&&n.connections.length>0){let c=pE(),u=[{node_name:ot?.clustering?.nodeName,subscriptions:i}],_=!0;for(let d of n.connections){let f={node_name:d.node_name,subscriptions:[]};for(let E of d.subscriptions){if(Zr[E.schema]||Js[E.schema+E.table])continue;_=!1;let h=await Oi.stat(zs(ha(E.schema),E.schema+".mdb"));h.mtime.setSeconds(h.mtime.getSeconds()-10),E.start_time=h.mtime.toISOString(),f.subscriptions.push(E)}u.push(f)}if(_)return;let l=await c({operation:rr.CONFIGURE_CLUSTER,connections:u});console.info(JSON.stringify(l))}else await s({operation:rr.ADD_NODE,node_name:ot?.clustering?.nodeName,subscriptions:i},!0);await zx.closeConnection()}a(Ede,"clusterTables");async function H_(e){let t=new gm.Agent({rejectUnauthorized:Ce?.httpsRejectUnauthorized??!1}),s={Authorization:"Basic "+Buffer.from(U_+":"+v_).toString("base64"),"Content-Type":"application/json"},n=new URL(B_),i={protocol:n.protocol,host:n.hostname,method:"POST",headers:s};return n.protocol==="https:"&&(i.agent=t),n.port&&(i.port=n.port),await tk.httpRequest(i,e)}a(H_,"leaderHttpReq");async function Zx(e,t){let r=new gm.Agent({rejectUnauthorized:Ce?.httpsRejectUnauthorized??!1}),n={Authorization:"Basic "+Buffer.from(U_+":"+v_).toString("base64"),"Content-Type":"application/json"},i=new URL(B_),o={protocol:i.protocol,host:i.hostname,method:"POST",headers:n};return i.protocol==="https:"&&(o.agent=r,jx=gm),i.port&&(o.port=i.port),new Promise((c,u)=>{let _=jx.request(o,l=>{l.statusCode!==200&&u("Request to leader node failed with code: "+l.statusCode),l.pipe(t),l.on("end",()=>{t.close(),c(l.headers)})});_.on("error",l=>{u(l)}),_.write(JSON.stringify(e)),_.end()})}a(Zx,"leaderHttpStream");cde().then().catch(e=>{console.log(e)})});var Yc=U(),hde=po(),hN=A(),Om=require("fs"),sk=require("path"),MNe=require("os"),{PACKAGE_ROOT:mde}=A(),pde=eb(),UNe=(Kh(),te(yO)),{SERVICE_ACTIONS_ENUM:Xs}=hN;Sde();function Sde(){let e=pde();if(e)if(e.error){console.error(e.error),Yc.error(e.error);return}else e.warn&&(console.warn(e.warn),Yc.warn(e.warn));let t;Om.readdir(sk.join(mde,"bin"),r=>{if(r)return Yc.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let s;switch(t){case Xs.DEV:process.env.DEV_MODE=!0;case Xs.RUN:let n=process.argv[3];n&&n[0]!=="-"&&(Om.existsSync(n)||(console.error(`The folder ${n} does not exist`),process.exit(1)),Om.statSync(n).isDirectory()||(console.error(`The path ${n} is not a folder`),process.exit(1)),Om.existsSync(sk.join(n,hN.HDB_CONFIG_FILE))?process.env.ROOTPATH=n:process.env.RUN_HDB_APP=n),$c().main();break;case Xs.START:s=$c().launch();break;case Xs.INSTALL:Bx()().then(()=>$c().main(!0)).catch(f=>{console.error(f)});break;case Xs.REGISTER:Gx().register().then(f=>{console.log(f)}).catch(f=>{console.error(f)});break;case Xs.STOP:$x()().then(()=>{process.exit(0)}).catch(f=>{console.error(f)});break;case Xs.RESTART:Qo().restart({}).then().catch(f=>{Yc.error(f),console.error(`There was an error restarting harperdb. ${f}`),process.exit(1)});break;case Xs.VERSION:hde.printVersion();break;case Xs.UPGRADE:Yc.setLogLevel(hN.LOG_LEVELS.INFO),rN().upgrade(null).then(()=>{console.log("Your instance of HDB is up to date!")}).catch(f=>{Yc.error(`Got an error during upgrade ${f}`)});break;case Xs.STATUS:Qx()().then().catch(f=>{console.error(f)});break;case void 0:process.env.HDB_LEADER_URL?rk():$c().main();break;default:console.warn(`The "${t}" command is not understood.`);case Xs.HELP:console.log(`
|
|
105
|
+
Reindexing upgrade started for transaction logs`),pi.notify("Reindexing upgrade started for transaction logs"),await vF(GO,!0,e)),pi.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(R_?", but errors occurred":"")}a(rue,"reindexUpgrade");async function vF(e,t,r){let s=await In.readdir(e),n=s.length;for(let i=0;i<n;i++){let o=s[i],c=Si.join(e,o.toString());if(o===".DS_Store")continue;let u=await In.readdir(c),_=u.length;for(let l=0;l<_;l++){let d=u[l];if(d!==".DS_Store"&&In.statSync(Si.join(c,d)).isDirectory())try{await sue(o,d,t),er.info(`Reindexing started for ${o}.${d}`),pi.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await iue(o,d,c,t,r),er.info(`Reindexing completed for ${o}.${d}`),pi.notify(`Reindexing completed for ${o}.${d}`)}catch(f){R_=!0,f.schema_path=c,f.table_name=d,pi.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),pi.error(f),er.error(f),console.error(f)}}}if(!R_)try{await In.rm(um,{recursive:!0})}catch{}}a(vF,"processTables");async function sue(e,t,r){let n=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Si.join(um,n);await In.ensureDir(um),await In.writeFile(i,""),er=eue({level:"debug",formatters:{bindings(){}}},i)}a(sue,"initPinoLogger");var nue=20;async function iue(e,t,r,s,n){let i;try{i=await zr.openEnvironment(r,t,s)}catch(g){if(g.message==="MDB_INVALID: File is not an LMDB file"){pi.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),er.error(g);return}throw g}let o=cue(i.dbis),c=zr.openDBI(i,o),u=Object.keys(i.dbis),_=zr.statDBI(i,o);er.info(`Old environment stats: ${JSON.stringify(_)}`);let l=new Zce.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});l.start(_.entryCount,0,{});let d=await zr.createEnvironment(r,t,!1);zr.createDBI(d,o,!1,!0);let f=[];try{for(let g of c.getRange({start:!1}))g.value=Object.assign({},g.value),f.push(g),s||e==="system"&&(t==="hdb_schema"&&(g.key=g.key.toString(),g.value.name=g.value.name.toString()),t==="hdb_table"&&(g.key=g.key.toString(),g.value.schema=g.value.schema.toString(),g.value.name=g.value.name.toString()),t==="hdb_attribute"&&(g.key=g.key.toString(),g.value.schema=g.value.schema.toString(),g.value.table=g.value.table.toString(),g.value.attribute=g.value.attribute.toString())),f.length>nue&&await E();await E()}catch(g){throw R_=!0,er.error(g),g}async function E(){let g,O=f.map(({value:$})=>$);s?g=await Promise.all(O.map($=>oue(d,$))):g=await jce(d,o,u.filter($=>$!=="__blob__"),O,!1);for(let $=0,F=f.length;$<F;$++){let{key:w,value:K}=f[$];er.info(`Record hash value: ${w} hash: ${o}`);let B;s?B=g[$]:B=g.written_hashes.indexOf(w)>-1,g_(B,!0),aue(d,o,K[o],s),er.info(`Insert success, written hashes: ${g.written_hashes}`),l.increment()}f=[],l.value/l.total*100%10===0&&pi.notify(`${e}.${t} ${l.value}/${l.total} records inserted`),er.info(`${l.value}/${l.total} records inserted`)}a(E,"finishOutstanding"),l.stop();let h=zr.statDBI(i,o),p=zr.statDBI(d,o);if(er.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${p.entryCount}`),g_.deepStrictEqual(h.entryCount,p.entryCount),await zr.closeEnvironment(i),await zr.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],n){let g=Si.join(r,t),O=Si.join(g,"data.mdb"),V=Si.join(g,"lock.mdb");await In.unlink(O),await In.unlink(V),await In.rmdir(g),er.info(`Deleted old environment files from schema folder: ${O}, ${V}`)}let S=await zr.openEnvironment(r,t),A=zr.statDBI(S,o);er.info(`New stats: ${JSON.stringify(p)}. New stats after move: ${JSON.stringify(A)}`),g_.deepStrictEqual(A.entryCount,p.entryCount),await zr.closeEnvironment(S),delete global.lmdb_map[`${e}.${t}`]}a(iue,"processTable");async function oue(e,t){zr.initializeDBIs(e,io.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,io.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[io.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[io.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),Xce.isEmpty(t.user_name)||e.dbis[io.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let s of t.hash_values)e.dbis[io.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s,r)})}a(oue,"insertTransaction");function aue(e,t,r,s){let i=e.dbis[t].get(r);g_.deepStrictEqual(typeof i,"object");let o;if(s){let c={[io.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[io.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};o=Object.entries(c)}else o=Object.entries(i);for(let[c,u]of o)if(c!==t&&e.dbis[c]!==void 0&&!Jce.isEmptyOrZeroLength(u))if(s&&c==="hash_value")for(let _=0,l=u.length;_<l;_++){let d=u[_];BF(e,c,d,r)}else BF(e,c,u,r)}a(aue,"validateIndices");function BF(e,t,r,s){try{let n=!1,i=zce.getIndexedValues(r);if(!i)return;for(let o of i)n=e.dbis[t].doesExist(o,s),n||er.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${s}`),g_.deepStrictEqual(n,!0)}catch(n){R_=!0,er.error(n),console.error(n)}}a(BF,"validateIndex");function cue(e){let t;for(let[r,s]of Object.entries(e))if(s.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}a(cue,"getHashDBI")});var $O=T((jOe,FF)=>{"use strict";var uue=require("mkcert"),lm=require("path"),FO=require("fs-extra"),xO=v(),lue=j(),kO=R(),Hc=oT(),_ue=Eo(),due=rt();FF.exports={generateKeys:fue,updateConfigCert:GF};async function fue(){let e=lue.getHdbBasePath(),t=lm.join(e,kO.LICENSE_KEY_DIR_NAME),r=await uue.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:365,caKey:Hc.CERTIFICATE_VALUES.key,caCert:Hc.CERTIFICATE_VALUES.cert}),s=lm.join(t,Hc.CERTIFICATE_PEM_NAME),n=lm.join(t,Hc.PRIVATEKEY_PEM_NAME),i=lm.join(t,Hc.CA_PEM_NAME);try{await FO.writeFile(s,r.cert)}catch(o){throw xO.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await FO.writeFile(n,r.key)}catch(o){throw xO.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await FO.writeFile(i,Hc.CERTIFICATE_VALUES.cert)}catch(o){throw xO.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}GF(s,n,i)}a(fue,"generateKeys");function GF(e,t,r){let s=_ue(Object.keys(kO.CONFIG_PARAM_MAP),!0),n=kO.CONFIG_PARAMS,i={[n.CLUSTERING_TLS_CERTIFICATE]:s[n.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]?s[n.CLUSTERING_TLS_CERTIFICATE]:e,[n.CLUSTERING_TLS_PRIVATEKEY]:s[n.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]?s[n.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]:t,[n.CLUSTERING_TLS_CERT_AUTH]:s[n.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]?s[n.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]:r,[n.TLS_CERTIFICATE]:s[n.TLS_CERTIFICATE.toLowerCase()]?s[n.TLS_CERTIFICATE.toLowerCase()]:e,[n.TLS_PRIVATEKEY]:s[n.TLS_PRIVATEKEY.toLowerCase()]?s[n.TLS_PRIVATEKEY.toLowerCase()]:t,[n.TLS_CERTIFICATEAUTHORITY]:s[n.TLS_CERTIFICATEAUTHORITY.toLowerCase()]?s[n.TLS_CERTIFICATEAUTHORITY.toLowerCase()]:r};s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(i[n.OPERATIONSAPI_TLS_CERTIFICATE]=s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(i[n.OPERATIONSAPI_TLS_PRIVATEKEY]=s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),s[n.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(i[n.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=s[n.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),due.updateConfigValue(void 0,void 0,i,!1,!0)}a(GF,"updateConfigCert")});var YF=T((XOe,VF)=>{"use strict";var _m=require("path"),oo=require("fs-extra"),Eue=HO(),ua=v(),xF=rt(),VO=j(),Qs=R(),dm=G(),hue=require("properties-reader"),mue=Ps(),pue=sE(),Sue=_r(),JOe=require("util"),Tue=Sue.searchByValue,gue=dr(),Rue=bE(),Aue=ke(),Oue=qF(),kF=$O(),Nue=om(),N_=new Eue("4.0.0"),$F=[],A_,O_;async function bue(){try{if(await Nue.upgradeCertsPrompt()){if(console.log("Generating new certificates."),A_){let t=dm.changeExtension(A_,".bak");await oo.move(A_,t)}if(O_){let t=dm.changeExtension(O_,".bak");await oo.move(O_,t)}await kF.generateKeys()}else console.log("Using existing certificates."),kF.updateConfigCert(A_,O_,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(bue,"generateNewKeys");async function yue(){console.log("Updating HarperDB nodes."),ua.info("Updating HarperDB nodes.");let e=[];try{let t=new mue(Qs.SYSTEM_SCHEMA_NAME,Qs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await Tue(t)),s=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!Aue.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let l=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(l),l}let u={host:c.host,port:c.port};e.push(u);let _=[];for(let l=0,d=c.subscriptions.length;l<d;l++){let f=c.subscriptions[l],E=f.channel.split(":");_.push({schema:E[0],table:E[1],publish:f.publish,subscribe:f.subscribe})}s.push({name:c.name,subscriptions:_,system_info:{hdb_version:Qs.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(dm.isEmptyOrZeroLength(s))return;let n=new pue(Qs.SYSTEM_SCHEMA_NAME,Qs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,s);await gue.update(n)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{Rue.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}a(yue,"updateNodes");async function Iue(){let e=VO.get(Qs.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(_m.join("config","settings.js"))){ua.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),ua.info(t);let r=_m.dirname(e),s=VO.get(Qs.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),n=_m.join(s,"backup","4_0_0_upgrade_settings.bak"),i=_m.join(s,Qs.HDB_CONFIG_FILE);try{ua.info(`Backing up old settings file to: ${n}`),console.log(`Backing up old settings file to: ${n}`),oo.copySync(e,n)}catch(d){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),d}try{ua.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),ua.info("Updating env variables with new settings values");let d=xF.initOldConfig(e);A_=d[Qs.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],O_=d[Qs.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],xF.createConfigFile(d)}catch(d){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),d}let o=dm.getPropsFilePath();oo.accessSync(o,oo.constants.F_OK|oo.constants.R_OK);let u=hue(o).get(Qs.HDB_SETTINGS_NAMES.INSTALL_USER),_=`settings_path = ${i}
|
|
106
|
+
install_user = ${u}`;try{oo.writeFileSync(o,_)}catch(d){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),d}try{VO.initSync(!0)}catch(d){throw console.error("Unable to initialize new properties. Please check the log for details."),d}let l="New settings file for 4.0.0 upgrade successfully created.";try{oo.removeSync(r),console.log(l),ua.info(l)}catch(d){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),d}}a(Iue,"updateSettingsFile_4_0_0");N_.async_functions.push(Iue);N_.async_functions.push(bue);N_.async_functions.push(Oue);N_.async_functions.push(yue);$F.push(N_);VF.exports=$F});var YO=T((eNe,jF)=>{"use strict";var la=G(),wue=R(),KF=v(),{DATA_VERSION:Cue,UPGRADE_VERSION:Lue}=wue.UPGRADE_JSON_FIELD_NAMES_ENUM,WF=MF(),fm=YF(),_a=new Map;WF&&WF.forEach(e=>{_a.set(e.version,e)});fm&&fm.forEach(e=>{_a.set(e.version,e)});fm&&fm.forEach(e=>{_a.set(e.version,e)});function Due(){return[..._a.keys()].sort(la.compareVersions)}a(Due,"getSortedVersions");function QF(e){let t=e[Cue],r=e[Lue];return la.isEmptyOrZeroLength(t)||la.isEmptyOrZeroLength(r)?(KF.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),KF.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[..._a.keys()].sort(la.compareVersions).filter(function(s){return la.compareVersions(s,t)>0&&la.compareVersions(s,r)<=0})}a(QF,"getVersionsForUpgrade");function Pue(e){return QF(e).length>0}a(Pue,"hasUpgradesRequired");function Mue(e){return la.isEmptyOrZeroLength(e)?null:_a.has(e)?_a.get(e):null}a(Mue,"getDirectiveByVersion");jF.exports={getSortedVersions:Due,getDirectiveByVersion:Mue,getVersionsForUpgrade:QF,hasUpgradesRequired:Pue}});var Em=T((rNe,ex)=>{"use strict";var Uue=require("util"),KO=require("chalk"),vue=require("os"),JF=dr(),Bue=_r(),Jr=R(),XF=RF(),QO=eT(),{UpgradeObject:zF}=NF(),{forceDowngradePrompt:Hue}=om(),que=po(),b_=v(),qc=G(),jO=as(),Gue=(de(),te(De)),Fue=YO(),xue=Uue.promisify(jO.setSchemaDataToGlobal),kue=Bue.searchByValue,$ue="info_id",Vue="2.9.9",Yue="3.0.0";async function Kue(e){let t=new XF.HdbInfoInsertObject(1,e,e),r=new QO.InsertObject(Jr.OPERATIONS_ENUM.INSERT,Jr.SYSTEM_SCHEMA_NAME,Jr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Jr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return jO.setSchemaDataToGlobal(),JF.insert(r)}a(Kue,"insertHdbInstallInfo");async function WO(e){let t,r=await ZF(),s=new Map([[0,{}]]);for(let c of r)s.set(c.info_id,c);let i=Math.max.apply(null,[...s.keys()])+1;t=new XF.HdbInfoInsertObject(i,e,e);let o=new QO.InsertObject(Jr.OPERATIONS_ENUM.INSERT,Jr.SYSTEM_SCHEMA_NAME,Jr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Jr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await xue(),JF.insert(o)}a(WO,"insertHdbUpgradeInfo");async function ZF(){let e=new QO.NoSQLSeachObject(Jr.SYSTEM_SCHEMA_NAME,Jr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,$ue,Jr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await kue(e))}catch(r){b_.info(r)}return t}a(ZF,"getAllHdbInfoRecords");async function Wue(){let e=await ZF();if(e.length===0)return;let t,r=new Map;for(let n of e)r.set(n.info_id,n);let s=Math.max.apply(null,[...r.keys()]);return t=r.get(s),t}a(Wue,"getLatestHdbInfoRecord");async function Que(){b_.info("Checking if HDB software has been updated");try{let e=que.version(),t=await Wue(),r;if(qc.isEmpty(t))r=Vue;else if(r=t.data_version_num,qc.compareVersions(r.toString(),e.toString())>0){if(!qc.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(KO.yellow(`This instance's data was last run on version ${r}`)),console.error(KO.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${vue.EOL}${Jr.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");qc.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(KO.yellow(`This instance's data was last run on version ${r}`)),await Hue(new zF(r,e))?await WO(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(jO.setSchemaDataToGlobal(),jue(r),e.toString()===r.toString())return;let s=new zF(r,e);if(Fue.hasUpgradesRequired(s))return s;qc.compareVersions(s.data_version.toString(),s.upgrade_version.toString())<0&&(await WO(s.upgrade_version),b_.notify(`HarperDB running on upgraded version: ${s.upgrade_version}`))}catch(e){throw b_.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),b_.fatal(e),e}}a(Que,"getVersionUpdateInfo");function jue(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${Jr.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in Gue.databases.system))throw console.log(t),new Error(t);if(!qc.isEmpty(e)&&e<Yue)throw console.log(t),new Error(t)}a(jue,"checkIfInstallIsSupported");ex.exports={insertHdbInstallInfo:Kue,insertHdbUpgradeInfo:WO,getVersionUpdateInfo:Que}});var ix=T((nNe,nx)=>{"use strict";var zO=require("joi"),{boolean:zue,string:tx,number:Jue}=zO.types(),rx=require("fs-extra"),y_=R(),sx=require("path"),Xue=Ve();nx.exports=Zue;function Zue(e){let t=tx.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=zO.object({[y_.INSTALL_PROMPTS.ROOTPATH]:zO.custom(ele),[y_.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:Jue.min(0),[y_.INSTALL_PROMPTS.TC_AGREEMENT]:tx.valid("yes","YES","Yes"),[y_.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[y_.INSTALL_PROMPTS.CLUSTERING_ENABLED]:zue});return Xue.validateBySchema(e,r)}a(Zue,"installValidator");function ele(e,t){if(rx.existsSync(sx.join(e,"system/hdb_user/data.mdb"))||rx.existsSync(sx.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(ele,"validateRootAvailable")});var ax=T((oNe,ox)=>{"use strict";var{mkdirpSync:tle}=require("fs-extra"),wn=require("path"),Gc=R(),XO=v(),rle=os(),JO=qn(),sle=Be();ox.exports=nle;async function nle(e){XO.trace("Mounting HarperDB"),js(e),js(wn.join(e,"backup")),js(wn.join(e,"trash")),js(wn.join(e,"keys")),js(wn.join(e,"keys",Gc.LICENSE_FILE_NAME)),js(wn.join(e,"log")),js(wn.join(e,"doc")),js(wn.join(e,"database")),js(wn.join(e,Gc.TRANSACTIONS_DIR_NAME)),js(wn.join(e,"clustering","leaf")),js(wn.join(e,"components")),await ile()}a(nle,"mountHdb");async function ile(){let e=Bu(),t=Object.keys(JO);for(let r=0;r<t.length;r++){let s=t[r],n=JO[s].hash_attribute;try{sle.initSystemSchemaPaths(Gc.SYSTEM_SCHEMA_NAME,s);let i=new e(Gc.SYSTEM_SCHEMA_NAME,s,n);i.attributes=JO[s].attributes;let o=i.attributes.find(({attribute:c})=>c===n);o.isPrimaryKey=!0,await rle.createTable(s,i)}catch(i){throw XO.error(`issue creating environment for ${Gc.SYSTEM_SCHEMA_NAME}.${s}: ${i}`),i}}}a(ile,"createLMDBTables");function js(e){tle(e,{mode:Gc.HDB_FILE_PERMISSIONS}),XO.info(`Directory ${e} created`)}a(js,"makeDirectory")});var mm=T((cNe,Sx)=>{"use strict";var eN=require("os"),_x=require("inquirer"),As=require("fs-extra"),ole=require("properties-reader"),da=require("chalk"),Dn=require("path"),ale=require("human-readable-ids").hri,cle=require("ora"),ule=require("yaml"),mt=v(),uo=j(),I_=G(),hm=Eo(),dx=Em(),fx=po(),ee=R(),lle=ix(),_le=ax(),tN=rt(),dle=Er(),fle=Zf(),Ele=DO(),hle=as(),mle=require("util").promisify,ple=mle(hle.setSchemaDataToGlobal),Sle=$O(),Fc=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),tr=a(e=>da.magenta.bold(e),"HDB_PROMPT_MSG"),Tle="https://harperdb.io/legal/end-user-license-agreement",lo=eN.EOL,ao="",gle="yes",cx="Starting HarperDB install...",ux="HarperDB installation was successful.",lx="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Rle="An out of date version of HarperDB is already installed.",ZO="It appears that HarperDB is already installed. Exiting install...",Ale="Aborting install",Ole=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),Nle=new RegExp(/^[^\s.,*>]+$/),ble=eN.homedir(),yle=Dn.join(ble,ee.HDB_ROOT_DIR_NAME),Ile=9925,wle="HDB_ADMIN",Cle="CLUSTER_USER",wr={DESTINATION:"Please enter a destination for HarperDB:",HDB_PORT:"Please enter a server listening port for HarperDB:",HDB_USERNAME:"Please enter a username for the HDB_ADMIN:",HDB_PASS:"Please enter a password for the HDB_ADMIN:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:"},xc=hm([ee.INSTALL_PROMPTS.HDB_CONFIG]),Ln,Ex=!1;Sx.exports=hx;hx.createSuperUser=px;async function hx(){console.log(tr(lo+cx+lo)),mt.notify(cx);let e;xc[ee.INSTALL_PROMPTS.HDB_CONFIG]&&(e=Lle());let t=Ple();Object.assign(t,e);let r=lle(t);if(r)throw r.message;await Mle(),await Ule(t);let s=await Dle(t);Ln=s[ee.INSTALL_PROMPTS.ROOTPATH],xc[ee.INSTALL_PROMPTS.HDB_CONFIG]&&Dn.dirname(xc[ee.INSTALL_PROMPTS.HDB_CONFIG])===Ln&&(Ex=!0),!xc[ee.INSTALL_PROMPTS.HDB_CONFIG]&&await As.pathExists(Dn.join(Ln,ee.HDB_CONFIG_FILE))&&(console.error(ZO),process.exit());let n=cle({prefixText:tr("Installing"),color:"magenta",spinner:"simpleDots"});if(n.start(),I_.isEmpty(Ln))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");uo.setHdbBasePath(Ln),await _le(Ln),await vle(),await Ble(s),mt.initLogSettings(!0),await px(s),await qle(s),await Sle.generateKeys(),await Gle(),Ele(),n.stop(),console.log(tr(lo+ux+lo)),mt.notify(ux)}a(hx,"install");function Lle(){let e=ule.parseDocument(As.readFileSync(xc[ee.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=tN.flattenConfig(e.toJSON());return t[ee.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[ee.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(Lle,"getConfigFromFile");async function Dle(e){mt.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Fc,when:co(e[ee.INSTALL_PROMPTS.ROOTPATH],wr.DESTINATION),name:ee.INSTALL_PROMPTS.ROOTPATH,prefix:ao,default:yle,validate:async n=>Cn(n)?Cn(n):await As.pathExists(Dn.join(n,"system","hdb_user.mdb"))?`'${n}' is already in use. Please enter a different path.`:!0,message:tr(wr.DESTINATION)},{type:"input",transformer:Fc,when:co(e[ee.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT],wr.HDB_PORT),name:ee.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:ao,default:Ile,validate:n=>Ole.test(n)?!0:"Invalid port.",message:tr(wr.HDB_PORT)},{type:"input",transformer:Fc,when:co(e[ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],wr.HDB_USERNAME),name:ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:ao,default:wle,validate:n=>Cn(n)?Cn(n):(t=n,!0),message:tr(wr.HDB_USERNAME)},{type:"password",when:co(e[ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],wr.HDB_PASS),name:ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:ao,validate:n=>Cn(n)?Cn(n):!0,message:tr(wr.HDB_PASS)}];if(I_.autoCastBoolean(e[ee.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let n=[{type:"input",transformer:Fc,when:co(e[ee.INSTALL_PROMPTS.CLUSTERING_NODENAME],wr.NODE_NAME),name:ee.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:ao,default:ale.random(),validate:i=>Nle.test(i)?!0:"Invalid node name, must not contain ., * or >",message:tr(wr.NODE_NAME)},{type:"input",transformer:Fc,when:co(e[ee.INSTALL_PROMPTS.CLUSTERING_USER],wr.CLUSTER_USERNAME),name:ee.INSTALL_PROMPTS.CLUSTERING_USER,prefix:ao,default:Cle,validate:i=>Cn(i)?Cn(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:tr(wr.CLUSTER_USERNAME)},{type:"password",when:co(e[ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD],wr.CLUSTER_PASS),name:ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:ao,validate:i=>Cn(i)?Cn(i):!0,message:tr(wr.CLUSTER_PASS)}];r.push(...n)}let s=await _x.prompt(r);if(Object.keys(s).length===0)return e;for(let n in s)e[n]===void 0&&(e[n]=s[n]);return e}a(Dle,"installPrompts");function co(e,t){return e!==void 0?(t.includes("password")?(console.log(`${tr(t)} ${da.gray("[hidden]")}`),mt.trace(`${tr(t)} [hidden]`)):(console.log(`${tr(t)} ${e}`),mt.trace(`${tr(t)} ${e}`)),!1):!0}a(co,"displayCmdEnvVar");function Cn(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(Cn,"checkForEmptyValue");function Ple(){let e=Object.keys(ee.INSTALL_PROMPTS),t=hm(e),r=hm(Object.keys(ee.CONFIG_PARAM_MAP),!0),s={};for(let n of e){let i=ee.CONFIG_PARAM_MAP[n.toLowerCase()];t[n]?i===void 0?s[n]=t[n]:s[i.toUpperCase()]=t[n]:i!==void 0&&r[i.toLowerCase()]&&(s[n]=r[i.toLowerCase()])}return s}a(Ple,"checkForPromptOverride");async function Mle(){mt.trace("Checking for existing install.");let e=I_.getPropsFilePath(),t=await As.pathExists(e),r;if(t){mt.trace(`Install found an existing boot prop file at:${e}`);let s=ole(e),n=tN.getConfigValue(ee.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||s.get(ee.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await As.pathExists(n)}if(!t&&I_.noBootFile()&&(r=!0),r){if(mt.trace(`Install found existing HDB config at:${e}`),await dx.getVersionUpdateInfo()){let n=`Please use \`harperdb upgrade\` to update to ${fx.version()}. Exiting install...`;console.log(lo+da.magenta.bold(Rle)),console.log(da.magenta.bold(n)),mt.error(n)}else console.log(lo+da.magenta.bold(ZO)),mt.error(ZO);process.exit(0)}}a(Mle,"checkForExistingInstall");async function Ule(e){mt.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Tle}${lo}and can be viewed by typing or copying and pasting the URL into your web browser.${lo}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:ao,transformer:Fc,when:co(e[ee.INSTALL_PROMPTS.TC_AGREEMENT],t),name:ee.INSTALL_PROMPTS.TC_AGREEMENT,message:tr(t),validate:n=>n.toLowerCase()==="yes"||n.toLowerCase()==="no"?!0:da.yellow("Please enter 'yes' or 'no'")},s=await _x.prompt([r]);s[ee.INSTALL_PROMPTS.TC_AGREEMENT]&&s[ee.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==gle&&(console.log(da.yellow(lx)),mt.error(lx),process.exit(0))}a(Ule,"termsAgreement");async function vle(){let e=Dn.join(Ln,ee.HDB_CONFIG_FILE),t;try{t=eN.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
|
|
107
|
+
install_user = ${t}`,s=I_.getHomeDir(),n=Dn.join(s,ee.HDB_HOME_DIR_NAME),i=Dn.join(n,ee.LICENSE_KEY_DIR_NAME);try{As.mkdirpSync(n,{mode:ee.HDB_FILE_PERMISSIONS}),As.mkdirpSync(i,{mode:ee.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${ee.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Dn.join(n,ee.BOOT_PROPS_FILE_NAME);try{await As.writeFile(o,r)}catch(c){throw mt.error(`There was an error creating the boot file at path: ${o}`),c}uo.setProperty(ee.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),uo.setProperty(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),uo.setProperty(uo.BOOT_PROPS_FILE_PATH,o)}}a(vle,"createBootPropertiesFile");async function Ble(e){mt.trace("Creating HarperDB config file");let t=hm(Object.keys(ee.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{tN.createConfigFile(t),uo.initSync()}catch(r){Hle(r)}}a(Ble,"createConfigFile");function Hle(e){mt.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(Ale);let t=Dn.resolve(uo.get(uo.BOOT_PROPS_FILE_PATH),"../");t&&As.removeSync(t),Ln&&(Ex?As.readdirSync(Ln,{withFileTypes:!0}).forEach(s=>{let n=Dn.join(s.path,s.name);n!==xc[ee.INSTALL_PROMPTS.HDB_CONFIG]&&As.removeSync(n)}):As.removeSync(Ln)),process.exit(1)}a(Hle,"rollbackInstall");async function mx(e,t){mt.trace("Creating admin user"),await ple();let r;try{r=await fle.addRole(e)}catch(s){if(s.message.includes("already exists"))t=void 0;else throw s.message+="Error creating role",s}if(t)try{t.role=r.role,await dle.addUser(t)}catch(s){throw s.message=`Error creating user - ${s}`,s}}a(mx,"createAdminUser");async function px(e){mt.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await mx(t,r),delete e[ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(px,"createSuperUser");async function qle(e){mt.trace("Creating Cluster user.");let t;e[ee.INSTALL_PROMPTS.CLUSTERING_USER]&&e[ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[ee.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await mx({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[ee.INSTALL_PROMPTS.CLUSTERING_USER],delete e[ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(qle,"createClusterUser");async function Gle(){let e=fx.version();if(e)await dx.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(Gle,"insertHdbVersionInfo")});var Rx=T((lNe,gx)=>{"use strict";var rN=G(),Xr=v(),Tx=YO();gx.exports={processDirectives:Fle};async function Fle(e){console.log("Starting upgrade process...");let t=Tx.getVersionsForUpgrade(e),r=$le(t),s=[],n=r.length;for(let i=0;i<n;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;Xr.notify(c),console.log(c);let u=[],_=[];try{u=xle(o.sync_functions)}catch(l){throw Xr.error(`Error while running an upgrade script for ${o.version}`),l}try{_=await kle(o.async_functions)}catch(l){throw Xr.error(`Error while running an upgrade script for ${o.version}`),l}s.push(...u,..._)}return s}a(Fle,"processDirectives");function xle(e){if(rN.isEmptyOrZeroLength(e))return Xr.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Xr.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Xr.info(`Running function ${r.name}`),!(r instanceof Function)){Xr.info("Variable being processed is not a function");continue}let s=r();Xr.info(s),t.push(s)}return t}a(xle,"runSyncFunctions");async function kle(e){if(rN.isEmptyOrZeroLength(e))return Xr.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Xr.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let s=0;s<r;s++){let n=e[s];if(Xr.info(`Running function ${n.name}`),!(n instanceof Function)){Xr.info("Variable being processed is not a function");continue}let i=await n();Xr.info(i),t.push(i)}return t}a(kle,"runAsyncFunctions");function $le(e){if(rN.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let s=Tx.getDirectiveByVersion(r);s&&t.push(s)}return t}a($le,"getUpgradeDirectivesToInstall")});var iN=T((dNe,Ix)=>{"use strict";var pm=j();pm.initSync();var bx=require("chalk"),Ax=require("fs-extra"),gi=v(),Ti=R(),Ox=po(),Vle=Rx(),sN=G(),yx=Em(),Yle=om(),Nx=xm(),Kle=as(),Wle=require("util").promisify,Qle=Wle(Kle.setSchemaDataToGlobal),nN,{UPGRADE_VERSION:Sm}=Ti.UPGRADE_JSON_FIELD_NAMES_ENUM;Ix.exports={upgrade:jle};async function jle(e){await Qle(),nN===void 0&&(nN=uc()),Ax.existsSync(pm.get(pm.BOOT_PROPS_FILE_PATH))||(w_("The hdb_boot_properties file was not found. Please install HDB.",Ti.LOG_LEVELS.ERROR),process.exit(1)),Ax.existsSync(pm.get(Ti.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(w_("The hdb settings file was not found. Please make sure HDB is installed.",Ti.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await yx.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),w_(`This version of HarperDB is ${Ox.version()}`,Ti.LOG_LEVELS.INFO);let r=t[Sm]?t[Sm]:Ox.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Ti.HDB_SUPPORT_ADDRESS}`),gi.notify("Missing new version field from upgrade info object"),process.exit(1)),await zle();let s,n=0;try{s=await Yle.forceUpdatePrompt(t)}catch(i){gi.error("There was an error when prompting user about upgrade."),gi.error(i),s=!1,n=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(n)),gi.info(`Starting upgrade to version ${r}`),await Jle(t),w_(`HarperDB was successfully upgraded to version ${t[Sm]}`,Ti.LOG_LEVELS.INFO)}a(jle,"upgrade");async function zle(){let e=!1,t=await Nx.findPs(Ti.HDB_PROC_NAME);if(sN.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await Nx.findPs("hdb_express");sN.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await nN.list();sN.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(bx.red(r)),gi.error(r),process.exit(1)}}a(zle,"checkIfRunning");async function Jle(e){try{await Vle.processDirectives(e)}catch(t){throw w_("There was an error during the data upgrade. Please check the logs.",Ti.LOG_LEVELS.ERROR),t}try{await yx.insertHdbUpgradeInfo(e[Sm])}catch(t){gi.error("Error updating the 'hdb_info' system table."),gi.error(t)}}a(Jle,"runUpgrade");function w_(e,t=void 0){t||(t=gi.info),gi[t](e),console.log(bx.magenta(e))}a(w_,"printToLogAndConsole")});var Px=T((ENe,Dx)=>{"use strict";var{promises:aN,createReadStream:Xle,createWriteStream:Zle}=require("fs"),{createGzip:e_e}=require("zlib"),{promisify:t_e}=require("util"),{pipeline:r_e}=require("stream"),s_e=t_e(r_e),n_e=require("path"),Ea=j();Ea.initSync();var fa=v(),{CONFIG_PARAMS:C_,ITC_EVENT_TYPES:i_e}=R(),{onMessageFromWorkers:o_e}=Qe(),a_e=6e4,c_e="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",u_e="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",oN,Cx;Dx.exports=Lx;o_e(e=>{e.type===i_e.RESTART&&(Ea.initSync(!0),clearInterval(Cx),Ea.get(C_.LOGGING_ROTATION_ENABLED)&&Lx())});async function Lx(){try{let e=fa.getLogFilePath(),t=Ea.get(C_.LOGGING_ROTATION_MAXSIZE),r=Ea.get(C_.LOGGING_ROTATION_INTERVAL);if(!t&&!r){fa.error(c_e);return}let s=Ea.get(C_.LOGGING_ROTATION_PATH);if(!s){fa.error(u_e);return}let n;if(t){let o=t.slice(-1),c=t.slice(0,-1);o==="G"?n=c*1e9:o==="M"?n=c*1e6:n=c*1e3}let i;if(r){let o=r.slice(-1),c=r.slice(0,-1);o==="D"?i=c*1440:o==="H"?i=c*60:i=c}oN=Date.now()/6e4,fa.trace("Log rotate enabled, maxSize:",t,"interval:",r),Cx=setInterval(async()=>{if(n){let o;o=await aN.stat(e),o.size>=n&&await wx(e,s)}i&&Date.now()/6e4-oN>=i&&(await wx(e,s),oN=Date.now()/6e4)},a_e).unref()}catch(e){fa.error(e)}}a(Lx,"logRotator");async function wx(e,t){let r=Ea.get(C_.LOGGING_ROTATION_COMPRESS),s=n_e.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await s_e(Xle(e),e_e(),Zle(s)),await aN.unlink(e)):await aN.rename(e,s),fa.closeLogFile(),fa.notify(`hdb.log rotated, old log moved to ${s}`)}a(wx,"moveLogFile")});var $c=T((NNe,Gx)=>{"use strict";var Os=j();Os.initSync();var mNe=Qo(),Nt=R(),Mn=v(),Ri=require("fs-extra"),_o=require("path"),l_e=require("systeminformation"),__e=DO(),d_e=mm(),cN=require("chalk"),f_e=mo(),Ai=G(),Ux=rt(),vx=Eo(),Mx=PE(),E_e=iN(),h_e=Px(),m_e=require("minimist"),{PACKAGE_ROOT:p_e}=R(),{startHTTPThreads:S_e,startSocketServer:pNe,mostIdleRouting:SNe,remoteAffinityRouting:TNe}=(Wh(),te(CO)),T_e=Em(),{isMainThread:g_e}=require("worker_threads"),gNe=qn(),RNe=Mi(),ANe=TS(),ONe=Bu(),uN=R(),Pn,kc,R_e="Upgrade complete. Starting HarperDB.",A_e="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",O_e="HarperDB not found, starting install process.",N_e="There was an error during install, check install_log.log for more details. Exiting.",b_e="HarperDB successfully started.";function y_e(){let e=a(()=>{Ri.removeSync(_o.join(Os.get(Nt.CONFIG_PARAMS.ROOTPATH),Nt.HDB_PID_FILE)),process.exit(0)},"remove_hdb_pid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}a(y_e,"addExitListeners");async function Bx(e=!1,t=!1){if(console.log(cN.magenta("Starting HarperDB...")),await qx()===!1){console.log(O_e);try{await d_e()}catch(o){console.error(N_e,o),Mn.error(o),process.exit(1)}}let r,s=kc?.service==="clustering";kc?.service&&!s&&(console.error("Unrecognized service argument"),process.exit(1));try{let o=Number.parseInt(await Ri.readFile(_o.join(Os.get(Nt.CONFIG_PARAMS.ROOTPATH),Nt.HDB_PID_FILE),"utf8")),c=await l_e.processes();for(let u of c.list)if(u.pid===o){s?r=!0:console.log("HarperDB appears to be already running.");break}}catch{}Pn===void 0&&(Pn=uc()),s&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Os.get(Nt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await Mx.generateNatsConfig(),await Pn.startClusteringProcesses(!0),process.exit()),y_e(),await Ri.writeFile(_o.join(Os.get(uN.CONFIG_PARAMS.ROOTPATH),uN.HDB_PID_FILE),`${process.pid}`),Mn.info("HarperDB PID",process.pid);let n;try{let o=await T_e.getVersionUpdateInfo();o!==void 0&&(n=o[Nt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await E_e.upgrade(o),console.log(R_e))}catch(o){n?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${n}. Exiting HarperDB.`),Mn.error(o)):(console.error(A_e),Mn.error(o)),process.exit(1)}if(!e){let o=vx(Object.keys(Nt.CONFIG_PARAM_MAP),!0);!Ai.isEmpty(o)&&!Ai.isEmptyOrZeroLength(Object.keys(o))&&Ux.updateConfigValue(void 0,void 0,o,!0,!0)}__e(),C_e(),Ai.autoCastBoolean(Os.get(Nt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&g_e&&await Mx.generateNatsConfig(t)}a(Bx,"initialize");async function I_e(e=!1){try{kc=m_e(process.argv),kc.ROOTPATH&&Ux.updateConfigObject("settings_path",_o.join(kc.ROOTPATH,Nt.HDB_CONFIG_FILE)),await Bx(e,!0);let t=process.env.IS_SCRIPTED_SERVICE&&!kc.service;Ai.autoCastBoolean(Os.get(Nt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await Pn.startClusteringProcesses(),await Pn.startClusteringThreads()),await S_e(process.env.DEV_MODE?1:Os.get(uN.CONFIG_PARAMS.THREADS)),Os.get(Nt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await h_e(),t||Hx()}catch(t){console.error(t),Mn.error(t),process.exit(1)}}a(I_e,"main");function Hx(){Mn.suppressLogging(()=>{console.log(cN.magenta(""+Ri.readFileSync(_o.join(p_e,"utility/install/ascii_logo.txt")))),console.log(cN.magenta(`|------------- HarperDB ${f_e.version} successfully started ------------|`))}),Mn.notify(b_e)}a(Hx,"started");async function w_e(){try{Pn===void 0&&(Pn=uc()),Pn.enterPM2Mode(),await Bx(),Ai.autoCastBoolean(Os.get(Nt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await Pn.startClusteringProcesses(),await Pn.startService(Nt.PROCESS_DESCRIPTORS.HDB),Hx(),process.exit(0)}catch(e){console.error(e),Mn.error(e),process.exit(1)}}a(w_e,"launch");function C_e(){let e=_o.join(Os.getHdbBasePath(),Nt.LICENSE_KEY_DIR_NAME,Nt.LICENSE_FILE_NAME),t=_o.join(e,Nt.LICENSE_FILE_NAME),r=_o.join(e,Nt.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:s,HARPERDB_LICENSE:n}=vx(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Ai.isEmpty(s)||Ai.isEmpty(n))return;Ri.mkdirpSync(e),Ri.writeFileSync(r,s),Ri.writeFileSync(t,n)}catch(s){let n=`Failed to write license & fingerprint due to: ${s.message}`;console.error(n),Mn.error(n)}}a(C_e,"writeLicenseFromVars");Gx.exports={launch:w_e,main:I_e,isHdbInstalled:qx};async function qx(){try{await Ri.stat(Ai.getPropsFilePath()),await Ri.stat(Os.get(Nt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Ai.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw Mn.error(`Error checking for HDB install - ${e}`),e}return!0}a(qx,"isHdbInstalled")});var xx=T((yNe,Fx)=>{var L_e=mm(),D_e=v();Fx.exports=P_e;async function P_e(){try{await L_e()}catch(e){console.error("There was an error during the install."),console.error(e),D_e.error(e),process.exit(1)}}a(P_e,"install")});var Vx=T((wNe,$x)=>{"use strict";var M_e=IE(),U_e=v(),kx="Registration failed.";async function v_e(){let e;try{e=await M_e.register()}catch(t){return U_e.error(`Registration error ${t}`),kx}return e||kx}a(v_e,"register");$x.exports={register:v_e}});var Qx=T((LNe,Wx)=>{"use strict";var B_e=v(),H_e=R(),q_e=require("util"),G_e=require("child_process"),Yx=q_e.promisify(G_e.exec),F_e=zn(),L_=uc(),Kx="Stopping HarperDB.";Wx.exports=x_e;async function x_e(){if(console.log(Kx),B_e.notify(Kx),await L_.isServiceRegistered(H_e.HDB_PROC_DESCRIPTOR)){L_.enterPM2Mode();let r=await L_.getUniqueServicesList();for(let s in r)await L_.stop(s)}await L_.kill();let t=await F_e.getHDBProcessInfo();t.clustering.forEach(r=>{Yx(`kill ${r.pid}`)}),t.core.forEach(r=>{Yx(`kill ${r.pid}`)})}a(x_e,"stop")});var Zx=T((PNe,Xx)=>{"use strict";var lN=require("fs-extra"),_N=require("path"),k_e=require("yaml"),D_=st(),P_=R(),jx=ke(),zx=v(),$_e=Er(),V_e=OE(),Y_e=RE(),K_e=zn(),Jx=j();Jx.initSync();var Un={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored"},Cr={LEAF:"leaf server",HUB:"hub server"},Tm;Xx.exports=W_e;async function W_e(){Tm=Jx.get(P_.CONFIG_PARAMS.ROOTPATH);let e={harperdb:{status:Un.STOPPED}},t;try{t=Number.parseInt(await lN.readFile(_N.join(Tm,P_.HDB_PID_FILE),"utf8"))}catch(s){throw s.code===P_.NODE_ERROR_CODES.ENOENT?new Error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB"):s}let r=await K_e.getHDBProcessInfo();for(let s of r.core)if(s.pid===t){e.harperdb.status=Un.RUNNING,e.harperdb.pid=t;break}if(e.clustering=await Q_e(r),e.clustering[Cr.HUB].status===Un.RUNNING&&e.clustering[Cr.LEAF].status===Un.RUNNING){let s=[],n=await V_e({});for(let o of n.nodes){let c={};for(let u in o)c[u.replace("_"," ")]=o[u];s.push(c)}e.clustering.network=s;let i=await Y_e.clusterStatus();e.clustering.replication={"node name":i.node_name,"is enabled":i.is_enabled,connections:[]};for(let o of i.connections){let c={};c["node name"]=o?.node_name,c.status=o?.status,c.ports={clustering:o?.ports?.clustering,"operations api":o?.ports?.operations_api},c["latency ms"]=o?.latency_ms,c.uptime=o?.uptime,c.subscriptions=o?.subscriptions,c["system info"]={"hdb version":o?.system_info?.hdb_version,"node version":o?.system_info?.node_version,platform:o?.system_info?.platform},e.clustering.replication.connections.push(c)}await D_.closeConnection()}console.log(k_e.stringify(e)),process.exit()}a(W_e,"status");async function Q_e(e){let t={[Cr.HUB]:{},[Cr.LEAF]:{}};if(e.clustering.length===0)return t[Cr.HUB].status=Un.STOPPED,t[Cr.LEAF].status=Un.STOPPED,t;let{port:r}=D_.getServerConfig(P_.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:s,decrypt_hash:n}=await $_e.getClusterUser();try{(await D_.createConnection(r,s,n,!1)).close(),t[Cr.HUB].status=Un.RUNNING}catch{t[Cr.HUB].status=Un.ERRORED}let{port:i}=D_.getServerConfig(P_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await D_.createConnection(i,s,n,!1)).close(),t[Cr.LEAF].status=Un.RUNNING}catch{t[Cr.LEAF].status=Un.ERRORED}try{t[Cr.HUB].pid=Number.parseInt(await lN.readFile(_N.join(Tm,"clustering",jx.PID_FILES.HUB),"utf8"))}catch(o){zx.error(o),t[Cr.HUB].pid=void 0}try{t[Cr.LEAF].pid=Number.parseInt(await lN.readFile(_N.join(Tm,"clustering",jx.PID_FILES.LEAF),"utf8"))}catch(o){zx.error(o),t[Cr.LEAF].pid=void 0}return t}a(Q_e,"getHubLeafStatus")});var ak=T(()=>{"use strict";var j_e=require("os"),Am=require("https"),ek=require("http"),Oi=require("fs-extra"),z_e=require("yaml"),J_e=require("human-readable-ids").hri,{pipeline:tk}=require("stream/promises"),{createWriteStream:Om,ensureDir:Nm}=require("fs-extra"),{join:Js}=require("path"),EN=require("lodash"),X_e=j(),Z_e=zn(),ik=v(),gm=rt(),{restart:ede}=Qo(),ok=G(),rk=st(),tde=as(),{isHdbInstalled:rde,main:sde}=$c(),nde=mm(),hN=R(),{SYSTEM_TABLE_NAMES:sk,SYSTEM_SCHEMA_NAME:ide,CONFIG_PARAMS:M_,OPERATIONS_ENUM:rr}=hN,ode=9925,ade="info",cde=1e4,ude="clone-node-config.yaml",mN=[sk.ROLE_TABLE_NAME,sk.USER_TABLE_NAME],U_=process.env.HDB_LEADER_USERNAME,v_=process.env.HDB_LEADER_PASSWORD,B_=process.env.HDB_LEADER_URL,dN=process.env.HDB_LEADER_CLUSTERING_HOST,lde=process.env.HDB_LEADER_CLUSTERING_PORT,_de=process.env.HDB_FULLY_CONNECTED,fN,Ce,ot,at,pN,Vc,Zr,zs;async function dde(){if(await rde())throw new Error("Existing install of HarperDB found on clone node.");if(console.info("Cloning node: "+B_),Ce?.rootPath)Vc=Ce.rootPath;else try{Vc=process.env.ROOTPATH?process.env.ROOTPATH:Js(j_e.homedir(),hN.HDB_ROOT_DIR_NAME)}catch(t){throw console.error(t),new Error("There was an setting default rootPath. Please set 'rootPath' in clone-node-config.yaml")}let e;try{e=Js(Vc,ude),Ce=z_e.parseDocument(Oi.readFileSync(e,"utf8"),{simpleKeys:!0}).toJSON()}catch{console.info(e+" not found, using default config values.")}pN=Ce?.clustering?.nodeName??J_e.random(),ot=await H_({operation:rr.GET_CONFIGURATION}),ot=await JSON.parse(ot.body),process.env.HDB_FETCH==="true"?(await mde(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await hde(),await Ede(),await fde(),await pde(),await Sde(),console.info("Successfully cloned node: "+B_)}a(dde,"cloneNode");async function fde(){console.info("Cloning configuration"),fN=ot?.clustering?.enabled;let e={[M_.ROOTPATH]:Vc};if(fN&&Ce?.clustering?.enabled!==!1){if(dN==null)throw new Error("'HDB_LEADER_CLUSTERING_HOST' must be defined");e[M_.CLUSTERING_ENABLED]=!0;let s=ot?.clustering?.hubServer?.cluster?.network?.routes,n=parseInt(lde)||ot?.clustering?.hubServer?.cluster?.network?.port;e[M_.CLUSTERING_USER]=ot?.clustering?.user;let i=X_e.get(M_.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES);Array.isArray(i)?i.push({host:dN,port:n}):i=[{host:dN,port:n}],Array.isArray(s)&&(i=i.concat(s)),e[M_.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES]=i}let t=Ce?.componentConfig?.exclude;t=t?t.reduce((s,n)=>({...s,[n.name]:!0}),{}):[];for(let s in ot)ot[s]?.package&&!t[s]&&await gm.addConfig(s,ot[s]);Ce?.databases&&await gm.addConfig("databases",ot?.schemas);let r;Ce&&(r=gm.flattenConfig(Ce));for(let s in r){let n=hN.CONFIG_PARAM_MAP[s.toLowerCase()];n&&(e[n]=r[s])}e.rootPath==null&&delete e.rootPath,e?.clustering_nodeName==null&&(e.clustering_nodeName=pN),ik.info("Cloning config:",e),EN.isEmpty(e)||gm.updateConfigValue(void 0,void 0,e,!1,!0)}a(fde,"cloneConfig");async function Ede(){if(console.info("Clone node installing HarperDB."),process.env.TC_AGREEMENT="yes",process.env.ROOTPATH=Vc,!U_)throw new Error("HDB_LEADER_USERNAME is undefined.");if(process.env.HDB_ADMIN_USERNAME=U_,!v_)throw new Error("HDB_LEADER_PASSWORD is undefined.");process.env.HDB_ADMIN_PASSWORD=v_,process.env.OPERATIONSAPI_NETWORK_PORT=Ce?.operationsApi?.network?.port??ode,process.env.CLUSTERING_NODENAME=pN,process.env.CLUSTERING_LOGLEVEL=Ce?.clustering?.logLevel??ade,await nde()}a(Ede,"installHDB");async function hde(){console.info("Cloning system database");let e=ha("system");await Nm(e);let t=Js(e,"system.mdb"),r=Om(t,{overwrite:!0}),s=await nk({operation:rr.GET_BACKUP,database:"system",tables:mN},r);if(await Oi.utimes(t,Date.now(),new Date(s.date)),at=await H_({operation:rr.DESCRIBE_ALL}),at=await JSON.parse(at.body),Zr=Ce?.databaseConfig?.excludeDatabases,Zr=Zr?Zr.reduce((n,i)=>({...n,[i.database]:!0}),{}):{},ot.schemas)for(let n in ot.schemas)Object.keys(ot.schemas[n]).includes("tables")&&(Zr[n]=!0,console.info(`Excluding database '${n}' from clone because leader node has custom pathing configured for one or more of its tables`));zs=Ce?.databaseConfig?.excludeTables,zs=zs?zs.reduce((n,i)=>({...n,[i.database==null?null:i.database+i.table]:!0}),{}):{};for(let n in at){if(Zr[n]){at[n]="excluded";continue}if(EN.isEmpty(at[n]))continue;let i=[],o=!1;for(let f in at[n])zs[n+f]?(o=!0,at[n][f]="excluded"):i.push(f);let c;o?(console.info(`Cloning database: ${n} tables: ${i}`),c={operation:rr.GET_BACKUP,database:n,tables:i}):(console.info(`Cloning database: ${n}`),c={operation:rr.GET_BACKUP,database:n});let u=ha(n);await Nm(u);let _=Js(u,n+".mdb"),l=Om(_,{overwrite:!0}),d=await nk(c,l);await Oi.utimes(_,Date.now(),new Date(d.date))}}a(hde,"cloneTables");async function mde(){console.info("Cloning system database using fetch");let e=await Rm({operation:rr.GET_BACKUP,database:"system",tables:mN},!0),t=ha("system");await Nm(t);let r=Js(t,"system.mdb");if(await tk(e.body,Om(r,{overwrite:!0})),await Oi.utimes(r,Date.now(),new Date(e.headers.get("date"))),at=await Rm({operation:rr.DESCRIBE_ALL}),at=await at.json(),Zr=Ce?.databaseConfig?.excludeDatabases,Zr=Zr?Zr.reduce((s,n)=>({...s,[n.database]:!0}),{}):{},ot.schemas)for(let s in ot.schemas)Object.keys(ot.schemas[s]).includes("tables")&&(Zr[s]=!0,console.info(`Excluding database '${s}' from clone because leader node has custom pathing configured for one or more of its tables`));zs=Ce?.databaseConfig?.excludeTables,zs=zs?zs.reduce((s,n)=>({...s,[n.database==null?null:n.database+n.table]:!0}),{}):{};for(let s in at){if(Zr[s]){at[s]="excluded";continue}if(EN.isEmpty(at[s]))continue;let n=[],i=!1;for(let d in at[s])zs[s+d]?(i=!0,at[s][d]="excluded"):n.push(d);if(n.length===0)return;let o;i?(console.info(`Cloning database: ${s} tables: ${n}`),o=await Rm({operation:rr.GET_BACKUP,database:s,tables:n},!0)):(console.info(`Cloning database: ${s}`),o=await Rm({operation:rr.GET_BACKUP,database:s},!0));let c=ha(s);await Nm(c);let u=new Date(o.headers.get("date")),_=Js(c,`${u.getTime()}-${s}.mdb`);await tk(o.body,Om(_,{overwrite:!0}));let l=Js(c,s+".mdb");await Oi.rename(_,l),await Oi.utimes(l,Date.now(),u)}}a(mde,"cloneTablesFetch");async function Rm(e,t=!1){let r=Ce?.httpsRejectUnauthorized??!1,s=new Am.Agent({rejectUnauthorized:r});r||(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0");let i={Authorization:"Basic "+Buffer.from(U_+":"+v_).toString("base64"),"Content-Type":"application/json"};t&&(i["Accept-Encoding"]="gzip");let o=await fetch(B_,{method:"POST",headers:i,body:JSON.stringify(e),agent:s,compress:!0});if(o.ok)return o;throw console.error(`HTTP Error Response: ${o.status} ${o.statusText}`),new Error(await o.text())}a(Rm,"leaderHttpReqFetch");function ha(e){return Ce?.databases&&Ce?.databases[e]?.path||Ce?.storage&&Ce?.storage?.path||Js(Vc,"database")}a(ha,"getDbFileDir");async function pde(){let{deployComponent:e}=JE(),t=await H_({operation:rr.GET_COMPONENTS});t=await JSON.parse(t.body);let r=[];if(t.entries.length){for(let n of t.entries){if(!n.entries)continue;let i=!1;if(Ce?.componentConfig?.exclude){for(let o of Ce.componentConfig.exclude)if(o?.name!=null&&o.name===n.name){i=!0;break}}i||r.push(n.name)}let s=Ce?.componentConfig?.skipNodeModules!==!1;for(let n of r){console.info("Cloning component: "+n);let i=await H_({operation:rr.PACKAGE_COMPONENT,project:n,skip_node_modules:s}),{payload:o}=await JSON.parse(i.body);await e({payload:o,project:n})}}}a(pde,"cloneComponents");async function Sde(){if(!fN)return;let e=await Z_e.getHDBProcessInfo();e.clustering.length===0||e.core.length===0?await sde():(console.info(await ede({operation:rr.RESTART})),await ok.async_set_timeout(cde)),console.info("Clustering cloned tables");let t=Ce?.clusteringConfig?.subscribeToLeaderNode!==!1,r=Ce?.clusteringConfig?.publishToLeaderNode!==!1;await tde.setSchemaDataToGlobalAsync();let s=bl(),n=await H_({operation:rr.CLUSTER_STATUS});n=await JSON.parse(n.body);let i=[],o=await Oi.stat(Js(ha("system"),"system.mdb"));for(let c of mN)i.push({schema:ide,table:c,subscribe:t,publish:r,start_time:o.mtime.toISOString()});for(let c in at){if(at[c]==="excluded")continue;let u=await Oi.stat(Js(ha(c),c+".mdb"));for(let _ in at[c])at[c][_]!=="excluded"&&i.push({schema:c,table:_,subscribe:t,publish:r,start_time:u.mtime.toISOString()})}if(await rk.createTableStreams(i),ik.info("Sending add_node request to node:",ot?.clustering?.nodeName,"with subscriptions:",i),_de==="true"&&n.connections.length>0){let c=SE(),u=[{node_name:ot?.clustering?.nodeName,subscriptions:i}],_=!0;for(let d of n.connections){let f={node_name:d.node_name,subscriptions:[]};for(let E of d.subscriptions){if(Zr[E.schema]||zs[E.schema+E.table])continue;_=!1;let h=await Oi.stat(Js(ha(E.schema),E.schema+".mdb"));h.mtime.setSeconds(h.mtime.getSeconds()-10),E.start_time=h.mtime.toISOString(),f.subscriptions.push(E)}u.push(f)}if(_)return;let l=await c({operation:rr.CONFIGURE_CLUSTER,connections:u});console.info(JSON.stringify(l))}else await s({operation:rr.ADD_NODE,node_name:ot?.clustering?.nodeName,subscriptions:i},!0);await rk.closeConnection()}a(Sde,"clusterTables");async function H_(e){let t=new Am.Agent({rejectUnauthorized:Ce?.httpsRejectUnauthorized??!1}),s={Authorization:"Basic "+Buffer.from(U_+":"+v_).toString("base64"),"Content-Type":"application/json"},n=new URL(B_),i={protocol:n.protocol,host:n.hostname,method:"POST",headers:s};return n.protocol==="https:"&&(i.agent=t),n.port&&(i.port=n.port),await ok.httpRequest(i,e)}a(H_,"leaderHttpReq");async function nk(e,t){let r=new Am.Agent({rejectUnauthorized:Ce?.httpsRejectUnauthorized??!1}),n={Authorization:"Basic "+Buffer.from(U_+":"+v_).toString("base64"),"Content-Type":"application/json"},i=new URL(B_),o={protocol:i.protocol,host:i.hostname,method:"POST",headers:n};return i.protocol==="https:"&&(o.agent=r,ek=Am),i.port&&(o.port=i.port),new Promise((c,u)=>{let _=ek.request(o,l=>{l.statusCode!==200&&u("Request to leader node failed with code: "+l.statusCode),l.pipe(t),l.on("end",()=>{t.close(),c(l.headers)})});_.on("error",l=>{u(l)}),_.write(JSON.stringify(e)),_.end()})}a(nk,"leaderHttpStream");dde().then().catch(e=>{console.log(e)})});var Yc=v(),Tde=po(),SN=R(),bm=require("fs"),ck=require("path"),HNe=require("os"),{PACKAGE_ROOT:gde}=R(),Rde=sb(),qNe=(Wh(),te(CO)),{SERVICE_ACTIONS_ENUM:Xs}=SN;Ade();function Ade(){let e=Rde();if(e)if(e.error){console.error(e.error),Yc.error(e.error);return}else e.warn&&(console.warn(e.warn),Yc.warn(e.warn));let t;bm.readdir(ck.join(gde,"bin"),r=>{if(r)return Yc.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let s;switch(t){case Xs.DEV:process.env.DEV_MODE=!0;case Xs.RUN:let n=process.argv[3];n&&n[0]!=="-"&&(bm.existsSync(n)||(console.error(`The folder ${n} does not exist`),process.exit(1)),bm.statSync(n).isDirectory()||(console.error(`The path ${n} is not a folder`),process.exit(1)),bm.existsSync(ck.join(n,SN.HDB_CONFIG_FILE))?process.env.ROOTPATH=n:process.env.RUN_HDB_APP=n),$c().main();break;case Xs.START:s=$c().launch();break;case Xs.INSTALL:xx()().then(()=>$c().main(!0)).catch(f=>{console.error(f)});break;case Xs.REGISTER:Vx().register().then(f=>{console.log(f)}).catch(f=>{console.error(f)});break;case Xs.STOP:Qx()().then(()=>{process.exit(0)}).catch(f=>{console.error(f)});break;case Xs.RESTART:Qo().restart({}).then().catch(f=>{Yc.error(f),console.error(`There was an error restarting harperdb. ${f}`),process.exit(1)});break;case Xs.VERSION:Tde.printVersion();break;case Xs.UPGRADE:Yc.setLogLevel(SN.LOG_LEVELS.INFO),iN().upgrade(null).then(()=>{console.log("Your instance of HDB is up to date!")}).catch(f=>{Yc.error(`Got an error during upgrade ${f}`)});break;case Xs.STATUS:Zx()().then().catch(f=>{console.error(f)});break;case void 0:process.env.HDB_LEADER_URL?ak():$c().main();break;default:console.warn(`The "${t}" command is not understood.`);case Xs.HELP:console.log(`
|
|
108
108
|
Usage: harperdb [command]
|
|
109
109
|
|
|
110
110
|
With no command, harperdb will simply run HarperDB (in the foreground)
|
|
@@ -119,4 +119,4 @@ Commands:
|
|
|
119
119
|
install - Install harperdb
|
|
120
120
|
register - Register harperdb
|
|
121
121
|
upgrade - Upgrade harperdb
|
|
122
|
-
status - Print the status of HarperDB and clustering`)}})}a(
|
|
122
|
+
status - Print the status of HarperDB and clustering`)}})}a(Ade,"harperDBService");
|