harperdb 4.0.4 → 4.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
- "use strict";var $f=Object.defineProperty;var a=(e,t)=>$f(e,"name",{value:t,configurable:!0});var d=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var f=d((OB,dc)=>{"use strict";var he=require("path"),Kf=require("fs");function Wf(){let e=__dirname;for(;!Kf.existsSync(he.join(e,"package.json"));){let t=he.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(Wf,"getHDBPackageRoot");var Ke=Wf(),tc="js",es=tc,Qf="harperdb-config.yaml",Jf="defaultConfig.yaml",Xf="hdb",rc=`hdbServer.${es}`,sc=`customFunctionsServer.${es}`,nc=`hdbIpcServer.${es}`,Zf=`restartHdb.${es}`,pa="HarperDB",en="Custom Functions",tn="Clustering Hub",rn="Clustering Leaf",Ia="Clustering Ingest Service",Ca="Clustering Reply Service",zf="foreground.pid",ga={HDB:pa,IPC:"IPC",CLUSTERING_HUB:tn,CLUSTERING_LEAF:rn,CLUSTERING_INGEST_SERVICE:Ia,CLUSTERING_REPLY_SERVICE:Ca,CUSTOM_FUNCTIONS:en,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",PM2_LOGROTATE:"pm2-logrotate",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},jf={HDB:"hdb.log",IPC:"ipc.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log",CLUSTERING_INGEST_SERVICE:"clustering_ingest_service.log",CLUSTERING_REPLY_SERVICE:"clustering_reply_service.log",CUSTOM_FUNCTIONS:"custom_functions.log",INSTALL:"install.log",CLI:"cli.log",PM2:"pm2.log",CLUSTERING_UPGRADE:"clustering_upgrade.log",JOBS:"jobs.log"},eR={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},tR={harperdb:pa,ipc:"IPC","clustering hub":tn,"clustering leaf":rn,"clustering ingest service":Ia,"clustering reply service":Ca,"custom functions":en,custom_functions:en,"pm2-logrotate":ga.PM2_LOGROTATE,logrotate:ga.PM2_LOGROTATE,clustering:"clustering","clustering config":"clustering config"},rR={CLUSTERING_HUB_PROC_DESCRIPTOR:tn,CLUSTERING_LEAF_PROC_DESCRIPTOR:rn,CLUSTERING_INGEST_PROC_DESCRIPTOR:Ia,CLUSTERING_REPLY_SERVICE_DESCRIPTOR:Ca},js={HDB:he.join(Ke,"server/harperdb"),IPC:he.join(Ke,"server/ipc"),CUSTOM_FUNCTIONS:he.join(Ke,"server/customFunctions"),CLUSTERING_HUB:he.join(Ke,"server/nats"),CLUSTERING_LEAF:he.join(Ke,"server/nats")},sR={HDB:he.join(js.HDB,rc),IPC:he.join(js.IPC,nc),CUSTOM_FUNCTIONS:he.join(js.CUSTOM_FUNCTIONS,sc)},nR={HDB:he.join(Ke,"launchServiceScripts/launchHarperDB.js"),CUSTOM_FUNCTIONS:he.join(Ke,"launchServiceScripts/launchCustomFunctions.js"),NATS_INGEST_SERVICE:he.join(Ke,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:he.join(Ke,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:he.resolve(Ke,"launchServiceScripts/launchUpdateNodes4-0-0.js")},iR={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},ic="support@harperdb.io",aR="customer-success@harperdb.io",ac=1,oR=4141,oc="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",_R="https://www.harperdb.io/product",cR=`For support, please submit a request at ${oc} or contact ${ic}`,_c=`For license support, please contact ${aR}`,uR="None of the specified records were found.",ER="hash attribute not found",lR=`Your current license only supports ${ac} role. ${_c}`,dR="Your current license only supports 3 connections to a node.",hR="127.0.0.1",SR=1,TR=/^\.$/,fR=/^\.\.$/,RR="U+002E",mR=/\//g,AR="U+002F",NR=/U\+002F/g,OR=/^U\+002E$/,gR=/^U\+002EU\+002E$/,pR="d",IR=999999,CR="*",bR="--max-old-space-size=",LR="system",wR="__hdb_hash",yR=".harperdb",UR=".hdb",DR="keys",MR="hdb_boot_properties.file",PR=".updateConfig.json",BR="SIGTSTP",HR=24,vR=6e4,GR=448,qR="blob",FR="trash",xR="schema",VR="transactions",kR=".count",YR="id",$R="install_log.log",KR="run_log.log",WR="PROCESS_NAME",QR={SETTINGS_PATH_KEY:"settings_path"},cc=require("lodash"),JR={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",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},XR={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},ZR={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},zR={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"},jR={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"},Ue="hdb_internal:",em={CREATE_SCHEMA:Ue+"create_schema",CREATE_TABLE:Ue+"create_table",CREATE_ATTRIBUTE:Ue+"create_attribute",ADD_USER:Ue+"add_user",ALTER_USER:Ue+"alter_user",DROP_USER:Ue+"drop_user",HDB_NODES:Ue+"hdb_nodes",HDB_USERS:Ue+"hdb_users",HDB_WORKERS:Ue+"hdb_workers",CATCHUP:Ue+"catchup",SCHEMA_CATCHUP:Ue+"schema_catchup",WORKER_ROOM:Ue+"cluster_workers"},tm={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"},rm="060493.ks",sm=".license",nm={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},R={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",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_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",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",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",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",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",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"},im={CSV:".csv",JSON:".json"},am={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key"},om={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},bt={};bt[R.CREATE_SCHEMA]=R.CREATE_SCHEMA;bt[R.CREATE_TABLE]=R.CREATE_TABLE;bt[R.CREATE_ATTRIBUTE]=R.CREATE_ATTRIBUTE;bt[R.INSERT]=R.INSERT;bt[R.UPDATE]=R.UPDATE;bt[R.UPSERT]=R.UPSERT;bt[R.DELETE]=R.DELETE;var H=Object.create(null);H[R.DESCRIBE_ALL]=R.DESCRIBE_ALL;H[R.DESCRIBE_TABLE]=R.DESCRIBE_TABLE;H[R.DESCRIBE_SCHEMA]=R.DESCRIBE_SCHEMA;H[R.READ_LOG]=R.READ_LOG;H[R.ADD_NODE]=R.ADD_NODE;H[R.LIST_USERS]=R.LIST_USERS;H[R.LIST_ROLES]=R.LIST_ROLES;H[R.USER_INFO]=R.USER_INFO;H[R.SQL]=R.SQL;H[R.GET_JOB]=R.GET_JOB;H[R.SEARCH_JOBS_BY_START_DATE]=R.SEARCH_JOBS_BY_START_DATE;H[R.DELETE_FILES_BEFORE]=R.DELETE_FILES_BEFORE;H[R.EXPORT_LOCAL]=R.EXPORT_LOCAL;H[R.EXPORT_TO_S3]=R.EXPORT_TO_S3;H[R.CLUSTER_STATUS]=R.CLUSTER_STATUS;H[R.REMOVE_NODE]=R.REMOVE_NODE;H[R.RESTART]=R.RESTART;H[R.CUSTOM_FUNCTIONS_STATUS]=R.CUSTOM_FUNCTIONS_STATUS;H[R.GET_CUSTOM_FUNCTIONS]=R.GET_CUSTOM_FUNCTIONS;H[R.GET_CUSTOM_FUNCTION]=R.GET_CUSTOM_FUNCTION;H[R.SET_CUSTOM_FUNCTION]=R.SET_CUSTOM_FUNCTION;H[R.DROP_CUSTOM_FUNCTION]=R.DROP_CUSTOM_FUNCTION;H[R.ADD_CUSTOM_FUNCTION_PROJECT]=R.ADD_CUSTOM_FUNCTION_PROJECT;H[R.DROP_CUSTOM_FUNCTION_PROJECT]=R.DROP_CUSTOM_FUNCTION_PROJECT;H[R.PACKAGE_CUSTOM_FUNCTION_PROJECT]=R.PACKAGE_CUSTOM_FUNCTION_PROJECT;H[R.DEPLOY_CUSTOM_FUNCTION_PROJECT]=R.DEPLOY_CUSTOM_FUNCTION_PROJECT;var _m={RUN:"run",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade"},cm={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},uc={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",IPC_SERVER_PORT:"IPC_SERVER_PORT",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"},um=cc.invert(uc),T={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_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",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",HTTP_THREADS:"http_threads",IPC_NETWORK_PORT:"ipc_network_port",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_DATEFORMAT:"logging_rotation_dateFormat",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",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",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT:"operationsApi_authentication_operationTokenTimeout",OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT:"operationsApi_authentication_refreshTokenTimeout",OPERATIONSAPI_FOREGROUND:"operationsApi_foreground",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",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_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERT_AUTH:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_NODEENV:"operationsApi_nodeEnv",ROOTPATH:"rootPath",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync"},Em={hdb_root_key:T.ROOTPATH,hdb_root:T.ROOTPATH,server_port_key:T.OPERATIONSAPI_NETWORK_PORT,server_port:T.OPERATIONSAPI_NETWORK_PORT,cert_key:T.OPERATIONSAPI_TLS_CERTIFICATE,certificate:T.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:T.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:T.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:T.OPERATIONSAPI_NETWORK_HTTPS,https_on:T.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:T.OPERATIONSAPI_NETWORK_CORS,cors_on:T.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:T.LOGGING_LEVEL,log_level:T.LOGGING_LEVEL,log_path_key:T.LOGGING_ROOT,log_path:T.LOGGING_ROOT,log_daily_rotate:T.LOGGING_ROTATION_ROTATE,log_rotate:T.LOGGING_ROTATION_ROTATE,log_rotate_max_size:T.LOGGING_ROTATION_MAXSIZE,log_rotate_retain:T.LOGGING_ROTATION_RETAIN,log_rotate_compress:T.LOGGING_ROTATION_COMPRESS,log_rotate_date_format:T.LOGGING_ROTATION_DATEFORMAT,log_rotate_rotate_module:T.LOGGING_ROTATION_ROTATEMODULE,log_rotate_worker_interval:T.LOGGING_ROTATION_WORKERINTERVAL,log_rotate_rotate_interval:T.LOGGING_ROTATION_ROTATEINTERVAL,log_rotate_timezone:T.LOGGING_ROTATION_TIMEZONE,props_env_key:T.OPERATIONSAPI_NODEENV,node_env:T.OPERATIONSAPI_NODEENV,clustering_node_name_key:T.CLUSTERING_NODENAME,node_name:T.CLUSTERING_NODENAME,clustering_enabled_key:T.CLUSTERING_ENABLED,clustering:T.CLUSTERING_ENABLED,max_http_threads:T.HTTP_THREADS,max_hdb_processes:T.HTTP_THREADS,server_timeout_key:T.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:T.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:T.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:T.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:T.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:T.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:T.LOGGING_AUDITLOG,disable_transaction_log:T.LOGGING_AUDITLOG,operation_token_timeout_key:T.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:T.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:T.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:T.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,ipc_server_port:T.IPC_NETWORK_PORT,custom_functions_enabled_key:T.CUSTOMFUNCTIONS_ENABLED,custom_functions:T.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:T.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:T.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:T.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:T.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:T.HTTP_THREADS,log_to_file:T.LOGGING_FILE,log_to_stdstreams:T.LOGGING_STDSTREAMS,run_in_foreground:T.OPERATIONSAPI_FOREGROUND,local_studio_on:T.LOCALSTUDIO_ENABLED,clustering_port:T.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:T.CLUSTERING_USER,clustering_enabled:T.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:T.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:T.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:T.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:T.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:T.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:T.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:T.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_nodename:T.CLUSTERING_NODENAME,clustering_tls_certificate:T.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:T.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:T.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:T.CLUSTERING_TLS_INSECURE,customfunctions_enabled:T.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:T.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:T.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:T.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:T.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:T.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:T.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:T.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:T.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:T.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:T.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:T.CUSTOMFUNCTIONS_NODEENV,http_threads:T.HTTP_THREADS,customfunctions_processes:T.HTTP_THREADS,customfunctions_root:T.CUSTOMFUNCTIONS_ROOT,ipc_network_port:T.IPC_NETWORK_PORT,localstudio_enabled:T.LOCALSTUDIO_ENABLED,logging_file:T.LOGGING_FILE,logging_level:T.LOGGING_LEVEL,logging_root:T.LOGGING_ROOT,logging_rotation_compress:T.LOGGING_ROTATION_COMPRESS,logging_rotation_dateformat:T.LOGGING_ROTATION_DATEFORMAT,logging_rotation_maxsize:T.LOGGING_ROTATION_MAXSIZE,logging_rotation_retain:T.LOGGING_ROTATION_RETAIN,logging_rotation_rotate:T.LOGGING_ROTATION_ROTATE,logging_rotation_rotateinterval:T.LOGGING_ROTATION_ROTATEINTERVAL,logging_rotation_rotatemodule:T.LOGGING_ROTATION_ROTATEMODULE,logging_rotation_timezone:T.LOGGING_ROTATION_TIMEZONE,logging_rotation_workerinterval:T.LOGGING_ROTATION_WORKERINTERVAL,logging_stdstreams:T.LOGGING_STDSTREAMS,logging_auditlog:T.LOGGING_AUDITLOG,operationsapi_authentication_operationtokentimeout:T.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:T.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:T.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:T.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:T.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:T.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:T.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:T.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:T.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:T.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_network_timeout:T.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:T.OPERATIONSAPI_NODEENV,operationsapi_root:T.ROOTPATH,rootpath:T.ROOTPATH,storage_writeasync:T.STORAGE_WRITEASYNC,storage_overlappingsync:T.STORAGE_OVERLAPPINGSYNC},lm={csv_file_load:"csv_file_load",csv_data_load:R.CSV_DATA_LOAD,csv_url_load:R.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"},dm={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"},hm={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},Sm={FILE_SYSTEM:"fs",LMDB:"lmdb"},Tm={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},fm={DEVELOPMENT:8192,DEFAULT:512},Rm={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"},mm={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"},Am={ENOENT:"ENOENT",EACCES:"EACCES"},Ec={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},Nm="__clustering__",Om=Object.values(Ec),gm=15984864e5,lc={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},pm=cc.invert(lc),Im={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"},Cm=111,bm=`\r
2
- `,Lm={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},wm=["*","%"],ym="unauthorized_access",Um="func_val",Dm={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Mm={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},Pm="hdb_ipc_server",Bm="hdb_ipc_client_",Hm={RESTART:"restart",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request"},vm={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},Gm={STOPPED:"stopped",ONLINE:"online"},qm="3.x.x";dc.exports={LOCAL_HARPERDB_OPERATIONS:H,HDB_SUPPORT_ADDRESS:ic,HDB_SUPPORT_URL:oc,HDB_PRICING_URL:_R,SUPPORT_HELP_MSG:cR,LICENSE_HELP_MSG:_c,HDB_PROC_NAME:rc,HDB_PROC_DESCRIPTOR:pa,CLUSTERING_LEAF_PROC_DESCRIPTOR:rn,CLUSTERING_HUB_PROC_DESCRIPTOR:tn,SYSTEM_SCHEMA_NAME:LR,HASH_FOLDER_NAME:wR,HDB_HOME_DIR_NAME:yR,UPDATE_FILE_NAME:PR,LICENSE_KEY_DIR_NAME:DR,BOOT_PROPS_FILE_NAME:MR,JOB_TYPE_ENUM:lm,JOB_STATUS_ENUM:nm,SYSTEM_TABLE_NAMES:zR,SYSTEM_TABLE_HASH_ATTRIBUTES:jR,OPERATIONS_ENUM:R,VALID_S3_FILE_TYPES:im,S3_BUCKET_AUTH_KEYS:am,VALID_SQL_OPS_ENUM:om,GEO_CONVERSION_ENUM:cm,HDB_SETTINGS_NAMES:uc,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:um,SERVICE_ACTIONS_ENUM:_m,CLUSTER_MESSAGE_TYPE_ENUM:dm,CLUSTER_CONNECTION_DIRECTION_ENUM:hm,CLUSTER_EVENTS_DEFS_ENUM:Rm,PERIOD_REGEX:TR,DOUBLE_PERIOD_REGEX:fR,UNICODE_PERIOD:RR,FORWARD_SLASH_REGEX:mR,UNICODE_FORWARD_SLASH:AR,ESCAPED_FORWARD_SLASH_REGEX:NR,ESCAPED_PERIOD_REGEX:OR,ESCAPED_DOUBLE_PERIOD_REGEX:gR,REG_KEY_FILE_NAME:rm,RESTART_TIMEOUT_MS:vR,HDB_FILE_PERMISSIONS:GR,SCHEMA_DIR_NAME:xR,TRANSACTIONS_DIR_NAME:VR,LIMIT_COUNT_NAME:kR,ID_ATTRIBUTE_STRING:YR,INSERT_MODULE_ENUM:XR,UPGRADE_JSON_FIELD_NAMES_ENUM:ZR,RESTART_CODE:BR,RESTART_CODE_NUM:HR,CLUSTER_OPERATIONS:bt,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:tm,HDB_INTERNAL_SC_CHANNEL_PREFIX:Ue,INTERNAL_SC_CHANNELS:em,CLUSTERING_MESSAGE_TYPES:Im,HDB_FILE_SUFFIX:UR,BLOB_FOLDER_NAME:qR,HDB_TRASH_DIR:FR,ORIGINATOR_SET_VALUE:Cm,LICENSE_VALUES:Tm,RAM_ALLOCATION_ENUM:fm,STORAGE_TYPES_ENUM:Sm,TIME_STAMP_NAMES_ENUM:Ec,TIME_STAMP_NAMES:Om,PERMS_UPDATE_RELEASE_TIMESTAMP:gm,SEARCH_NOT_FOUND_MESSAGE:uR,SEARCH_ATTRIBUTE_NOT_FOUND:ER,LICENSE_ROLE_DENIED_RESPONSE:lR,LICENSE_MAX_CONNS_REACHED:dR,BASIC_LICENSE_MAX_NON_CU_ROLES:ac,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:oR,VALUE_SEARCH_COMPARATORS:lc,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:pm,LICENSE_FILE_NAME:sm,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:mm,NEW_LINE:bm,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:SR,MOMENT_DAYS_TAG:pR,API_TURNOVER_SEC:IR,LOOPBACK:hR,CODE_EXTENSION:es,WILDCARD_SEARCH_VALUE:CR,NODE_ERROR_CODES:Am,JAVASCRIPT_EXTENSION:tc,PERMS_CRUD_ENUM:Lm,UNAUTHORIZED_PERMISSION_NAME:ym,SEARCH_WILDCARDS:wm,FUNC_VAL:Um,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:Dm,JWT_ENUM:Mm,CLUSTERING_FLAG:Nm,RUN_LOG:KR,INSTALL_LOG:$R,IPC_SERVER_MODULE:nc,HDB_IPC_SERVER:Pm,IPC_EVENT_TYPES:Hm,HDB_IPC_CLIENT_PREFIX:Bm,CUSTOM_FUNCTION_PROC_NAME:sc,CUSTOM_FUNCTION_PROC_DESCRIPTOR:en,SERVICES:vm,MEM_SETTING_KEY:bR,HDB_RESTART_SCRIPT:Zf,PROCESS_DESCRIPTORS:ga,SERVICE_SERVERS:sR,SERVICE_SERVERS_CWD:js,PROCESS_DESCRIPTORS_VALIDATE:tR,LAUNCH_SERVICE_SCRIPTS:nR,LOG_LEVELS:eR,PROCESS_NAME_ENV_PROP:WR,PROCESS_LOG_NAMES:jf,PM2_PROCESS_STATUSES:Gm,CONFIG_PARAM_MAP:Em,CONFIG_PARAMS:T,HDB_CONFIG_FILE:Qf,HDB_DEFAULT_CONFIG_FILE:Jf,ROLE_TYPES_ENUM:iR,BOOT_PROP_PARAMS:QR,INSTALL_PROMPTS:JR,HDB_ROOT_DIR_NAME:Xf,CLUSTERING_PROCESSES:rR,FOREGROUND_PID_FILE:zf,PACKAGE_ROOT:Ke,PRE_4_0_0_VERSION:qm}});var fc=d((gB,Tc)=>{"use strict";var hc=require("minimist");Tc.exports=Fm;function Fm(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=Sc(process.env),s=Sc(hc(process.argv))):(r=process.env,s=hc(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let _=e[i];s[_]!==void 0?n[_]=s[_].toString().trim():r[_]!==void 0&&(n[_]=r[_].toString().trim())}return n}a(Fm,"assignCMDENVVariables");function Sc(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(Sc,"objKeysToLowerCase")});var g=d((pB,pc)=>{"use strict";var Vt=require("fs-extra"),kt=require("path"),mc=require("yaml"),Ac=require("properties-reader"),j=f(),xm=fc(),Vm=require("os"),{PACKAGE_ROOT:wa}=f(),Ne={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},sn=kt.join(wa,"logs"),Lt=process.env.pm_id===void 0,km=kt.join(wa,"config/yaml/",j.HDB_DEFAULT_CONFIG_FILE),ya=process.env.PROCESS_NAME===void 0?j.PROCESS_DESCRIPTORS.INSTALL:process.env.PROCESS_NAME,dr,rt,dt,Ae,ba,hr;hr===void 0&&Nc();pc.exports={createLogFile:Ym,notify:Wm,fatal:Qm,error:La,warn:Jm,info:$m,debug:Km,trace:gc,setLogLevel:Zm,log_level:Ae};function Nc(){try{if(hr===void 0){let e=Xm();hr=Ac(e),{level:Ae,config_log_path:ba,to_file:rt,to_stream:dt}=zm(hr.get("settings_path"))}}catch(e){if(hr=void 0,e.code===j.NODE_ERROR_CODES.ENOENT){let t=xm(Object.keys(j.CONFIG_PARAM_MAP),!0);for(let i in t){let o=j.CONFIG_PARAM_MAP[i];o&&o.toLowerCase();let _=t[i];if(o===j.CONFIG_PARAMS.LOGGING_LEVEL){Ae=_;continue}if(o===j.CONFIG_PARAMS.LOGGING_STDSTREAMS){dt=_;continue}o===j.CONFIG_PARAMS.LOGGING_FILE&&(rt=o)}let{default_level:r,default_to_file:s,default_to_stream:n}=jm();rt=rt===void 0?s:rt,rt=Rc(rt),dt=dt===void 0?n:dt,dt=Rc(dt),Ae=Ae===void 0?r:Ae,ba=sn;return}throw La("Error initializing log settings"),La(e),e}}a(Nc,"initLogSettings");function Ym(e,t){if(!Lt){gc("createLogFile should only be used if the process is not being managed by pm2");return}hr===void 0&&Nc(),ya=t;let r;e===j.PROCESS_LOG_NAMES.INSTALL?r=sn:r=ba,rt&&(dr=kt.join(r,e),Vt.ensureFileSync(dr))}a(Ym,"createLogFile");function Yt(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1;for(let o=0;o<n;o++){let _=t[o];_ instanceof Error&&_.stack?s+=_.stack:typeof _=="object"?s+=JSON.stringify(_):s+=_,o<i&&(s+=" ")}return`{"process_name": "${ya}", "level": "${e}", "timestamp": "${r}", "message": "${s}"}
3
- `}a(Yt,"createLogRecord");function Oc(e){dr===void 0&&(ya=j.PROCESS_DESCRIPTORS.INSTALL,Vt.ensureDirSync(sn),dr=kt.join(sn,j.PROCESS_LOG_NAMES.INSTALL),Vt.ensureFileSync(dr)),Vt.appendFileSync(dr,e)}a(Oc,"writeToLogFile");function nn(e){rt&&Oc(e),dt&&process.stdout.write(e)}a(nn,"nonPm2LogStdOut");function Ua(e){rt&&Oc(e),dt&&process.stderr.write(e)}a(Ua,"nonPm2LogStdErr");function $m(...e){if(Ne[Ae]<=Ne.info){let t=Yt("info",e);if(Lt){nn(t);return}process.stdout.write(t)}}a($m,"info");function gc(...e){if(Ne[Ae]<=Ne.trace){let t=Yt("trace",e);if(Lt){nn(t);return}process.stdout.write(t)}}a(gc,"trace");function La(...e){if(Ne[Ae]<=Ne.error){let t=Yt("error",e);if(Lt){Ua(t);return}process.stderr.write(t)}}a(La,"error");function Km(...e){if(Ne[Ae]<=Ne.debug){let t=Yt("debug",e);if(Lt){nn(t);return}process.stdout.write(t)}}a(Km,"debug");function Wm(...e){if(Ne[Ae]<=Ne.notify){let t=Yt("notify",e);if(Lt){nn(t);return}process.stdout.write(t)}}a(Wm,"notify");function Qm(...e){if(Ne[Ae]<=Ne.fatal){let t=Yt("fatal",e);if(Lt){Ua(t);return}process.stderr.write(t)}}a(Qm,"fatal");function Jm(...e){if(Ne[Ae]<=Ne.warn){let t=Yt("warn",e);if(Lt){Ua(t);return}process.stderr.write(t)}}a(Jm,"warn");function Xm(){let e;try{e=Vm.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=kt.join(e,j.HDB_HOME_DIR_NAME,j.BOOT_PROPS_FILE_NAME);return Vt.existsSync(t)||(t=kt.join(wa,"utility/hdb_boot_properties.file")),t}a(Xm,"getPropsFilePath");function Zm(e){Ae=e}a(Zm,"setLogLevel");function Rc(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Rc,"autoCastBoolean");function zm(e){try{if(e.includes("config/settings.js")){let o=Ac(e);return{level:o.get(j.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:kt.dirname(o.get(j.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(j.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(j.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=mc.parseDocument(Vt.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===j.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(zm,"getLogConfig");function jm(){try{let e=mc.parseDocument(Vt.readFileSync(km,"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(jm,"getDefaultConfig")});var Cc=d((IB,Ic)=>{"use strict";var eA=require("util"),tA=require("path"),rA=require("child_process"),sA=eA.promisify(rA.execFile),nA=1e3*1e3*10;Ic.exports={findPs:iA};async function iA(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await sA("ps",["wwxo",`pid,${r}`],{maxBuffer:nA});for(let n of s.trim().split(`
4
- `).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:tA.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(iA,"findPs")});var Se=d((CB,Lc)=>{"use strict";var aA="__dbis__",oA="__environment_name__",_A="__dbi_defintion__",cA={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"},uA=["__createdtime__","__updatedtime__"],EA="\uFFFF",bc={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},lA=Object.values(bc);Lc.exports={INTERNAL_DBIS_NAME:aA,DBI_DEFINITION_NAME:_A,SEARCH_TYPES:cA,TIMESTAMP_NAMES:uA,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:oA,TRANSACTIONS_DBI_NAMES_ENUM:bc,TRANSACTIONS_DBIS:lA,OVERFLOW_MARKER:EA}});var Oe=d((bB,vc)=>{"use strict";var wc=f(),yc=Se(),Uc={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},Dc=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Mc={500:Dc("There was an error processing your request."),400:"Invalid request"},dA=Mc[Uc.INTERNAL_SERVER_ERROR],hA={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.`},SA={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},TA={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"},fA={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_ARRAY:"ids must be an array",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 ${yc.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${yc.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"},RA={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${wc.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 ${wc.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"},Pc={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"},mA={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid schema 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' schema, tables and records are used internally by HarperDB and cannot be updated or removed."},AA={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 schema metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view schema.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`},NA={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=>`Schema '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`Schema '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in schema '${e}'`,SCHEMA_REQUIRED_ERR:"schema is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},OA={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},gA={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`},Bc={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.`},Hc={INVALID_IPC_DATA_TYPE:"Invalid IPC event data type, must be an object",MISSING_TYPE:"IPC event missing 'type'",MISSING_MSG:"IPC event missing 'message'",MISSING_ORIGIN:"IPC event message missing 'originator' property",INVALID_EVENT:e=>`IPC server received invalid event type: ${e}`},pA={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 customFunctions enabled to true in hdb/harperdb-config.yaml file."},IA={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},CA={...Pc,...TA,...hA,...mA,...AA,...NA,...OA,...gA,...RA,...Bc,...Hc,...pA,...IA,...SA};vc.exports={CHECK_LOGS_WRAPPER:Dc,HDB_ERROR_MSGS:CA,DEFAULT_ERROR_MSGS:Mc,DEFAULT_ERROR_RESP:dA,HTTP_STATUS_CODES:Uc,LMDB_ERRORS_ENUM:fA,AUTHENTICATION_ERROR_MSGS:Pc,VALIDATION_ERROR_MSGS:Bc,IPC_ERRORS:Hc}});var K=d((LB,Fc)=>{"use strict";var Sr=Oe(),bA=g(),LA=f(),ts=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Gc),this.http_resp_code=s||Sr.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Sr.DEFAULT_ERROR_MSGS[s]?Sr.DEFAULT_ERROR_MSGS[s]:Sr.DEFAULT_ERROR_MSGS[Sr.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,typeof this.message!="string"&&(this.stack=t.stack),i&&bA[n](i)}};a(ts,"HdbError");function Gc(e,t,r,s=LA.LOG_LEVELS.ERROR,n=null,i=!1){if(qc(e))return e;let o=new ts(e,t,r,s,n);return i&&delete o.stack,o}a(Gc,"handleHDBError");function qc(e){return e.__proto__.constructor.name===ts.name}a(qc,"isHDBError");Fc.exports={isHDBError:qc,handleHDBError:Gc,hdb_errors:Sr}});var p=d((yB,tu)=>{"use strict";var Da=require("path"),wA=require("fs-extra"),re=g(),xc=require("fs-extra"),yA=require("truncate-utf8-bytes"),rs=require("os"),UA=require("net"),DA=require("recursive-iterator"),ie=f(),Kc=Cc(),Vc=require("papaparse"),an=require("moment"),{inspect:MA}=require("util"),kc=require("is-number"),wB=require("lodash"),{hdb_errors:on}=K(),Wc=require("util").promisify(setTimeout),PA=100,BA=5,HA="",vA=4,Yc=255,$c={true:!0,false:!1,undefined:null,null:null,NaN:NaN};tu.exports={isEmpty:De,isEmptyOrZeroLength:st,arrayHasEmptyValues:FA,arrayHasEmptyOrZeroLengthValues:xA,buildFolderPath:VA,isBoolean:Qc,errorizeMessage:GA,stripFileExtension:YA,autoCast:$A,autoCastJSONDeep:Ma,removeDir:WA,compareVersions:QA,isCompatibleDataVersion:JA,escapeRawValue:Xc,unescapeValue:XA,stringifyProps:ZA,valueConverter:zA,timeoutPromise:eN,isClusterOperation:rN,getClusterUser:iN,sendTransactionToSocketCluster:sN,checkGlobalSchemaTable:nN,getHomeDir:Zc,getPropsFilePath:jA,promisifyPapaParse:aN,removeBOM:zc,createEventPromise:oN,checkProcessRunning:_N,checkSchemaTableExist:cN,checkSchemaExists:jc,checkTableExists:eu,getStartOfTomorrowInSeconds:uN,getLimitKey:EN,isObject:kA,isNotEmptyAndHasValue:qA,autoCasterIsNumberCheck:Jc,backtickASTSchemaItems:lN,isPortTaken:tN,stopProcess:dN,createForkArgs:hN,autoCastBoolean:SN,async_set_timeout:Wc,getTableHashAttribute:TN,doesSchemaExist:fN,doesTableExist:RN,stringifyObj:mN,ms_to_time:AN,PACKAGE_ROOT:ie.PACKAGE_ROOT};function GA(e){return e instanceof Error?e:new Error(e)}a(GA,"errorizeMessage");function De(e){return e==null}a(De,"isEmpty");function qA(e){return!De(e)&&(e||e===0||e===""||Qc(e))}a(qA,"isNotEmptyAndHasValue");function st(e){return De(e)||e.length===0||e.size===0}a(st,"isEmptyOrZeroLength");function FA(e){if(De(e))return!0;for(let t=0;t<e.length;t++)if(De(e[t]))return!0;return!1}a(FA,"arrayHasEmptyValues");function xA(e){if(st(e))return!0;for(let t=0;t<e.length;t++)if(st(e[t]))return!0;return!1}a(xA,"arrayHasEmptyOrZeroLengthValues");function VA(...e){try{return e.join(Da.sep)}catch{console.error(e)}}a(VA,"buildFolderPath");function Qc(e){return De(e)?!1:e===!0||e===!1}a(Qc,"isBoolean");function kA(e){return De(e)?!1:typeof e=="object"}a(kA,"isObject");function YA(e){return st(e)?HA:e.slice(0,-vA)}a(YA,"stripFileExtension");function $A(e){return De(e)||e===""||typeof e!="string"?e:$c[e]!==void 0?$c[e]:Jc(e)===!0?Number(e):e}a($A,"autoCast");function KA(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(KA,"autoCastJSON");function Ma(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=Ma(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=Ma(r);s!==r&&(e[t]=s)}return e}else return KA(e)}a(Ma,"autoCastJSONDeep");function Jc(e){if(e.startsWith("0.")&&kc(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&kc(e))}a(Jc,"autoCasterIsNumberCheck");async function WA(e){if(st(e))throw new Error(`Directory path: ${e} does not exist`);try{await xc.emptyDir(e),await xc.remove(e)}catch(t){throw re.error(`Error removing files in ${e} -- ${t}`),t}}a(WA,"removeDir");function QA(e,t){if(st(e)){re.info("Invalid current version sent as parameter.");return}if(st(t)){re.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("."),_=i.replace(s,"").split("."),c=Math.min(o.length,_.length);for(let u=0;u<c;u++)if(r=parseInt(o[u],10)-parseInt(_[u],10),r)return r;return o.length-_.length}a(QA,"compareVersions");function JA(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(JA,"isCompatibleDataVersion");function Xc(e){if(De(e))return e;let t=String(e);return t==="."?ie.UNICODE_PERIOD:t===".."?ie.UNICODE_PERIOD+ie.UNICODE_PERIOD:t.replace(ie.FORWARD_SLASH_REGEX,ie.UNICODE_FORWARD_SLASH)}a(Xc,"escapeRawValue");function XA(e){if(De(e))return e;let t=String(e);return t===ie.UNICODE_PERIOD?".":t===ie.UNICODE_PERIOD+ie.UNICODE_PERIOD?"..":String(e).replace(ie.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(XA,"unescapeValue");function ZA(e,t){if(De(e))return re.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+rs.EOL}!st(s)&&s[0]===";"?r+=" "+s+n+rs.EOL:st(s)||(r+=s+"="+n+rs.EOL)}catch{re.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(ZA,"stringifyProps");function zA(e){let t;try{t=typeof e=="object"?JSON.stringify(e):e}catch(n){re.error(n),t=e}let r=String(Xc(t)),s=Buffer.byteLength(r)>Yc?yA(r,Yc)+"/blob":r;return{value:t,value_stripped:r,value_path:s}}a(zA,"valueConverter");function Zc(){let e;try{e=rs.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Zc,"getHomeDir");function jA(){let e=Da.join(Zc(),ie.HDB_HOME_DIR_NAME,ie.BOOT_PROPS_FILE_NAME);return wA.existsSync(e)||(e=Da.join(__dirname,"../","hdb_boot_properties.file")),e}a(jA,"getPropsFilePath");function eN(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(eN,"timeoutPromise");async function tN(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=UA.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(tN,"isPortTaken");function rN(e){try{return ie.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){re.error(`Error checking operation against cluster ops ${t}`)}return!1}a(rN,"isClusterOperation");function sN(e,t,r){if(global.hdb_socket_client!==void 0){re.trace(`Sending transaction to channel: ${e}`);let{hdb_user:s,hdb_auth_header:n,...i}=t;i.__originator||(i.__originator={}),i.__transacted=!0,r&&(i.__originator[r]=ie.ORIGINATOR_SET_VALUE),global.hdb_socket_client.publish(e,i)}}a(sN,"sendTransactionToSocketCluster");function nN(e,t){if(!global.hdb_schema[e])return on.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return on.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(nN,"checkGlobalSchemaTable");function iN(e,t){if(De(t)){re.warn("No CLUSTERING_USER defined, clustering disabled");return}if(De(e)||st(e)){re.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){re.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){re.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(iN,"getClusterUser");function aN(){Vc.parsePromise=function(e,t){return new Promise(function(r,s){Vc.parse(e,{header:!0,transformHeader:zc,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(aN,"promisifyPapaParse");function zc(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(zc,"removeBOM");function oN(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;re.info(`Got cluster status event response: ${MA(n)}`);try{i.cancel()}catch{re.error("Error trying to cancel timeout.")}s(n)})})}a(oN,"createEventPromise");async function _N(e){let t=!0,r=0;do await Wc(PA*r++),(await Kc.findPs(e)).length>0&&(t=!1);while(t&&r<BA);if(t)throw new Error(`process ${e} was not started`)}a(_N,"checkProcessRunning");function cN(e,t){let r=jc(e);if(r)return r;let s=eu(e,t);if(s)return s}a(cN,"checkSchemaTableExist");function jc(e){if(!global.hdb_schema[e])return on.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(jc,"checkSchemaExists");function eu(e,t){if(!global.hdb_schema[e][t])return on.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(eu,"checkTableExists");function uN(){let e=an().utc().add(1,ie.MOMENT_DAYS_TAG).startOf(ie.MOMENT_DAYS_TAG).unix(),t=an().utc().unix();return e-t}a(uN,"getStartOfTomorrowInSeconds");function EN(){return an().utc().format("DD-MM-YYYY")}a(EN,"getLimitKey");function lN(e){try{let t=new DA(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){re.error("Got an error back ticking items."),re.error(t)}}a(lN,"backtickASTSchemaItems");async function dN(e){let t=rs.userInfo();(await Kc.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),re.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(dN,"stopProcess");function hN(e){return[e]}a(hN,"createForkArgs");function SN(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(SN,"autoCastBoolean");function TN(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(TN,"getTableHashAttribute");function fN(e){return global?.hdb_schema?.[e]!==void 0}a(fN,"doesSchemaExist");function RN(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(RN,"doesTableExist");function mN(e){try{return JSON.stringify(e)}catch{return e}}a(mN,"stringifyObj");function AN(e){let t=an.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(AN,"ms_to_time")});var su=d((UB,ru)=>{"use strict";var NN={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))},ON="certificate.pem",gN="privateKey.pem",pN="ca.pem";ru.exports={CERTIFICATE_VALUES:NN,CERTIFICATE_PEM_NAME:ON,PRIVATEKEY_PEM_NAME:gN,CA_PEM_NAME:pN}});var We=d((DB,nu)=>{"use strict";var ge=require("validate.js");ge.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||ge.validators.type.checks[t](e)?null:` must be a '${t}' value`};ge.validators.type.checks={Object:function(e){return ge.isObject(e)&&!ge.isArray(e)},Array:ge.isArray,Integer:ge.isInteger,Number:ge.isNumber,String:ge.isString,Date:ge.isDate,Boolean:function(e){return typeof e=="boolean"}};ge.validators.hasValidFileExt=function(e,t){return!ge.isString(e)||e===""||t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`};nu.exports={validateObject:IN,validateObjectAsync:CN,validateBySchema:bN};function IN(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=ge(e,t,{format:"flat"});return r?new Error(r):null}a(IN,"validateObject");async function CN(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await ge.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(CN,"validateObjectAsync");function bN(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(bN,"validateBySchema")});var ou=d((MB,au)=>{"use strict";var LN=require("fs-extra"),U=require("joi"),wN=require("os"),{boolean:ae,string:St,number:nt,array:Pa}=U.types(),Qe=require("path"),yN=g(),_n=p(),Tt=su(),UN=We(),ht="keys",DN=Tt.CERTIFICATE_PEM_NAME,MN=Tt.PRIVATEKEY_PEM_NAME,PN=Tt.CA_PEM_NAME,BN=Tt.CERTIFICATE_PEM_NAME,HN=Tt.PRIVATEKEY_PEM_NAME,vN=Tt.CA_PEM_NAME,GN=Tt.CERTIFICATE_PEM_NAME,qN=Tt.PRIVATEKEY_PEM_NAME,FN=Tt.CA_PEM_NAME,xN="log",VN="custom_functions",kN="Invalid logging.rotation.maxSize unit. Available units are G, M or K",YN="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",$N="rootPath config parameter is undefined",KN="clustering.enabled config parameter is undefined",wt=nt.min(0).required(),cn=Pa.items({host:St.required(),port:wt}).empty(null),pe;au.exports={configValidator:WN,routesValidator:zN,route_constraints:cn};function WN(e){if(pe=e.rootPath,_n.isEmpty(pe))throw $N;let t=ae.required(),r=U.valid("production","development").required(),s=nt.min(1).max(1e3).empty(null).default(ZN),n=St.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(iu),i=U.custom(JN).messages({"any.custom":"{:#label} {:#error}"}).empty(null).default(iu),o=St.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),_=e.clustering?.enabled;if(_n.isEmpty(_))throw KN;let c;return _===!0?c=U.object({enabled:t,hubServer:U.object({cluster:U.object({name:U.required().empty(null),network:U.object({port:wt,routes:cn}).required()}).required(),leafNodes:U.object({network:U.object({port:wt}).required()}).required(),network:U.object({port:wt}).required()}).required(),leafServer:U.object({network:U.object({port:wt,routes:cn}).required()}).required(),nodeName:o,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ae.required()}),user:U.string().required()}).required():c=U.object({enabled:t,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ae.required()})}).required(),U.object({clustering:c,customFunctions:U.object({enabled:t,network:U.object({cors:ae.required(),corsAccessList:Pa.required(),headersTimeout:nt.min(1).required(),https:ae.required(),keepAliveTimeout:nt.min(1).required(),port:wt,timeout:nt.min(1).required()}),nodeEnv:r,root:n,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),ipc:U.object({network:U.object({port:wt})}).required(),localStudio:U.object({enabled:t}).required(),logging:U.object({file:ae.required(),level:U.valid("notify","fatal","error","warn","info","debug","trace"),rotation:U.object({compress:ae.required(),dateFormat:St.required(),maxSize:St.custom(XN).required(),retain:nt.min(0).required(),rotate:ae.required(),rotateInterval:St.required(),rotateModule:ae.required(),timezone:St.required(),workerInterval:nt.min(1).required()}).required(),root:n,stdStreams:ae.required(),auditLog:ae.required()}).required(),operationsApi:U.object({authentication:U.object({operationTokenTimeout:U.required(),refreshTokenTimeout:U.required()}).required(),foreground:ae.required(),network:U.object({cors:ae.required(),corsAccessList:Pa.required(),headersTimeout:nt.min(1).required(),https:ae.required(),keepAliveTimeout:nt.min(1).required(),port:wt,timeout:nt.min(1).required()}).required(),nodeEnv:r,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:St.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:U.object({threads:s}).required(),storage:U.object({writeAsync:ae.required(),overlappingSync:ae.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(WN,"configValidator");function QN(e){return LN.existsSync(e)?null:`Specified path ${e} does not exist.`}a(QN,"doesPathExist");function JN(e,t){U.assert(e,St.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+\.pem+$/).messages({"string.pattern.base":"must be a valid directory path and specify a .pem file"}));let r=QN(e);if(r)return t.message(r)}a(JN,"validatePemFile");function XN(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(kN);let s=e.slice(0,-1);if(isNaN(parseInt(s)))return t.message(YN)}a(XN,"validateRotationMaxSize");function ZN(e,t){let r=t.state.path.join("."),s=wN.cpus().length,n=s-1;return n<=2&&(n=2),yN.info(`Detected ${s} cores on this machine, defaulting ${r} to ${n}`),n}a(ZN,"setDefaultThreads");function iu(e,t){if(!_n.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(_n.isEmpty(pe))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Qe.join(pe,VN);case"logging.root":return Qe.join(pe,xN);case"operationsApi.tls.certificate":return Qe.join(pe,ht,DN);case"operationsApi.tls.privateKey":return Qe.join(pe,ht,MN);case"operationsApi.tls.certificateAuthority":return Qe.join(pe,ht,PN);case"customFunctions.tls.certificate":return Qe.join(pe,ht,BN);case"customFunctions.tls.privateKey":return Qe.join(pe,ht,HN);case"customFunctions.tls.certificateAuthority":return Qe.join(pe,ht,vN);case"clustering.tls.certificate":return Qe.join(pe,ht,GN);case"clustering.tls.privateKey":return Qe.join(pe,ht,qN);case"clustering.tls.certificateAuthority":return Qe.join(pe,ht,FN);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(iu,"setDefaultRoot");function zN(e){let t=U.object({routes:cn});return UN.validateBySchema({routes:e},t)}a(zN,"routesValidator")});var ss=d((PB,hu)=>{"use strict";var k=f(),ve=p(),Te=g(),{configValidator:jN,routesValidator:_u}=ou(),Je=require("fs-extra"),eO=require("yaml"),Tr=require("path"),tO=require("is-number"),ln=require("properties-reader"),rO=require("lodash"),{handleHDBError:sO}=K(),{HTTP_STATUS_CODES:nO,HDB_ERROR_MSGS:un}=Oe(),{PACKAGE_ROOT:iO}=f(),aO="Unable to get config value because config is uninitialized",oO="Config successfully initialized",_O="Error backing up config file",cO="Empty parameter sent to getConfigValue",cu=Tr.join(iO,"config","yaml",k.HDB_DEFAULT_CONFIG_FILE),uO="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",En,Ie;hu.exports={createConfigFile:EO,getDefaultConfig:lO,getConfigValue:uu,initConfig:Eu,flattenConfig:$t,updateConfigValue:lu,updateConfigObject:dO,getConfiguration:hO,setConfiguration:SO,readConfigFile:va,getClusteringRoutes:TO,initOldConfig:du,getConfigFromFile:fO};function EO(e){let t=fr(cu);En=$t(t.toJSON());for(let i in e){let o=k.CONFIG_PARAM_MAP[i.toLowerCase()];if(o!==void 0){let _=o.split("_"),c=Ba(o,e[i]);try{t.setIn([..._],c)}catch(u){Te.error(u)}}}Ha(t);let r=t.toJSON();Ie=$t(r);let s=t.getIn(["rootPath"]),n=Tr.join(s,k.HDB_CONFIG_FILE);Je.createFileSync(n),Je.writeFileSync(n,String(t)),Te.trace(`Config file written to ${n}`)}a(EO,"createConfigFile");function lO(e){if(En===void 0){let r=fr(cu);En=$t(r.toJSON())}let t=k.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return En[t.toLowerCase()]}a(lO,"getDefaultConfig");function uu(e){if(ve.isEmpty(e)){Te.error(cO);return}if(Ie===void 0){Te.trace(aO);return}let t=k.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return Ie[t.toLowerCase()]}a(uu,"getConfigValue");function Eu(e=!1){if(Ie===void 0||e){let t=ve.getPropsFilePath();try{Je.accessSync(t,Je.constants.F_OK|Je.constants.R_OK)}catch(o){throw Te.error(o),new Error(`HarperDB properties file at path ${t} does not exist`)}let s=ln(t).get(k.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),n;if(s.includes("config/settings.js"))try{du(s);return}catch(o){if(o.code!==k.NODE_ERROR_CODES.ENOENT)throw o}try{n=fr(s)}catch(o){if(o.code===k.NODE_ERROR_CODES.ENOENT){Te.trace(`HarperDB config file not found at ${s}.
5
- This can occur during early stages of install where the config file has not yet been created`);return}else throw Te.error(o),new Error(`Error reading HarperDB config file at ${s}`)}Ha(n);let i=n.toJSON();Ie=$t(i),Te.trace(oO)}}a(Eu,"initConfig");function Ha(e){let t=e.toJSON(),r=jN(t);if(r.error)throw un.CONFIG_VALIDATION(r.error.message);e.setIn(["http","threads"],r.value.http.threads),e.setIn(["customFunctions","root"],r.value.customFunctions.root),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["operationsApi","tls","certificate"],r.value.operationsApi.tls.certificate),e.setIn(["operationsApi","tls","privateKey"],r.value.operationsApi.tls.privateKey),e.setIn(["operationsApi","tls","certificateAuthority"],r.value.operationsApi.tls.certificateAuthority),e.setIn(["customFunctions","tls","certificate"],r.value.customFunctions.tls.certificate),e.setIn(["customFunctions","tls","privateKey"],r.value.customFunctions.tls.privateKey),e.setIn(["customFunctions","tls","certificateAuthority"],r.value.customFunctions.tls.certificateAuthority),e.setIn(["clustering","tls","certificate"],r.value.clustering.tls.certificate),e.setIn(["clustering","tls","privateKey"],r.value.clustering.tls.privateKey),e.setIn(["clustering","tls","certificateAuthority"],r.value.clustering.tls.certificateAuthority)}a(Ha,"validateConfig");function dO(e,t){Ie===void 0&&(Ie={});let r=k.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){Te.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ie[r.toLowerCase()]=t}a(dO,"updateConfigObject");function lu(e,t,r=void 0,s=!1,n=!1){Ie===void 0&&Eu();let i=uu(k.CONFIG_PARAM_MAP.hdb_root),o=Tr.join(i,k.HDB_CONFIG_FILE),_=fr(o);if(r===void 0){let E=k.CONFIG_PARAM_MAP[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let l=E.split("_"),S=Ba(E,t);_.setIn([...l],S)}else for(let E in r){let l=k.CONFIG_PARAM_MAP[E.toLowerCase()];if(l!==void 0){let S=l.split("_"),h=Ba(l,r[E]);try{_.setIn([...S],h)}catch(A){Te.error(A)}}}Ha(_);let c=_.getIn(["rootPath"]),u=Tr.join(c,k.HDB_CONFIG_FILE);if(s===!0)try{let E=Tr.join(c,"backup",`${k.HDB_CONFIG_FILE}.bak`);Je.copySync(o,E),Te.trace(`Config file: ${o} backed up to: ${E}`)}catch(E){Te.error(_O),Te.error(E)}Je.writeFileSync(u,String(_)),n&&(Ie=$t(_.toJSON())),Te.trace(`Config parameter: ${e} updated with value: ${t}`)}a(lu,"updateConfigValue");function $t(e){let t={};for(let r in e)if(!!e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])){let s=$t(e[r]);for(let n in s)!s.hasOwnProperty(n)||(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}a($t,"flattenConfig");function Ba(e,t){if(e===k.CONFIG_PARAMS.CLUSTERING_NODENAME||e===k.CONFIG_PARAMS.CLUSTERING_USER){if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(tO(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||ve.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 ve.autoCast(t)}a(Ba,"castConfigValue");function hO(){let e=ve.getPropsFilePath(),r=ln(e).get(k.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return fr(r).toJSON()}a(hO,"getConfiguration");async function SO(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return lu(void 0,void 0,n,!0),uO}catch(i){throw typeof i=="string"||i instanceof String?sO(i,i,nO.BAD_REQUEST,void 0,void 0,!0):i}}a(SO,"setConfiguration");function va(){let e=ve.getPropsFilePath();try{Je.accessSync(e,Je.constants.F_OK|Je.constants.R_OK)}catch(n){throw Te.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=ln(e).get(k.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return fr(r).toJSON()}a(va,"readConfigFile");function fr(e){return eO.parseDocument(Je.readFileSync(e,"utf8"),{simpleKeys:!0})}a(fr,"parseYamlDoc");function TO(){let e=va(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=ve.isEmptyOrZeroLength(t)?[]:t;let r=_u(t);if(r)throw un.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=ve.isEmptyOrZeroLength(s)?[]:s;let n=_u(s);if(n)throw un.CONFIG_VALIDATION(n.message);if(!ve.isEmptyOrZeroLength(s)&&!ve.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(_=>_.host===o.host&&_.port===o.port));if(!ve.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw un.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(TO,"getClusteringRoutes");function du(e){let t=ln(e);Ie={};for(let r in k.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(ve.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=k.CONFIG_PARAM_MAP[r].toLowerCase();n===k.CONFIG_PARAMS.LOGGING_ROOT?Ie[n]=Tr.dirname(s):Ie[n]=s}return Ie}a(du,"initOldConfig");function fO(e){let t=va();return rO.get(t,e.replaceAll("_","."))}a(fO,"getConfigFromFile")});var Z=d((BB,Tu)=>{"use strict";var Ga=require("fs-extra"),it=require("path"),RO=require("os"),mO=require("properties-reader"),ns=g(),Rr=p(),C=f(),dn=ss(),AO="Error initializing environment manager",hn="BOOT_PROPS_FILE_PATH",Su=!1,NO={[C.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[C.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[C.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},ft={};Tu.exports={BOOT_PROPS_FILE_PATH:hn,getHdbBasePath:OO,setHdbBasePath:gO,get:pO,initSync:CO,setProperty:P,initTestEnvironment:bO};function OO(){return ft[C.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(OO,"getHdbBasePath");function gO(e){ft[C.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(gO,"setHdbBasePath");function pO(e){let t=dn.getConfigValue(e);return t===void 0?ft[e]:t}a(pO,"get");function P(e,t){NO[e]&&(ft[e]=t),dn.updateConfigObject(e,t)}a(P,"setProperty");function IO(){let e;try{e=Rr.getPropsFilePath(),Ga.accessSync(e,Ga.constants.F_OK|Ga.constants.R_OK),Su=!0;let t=mO(e);return ft[C.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(C.HDB_SETTINGS_NAMES.INSTALL_USER),ft[C.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(C.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),ft[hn]=e,!0}catch{return ns.trace(`Environment manager found no properties file at ${e}`),!1}}a(IO,"doesPropFileExist");function CO(e=!1){try{(Su||IO())&&(dn.initConfig(e),ft[C.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=dn.getConfigValue(C.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){ns.error(AO),ns.error(t),console.error(t),process.exit(1)}}a(CO,"initSync");function bO(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:_}=e,c=it.join(__dirname,"../../","unitTests");ft[hn]=it.join(c,"hdb_boot_properties.file"),P(C.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,it.join(c,"settings.test")),P(C.HDB_SETTINGS_NAMES.INSTALL_USER,RO.userInfo().username),P(C.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,it.join(c,"envDir","utility","keys","privateKey.pem")),P(C.HDB_SETTINGS_NAMES.CERT_KEY,it.join(c,"envDir","utility","keys","certificate.pem")),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,it.join(c,"envDir","utility","keys","privateKey.pem")),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,it.join(c,"envDir","utility","keys","certificate.pem")),P(C.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),P(C.HDB_SETTINGS_NAMES.LOG_PATH_KEY,it.join(c,"envDir","log")),P(C.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),P(C.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),P(C.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),P(C.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,it.join(c,"envDir")),P(C.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Rr.isEmpty(n)?!0:n),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Rr.isEmpty(n)?!0:n),P(C.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),P(C.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Rr.isEmpty(i)?!1:i),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Rr.isEmpty(i)?!1:i),P(C.HDB_SETTINGS_NAMES.IPC_SERVER_PORT,9383),P(C.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),P(C.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),P(C.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),P(C.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),P(C.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,it.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),P(C.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Rr.isEmpty(_)?!1:_),o&&(P("CORS_ACCESSLIST",o),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(P(C.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(P(C.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(P(C.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${hn}. Please check your boot props and settings files`;ns.fatal(r),ns.error(t)}}a(bO,"initTestEnvironment")});var Me=d((vB,Ru)=>{"use strict";var{platform:HB}=require("os"),LO="nats-server.zip",qa="nats-server",wO=process.platform==="win32"?`${qa}.exe`:qa,Fa="HDB",yO=/^[^\s.,*>]+$/,fu="__request__",UO=a(e=>`${e}.${fu}`,"REQUEST_SUBJECT"),DO={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},MO={HUB:"hub.pid",LEAF:"leaf.pid"},PO={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},BO={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Fa,deliver_subject:"__HDB__.WORKQUEUE"},HO={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Fa,deliver_subject:"HDB.SCHEMAQUEUE"},vO={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Fa,deliver_subject:"HDB.USERQUEUE"},GO={SUCCESS:"success",ERROR:"error"},qO={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},FO={TXN:"txn",MSGID:"msgid"};Ru.exports={NATS_SERVER_ZIP:LO,NATS_SERVER_NAME:qa,NATS_BINARY_NAME:wO,PID_FILES:MO,NATS_CONFIG_FILES:DO,SERVER_SUFFIX:PO,WORK_QUEUE_CONSUMER_NAMES:BO,SCHEMA_QUEUE_CONSUMER_NAMES:HO,USER_QUEUE_CONSUMER_NAMES:vO,NATS_TERM_CONSTRAINTS_RX:yO,REQUEST_SUFFIX:fu,UPDATE_REMOTE_RESPONSE_STATUSES:GO,CLUSTER_STATUS_STATUSES:qO,REQUEST_SUBJECT:UO,SUBJECT_PREFIXES:FO}});var as=d((GB,Ou)=>{"use strict";var is=require("crypto"),Au="aes-256-cbc",xO=32,VO=16,xa=64,Nu=32,kO=xa+Nu,mu=new Map;Ou.exports={encrypt:YO,decrypt:$O,createNatsTableStreamName:KO};function YO(e){let t=is.randomBytes(xO),r=is.randomBytes(VO),s=is.createCipheriv(Au,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),_=n.toString("hex");return i+o+_}a(YO,"encrypt");function $O(e){let t=e.substr(0,xa),r=e.substr(xa,Nu),s=e.substr(kO,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=is.createDecipheriv(Au,Buffer.from(t,"hex"),n),_=o.update(i);return _=Buffer.concat([_,o.final()]),_.toString()}a($O,"decrypt");function KO(e,t){let r=`${e}.${t}`,s=mu.get(r);return s||(s=is.createHash("md5").update(`${e}.${t}`).digest("hex"),mu.set(r,s)),s}a(KO,"createNatsTableStreamName")});var Va=d((qB,gu)=>{"use strict";var Sn=class{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")}};a(Sn,"BridgeMethods");gu.exports=Sn});var Kt=d((VB,bu)=>{"use strict";var pu=Oe().LMDB_ERRORS_ENUM,FB=require("lmdb"),WO=Se(),xB=require("buffer").Buffer,QO=require("microtime"),{OVERFLOW_MARKER:Iu,MAX_SEARCH_KEY_LENGTH:Tn}=WO,Cu=["number","string","symbol","boolean","bigint"];function JO(e){if(!e)throw new Error(pu.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(pu.INVALID_ENVIRONMENT)}a(JO,"validateEnv");function XO(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(XO,"stringifyData");function ZO(e){return e instanceof Date?e.valueOf():e}a(ZO,"convertKeyValueToWrite");function zO(e){if(e==null)return;if(Cu.includes(typeof e))return e.length>Tn?[e.slice(0,Tn)+Iu]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];Cu.includes(typeof n)&&(n.length>Tn?t.push(n.slice(0,Tn)+Iu):t.push(n))}}return t}a(zO,"getIndexedValues");function jO(){let e=QO.now().toString(),t=e.length-3;return Number(e.slice(0,t)+"."+e.slice(t))}a(jO,"getMicroTime");bu.exports={validateEnv:JO,stringifyData:XO,convertKeyValueToWrite:ZO,getMicroTime:jO,getIndexedValues:zO}});var wu=d((kB,Lu)=>{"use strict";var fn=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(fn,"DBIDefinition");Lu.exports=fn});var Uu=d((YB,yu)=>{"use strict";var Rn=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache={validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(Rn,"OpenDBIObject");yu.exports=Rn});var Mu=d(($B,Du)=>{"use strict";var mn=class{constructor(t,r,s,n,i=!1,o=!1,_=void 0){this.path=t,this.mapSize=r,this.maxDbs=s,this.maxReaders=n,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=i,this.trackMetrics=!0,this.noSync=o,_!==void 0&&(this.overlappingSync=_)}};a(mn,"OpenEnvironmentObject");Du.exports=mn});var G=d((WB,$u)=>{"use strict";var ka=require("lmdb"),Ge=require("fs-extra"),Xe=require("path"),Nn=Kt(),Pu=g(),oe=Oe().LMDB_ERRORS_ENUM,On=wu(),Ya=Uu(),Bu=Mu(),yt=Se(),KB=f(),os=Z();os.initSync();var Hu=os.get("STORAGE_WRITEASYNC")===!0||os.get("STORAGE_WRITEASYNC")==="true"||os.get("STORAGE_WRITEASYNC")==="TRUE",vu=os.get("STORAGE_OVERLAPPINGSYNC"),Gu=1024*1024*1024,qu=1e4,Fu=1e3,Ze=yt.INTERNAL_DBIS_NAME,xu=yt.DBI_DEFINITION_NAME,eg="data.mdb",tg="lock.mdb",_s=".mdb",rg="-lock",An=class{constructor(t,r,s=!1){this.dbi=qe(t,r),this.key_type=this.dbi[yt.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[yt.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new ka.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(An,"TransactionCursor");function $a(e,t){if(e===void 0)throw new Error(oe.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(oe.ENV_NAME_REQUIRED)}a($a,"pathEnvNameValidation");async function Ka(e,t,r=!0){try{await Ge.access(e)}catch(s){throw s.code==="ENOENT"?new Error(oe.INVALID_BASE_PATH):s}try{let s=Xe.join(e,t+_s);return await Ge.access(s,Ge.constants.R_OK|Ge.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Ge.access(Xe.join(e,t,eg),Ge.constants.R_OK|Ge.constants.F_OK),Xe.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(oe.INVALID_ENVIRONMENT)}else throw new Error(oe.INVALID_ENVIRONMENT);throw s}}a(Ka,"validateEnvironmentPath");function gn(e,t){if(Nn.validateEnv(e),t===void 0)throw new Error(oe.DBI_NAME_REQUIRED)}a(gn,"validateEnvDBIName");async function sg(e,t,r=!1,s=!1){$a(e,t),t=t.toString();try{return await Ka(e,t,s),Wa(e,t,r)}catch(n){if(n.message===oe.INVALID_ENVIRONMENT){let i=Xe.join(e,t);await Ge.mkdirp(s?i:e);let o=new Bu(s?i:i+_s,Gu,qu,Fu,!1,Hu,vu),_=ka.open(o);_.dbis=Object.create(null);let c=new Ya(!1);_.openDB(Ze,c),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=Qa(e,t,r);return _[yt.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=_,_}throw n}}a(sg,"createEnvironment");async function ng(e,t,r,s=!0){let n=await Wa(e,t);if(r===void 0)throw new Error(oe.DESTINATION_PATH_REQUIRED);try{await Ge.access(Xe.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(oe.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(ng,"copyEnvironment");async function Wa(e,t,r=!1){$a(e,t),t=t.toString();let s=Qa(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 Ka(e,t),i=Xe.join(e,t+_s),o=n!=i,_=new Bu(n,Gu,qu,Fu,o,Hu,vu),c=ka.open(_);c.dbis=Object.create(null);let u=ku(c);for(let E=0;E<u.length;E++)qe(c,u[E]);return c[yt.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=c,c}a(Wa,"openEnvironment");async function ig(e,t,r=!1){$a(e,t),t=t.toString();let s=Xe.join(e,t+_s),n=await Ka(e,t);if(global.lmdb_map!==void 0){let i=Qa(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Vu(o),delete global.lmdb_map[i]}}await Ge.remove(n),await Ge.remove(n===s?n+rg:Xe.join(Xe.dirname(n),tg))}a(ig,"deleteEnvironment");async function Vu(e){Nn.validateEnv(e);let t=e[yt.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Vu,"closeEnvironment");function Qa(e,t,r=!1){let n=`${Xe.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Qa,"getCachedEnvironmentName");function ag(e){Nn.validateEnv(e);let t=Object.create(null),r=qe(e,Ze);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Ze)try{t[s]=Object.assign(new On,n)}catch{Pu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(ag,"listDBIDefinitions");function ku(e){Nn.validateEnv(e);let t=[],r=qe(e,Ze);for(let{key:s}of r.getRange({start:!1}))s!==Ze&&t.push(s);return t}a(ku,"listDBIs");function og(e,t){let s=qe(e,Ze).getEntry(t),n=new On;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{Pu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(og,"getDBIDefinition");function Yu(e,t,r,s=!1){if(gn(e,t),t=t.toString(),t===Ze)throw new Error(oe.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return qe(e,t)}catch(n){if(n.message===oe.DBI_DOES_NOT_EXIST){let i=new Ya(r,s===!0),o=e.openDB(t,i),_=new On(r===!0,s);return o[xu]=_,qe(e,Ze).putSync(t,_),e.dbis[t]=o,o}throw n}}a(Yu,"createDBI");function qe(e,t){if(gn(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Ze?r=og(e,t):r=new On,r===void 0)throw new Error(oe.DBI_DOES_NOT_EXIST);let s;try{let n=new Ya(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(oe.DBI_DOES_NOT_EXIST):n}return s[xu]=r,e.dbis[t]=s,s}a(qe,"openDBI");function _g(e,t){gn(e,t),t=t.toString();let r=qe(e,t),s=r.getStats();return r[yt.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(_g,"statDBI");async function cg(e,t){try{let r=Xe.join(e,t+_s);return(await Ge.stat(r)).size}catch{throw new Error(oe.INVALID_ENVIRONMENT)}}a(cg,"environmentDataSize");function ug(e,t){if(gn(e,t),t=t.toString(),t===Ze)throw new Error(oe.CANNOT_DROP_INTERNAL_DBIS_NAME);qe(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],qe(e,Ze).removeSync(t)}a(ug,"dropDBI");function Eg(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{qe(e,n)}catch(i){if(i.message===oe.DBI_DOES_NOT_EXIST)Yu(e,n,n!==t,n===t);else throw i}}}a(Eg,"initializeDBIs");$u.exports={openDBI:qe,openEnvironment:Wa,createEnvironment:sg,listDBIs:ku,listDBIDefinitions:ag,createDBI:Yu,dropDBI:ug,statDBI:_g,deleteEnvironment:ig,initializeDBIs:Eg,TransactionCursor:An,environmentDataSize:cg,copyEnvironment:ng,closeEnvironment:Vu}});var Wu=d((QB,Ku)=>{"use strict";var pn=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(pn,"InsertRecordsResponseObject");Ku.exports=pn});var Ju=d((JB,Qu)=>{"use strict";var In=class{constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};a(In,"UpdateRecordsResponseObject");Qu.exports=In});var Zu=d((XB,Xu)=>{"use strict";var Cn=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(Cn,"UpsertRecordsResponseObject");Xu.exports=Cn});var mr=d((eH,ju)=>{"use strict";var lg=G(),dg=Wu(),hg=Ju(),Sg=Zu(),us=Kt(),cs=Oe().LMDB_ERRORS_ENUM,Tg=Se(),Ut=f(),fg=p(),Rg=require("uuid"),ZB=require("lmdb"),{handleHDBError:mg,hdb_errors:Ag}=K(),{OVERFLOW_MARKER:zB,MAX_SEARCH_KEY_LENGTH:jB}=Tg,Ja=Ut.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Wt=Ut.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Ng(e,t,r,s,n=!0){ja(e,t,r,s),Xa(e,t,r);let i=new dg,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c];zu(u,!0,n);let E=Og(e,t,r,u),l=u[t];o.push(E),_.push(l)}return Za(o,_,s,i)}a(Ng,"insertRecords");function Og(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 _=s[o];if(typeof _=="function"){let u=_([[{}]]);Array.isArray(u)&&(_=u[0][Ut.FUNC_VAL],s[o]=_)}let c=us.getIndexedValues(_);if(c)for(let u=0,E=c.length;u<E;u++)e.dbis[o].put(c[u],n)}e.dbis[t].put(n,s,s[Wt])})}a(Og,"insertRecord");function gg(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(gg,"removeSkippedRecords");function zu(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[Wt]))&&(e[Wt]=s),t===!0?(r===!0||!Number.isInteger(e[Ja]))&&(e[Ja]=s):delete e[Ja]}a(zu,"setTimestamps");function Xa(e,t,r){r.indexOf(Ut.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Ut.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Ut.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Ut.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),lg.initializeDBIs(e,t,r)}a(Xa,"initializeTransaction");async function pg(e,t,r,s,n=!0){ja(e,t,r,s),Xa(e,t,r);let i=new hg,o=[],_=[],c=[];for(let u=0;u<s.length;u++){let E=s[u],l=E[t],S;try{S=za(e,t,E,l,i,!0,n)}catch{i.skipped_hashes.push(l),o.push(u);continue}_.push(S),c.push(l)}return Za(_,c,s,i,o)}a(pg,"updateRecords");async function Ig(e,t,r,s,n=!0){try{ja(e,t,r,s)}catch(c){throw mg(c,c.message,Ag.HTTP_STATUS_CODES.BAD_REQUEST)}Xa(e,t,r);let i=new Sg,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c],E;fg.isEmpty(u[t])?(E=Rg.v4(),u[t]=E):E=u[t];let l=za(e,t,u,E,i,!1,n);o.push(l),_.push(E)}return Za(o,_,s,i)}a(Ig,"upsertRecords");async function Za(e,t,r,s,n=[]){let i=await Promise.all(e);for(let o=0,_=i.length;o<_;o++)i[o]===!0?s.written_hashes.push(t[o]):(s.skipped_hashes.push(t[o]),n.push(o));return s.txn_time=us.getMicroTime(),gg(r,n),s}a(Za,"finalizeWrite");function za(e,t,r,s,n,i=!1,o=!0){let _=e.dbis[t],c=_.getEntry(s),u=c?.value,E=u;if(!u){if(i)return!1;u={}}if(zu(r,!E,o),Number.isInteger(r[Wt])&&u[Wt]>r[Wt])return!1;E&&n.original_records.push(u);let l,S=a(()=>{for(let A in r){if(!r.hasOwnProperty(A)||A===t)continue;let N=r[A],I=e.dbis[A];if(I===void 0)continue;let X=u[A];if(typeof N=="function"){let W=N([[u]]);Array.isArray(W)&&(N=W[0][Ut.FUNC_VAL],r[A]=N)}if(N===X)continue;let v=us.getIndexedValues(X);if(v)for(let W=0,$e=v.length;W<$e;W++)I.remove(v[W],s);if(v=us.getIndexedValues(N),v)for(let W=0,$e=v.length;W<$e;W++)I.put(v[W],s)}let h=Object.assign({},u,r);_.put(s,h,h[Wt])},"do_put");return c?l=_.ifVersion(s,c.version,S):l=_.ifNoExists(s,S),l.then(h=>h?!0:za(e,t,r,s,n,i,o))}a(za,"updateUpsertRecord");function Cg(e,t,r){if(us.validateEnv(e),t===void 0)throw new Error(cs.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(cs.WRITE_ATTRIBUTES_REQUIRED):new Error(cs.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Cg,"validateBasic");function ja(e,t,r,s){if(Cg(e,t,r),!Array.isArray(s))throw s===void 0?new Error(cs.RECORDS_REQUIRED):new Error(cs.RECORDS_MUST_BE_ARRAY)}a(ja,"validateWrite");ju.exports={insertRecords:Ng,updateRecords:pg,upsertRecords:Ig}});var V=d((tH,tE)=>{"use strict";var eo=f(),Ar=Z(),to=require("path");Ar.initSync();var bn,Ln,wn;function eE(){if(bn!==void 0)return bn;if(Ar.getHdbBasePath()!==void 0)return bn=to.join(Ar.getHdbBasePath(),eo.SCHEMA_DIR_NAME),bn}a(eE,"getBaseSchemaPath");function bg(){if(Ln!==void 0)return Ln;if(Ar.getHdbBasePath()!==void 0)return Ln=to.join(eE(),eo.SYSTEM_SCHEMA_NAME),Ln}a(bg,"getSystemSchemaPath");function Lg(){if(wn!==void 0)return wn;if(Ar.getHdbBasePath()!==void 0)return wn=to.join(Ar.getHdbBasePath(),eo.TRANSACTIONS_DIR_NAME),wn}a(Lg,"getTransactionAuditStorePath");tE.exports={getBaseSchemaPath:eE,getSystemSchemaPath:bg,getTransactionAuditStorePath:Lg}});var Qt=d((rH,wg)=>{wg.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_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var Nr=d((sH,nE)=>{"use strict";var sE=p(),rE=f(),Un=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,ro=require("joi"),yn={schema_format:{pattern:Un,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},yg=ro.alternatives(ro.string().min(1).max(yn.schema_length.maximum).pattern(Un).messages({"string.pattern.base":"{:#label} "+yn.schema_format.message}),ro.number()).required();function Ug(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>yn.schema_length.maximum?`'${e}' maximum of 250 characters`:Un.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(Ug,"checkValidTable");function Dg(e,t){return sE.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(Dg,"validateSchemaExists");function Mg(e,t){let r=t.state.ancestors[0].schema;return sE.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Mg,"validateTableExists");function Pg(e,t){return e.toLowerCase()===rE.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${rE.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(Pg,"validateSchemaName");nE.exports={common_validators:yn,schema_regex:Un,hdb_schema_table:yg,validateSchemaExists:Dg,validateTableExists:Mg,validateSchemaName:Pg,checkValidTable:Ug}});var Dn=d((nH,iE)=>{var{common_validators:Dt}=Nr(),Es=We(),ze="is required",q={schema:{presence:!0,format:Dt.schema_format,length:Dt.schema_length},table:{presence:!0,format:Dt.schema_format,length:Dt.schema_length},attribute:{presence:!0,format:Dt.schema_format,length:Dt.schema_length},hash_attribute:{presence:!0,format:Dt.schema_format,length:Dt.schema_length}};function ls(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(ls,"makeAttributesStrings");function Bg(e){return e=ls(e),q.schema.presence={message:ze},q.table.presence=!1,q.attribute.presence=!1,q.hash_attribute.presence=!1,Es.validateObject(e,q)}a(Bg,"schema_object");function Hg(e){return e=ls(e),q.schema.presence={message:ze},q.table.presence={message:ze},q.attribute.presence=!1,q.hash_attribute.presence=!1,Es.validateObject(e,q)}a(Hg,"table_object");function vg(e){return e=ls(e),q.schema.presence={message:ze},q.table.presence={message:ze},q.attribute.presence=!1,q.hash_attribute.presence={message:ze},Es.validateObject(e,q)}a(vg,"create_table_object");function Gg(e){return e=ls(e),q.schema.presence={message:ze},q.table.presence={message:ze},q.attribute.presence={message:ze},q.hash_attribute.presence=!1,Es.validateObject(e,q)}a(Gg,"attribute_object");function qg(e){return e=ls(e),q.schema.presence={message:ze},q.table.presence={message:ze},q.attribute.presence=!1,q.hash_attribute.presence=!1,Es.validateObject(e,q)}a(qg,"describe_table");function Fg(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(Fg,"validateTableResidence");iE.exports={schema_object:Bg,create_table_object:vg,table_object:Hg,attribute_object:Gg,describe_table:qg,validateTableResidence:Fg}});var oE=d((iH,aE)=>{"use strict";var xg=require("uuid"),Mn=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||xg.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(Mn,"CreateAttributeObject");aE.exports=Mn});var Bn=d((aH,_E)=>{"use strict";var Vg=oE(),Pn=class extends Vg{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(Pn,"LMDBCreateAttributeObject");_E.exports=Pn});var uE=d((oH,cE)=>{"use strict";cE.exports=Yg;var kg="inserted";function Yg(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===kg?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Yg,"returnObject")});var Hn=d((_H,lE)=>{"use strict";var $g=f(),so=G(),Kg=mr(),{getSystemSchemaPath:Wg,getBaseSchemaPath:Qg}=V(),Jg=require("path"),Xg=Qt(),Zg=Dn(),zg=Bn(),jg=uE(),{handleHDBError:ep,hdb_errors:tp}=K(),rp=p(),no=Xg.hdb_attribute,EE=[];for(let e=0;e<no.attributes.length;e++)EE.push(no.attributes[e].attribute);var sp="inserted";lE.exports=np;async function np(e){let t=Zg.attribute_object(e);if(t)throw ep(new Error,t.message,tp.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=rp.isEmpty(e.dup_sort)||e.dup_sort=="true";let r=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(r=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(r)&&r.length>0){for(let n of r)if(n.attribute===e.attribute)throw new Error(`attribute '${n.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new zg(e.schema,e.table,e.attribute,e.id);try{let n=await so.openEnvironment(Jg.join(Qg(),e.schema.toString()),e.table);if(n.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);so.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await so.openEnvironment(Wg(),$g.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:o,skipped_hashes:_}=await Kg.insertRecords(i,no.hash_attribute,EE,[s]);return jg(sp,o,{records:[s]},_)}catch(n){throw n}}a(np,"lmdbCreateAttribute")});var ao=d((cH,hE)=>{var{hdb_schema_table:dE}=Nr(),ip=We(),io=require("joi"),ap={undefined:"undefined",null:"null"},op=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||ap[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"),_p=io.object({schema:dE,table:dE,records:io.array().items(io.object().custom(op)).required()});hE.exports=function(e){return ip.validateBySchema(e,_p)}});var vn=d((EH,TE)=>{"use strict";var Rt=p(),SE=g(),uH=ao();TE.exports=cp;function cp(e){if(Rt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Rt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Rt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");if(!Array.isArray(e.records))throw new Error("records must be an array");let t=global.hdb_schema[e.schema][e.table];if(Rt.isEmpty(t))throw new Error(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.hash_attribute,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&Rt.isEmptyOrZeroLength(o[r]))throw SE.error("a valid hash attribute must be provided with update record:",o),new Error("a valid hash attribute must be provided with update record, check log for more info");if(!Rt.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw SE.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Error(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Rt.isEmpty(o[r])&&o[r]!==""&&s.has(Rt.autoCast(o[r]))&&(o.skip=!0),s.add(Rt.autoCast(o[r]));for(let _ in o)n[_]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(cp,"insertUpdateValidate")});var qn=d((lH,fE)=>{"use strict";var up=f().OPERATIONS_ENUM,Gn=class{constructor(t,r,s,n,i=void 0){this.operation=up.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(Gn,"InsertObject");fE.exports=Gn});var xn=d((hH,RE)=>{"use strict";var dH=qn(),Fn=f(),_o=p(),oo=g(),Ep=require("uuid"),{handleHDBError:ds,hdb_errors:lp}=K(),{HDB_ERROR_MSGS:hs,HTTP_STATUS_CODES:Ss}=lp;RE.exports=dp;function dp(e,t,r){for(let n=0;n<t.length;n++)hp(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Sp(i,r,e.operation)}}a(dp,"processRows");function hp(e){if(Buffer.byteLength(String(e))>Fn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ds(new Error,hs.ATTR_NAME_LENGTH_ERR(e),Ss.BAD_REQUEST,void 0,void 0,!0);if(_o.isEmptyOrZeroLength(e)||_o.isEmpty(e.trim()))throw ds(new Error,hs.ATTR_NAME_NULLISH_ERR,Ss.BAD_REQUEST,void 0,void 0,!0)}a(hp,"validateAttribute");function Sp(e,t,r){if(!e.hasOwnProperty(t)||_o.isEmptyOrZeroLength(e[t])){if(r===Fn.OPERATIONS_ENUM.INSERT||r===Fn.OPERATIONS_ENUM.UPSERT){e[t]=Ep.v4();return}throw oo.error("Update transaction aborted due to record with no hash value:",e),ds(new Error,hs.RECORD_MISSING_HASH_ERR,Ss.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Fn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw oo.error(e),ds(new Error,hs.HASH_VAL_LENGTH_ERR,Ss.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw oo.error(e),ds(new Error,hs.INVALID_FORWARD_SLASH_IN_HASH_ERR,Ss.BAD_REQUEST,void 0,void 0,!0)}a(Sp,"validateHash")});var AE=d((SH,mE)=>{"use strict";var Vn=class{constructor(t,r){this.type=t,this.message=r}};a(Vn,"IPCEventObject");mE.exports=Vn});var Jt=d((TH,NE)=>{"use strict";var Tp=g(),co=p(),fp=f(),{IPC_ERRORS:Ts}=Oe();NE.exports={sendIpcEvent:Rp,validateEvent:mp,SchemaEventMsg:Ap,UserEventMsg:Np};function Rp(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):Tp.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}a(Rp,"sendIpcEvent");function mp(e){if(typeof e!="object")return Ts.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||co.isEmpty(e.type))return Ts.MISSING_TYPE;if(!e.hasOwnProperty("message")||co.isEmpty(e.message))return Ts.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||co.isEmpty(e.message.originator))return Ts.MISSING_ORIGIN;if(fp.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Ts.INVALID_EVENT(e.type)}a(mp,"validateEvent");function Ap(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(Ap,"SchemaEventMsg");function Np(e){this.originator=e}a(Np,"UserEventMsg")});var fs=d((RH,IE)=>{"use strict";var OE=f(),fH=p(),kn=g(),gE=AE(),{sendIpcEvent:pE}=Jt();function Op(e){try{kn.trace("signalSchemaChange called with message:",e);let t=new gE(OE.IPC_EVENT_TYPES.SCHEMA,e);pE(t)}catch(t){kn.error(t)}}a(Op,"signalSchemaChange");function gp(e){try{kn.trace("signalUserChange called with message:",e);let t=new gE(OE.IPC_EVENT_TYPES.USER,e);pE(t)}catch(t){kn.error(t)}}a(gp,"signalUserChange");IE.exports={signalSchemaChange:Op,signalUserChange:gp}});var Yn=d((mH,bE)=>{"use strict";var CE=p(),pp=f(),Ip=g(),Cp=Hn(),bp=Bn(),Lp=fs(),{SchemaEventMsg:wp}=Jt(),yp="already exists in";bE.exports=Up;async function Up(e,t,r){try{if(CE.isEmptyOrZeroLength(r))return r;let s=[];CE.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 Dp(e,t.schema,t.name,i)})),n}catch(s){throw s}}a(Up,"lmdbCheckForNewAttributes");async function Dp(e,t,r,s){let n=new bp(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await Mp(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(yp))Ip.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(Dp,"createNewAttribute");async function Mp(e){let t;try{return t=await Cp(e),Lp.signalSchemaChange(new wp(process.pid,pp.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}a(Mp,"createAttribute")});var Or=d((AH,LE)=>{"use strict";var $n=class{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}};a($n,"LMDBTransactionObject");LE.exports=$n});var yE=d((NH,wE)=>{"use strict";var Pp=Or(),Bp=f().OPERATIONS_ENUM,Kn=class extends Pp{constructor(t,r,s,n,i=void 0){super(Bp.INSERT,r,s,n,i),this.records=t}};a(Kn,"LMDBInsertTransactionObject");wE.exports=Kn});var DE=d((OH,UE)=>{"use strict";var Hp=Or(),vp=f().OPERATIONS_ENUM,Wn=class extends Hp{constructor(t,r,s,n,i,o=void 0){super(vp.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(Wn,"LMDBUpdateTransactionObject");UE.exports=Wn});var PE=d((gH,ME)=>{"use strict";var Gp=Or(),qp=f().OPERATIONS_ENUM,Qn=class extends Gp{constructor(t,r,s,n,i,o=void 0){super(qp.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(Qn,"LMDBUpsertTransactionObject");ME.exports=Qn});var HE=d((pH,BE)=>{"use strict";var Fp=Or(),xp=f().OPERATIONS_ENUM,Jn=class extends Fp{constructor(t,r,s,n,i=void 0){super(xp.DELETE,s,n,t,i),this.original_records=r}};a(Jn,"LMDBDeleteTransactionObject");BE.exports=Jn});var Rs=d((IH,FE)=>{"use strict";var Vp=require("path"),vE=G(),kp=yE(),Yp=DE(),$p=PE(),Kp=HE(),gr=Se(),GE=p(),{CONFIG_PARAMS:Wp}=f(),qE=Z();qE.initSync();var Xn=f().OPERATIONS_ENUM,{getTransactionAuditStorePath:Qp}=V();FE.exports=Jp;async function Jp(e,t){if(qE.get(Wp.LOGGING_AUDITLOG)===!1)return;let r=Vp.join(Qp(),e.schema.toString()),s=await vE.openEnvironment(r,e.table,!0),n=Xp(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){vE.initializeDBIs(s,gr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,gr.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[gr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[gr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),GE.isEmpty(n.user_name)||s.dbis[gr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[gr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}catch(i){throw i}}}a(Jp,"writeTransaction");function Xp(e,t){let r=GE.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Xn.INSERT)return new kp(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Xn.UPDATE)return new Yp(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Xn.UPSERT)return new $p(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Xn.DELETE)return new Kp(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(Xp,"createTransactionObject")});var uo=d((bH,xE)=>{"use strict";var Zp=vn(),CH=qn(),pr=f(),zp=xn(),jp=mr().insertRecords,eI=G(),tI=require("path"),rI=g(),sI=Yn(),{getBaseSchemaPath:nI}=V(),iI=Rs();xE.exports=aI;async function aI(e){try{let{schema_table:t,attributes:r}=Zp(e);zp(e,r,t.hash_attribute),e.schema!==pr.SYSTEM_SCHEMA_NAME&&(r.includes(pr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(pr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(pr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(pr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await sI(e.hdb_auth_header,t,r),n=tI.join(nI(),e.schema.toString()),i=await eI.openEnvironment(n,e.table),o=await jp(i,t.hash_attribute,r,e.records,e[pr.CLUSTERING_FLAG]!==!0);try{await iI(e,o)}catch(_){rI.error(`unable to write transaction due to ${_.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(aI,"lmdbCreateRecords")});var YE=d((LH,kE)=>{"use strict";var VE=f(),oI=uo(),_I=qn(),cI=require("fs-extra"),uI=require("path"),{getBaseSchemaPath:EI}=V();kE.exports=lI;async function lI(e){let t=[{name:e.schema,createddate:Date.now()}],r=new _I(VE.SYSTEM_SCHEMA_NAME,VE.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await oI(r),await cI.mkdirp(uI.join(EI(),e.schema.toString()))}a(lI,"lmdbCreateSchema")});var KE=d((wH,$E)=>{"use strict";var Zn=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(Zn,"DeleteRecordsResponseObject");$E.exports=Zn});var ho=d((MH,JE)=>{"use strict";var WE=G(),Eo=Kt(),lo=Oe().LMDB_ERRORS_ENUM,dI=Se(),QE=g(),yH=p(),hI=require("lmdb"),SI=KE(),{OVERFLOW_MARKER:UH,MAX_SEARCH_KEY_LENGTH:DH}=dI;async function TI(e,t,r){if(Eo.validateEnv(e),t===void 0)throw new Error(lo.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(lo.IDS_REQUIRED):new Error(lo.IDS_MUST_BE_ARRAY);try{let s=WE.listDBIs(e);WE.initializeDBIs(e,t,s);let n=new SI,i,o=[],_=[];for(let l=0,S=r.length;l<S;l++)try{i=r[l];let h=e.dbis[t].get(i);if(!h){n.skipped.push(i);continue}let A=e.dbis[t].ifVersion(i,hI.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let N=0;N<s.length;N++){let I=s[N];if(!h.hasOwnProperty(I)||I===t)continue;let X=e.dbis[I],v=h[I];if(v!=null)try{let W=Eo.getIndexedValues(v);if(W)for(let $e=0,Zs=W.length;$e<Zs;$e++)X.remove(W[$e],i)}catch{QE.warn(`cannot delete from attribute: ${I}, ${v}:${i}`)}}});o.push(A),_.push(i),n.original_records.push(h)}catch(h){QE.warn(h),n.skipped.push(i)}let c=[],u=await Promise.all(o);for(let l=0,S=u.length;l<S;l++)u[l]===!0?n.deleted.push(_[l]):(n.skipped.push(_[l]),c.push(l));let E=0;for(let l=0;l<c.length;l++){let S=c[l];n.original_records.splice(S-E,1),E++}return n.txn_time=Eo.getMicroTime(),n}catch(s){throw s}}a(TI,"deleteRecords");JE.exports={deleteRecords:TI}});var ms=d((PH,ZE)=>{"use strict";var Ir=p(),fI=ho(),RI=G(),mI=require("path"),{getBaseSchemaPath:AI}=V(),NI=Rs(),OI=g();ZE.exports=gI;async function gI(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ir.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ir.isEmptyOrZeroLength(e.hash_values)&&!Ir.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let _=0;_<e.records.length;_++){let c=e.records[_][s];Ir.isEmpty(c)||e.hash_values.push(c)}}if(Ir.isEmptyOrZeroLength(e.hash_values))return XE([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ir.isEmptyOrZeroLength(e.records)){e.records=[];for(let _=0;_<e.hash_values.length;_++)e.records[_]={[s]:e.hash_values[_]}}let n=mI.join(AI(),e.schema.toString()),i=await RI.openEnvironment(n,e.table),o=await fI.deleteRecords(i,s,e.hash_values);try{t===!0&&await NI(e,o)}catch(_){OI.error(`unable to write transaction due to ${_.message}`)}return XE(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(gI,"lmdbDeleteRecords");function XE(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(XE,"createDeleteResponse")});var To=d((HH,zE)=>{"use strict";var pI=f(),BH=Kt();function So(e,t){let r=Object.create(null);if(t.length===1&&pI.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(So,"parseRow");function II(e,t,r,s){let n=So(r,e);s.push(n)}a(II,"searchAll");function CI(e,t,r,s){let n=So(r,e);s[t]=n}a(CI,"searchAllToMap");function bI(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(bI,"iterateDBI");function Xt(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(Xt,"pushResults");function LI(e,t,r,s,n,i){t.toString().endsWith(e)&&Xt(t,r,s,n,i)}a(LI,"endsWith");function wI(e,t,r,s,n,i){t.toString().includes(e)&&Xt(t,r,s,n,i)}a(wI,"contains");function yI(e,t,r,s,n,i){t>e&&Xt(t,r,s,n,i)}a(yI,"greaterThanCompare");function UI(e,t,r,s,n,i){t>=e&&Xt(t,r,s,n,i)}a(UI,"greaterThanEqualCompare");function DI(e,t,r,s,n,i){t<e&&Xt(t,r,s,n,i)}a(DI,"lessThanCompare");function MI(e,t,r,s,n,i){t<=e&&Xt(t,r,s,n,i)}a(MI,"lessThanEqualCompare");zE.exports={parseRow:So,searchAll:II,searchAllToMap:CI,iterateDBI:bI,endsWith:LI,contains:wI,greaterThanCompare:yI,greaterThanEqualCompare:UI,lessThanCompare:DI,lessThanEqualCompare:MI,pushResults:Xt}});var Cr=d((qH,nl)=>{"use strict";var Fe=G(),PI=g(),Pe=Kt(),Mt=Se(),Q=Oe().LMDB_ERRORS_ENUM,vH=p(),BI=f(),je=To(),GH=require("lmdb"),{OVERFLOW_MARKER:jE,MAX_SEARCH_KEY_LENGTH:HI}=Mt,As={lazy:!0};function el(e,t,r,s,n=!1,i=void 0,o=void 0){let _=Object.create(null),c=Fe.openDBI(e,r);c[Mt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let u=fo(e,t,r);for(let{key:E,value:l}of c.getRange({start:n?void 0:!1,end:n?!1:void 0,limit:i,offset:o,reverse:n}))s(u(E,l),l,_,t,r);return _}a(el,"iterateFullIndex");function Ns(e,t,r,s,n,i=!1,o=void 0,_=void 0,c=!1,u=!1){let E=[[],[]],l=Fe.openDBI(e,r),S=fo(e,t,r);l[Mt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let h=i===!0?s:n,A=i===!0?n:s,N=i===!0?!c:!u,I=i===!0?u:c;for(let{key:X,value:v}of l.getRange({start:A,end:h,reverse:i,limit:o,offset:_,inclusiveEnd:N,exclusiveStart:I}))je.pushResults(S(X,v),v,E,t,r);return E}a(Ns,"iterateRangeBetween");function fo(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith(jE)){if(!s)if(t)s=Fe.openDBI(e,t);else{let _=Fe.listDBIs(e);for(let c=0,u=_.length;c<u&&(s=Fe.openDBI(e,_[c]),!s[Mt.DBI_DEFINITION_NAME].is_hash_attribute);c++);}n=s.get(i,As)[r]}return n}}a(fo,"getOverflowCheck");function vI(e,t,r,s=!1,n=void 0,i=void 0){if(Pe.validateEnv(e),t===void 0)throw new Error(Q.HASH_ATTRIBUTE_REQUIRED);zn(r),r=Os(e,r);let o=[],_=Fe.openDBI(e,t);for(let{key:c,value:u}of _.getRange({start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))je.searchAll(r,c,u,o);return o}a(vI,"searchAll");function GI(e,t,r,s=!1,n=void 0,i=void 0){if(Pe.validateEnv(e),t===void 0)throw new Error(Q.HASH_ATTRIBUTE_REQUIRED);return zn(r),r=Os(e,r),el(e,t,t,je.searchAllToMap.bind(null,r),s,n,i)}a(GI,"searchAllToMap");function qI(e,t,r=!1,s=void 0,n=void 0){if(Pe.validateEnv(e),t===void 0)throw new Error(Q.ATTRIBUTE_REQUIRED);return el(e,void 0,t,je.iterateDBI,r,s,n)}a(qI,"iterateDBI");function FI(e,t){if(Pe.validateEnv(e),t===void 0)throw new Error(Q.HASH_ATTRIBUTE_REQUIRED);return Fe.statDBI(e,t).entryCount}a(FI,"countAll");function xI(e,t,r,s,n=!1,i=void 0,o=void 0){Pt(e,r,s);let _=Fe.openDBI(e,r);s=Pe.convertKeyValueToWrite(s);let c=[[],[]];if(_[Mt.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=_.get(s,As);u!==void 0&&je.pushResults(s,u,c,t,r)}else for(let u of _.getValues(s,{reverse:n,limit:i,offset:o}))je.pushResults(s,u,c,t,r);return c}a(xI,"equals");function VI(e,t,r){return Pt(e,t,r),Fe.openDBI(e,t).getValuesCount(r)}a(VI,"count");function kI(e,t,r,s,n=!1,i=void 0,o=void 0){Pt(e,r,s);let _=[[],[]],c=Fe.openDBI(e,r);c[Mt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r),s=Pe.convertKeyValueToWrite(s);let u=!0;if(typeof s=="number"&&(u=!1),n===!0){let E;for(let l of c.getKeys({start:s}))if(!l.startsWith(s)){E=l;break}E!==void 0&&(Number.isInteger(o)?o++:i++);for(let{key:l,value:S}of c.getRange({start:E,end:void 0,reverse:n,limit:i,offset:o}))if(l!==E){if(l.toString().startsWith(s))je.pushResults(l,S,_,t,r);else if(u===!0)break}}else for(let{key:E,value:l}of c.getRange({start:s,reverse:n,limit:i,offset:o}))if(E.toString().startsWith(s))je.pushResults(E,l,_,t,r);else if(u===!0)break;return _}a(kI,"startsWith");function YI(e,t,r,s,n=!1,i=void 0,o=void 0){return tl(e,t,r,s,n,i,o,!0)}a(YI,"endsWith");function tl(e,t,r,s,n=!1,i=void 0,o=void 0,_=!1){Pt(e,r,s);let c=[[],[]],u=Fe.openDBI(e,r);u[Mt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let E=fo(e,t,r);o=Number.isInteger(o)?o:0;for(let S of u.getKeys({end:n?!1:void 0,reverse:n})){if(i===0)break;let h=S.toString();if(h.endsWith(jE))for(let A of u.getValues(S)){let N=E(S,A);(_?N.endsWith(s):N.includes(s))&&l(N,A)}else if(_?h.endsWith(s):h.includes(s))if(u[Mt.DBI_DEFINITION_NAME].is_hash_attribute)l(S,S);else for(let A of u.getValues(S))l(S,A)}function l(S,h){if(o>0){o--;return}i!==0&&(je.pushResults(S,h,c,t,r),i--)}return a(l,"found_match"),c}a(tl,"contains");function $I(e,t,r,s,n=!1,i=void 0,o=void 0){Pt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),Ns(e,t,r,s,c,n,i,o,!0,!1)}a($I,"greaterThan");function KI(e,t,r,s,n=!1,i=void 0,o=void 0){Pt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),Ns(e,t,r,s,c,n,i,o,!1,!1)}a(KI,"greaterThanEqual");function WI(e,t,r,s,n=!1,i=void 0,o=void 0){Pt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),Ns(e,t,r,c,s,n,i,o,!1,!0)}a(WI,"lessThan");function QI(e,t,r,s,n=!1,i=void 0,o=void 0){Pt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),Ns(e,t,r,c,s,n,i,o,!1,!1)}a(QI,"lessThanEqual");function JI(e,t,r,s,n,i=!1,o=void 0,_=void 0){if(Pe.validateEnv(e),r===void 0)throw new Error(Q.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(Q.START_VALUE_REQUIRED);if(n===void 0)throw new Error(Q.END_VALUE_REQUIRED);if(s=Pe.convertKeyValueToWrite(s),n=Pe.convertKeyValueToWrite(n),s>n)throw new Error(Q.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ns(e,t,r,s,n,i,o,_)}a(JI,"between");function XI(e,t,r,s){if(Pe.validateEnv(e),t===void 0)throw new Error(Q.HASH_ATTRIBUTE_REQUIRED);if(zn(r),r=Os(e,r),s===void 0)throw new Error(Q.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?As:void 0);return i&&(n=je.parseRow(i,r)),n}a(XI,"searchByHash");function ZI(e,t,r){if(Pe.validateEnv(e),t===void 0)throw new Error(Q.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Q.ID_REQUIRED);let s=!0;return e.dbis[t].get(r,As)===void 0&&(s=!1),s}a(ZI,"checkHashExists");function zI(e,t,r,s,n=[]){sl(e,t,r,s,n);let i=rl(e,t,r,s,n);return Object.values(i)}a(zI,"batchSearchByHash");function jI(e,t,r,s,n=[]){return sl(e,t,r,s,n),rl(e,t,r,s,n)}a(jI,"batchSearchByHashToMap");function rl(e,t,r,s,n=[]){r=Os(e,r);let i=Object.create(null),o=r.length<3?As:void 0;for(let _=0;_<s.length;_++){let c=s[_];try{let u=e.dbis[t].get(c,o);if(u){let E=je.parseRow(u,r);i[c]=E}else n.push(c)}catch(u){throw PI.warn(u),u}}return i}a(rl,"batchHashSearch");function sl(e,t,r,s,n){if(Pe.validateEnv(e),t===void 0)throw new Error(Q.HASH_ATTRIBUTE_REQUIRED);if(zn(r),!Array.isArray(s))throw s===void 0?new Error(Q.IDS_REQUIRED):new Error(Q.IDS_MUST_BE_ARRAY);Array.isArray(n)||(n=[])}a(sl,"initializeBatchSearchByHash");function zn(e){if(!Array.isArray(e))throw e===void 0?new Error(Q.FETCH_ATTRIBUTES_REQUIRED):new Error(Q.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(zn,"validateFetchAttributes");function Pt(e,t,r){if(Pe.validateEnv(e),t===void 0)throw new Error(Q.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Q.SEARCH_VALUE_REQUIRED);if(r?.length>HI)throw new Error(Q.SEARCH_VALUE_TOO_LARGE)}a(Pt,"validateComparisonFunctions");function Os(e,t){return t.length===1&&BI.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Fe.listDBIs(e)),t}a(Os,"setGetWholeRowAttributes");nl.exports={searchAll:vI,searchAllToMap:GI,count:VI,countAll:FI,equals:xI,startsWith:kI,endsWith:YI,contains:tl,searchByHash:XI,setGetWholeRowAttributes:Os,batchSearchByHash:zI,batchSearchByHashToMap:jI,checkHashExists:ZI,iterateDBI:qI,greaterThan:$I,greaterThanEqual:KI,lessThan:WI,lessThanEqual:QI,between:JI}});var gs=d((xH,_l)=>{var il=require("lodash"),al=We(),B=require("joi"),eC=p(),{hdb_schema_table:et,checkValidTable:ol}=Nr(),{handleHDBError:tC,hdb_errors:rC}=K(),{HTTP_STATUS_CODES:sC}=rC,FH=B.object({schema:et,table:et,hash_values:B.array().min(1).items(B.alternatives(B.string(),B.number())).required(),get_attributes:B.array().min(1).items(et).required()}),nC=B.object({schema:et,table:et,search_attribute:et,search_value:B.any().required(),get_attributes:B.array().min(1).items(et).required(),desc:B.bool(),limit:B.number().integer().min(1),offset:B.number().integer().min(0)}),iC=B.object({schema:et,table:et,operator:B.string().valid("and","or").default("and").lowercase(),offset:B.number().integer().min(0),limit:B.number().integer().min(1),get_attributes:B.array().min(1).items(et).required(),conditions:B.array().min(1).items(B.object({search_attribute:et,search_type:B.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:B.when("search_type",{switch:[{is:"equals",then:B.any()},{is:"between",then:B.array().items(B.alternatives([B.string(),B.number()])).length(2)}],otherwise:B.alternatives(B.string(),B.number())}).required()})).required()});_l.exports=function(e,t){let r=null;switch(t){case"value":r=al.validateBySchema(e,nC);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(ol("schema",e.schema)),i(ol("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=al.validateBySchema(e,iC);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=eC.checkGlobalSchemaTable(e.schema,e.table);if(n)return tC(new Error,n,sC.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,_=[...e.get_attributes];if(t==="value"&&_.push(e.search_attribute),t==="conditions")for(let u=0,E=e.conditions.length;u<E;u++){let l=e.conditions[u];_.push(l.search_attribute)}let c=il.filter(_,u=>u!=="*"&&u.attribute!=="*"&&!il.some(o,E=>E===u||E.attribute===u||E.attribute===u.attribute));if(c&&c.length>0){let u=c.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var Ro=d((VH,cl)=>{"use strict";var aC=G(),oC=gs(),_C=require("path"),{getBaseSchemaPath:cC}=V();cl.exports=uC;function uC(e){let t=oC(e,"hashes");if(t)throw t;let r=_C.join(cC(),e.schema.toString());return aC.openEnvironment(r,e.table)}a(uC,"initialize")});var mo=d((kH,ul)=>{"use strict";var EC=Cr(),lC=Ro();ul.exports=dC;async function dC(e){try{let t=await lC(e),r=global.hdb_schema[e.schema][e.table];return EC.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(dC,"lmdbGetDataByHash")});var ps=d((YH,El)=>{"use strict";var jn=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(jn,"SearchByHashObject");El.exports=jn});var dl=d((KH,ll)=>{"use strict";var $H=ps(),hC=Cr(),SC=Ro();ll.exports=TC;async function TC(e){try{let t=await SC(e),r=global.hdb_schema[e.schema][e.table];return hC.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(TC,"lmdbSearchByHash")});var mt=d((WH,hl)=>{"use strict";var ei=class{constructor(t,r,s,n,i,o,_,c=!1,u=void 0,E=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=_,this.reverse=c,this.limit=u,this.offset=E}};a(ei,"SearchObject");hl.exports=ei});var ti=d((QH,ml)=>{"use strict";var fe=Cr(),fC=G(),RC=require("path"),mC=p(),O=Se(),Zt=f(),{getBaseSchemaPath:AC}=V(),NC=Qt(),Sl=Oe().LMDB_ERRORS_ENUM,{compareKeys:br}=require("ordered-binary"),At=Zt.SEARCH_WILDCARDS;async function OC(e,t,r){let s;e.schema===Zt.SYSTEM_SCHEMA_NAME?s=NC[e.table]:s=global.hdb_schema[e.schema][e.table];let n=Rl(e,s.hash_attribute,r,t);return Tl(e,n,s.hash_attribute,r)}a(OC,"prepSearch");async function Tl(e,t,r,s){let n=RC.join(AC(),e.schema.toString()),i=await fC.openEnvironment(n,e.table),o=fl(i,e,t,r);if([O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,O.SEARCH_TYPES.SEARCH_ALL,O.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(IC(e,r)===!1)return s===!0?pC(o):o[1];let c=o[0];return s===!0?fe.batchSearchByHashToMap(i,r,e.get_attributes,c):fe.batchSearchByHash(i,r,e.get_attributes,c)}a(Tl,"executeSearch");function fl(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:_,offset:c}=t;switch(o=typeof o=="boolean"?o:!1,_=Number.isInteger(_)?_:void 0,c=Number.isInteger(c)?c:void 0,r){case O.SEARCH_TYPES.EQUALS:n=fe.equals(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.CONTAINS:n=fe.contains(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.ENDS_WITH:case O.SEARCH_TYPES._ENDS_WITH:n=fe.endsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.STARTS_WITH:case O.SEARCH_TYPES._STARTS_WITH:n=fe.startsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return fe.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return fe.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case O.SEARCH_TYPES.SEARCH_ALL:return fe.searchAll(e,s,t.get_attributes,o,_,c);case O.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return fe.searchAllToMap(e,s,t.get_attributes,o,_,c);case O.SEARCH_TYPES.BETWEEN:n=fe.between(e,i,t.search_attribute,t.search_value,t.end_value,o,_,c);break;case O.SEARCH_TYPES.GREATER_THAN:case O.SEARCH_TYPES._GREATER_THAN:n=fe.greaterThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.GREATER_THAN_EQUAL:case O.SEARCH_TYPES._GREATER_THAN_EQUAL:n=fe.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.LESS_THAN:case O.SEARCH_TYPES._LESS_THAN:n=fe.lessThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.LESS_THAN_EQUAL:case O.SEARCH_TYPES._LESS_THAN_EQUAL:n=fe.lessThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;default:return Object.create(null)}return n}a(fl,"searchByType");function gC(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case O.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case O.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case O.SEARCH_TYPES.ENDS_WITH:case O.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case O.SEARCH_TYPES.STARTS_WITH:case O.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case O.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return br(i,s[0])>=0&&br(i,s[1])<=0};case O.SEARCH_TYPES.GREATER_THAN:case O.SEARCH_TYPES._GREATER_THAN:return n=>br(n[r],s)>0;case O.SEARCH_TYPES.GREATER_THAN_EQUAL:case O.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>br(n[r],s)>=0;case O.SEARCH_TYPES.LESS_THAN:case O.SEARCH_TYPES._LESS_THAN:return n=>br(n[r],s)<0;case O.SEARCH_TYPES.LESS_THAN_EQUAL:case O.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>br(n[r],s)<=0;default:return Object.create(null)}}a(gC,"filterByType");function pC(e){let t=Object.create(null);for(let r=0,s=e[0].length;r<s;r++)t[e[0][r]]=e[1][r];return t}a(pC,"createMapFromArrays");function IC(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(IC,"checkToFetchMore");function Rl(e,t,r,s){if(mC.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),_=!1;if(e.search_attribute===t&&(_=!0),At.indexOf(n)>-1)return r===!0?O.SEARCH_TYPES.SEARCH_ALL_TO_MAP:O.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(At[0])<0&&n.indexOf(At[1])<0)return _===!0?r===!0?O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:O.SEARCH_TYPES.EQUALS;if(At.indexOf(i)>=0&&At.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),O.SEARCH_TYPES.CONTAINS;if(At.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),O.SEARCH_TYPES.ENDS_WITH;if(At.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),O.SEARCH_TYPES.STARTS_WITH;if(n.includes(At[0])||n.includes(At[1]))return O.SEARCH_TYPES.EQUALS;throw new Error(Sl.UNKNOWN_SEARCH_TYPE)}else switch(s){case Zt.VALUE_SEARCH_COMPARATORS.BETWEEN:return O.SEARCH_TYPES.BETWEEN;case Zt.VALUE_SEARCH_COMPARATORS.GREATER:return O.SEARCH_TYPES.GREATER_THAN;case Zt.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return O.SEARCH_TYPES.GREATER_THAN_EQUAL;case Zt.VALUE_SEARCH_COMPARATORS.LESS:return O.SEARCH_TYPES.LESS_THAN;case Zt.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return O.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Sl.UNKNOWN_SEARCH_TYPE)}}a(Rl,"createSearchTypeFromSearchObject");ml.exports={executeSearch:Tl,createSearchTypeFromSearchObject:Rl,prepSearch:OC,searchByType:fl,filterByType:gC}});var Nl=d((XH,Al)=>{"use strict";var JH=mt(),CC=gs(),bC=p(),LC=f(),wC=ti();Al.exports=yC;async function yC(e,t){if(!bC.isEmpty(t)&&LC.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=CC(e,"value");if(s)throw s;let n=!0;try{return await wC.prepSearch(e,t,n)}catch(i){throw i}}a(yC,"lmdbGetDataByValue")});var Lr=d((zH,Ol)=>{"use strict";var ZH=mt(),UC=gs(),DC=p(),MC=f(),PC=ti();Ol.exports=BC;async function BC(e,t){if(!DC.isEmpty(t)&&MC.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=UC(e,"value");if(s)throw s;let n=!1;try{return await PC.prepSearch(e,t,n)}catch(i){throw i}}a(BC,"lmdbSearchByValue")});var pl=d((ev,gl)=>{"use strict";var jH=Se(),ri=class{constructor(t,r,s,n,i=void 0,o=void 0,_="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=_}};a(ri,"SearchByConditionsObject");var si=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(si,"SearchCondition");var ni=class{constructor(t,r){this.attribute=t,this.desc=r}};a(ni,"SortAttribute");gl.exports={SearchByConditionsObject:ri,SearchCondition:si,SortAttribute:ni}});var yl=d((rv,wl)=>{"use strict";var tv=pl().SearchByConditionsObject,HC=mt(),vC=gs(),Ao=Cr(),ii=Se(),Ll=ti(),GC=To(),Il=require("lodash"),{getBaseSchemaPath:qC}=V(),FC=require("path"),xC=G(),{handleHDBError:Cl,hdb_errors:VC}=K(),{HTTP_STATUS_CODES:kC}=VC,YC=1e8,$C={lazy:!0};wl.exports=KC;async function KC(e){try{let t=vC(e,"conditions");if(t)throw Cl(t,t.message,kC.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=FC.join(qC(),e.schema.toString()),s=await xC.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=Il.sortBy(e.conditions,o=>{if(o.estimated_count===void 0){let _=o.search_type;_===ii.SEARCH_TYPES.EQUALS?o.estimated_count=Ao.count(s,o.search_attribute,o.search_value):_===ii.SEARCH_TYPES.CONTAINS||_===ii.SEARCH_TYPES.ENDS_WITH?o.estimated_count=1/0:o.estimated_count=YC}return o.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[o]=await bl(s,e,i[0],n.hash_attribute),_=s.dbis[n.hash_attribute],c=i.slice(1).map(Ll.filterByType),u=c.length,E=[],l=Ao.setGetWholeRowAttributes(s,e.get_attributes),S=e.offset>-1?e.offset:0,h=e.limit>-1?e.limit:1/0;e:for(let A of o){let N=_.get(A,$C);for(let I=0;I<u;I++)if(!c[I](N))continue e;if(S>0){S--;continue}if(h<=0)break;h--,E.push(GC.parseRow(N,l))}return E}else{let o=[],_=[];for(let c of i){let[u]=await bl(s,e,c,n.hash_attribute);_.push(u)}if(o=Il.union(..._),e.limit>0||e.offset>0){let c=Number.isInteger(e.limit)?e.limit:o.length;o=o.splice(e.offset,c)}return Ao.batchSearchByHash(s,n.hash_attribute,e.get_attributes,o)}}catch(t){throw Cl(t)}}a(KC,"lmdbSearchByConditions");async function bl(e,t,r,s){let n=new HC(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===ii.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Ll.searchByType(e,n,i,s)}a(bl,"executeConditionSearch")});var Is=d((sv,Ul)=>{"use strict";var WC=f().OPERATIONS_ENUM,ai=class{constructor(t,r,s,n=void 0){this.operation=WC.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(ai,"DeleteObject");Ul.exports=ai});var No=d((nv,Dl)=>{"use strict";var oi=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(oi,"DropAttributeObject");Dl.exports=oi});var go=d((av,Ml)=>{"use strict";var QC=mt(),JC=Is(),iv=No(),at=f(),XC=p(),Oo=G(),ZC=Qt(),zC=Lr(),jC=ms(),{getBaseSchemaPath:eb}=V(),tb=require("path");Ml.exports=rb;async function rb(e,t=!0){let r;e.schema===at.SYSTEM_SCHEMA_NAME?r=ZC[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await nb(e),n=tb.join(eb(),e.schema.toString()),i=await Oo.openEnvironment(n,e.table);return t===!0&&await sb(e,i,r.hash_attribute),Oo.dropDBI(i,e.attribute),s}a(rb,"lmdbDropAttribute");async function sb(e,t,r){let s=Oo.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:_,version:c}of s.getRange({start:!1,versions:!0})){let u={};for(let E in _)E!==i&&(u[E]=_[E]);n=t.dbis[r].put(o,u,c)}await n}a(sb,"removeAttributeFromAllObjects");async function nb(e){let t=new QC(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,at.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[at.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,at.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=(await zC(t)).filter(o=>o[at.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(XC.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[at.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new JC(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return jC(i)}a(nb,"dropAttributeFromSystem")});var vl=d((ov,Hl)=>{"use strict";var ib=go(),ab=No(),Pl=p(),Bl=g(),ob=Oe().LMDB_ERRORS_ENUM;Hl.exports=_b;async function _b(e){if(Pl.isEmpty(global.hdb_schema[e.schema])||Pl.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);let t=global.hdb_schema[e.schema][e.table],r;try{for(let s=0;s<t.attributes.length;s++){r=t.attributes[s].attribute;let n=new ab(e.schema,e.table,r);try{await ib(n,!1)}catch(i){i.message!==ob.DBI_DOES_NOT_EXIST&&Bl.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw Bl.error(`Error dropping attribute ${r}`),s}}a(_b,"lmdbDropAllAttributes")});var po=d((cv,Kl)=>{"use strict";var Vl=mt(),kl=Is(),Yl=Lr(),$l=ms(),_v=vl(),Ce=f(),Gl=p(),ql=G(),{getBaseSchemaPath:cb,getTransactionAuditStorePath:ub}=V(),Fl=require("path"),xl=g();Kl.exports=Eb;async function Eb(e){try{if(Gl.isEmpty(global.hdb_schema[e.schema])||Gl.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await lb(e),await db(e);let t=Fl.join(cb(),e.schema.toString());try{await ql.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")xl.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Fl.join(ub(),e.schema.toString());await ql.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")xl.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(Eb,"lmdbDropTable");async function lb(e){let t=new Vl(Ce.SYSTEM_SCHEMA_NAME,Ce.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ce.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ce.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=await Yl(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 kl(Ce.SYSTEM_SCHEMA_NAME,Ce.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await $l(n)}a(lb,"deleteAttributesFromSystem");async function db(e){let t=new Vl(Ce.SYSTEM_SCHEMA_NAME,Ce.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ce.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ce.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ce.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ce.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=await Yl(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 kl(Ce.SYSTEM_SCHEMA_NAME,Ce.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await $l(n)}catch(i){throw i}}a(db,"dropTableFromSystem")});var Ql=d((Ev,Wl)=>{"use strict";var hb=require("fs-extra"),Sb=mt(),Tb=ps(),fb=Is(),Rb=po(),mb=ms(),Ab=mo(),Nb=Lr(),Nt=f(),uv=p(),Ob=require("path"),{getBaseSchemaPath:gb}=V(),{handleHDBError:pb,hdb_errors:Ib}=K(),{HDB_ERROR_MSGS:Cb,HTTP_STATUS_CODES:bb}=Ib;Wl.exports=Lb;async function Lb(e){let t;try{t=await wb(e.schema);let r=new Sb(Nt.SYSTEM_SCHEMA_NAME,Nt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Nt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Nt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=await Nb(r);for(let o=0;o<s.length;o++){let _={schema:t,table:s[o].name};try{await Rb(_)}catch(c){if(c.message!=="invalid environment")throw c}}let n=new fb(Nt.SYSTEM_SCHEMA_NAME,Nt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await mb(n);let i=Ob.join(gb(),t.toString());await hb.remove(i)}catch(r){throw r}}a(Lb,"lmdbDropSchema");async function wb(e){let t=new Tb(Nt.SYSTEM_SCHEMA_NAME,Nt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Nt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=await Ab(t)}catch(n){throw n}for(let n in r)r[n].name===e&&(s=e);if(!s)throw pb(new Error,Cb.SCHEMA_NOT_FOUND(e),bb.NOT_FOUND,void 0,void 0,!0);return s}a(wb,"validateDropSchema")});var Io=d((lv,Jl)=>{"use strict";var _i=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(_i,"CreateTableObject");Jl.exports=_i});var Zl=d((hv,Xl)=>{"use strict";var yb=require("path"),Ub=require("fs-extra"),ci=G(),{getTransactionAuditStorePath:Db}=V(),Co=Se(),dv=Io();Xl.exports=Mb;async function Mb(e){let t;try{let r=yb.join(Db(),e.schema.toString());await Ub.mkdirp(r),t=await ci.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{ci.createDBI(t,Co.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),ci.createDBI(t,Co.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),ci.createDBI(t,Co.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(Mb,"createTransactionsAuditEnvironment")});var td=d((Sv,ed)=>{"use strict";var bo=f(),zl=G(),Pb=mr(),Bb=require("path"),{getSystemSchemaPath:Hb,getBaseSchemaPath:vb}=V(),Gb=Qt(),qb=Hn(),Lo=Bn(),Fb=g(),xb=Zl(),yo=Gb.hdb_table,jl=[];for(let e=0;e<yo.attributes.length;e++)jl.push(yo.attributes[e].attribute);ed.exports=Vb;async function Vb(e,t){let r=Bb.join(vb(),t.schema.toString()),s=new Lo(t.schema,t.table,bo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Lo(t.schema,t.table,bo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Lo(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await zl.createEnvironment(r,t.table),e!==void 0){let o=await zl.openEnvironment(Hb(),bo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Pb.insertRecords(o,yo.hash_attribute,jl,[e]),await wo(s),await wo(n),await wo(i)}await xb(t)}catch(o){throw o}}a(Vb,"lmdbCreateTable");async function wo(e){try{await qb(e)}catch(t){Fb.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(wo,"createAttribute")});var sd=d((Tv,rd)=>{"use strict";var kb=vn(),Yb=xn(),$b=Yn(),wr=f(),Kb=mr().updateRecords,Wb=G(),Qb=require("path"),{getBaseSchemaPath:Jb}=V(),Xb=Rs(),Zb=g();rd.exports=zb;async function zb(e){try{let{schema_table:t,attributes:r}=kb(e);Yb(e,r,t.hash_attribute),e.schema!==wr.SYSTEM_SCHEMA_NAME&&(r.includes(wr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(wr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(wr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(wr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await $b(e.hdb_auth_header,t,r),n=Qb.join(Jb(),e.schema.toString()),i=await Wb.openEnvironment(n,e.table),o=await Kb(i,t.hash_attribute,r,e.records,e[wr.CLUSTERING_FLAG]!==!0);try{await Xb(e,o)}catch(_){Zb.error(`unable to write transaction due to ${_.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(zb,"lmdbUpdateRecords")});var id=d((fv,nd)=>{"use strict";var jb=f().OPERATIONS_ENUM,ui=class{constructor(t,r,s,n=void 0){this.operation=jb.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(ui,"UpsertObject");nd.exports=ui});var od=d((mv,ad)=>{"use strict";var Rv=id(),eL=vn(),tL=xn(),rL=Yn(),yr=f(),sL=mr().upsertRecords,nL=G(),iL=require("path"),{getBaseSchemaPath:aL}=V(),oL=Rs(),_L=g(),{handleHDBError:cL,hdb_errors:uL}=K();ad.exports=EL;async function EL(e){let t;try{t=eL(e)}catch(c){throw cL(c,c.message,uL.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;tL(e,s,r.hash_attribute),e.schema!==yr.SYSTEM_SCHEMA_NAME&&(s.includes(yr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(yr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(yr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(yr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await rL(e.hdb_auth_header,r,s),i=iL.join(aL(),e.schema.toString()),o=await nL.openEnvironment(i,e.table),_=await sL(o,r.hash_attribute,s,e.records,e[yr.CLUSTERING_FLAG]!==!0);try{await oL(e,_)}catch(c){_L.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:_.written_hashes,schema_table:r,new_attributes:n,txn_time:_.txn_time}}a(EL,"lmdbUpsertRecords")});var dd=d((Av,ld)=>{"use strict";var lL=mt(),_d=p(),cd=g(),dL=Lr(),ud=f(),hL=ho().deleteRecords,SL=G(),TL=require("path"),{getBaseSchemaPath:fL}=V(),{promisify:RL}=require("util"),mL=RL(setTimeout),Ed=1e4,AL=10;ld.exports=NL;async function NL(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(_d.isEmptyOrZeroLength(t))throw new Error(`Could not retrieve hash attribute for schema: ${e.schema} table: ${e.table}`);let r=Date.parse(e.date),s;try{let n=new lL(e.schema,e.table,ud.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await dL(n,ud.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw cd.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return _d.isEmptyOrZeroLength(s)?(cd.trace("No records found to delete"),{message:"No records found to delete"}):await OL(e,s,t)}a(NL,"lmdbDeleteRecordsBefore");async function OL(e,t,r){let s=TL.join(fL(),e.schema.toString()),n=await SL.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,_=t.length;o<_;o+=Ed){let c=t.slice(o,o+Ed),u=[];for(let E=0,l=c.length;E<l;E++)u.push(c[E][r]);try{let E=await hL(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(E.deleted),i.skipped_hashes=i.skipped_hashes.concat(E.skipped)}catch(E){throw E}await mL(AL)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(OL,"chunkDeletes")});var Sd=d((Nv,hd)=>{"use strict";var Ei=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(Ei,"DeleteBeforeObject");hd.exports=Ei});var fd=d((Ov,Td)=>{"use strict";var li=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(li,"DeleteAuditLogsBeforeResults");Td.exports=li});var Ad=d((pv,md)=>{"use strict";var Uo=G(),{getTransactionAuditStorePath:gL}=V(),gv=Sd(),pL=require("path"),Cs=Se(),IL=p(),Rd=fd(),CL=require("util").promisify,bL=CL(setTimeout),LL=1e4,wL=100;md.exports=yL;async function yL(e){let t=pL.join(gL(),e.schema),r=await Uo.openEnvironment(t,e.table,!0),s=Uo.listDBIs(r);Uo.initializeDBIs(r,Cs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new Rd;do n=await UL(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 bL(wL);while(n.transactions_deleted>0);return i}a(yL,"deleteAuditLogsBefore");async function UL(e,t){let r=new Rd;try{let s=e.dbis[Cs.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 _=o[Cs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];IL.isEmpty(_)||(n=e.dbis[Cs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(_,i));for(let c=0;c<o.hash_values.length;c++)n=e.dbis[Cs.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[c],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>LL)break}return await n,r}catch(s){throw s}}a(UL,"deleteTransactions")});var bd=d((Iv,Cd)=>{"use strict";var Do=G(),Ur=Se(),Nd=Kt(),Mo=f(),Od=p(),{getTransactionAuditStorePath:DL}=V(),ML=require("path"),PL=Cr(),di=Or(),BL=g();Cd.exports=HL;async function HL(e){let t=ML.join(DL(),e.schema),r=await Do.openEnvironment(t,e.table,!0),s=Do.listDBIs(r);Do.initializeDBIs(r,Ur.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Mo.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return gd(r,e.search_values);case Mo.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,GL(r,e.search_values,n);case Mo.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return vL(r,e.search_values);default:return gd(r)}}a(HL,"readAuditLog");function gd(e,t=[0,Nd.getMicroTime()]){Od.isEmpty(t[0])&&(t[0]=0),Od.isEmpty(t[1])&&(t[1]=Nd.getMicroTime());let r=[];try{let s=e.dbis[Ur.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let i of s.getKeys({start:t[1]}))if(i!==t[1]){n=i;break}for(let{value:i}of s.getRange({start:t[0],end:n})){let o=Object.assign(new di,i);r.push(o)}return r}catch(s){throw s}}a(gd,"searchTransactionsByTimestamp");function vL(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[Ur.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,Id(e,i))}return Object.fromEntries(r)}a(vL,"searchTransactionsByUsername");function GL(e,t,r){let s=new Map;for(let _=0,c=t.length;_<c;_++){let u=t[_],E=PL.equals(e,Ur.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ur.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let l=0,S=E[0].length;l<S;l++){let h=E[0][l],A=Number(h);s.has(A)?s.get(A).push(u.toString()):s.set(A,[u.toString()])}}let n=Array.from(s.keys()),i=Id(e,n),o=new Map;for(let _=0;_<i.length;_++){let c=i[_],u=c.timestamp,E=s.get(u);pd(c,"records",r,E,o),pd(c,"original_records",r,E,o)}return Object.fromEntries(o)}a(GL,"searchTransactionsByHashValues");function pd(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let _=e[t][o],c=_[r].toString();if(s.indexOf(c)>=0)if(n.has(c)){let u=n.get(c),E=u[u.length-1];if(E.timestamp===i)E[t]=[_];else{let l=new di(e.operation,e.user_name,i,void 0);l[t]=[_],u.push(l)}}else{let u=new di(e.operation,e.user_name,i,void 0);u[t]=[_],n.set(c,[u])}}}a(pd,"loopRecords");function Id(e,t){let r=[];try{let s=e.dbis[Ur.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 di,i);r.push(o)}}catch(i){BL.warn(i)}return r}catch(s){throw s}}a(Id,"batchSearchTransactions")});var wd=d((Cv,Ld)=>{"use strict";var qL=require("path"),{getBaseSchemaPath:FL}=V(),xL=G();Ld.exports={writeTransaction:VL};async function VL(e,t,r){let s=qL.join(FL(),e);return(await xL.openEnvironment(s,t)).transaction(r)}a(VL,"writeTransaction")});var Ud=d((bv,yd)=>{"use strict";var kL=require("path"),{getBaseSchemaPath:YL}=V(),$L=G();yd.exports={flush:KL};async function KL(e,t){let r=kL.join(YL(),e.toString());return(await $L.openEnvironment(r,t.toString())).flushed}a(KL,"flush")});var Md=d((Lv,Dd)=>{"use strict";var ee=g(),{handleHDBError:WL}=K(),QL=Va(),JL=Hn(),XL=uo(),ZL=YE(),zL=ms(),jL=mo(),ew=dl(),tw=Nl(),rw=Lr(),sw=yl(),nw=Ql(),iw=td(),aw=sd(),ow=od(),_w=dd(),cw=Ad(),uw=po(),Ew=go(),lw=bd(),dw=wd(),hw=Ud(),hi=class extends QL{async searchByConditions(t){try{return sw(t)}catch(r){throw ee.error(r),r}}async getDataByHash(t){try{return await jL(t)}catch(r){throw ee.error(r),r}}async searchByHash(t){try{return await ew(t)}catch(r){throw ee.error(r),r}}async getDataByValue(t,r){try{return await tw(t,r)}catch(s){throw ee.error(s),s}}async searchByValue(t){try{return await rw(t)}catch(r){throw ee.error(r),r}}async createSchema(t){try{return await ZL(t)}catch(r){throw ee.error(r),r}}async dropSchema(t){try{return await nw(t)}catch(r){throw ee.error(r),r}}async createTable(t,r){try{return await iw(t,r)}catch(s){throw ee.error(s),s}}async dropTable(t){try{return await uw(t)}catch(r){throw ee.error(r),r}}async createAttribute(t){try{return await JL(t)}catch(r){throw ee.error(r),r}}async createRecords(t){try{return await XL(t)}catch(r){throw ee.error(r),r}}async updateRecords(t){try{return await aw(t)}catch(r){throw ee.error(r),r}}async upsertRecords(t){try{return await ow(t)}catch(r){throw WL(r,null,null,ee.ERR,r)}}async deleteRecords(t){try{return await zL(t)}catch(r){throw ee.error(r),r}}async deleteRecordsBefore(t){try{return await _w(t)}catch(r){throw ee.error(r),r}}async dropAttribute(t){try{return await Ew(t)}catch(r){throw ee.error(r),r}}async deleteAuditLogsBefore(t){try{return await cw(t)}catch(r){throw ee.error(r),r}}async readAuditLog(t){try{return await lw(t)}catch(r){throw ee.error(r),r}}writeTransaction(t,r,s){return dw.writeTransaction(t,r,s)}flush(t,r){return hw.flush(t,r)}};a(hi,"LMDBBridge");Dd.exports=hi});var zt=d((wv,Bd)=>{"use strict";var Sw=Md(),Tw=Va(),fw=Z();fw.initSync();var Pd;function Rw(){return Pd instanceof Tw?Pd:new Sw}a(Rw,"getBridge");Bd.exports=Rw()});var vd=d((yv,Hd)=>{"use strict";var mw=zt();Hd.exports={writeTransaction:Aw};function Aw(e,t,r){return mw.writeTransaction(e,t,r)}a(Aw,"writeTransaction")});var Xd=d((Dv,Jd)=>{"use strict";var Po=require("recursive-iterator"),Nw=require("alasql"),Bo=require("clone"),Gd=p(),{handleHDBError:qd,hdb_errors:Ow}=K(),{HDB_ERROR_MSGS:Fd,HTTP_STATUS_CODES:xd}=Ow,gw=["DISTINCT_ARRAY"],Vd=Symbol("validateTables"),Ho=Symbol("validateTable"),Uv=Symbol("getAllColumns"),kd=Symbol("validateAllColumns"),Si=Symbol("findColumn"),Yd=Symbol("validateOrderBy"),bs=Symbol("validateSegment"),vo=Symbol("validateColumn"),$d=Symbol("setColumnsForTable"),Kd=Symbol("checkColumnsForAsterisk"),Wd=Symbol("validateGroupBy"),Qd=Symbol("hasColumns"),Ti=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Vd](),this[Kd](),this[kd]()}[Vd](){if(this[Qd]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Ho](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Ho](t.table)})}}[Qd](){let t=!1,r=new Po(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Ho](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw qd(new Error,Fd.SCHEMA_NOT_FOUND(t.databaseid),xd.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw qd(new Error,Fd.TABLE_NOT_FOUND(t.databaseid,t.tableid),xd.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=Bo(s);n.table=Bo(t),this.attributes.push(n)})}[Si](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)}[Kd](){let t=new Po(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[$d](r.tableid)}[$d](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new Nw.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[kd](){this[bs](this.statement.columns,!1),this[bs](this.statement.joins,!1),this[bs](this.statement.where,!1),this[Wd](this.statement.group,!1),this[bs](this.statement.order,!0)}[bs](t,r){if(!t)return;let s=new Po(t),n=[];for(let{node:i,path:o}of s)!Gd.isEmpty(i)&&!Gd.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Yd](i):n.push(this[vo](i)));return n}[Wd](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&gw.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Bo(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Si](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[Si](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,_)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(_,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`}[Yd](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[vo](t)}[vo](t){let r=this[Si](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]}};a(Ti,"SelectValidator");Jd.exports=Ti});var eh=d((Mv,jd)=>{"use strict";var Zd=require("lodash"),Ls=require("mathjs"),pw=require("jsonata"),zd=p();jd.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Zd.uniqWith(e,Zd.isEqual):e,searchJSON:Iw,mad:ws.bind(null,Ls.mad),mean:ws.bind(null,Ls.mean),mode:ws.bind(null,Ls.mode),prod:ws.bind(null,Ls.prod),median:ws.bind(null,Ls.median)};function ws(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(ws,"aggregateFunction");function Iw(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(zd.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),zd.isEmpty(this.__ala__.res[r])){let s=pw(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(Iw,"searchJSON")});var rh=d((Pv,th)=>{"use strict";var z=require("moment"),Go="YYYY-MM-DDTHH:mm:ss.SSSZZ";z.suppressDeprecationWarnings=!0;th.exports={current_date:()=>z().utc().format("YYYY-MM-DD"),current_time:()=>z().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return z(e).utc().format("YYYY");case"month":return z(e).utc().format("MM");case"day":return z(e).utc().format("DD");case"hour":return z(e).utc().format("HH");case"minute":return z(e).utc().format("mm");case"second":return z(e).utc().format("ss");case"millisecond":return z(e).utc().format("SSS");default:break}},date:e=>z(e).utc().format(Go),date_format:(e,t)=>z(e).utc().format(t),date_add:(e,t,r)=>z(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>z(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=z(e).utc(),n=z(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>z().utc().valueOf(),get_server_time:()=>z().format(Go),offset_utc:(e,t)=>z(e).utc().utcOffset(t).format(Go)}});var ah=d((Bv,ih)=>{"use strict";var Cw=require("@turf/area"),bw=require("@turf/length"),Lw=require("@turf/circle"),ww=require("@turf/difference"),yw=require("@turf/distance"),Uw=require("@turf/boolean-contains"),Dw=require("@turf/boolean-equal"),Mw=require("@turf/boolean-disjoint"),Pw=require("@turf/helpers"),sh=f(),D=p();ih.exports={geoArea:Bw,geoLength:Hw,geoCircle:vw,geoDifference:Gw,geoDistance:nh,geoNear:qw,geoContains:Fw,geoEqual:xw,geoCrosses:Vw,geoConvert:kw};var qo="geo1 is required",Fo="geo2 is required";function Bw(e){if(D.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=D.autoCast(e)),Cw.default(e)}a(Bw,"geoArea");function Hw(e,t){if(D.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=D.autoCast(e)),bw.default(e,{units:t||"kilometers"})}a(Hw,"geoLength");function vw(e,t,r){if(D.isEmpty(e))throw new Error("point is required");if(D.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=D.autoCast(e)),Lw.default(e,t,{units:r||"kilometers"})}a(vw,"geoCircle");function Gw(e,t){if(D.isEmpty(e))throw new Error("poly1 is required");if(D.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),ww(e,t)}a(Gw,"geoDifference");function nh(e,t,r){if(D.isEmpty(e))throw new Error("point1 is required");if(D.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),yw.default(e,t,{units:r||"kilometers"})}a(nh,"geoDistance");function qw(e,t,r,s){if(D.isEmpty(e))throw new Error("point1 is required");if(D.isEmpty(t))throw new Error("point2 is required");if(D.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),isNaN(r))throw new Error("distance must be a number");return nh(e,t,s)<=r}a(qw,"geoNear");function Fw(e,t){if(D.isEmpty(e))throw new Error(qo);if(D.isEmpty(e))throw new Error(Fo);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),Uw.default(e,t)}a(Fw,"geoContains");function xw(e,t){if(D.isEmpty(e))throw new Error(qo);if(D.isEmpty(e))throw new Error(Fo);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),Dw.default(e,t)}a(xw,"geoEqual");function Vw(e,t){if(D.isEmpty(e))throw new Error(qo);if(D.isEmpty(e))throw new Error(Fo);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),!Mw.default(e,t)}a(Vw,"geoCrosses");function kw(e,t,r){if(D.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(D.isEmpty(t))throw new Error("geo_type is required");if(D.isEmpty(sh.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(sh.GEO_CONVERSION_ENUM).join(",")}`);return Pw[t](e,r)}a(kw,"geoConvert")});var _h=d((Hv,oh)=>{var jt=eh(),Be=rh(),ot=ah();oh.exports=e=>{e.aggr.mad=e.aggr.MAD=jt.mad,e.aggr.mean=e.aggr.MEAN=jt.mean,e.aggr.mode=e.aggr.MODE=jt.mode,e.aggr.prod=e.aggr.PROD=jt.prod,e.aggr.median=e.aggr.MEDIAN=jt.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=jt.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=jt.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Be.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Be.current_time,e.fn.extract=e.fn.EXTRACT=Be.extract,e.fn.date=e.fn.DATE=Be.date,e.fn.date_format=e.fn.DATE_FORMAT=Be.date_format,e.fn.date_add=e.fn.DATE_ADD=Be.date_add,e.fn.date_sub=e.fn.DATE_SUB=Be.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Be.date_diff,e.fn.now=e.fn.NOW=Be.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Be.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Be.get_server_time,e.fn.getdate=e.fn.GETDATE=Be.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Be.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=ot.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=ot.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=ot.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=ot.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=ot.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=ot.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=ot.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=ot.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=ot.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=ot.geoNear}});var Eh=d((vv,uh)=>{"use strict";var ys=require("lodash"),_e=require("alasql");_e.options.cache=!1;var Yw=_h(),ch=require("clone"),fi=require("recursive-iterator"),L=g(),y=p(),Dr=zt(),$w=f(),{hdb_errors:Kw}=K(),Ww="IS NULL",Us="There was a problem performing this search. Please check the logs and try again.";Yw(_e);var Ri=class{constructor(t,r){if(y.isEmpty(t))throw L.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(),y.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!y.isEmptyOrZeroLength(s))return L.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw L.error("Error thrown from checkEmptySQL in SQLSearch class method search."),L.error(s),new Error(Us)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw L.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),L.error(s),new Error(Us)}if(Object.keys(this.data).length===0)return L.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw L.error("Error thrown from processJoins in SQLSearch class method search."),L.error(s),new Error(Us)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw L.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),L.error(s),new Error(Us)}try{return t=await this._finalSQL(),t}catch(s){throw L.error("Error thrown from finalSQL in SQLSearch class method search."),L.error(s),new Error(Us)}}_getColumns(){let t=new fi(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(ch(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=ys.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=global.hdb_schema[r.databaseid][r.tableid].hash_attribute,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(y.isEmpty(this.statement.where)){L.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new fi(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!y.isEmpty(r)&&r.right)if(y.isNotEmptyAndHasValue(r.right.value)){let s=y.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new _e.yy.LogicValue({value:s}):r.right instanceof _e.yy.StringValue&&!y.isEmpty(s)&&y.autoCasterIsNumberCheck(s.toString())&&(r.right=new _e.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=y.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new _e.yy.LogicValue({value:i}):s instanceof _e.yy.StringValue&&y.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new _e.yy.NumValue({value:i}))});if(t){L.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new fi(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(!y.isEmpty($w.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(y.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(y.isEmptyOrZeroLength(r.left.columnid)||y.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(y.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let _=!1;switch(r.op){case"=":!y.isEmpty(r.right.value)||!y.isEmpty(r.left.value)?s.add(y.isEmpty(r.right.value)?r.left.value:r.right.value):_=!0;break;case"IN":let c=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<c.length;u++)if(c[u].value)s.add(c[u].value);else{_=!0;break}break;default:_=!0;break}this.exact_search_values[o].ignore=_,_?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(y.isEmptyOrZeroLength(this.all_table_attributes)&&y.isEmptyOrZeroLength(this.statement.from)&&y.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&&ys.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(y.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);y.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(y.isEmptyOrZeroLength(this.all_table_attributes)&&!y.isEmptyOrZeroLength(this.columns.columns))return t;if(y.isEmptyOrZeroLength(this.all_table_attributes)&&y.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await _e.promise(r)}catch(r){throw L.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),L.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(ch(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(y.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(Ww)>-1&&this.tables.forEach(n=>{let i={columnid:global.hdb_schema[n.databaseid][n.tableid].hash_attribute,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=ys.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}`,_=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,_)),i.attribute!==_&&(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,_={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},c=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(c=!0),!y.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!y.isEmptyOrZeroLength(this.exact_search_values[u].values))if(c)try{_.hash_values=Array.from(this.exact_search_values[u].values);let E=await Dr.getDataByHash(_);for(let l of _.hash_values)l in E&&!this.data[i].__merged_data[l]&&(this.data[i].__merged_data[l]=[...s[i]],this._setMergedHashAttribute(i,l))}catch(E){L.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),L.error(E)}else try{_.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async E=>{let l=Object.assign({},_);l.search_value=E;let S=await Dr.getDataByValue(l);for(let h in S)this.data[i].__merged_data[h]?this._updateMergedAttribute(i,h,n.attribute,S[h][n.attribute]):(this.data[i].__merged_data[h]=[...s[i]],this._updateMergedAttribute(i,h,n.attribute,S[h][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(h)))}))}catch(E){L.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),L.error(E)}else if(!y.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!y.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let E=this.comparator_search_values[u].comparators;for(let l=0,S=E.length;l<S;l++){let h=E[l];_.search_attribute=h.attribute,_.search_value=h.search_value;let A=await Dr.getDataByValue(_,h.operation);if(c)for(let N in A)this.data[i].__merged_data[N]||(this.data[i].__merged_data[N]=[...s[i]],this._setMergedHashAttribute(i,y.autoCast(N)));else for(let N in A)this.data[i].__merged_data[N]?this._updateMergedAttribute(i,N,n.attribute,A[N][n.attribute]):(this.data[i].__merged_data[N]=[...s[i]],this._updateMergedAttribute(i,N,n.attribute,A[N][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(N)))}}catch(E){L.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),L.error(E)}else try{_.search_attribute=n.attribute,_.search_value="*";let E=await Dr.getDataByValue(_);if(c)for(let l in E)this.data[i].__merged_data[l]||(this.data[i].__merged_data[l]=[...s[i]],this._setMergedHashAttribute(i,y.autoCast(l)));else for(let l in E)this.data[i].__merged_data[l]?this._updateMergedAttribute(i,l,n.attribute,E[l][n.attribute]):(this.data[i].__merged_data[l]=[...s[i]],this._updateMergedAttribute(i,l,n.attribute,E[l][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(l)))}catch(E){L.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),L.error(E)}}}_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 _e.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 _e.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new _e.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 _e.yy.FuncValue:new _e.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(h=>{h.joinmode&&h.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(h.table);let A=h.joinmode+" JOIN ? AS "+(h.as?h.as:h.table.tableid);h.on&&(A+=" ON "+h.on.toString()),i.push(A),t.push(Object.values(this.data[`${h.table.databaseid_orig}_${h.table.as?h.table.as_orig:h.table.tableid_orig}`].__merged_data))});let o=[],_={};n.forEach(h=>{let A=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__hash_name,N=h.as?h.as_orig:h.tableid_orig;o.push({key:`'${N}.${A}'`,schema:h.databaseid_orig,table:h.as?h.as_orig:h.tableid_orig,keys:new Set}),r.push(`${h.as?h.as:h.tableid}.\`${A}\` AS "${N}.${A}"`),_[h.as?h.as_orig:h.tableid_orig]=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__merged_attributes});let c=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(h=>{h.is_func?r.push(h.initial_select_column.toString()):h.initial_select_column.tableid?r.push(`${h.initial_select_column.tableid}.${h.initial_select_column.columnid} AS ${h.expression.columnid}`):r.push(`${h.initial_select_column.columnid} AS ${h.expression.columnid}`)}));let E="",l="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(E=this.statement.limit?"LIMIT "+this.statement.limit:"",l=this.statement.offset?"OFFSET "+this.statement.offset:"");let S=[];try{let h=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${c} ${u} ${E} ${l}`,A=this._convertColumnsToIndexes(h,n);S=await _e.promise(A,t),t=null}catch(h){throw L.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),L.error(h),new Error("There was a problem processing the data.")}if(S&&S.length>0){for(let h=0,A=S.length;h<A;h++){let N=S[h];o.forEach(I=>{N[I.key]!==null&&N[I.key]!==void 0&&I.keys.add(N[I.key])})}o.forEach(h=>{let A=Object.keys(this.data[`${h.schema}_${h.table}`].__merged_data),N=ys.difference(A,[...h.keys].map(I=>I.toString()));for(let I=0,X=N.length;I<X;I++){let v=N[I];delete this.data[`${h.schema}_${h.table}`].__merged_data[v]}})}return{existing_attributes:_,joined_length:S?S.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new fi(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let _=o.table.as?o.table.as:o.table.tableid;(!t[_]||t[_].indexOf(o.attribute)<0)&&s.push(o)}}s=ys.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){L.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),L.error(i)}}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 E in i)o.push(i[E][0]);this.data[s].__merged_attributes.push(...n.columns);let _={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},c=await Dr.getDataByHash(_),u=n.columns.length;for(let E=0,l=o.length;E<l;E++){let S=o[E],h=c[S];for(let A=0;A<u;A++){let N=n.columns[A],I=h[N]===void 0?null:h[N];this.data[s].__merged_data[S].push(I)}}}}catch(r){throw L.error("Error thrown from getDataByHash function in SQLSearch class method getData."),L.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 _=o.aggregatorid?o.expression:o,c=o.aggregatorid?o.as_orig:_.as_orig;return n.expression.tableid?_.columnid_orig===n.expression.columnid_orig&&_.tableid_orig===n.expression.tableid_orig:_.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===c}).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();L.trace(`Final SQL: ${n}`),s=await _e.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),L.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw L.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),L.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 L.error(Kw.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),L.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,_)=>{let c=n[i],u=new RegExp(`${c}.\`${o}\``,"g"),E=`${c}.[${_}]`;s=s.replace(u,E)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=new RegExp(`\`${o}\``,"g"),u=`[${_}]`;s=s.replace(c,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 Dr.getDataByValue(i);for(let _ in o)this.data[n].__merged_data[_]||(this.data[n].__merged_data[_]=Object.assign({},r[n])),this.data[n].__merged_data[_][t[s.attribute]]=o[_][s.attribute]}catch(o){L.error("There was an error when processing this SQL operation. Check your logs"),L.error(o)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(Ri,"SQLSearch");uh.exports=Ri});var Ds=d((Gv,dh)=>{"use strict";var Qw=Xd();dh.exports={searchByConditions:zw,searchByHash:jw,searchByValue:ey,search:ty};var xo=zt(),lh=require("util"),Jw=lh.callbackify(xo.searchByHash),Xw=lh.callbackify(xo.searchByValue),Zw=Eh();async function zw(e){return xo.searchByConditions(e)}a(zw,"searchByConditions");function jw(e,t){try{Jw(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(jw,"searchByHash");function ey(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),Xw(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(ey,"searchByValue");function ty(e,t){try{let r=new Qw(e);r.validate(),new Zw(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(ty,"search")});var Pr=d((qv,Ah)=>{"use strict";var Sh=Ds(),Bt=g(),Th=Dn(),ry=require("lodash"),sy=require("path"),ny=as(),Vo=p(),{promisify:fh}=require("util"),F=f(),{handleHDBError:mi,hdb_errors:iy}=K(),{HDB_ERROR_MSGS:Ai,HTTP_STATUS_CODES:Rh}=iy,ay=Z();ay.initSync();var hh=G(),oy=V(),Ms=fh(Sh.searchByValue),_y=fh(Sh.searchByHash),Mr="name",mh="hash_attribute",ko="schema",cy="schema_table",uy="attribute";Ah.exports={describeAll:Ey,describeTable:Ni,describeSchema:dy};async function Ey(e){try{let t=Vo.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:F.SYSTEM_SCHEMA_NAME,table:F.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:Mr,search_value:F.WILDCARD_SEARCH_VALUE,get_attributes:[Mr]},i=await Ms(n);if(Vo.isEmptyOrZeroLength(i))return{};let o={},_={};for(let S in i)o[i[S].name]=!0,!t&&!s&&(_[i[S].name]=r[i[S].name].describe);let c={schema:F.SYSTEM_SCHEMA_NAME,table:F.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:F.ID_ATTRIBUTE_STRING,search_value:F.WILDCARD_SEARCH_VALUE,get_attributes:[mh,F.ID_ATTRIBUTE_STRING,Mr,ko]},u=await Ms(c),E=[];for(let S of u)try{let h;if(t||s)h=await Ni({schema:S.schema,table:S.name});else if(r&&r[S.schema].describe&&r[S.schema].tables[S.name].describe){let A=r[S.schema].tables[S.name].attribute_permissions;h=await Ni({schema:S.schema,table:S.name},A)}h&&E.push(h)}catch(h){Bt.error(h)}let l={};for(let S in E)t||s?(l[E[S].schema]==null&&(l[E[S].schema]={}),l[E[S].schema][E[S].name]=E[S],o[E[S].schema]&&delete o[E[S].schema]):_[E[S].schema]&&(l[E[S].schema]==null&&(l[E[S].schema]={}),l[E[S].schema][E[S].name]=E[S],o[E[S].schema]&&delete o[E[S].schema]);for(let S in o)t||s?l[S]={}:_[S]&&(l[S]={});return l}catch(t){return Bt.error("Got an error in describeAll"),Bt.error(t),mi(new Error,Ai.DESCRIBE_ALL_ERR)}}a(Ey,"describeAll");async function Ni(e,t){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={},o=Th.describe_table(e);if(o)throw o;if(r===F.SYSTEM_SCHEMA_NAME)return global.hdb_schema[F.SYSTEM_SCHEMA_NAME][s];let _={schema:F.SYSTEM_SCHEMA_NAME,table:F.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:F.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Mr,search_value:s,hash_values:[],get_attributes:[F.WILDCARD_SEARCH_VALUE]},c=await Ms(_);if(!c||c.length===0)throw mi(new Error,Ai.TABLE_NOT_FOUND(e.schema,e.table),Rh.NOT_FOUND);for await(let u of c)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw mi(new Error,Ai.INVALID_TABLE_ERR(i));let E={schema:F.SYSTEM_SCHEMA_NAME,table:F.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:F.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:cy,search_value:r+"."+s,get_attributes:[uy]},l=await Ms(E);l=ry.uniqBy(l,S=>S.attribute),n&&n.length>0&&(l=ly(n)),i.attributes=l,i.clustering_stream_name=ny.createNatsTableStreamName(u.schema,u.name);try{let S=sy.join(oy.getBaseSchemaPath(),i.schema.toString()),h=await hh.openEnvironment(S,i.name),A=hh.statDBI(h,i.hash_attribute);i.record_count=A.entryCount}catch(S){Bt.warn(`unable to stat table dbi due to ${S}`)}}catch(E){Bt.error(`There was an error getting attributes for table '${u.name}'`),Bt.error(E)}return i}a(Ni,"descTable");function ly(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(ly,"getAttrsByPerms");async function dy(e){let t=Th.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(),n={schema:F.SYSTEM_SCHEMA_NAME,table:F.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:F.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:ko,search_value:s,hash_values:[],get_attributes:[mh,F.ID_ATTRIBUTE_STRING,Mr,ko]},i=await Ms(n);if(i&&i.length<1){let o={schema:F.SYSTEM_SCHEMA_NAME,table:F.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:F.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[Mr]},_=await _y(o);if(_&&_.length<1)throw mi(new Error,Ai.SCHEMA_NOT_FOUND(e.schema),Rh.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async _=>{try{let c;if(r&&r.tables[_.name]&&(c=r.tables[_.name]),Vo.isEmpty(c)||c.describe){let u=await Ni({schema:e.schema,table:_.name},c?c.attribute_permissions:null);u&&(o[u.name]=u)}}catch(c){Bt.error(`Error describing schema table '${e.schema}.${_}'`),Bt.error(c)}})),o}}a(dy,"describeSchema")});var Ps=d((Vv,Ih)=>{var Fv=require("async"),Br=Qt(),xv=g(),{callbackify:gh,promisify:hy}=require("util");Ih.exports={setSchemaDataToGlobal:Nh,getTableSchema:fy,getSystemSchema:my,setSchemaDataToGlobalAsync:hy(Nh)};var ph=Pr(),Sy=gh(ph.describeAll),Ty=gh(ph.describeTable);function Nh(e){Sy(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Br),global.hdb_schema=r,e(null,null)})}a(Nh,"setSchemaDataToGlobal");function Oh(e,t){return e==="system"?Br[t]:global.hdb_schema[e][t]}a(Oh,"returnSchema");function fy(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?Ry(e,t,s=>{if(s)return r(s);if(!global.hdb_schema[e])return r(`schema ${e} does not exist`);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return r(`table ${e}.${t} does not exist`);r(null,Oh(e,t))}):r(null,Oh(e,t))}a(fy,"getTableSchema");function Ry(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=Br:global.hdb_schema={system:Br},r();return}Ty(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:Br}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(Ry,"setTableDataToGlobal");function my(){return Br}a(my,"getSystemSchema")});var Bs=d((kv,Lh)=>{"use strict";var gi=ao(),xe=p(),Ay=require("util"),pi=zt(),Ny=Ps(),Yo=g(),{handleHDBError:Ht,hdb_errors:Oy}=K(),{HTTP_STATUS_CODES:er}=Oy,gy=Ay.promisify(Ny.getTableSchema),py="updated",Ch="inserted",bh="upserted";Lh.exports={insert:Cy,update:by,upsert:Ly,validation:Iy,flush:wy};async function Iy(e){if(xe.isEmpty(e))throw new Error("invalid update parameters defined.");if(xe.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(xe.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await gy(e.schema,e.table),r=gi(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(_=>{if(o&&xe.isEmptyOrZeroLength(_[s]))throw Yo.error("a valid hash attribute must be provided with update record:",_),new Error("a valid hash attribute must be provided with update record");if(!xe.isEmptyOrZeroLength(_[s])&&(_[s]==="null"||_[s]==="undefined"))throw Yo.error(`a valid hash value must be provided with ${e.operation} record:`,_),new Error(`"${_[s]}" is not a valid hash attribute value`);!xe.isEmpty(_[s])&&_[s]!==""&&n.has(xe.autoCast(_[s]))&&(_.skip=!0),n.add(xe.autoCast(_[s]));for(let c in _)i[c]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(Iy,"validation");async function Cy(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=gi(e);if(t)throw Ht(new Error,t.message,er.BAD_REQUEST);let r=xe.checkSchemaTableExist(e.schema,e.table);if(r)throw Ht(new Error,r,er.BAD_REQUEST);try{let s=await pi.createRecords(e);return Oi(Ch,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}a(Cy,"insertData");async function by(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=gi(e);if(t)throw Ht(new Error,t.message,er.BAD_REQUEST);let r=xe.checkSchemaTableExist(e.schema,e.table);if(r)throw Ht(new Error,r,er.BAD_REQUEST);try{let s=await pi.updateRecords(e);return xe.isEmpty(s.existing_rows)?Oi(py,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Oi(s.update_action,[],e,s.hashes,void 0,s.txn_time)}catch(s){throw s}}a(by,"updateData");async function Ly(e){if(e.operation!=="upsert")throw Ht(new Error,"invalid operation, must be upsert",er.INTERNAL_SERVER_ERROR);let t=gi(e);if(t)throw Ht(new Error,t.message,er.BAD_REQUEST);let r=xe.checkSchemaTableExist(e.schema,e.table);if(r)throw Ht(new Error,r,er.BAD_REQUEST);try{let s=await pi.upsertRecords(e);return Oi(bh,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw Ht(s,null,null,Yo.ERR,n)}}a(Ly,"upsertData");function Oi(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===Ch?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===bh?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Oi,"returnObject");function wy(e){return pi.flush(e.schema,e.table)}a(wy,"flush")});var Dh=d((Yv,Uh)=>{var yy=We(),$o=require("joi"),{hdb_schema_table:wh}=Nr(),yh={schema:wh,table:wh},Uy={date:$o.date().iso().required()},Dy={timestamp:$o.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Uh.exports=function(e,t){let r=t==="timestamp"?{...yh,...Dy}:{...yh,...Uy},s=$o.object(r);return yy.validateBySchema(e,s)}});var Hh=d(($v,Bh)=>{var My=We(),Mh=require("joi"),{hdb_schema_table:Ph}=Nr(),Py=Mh.object({schema:Ph,table:Ph,hash_values:Mh.array().required()});Bh.exports=function(e){return My.validateBySchema(e,Py)}});var Gh=d((Kv,vh)=>{"use strict";var Ii=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(Ii,"InsertObject");var Ci=class{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}};a(Ci,"NoSQLSeachObject");var bi=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(bi,"DeleteResponseObject");vh.exports={InsertObject:Ii,NoSQLSeachObject:Ci,DeleteResponseObject:bi}});var Qo=d((Wv,kh)=>{"use strict";var Fh=Dh(),By=Hh(),Li=p(),qh=require("moment"),xh=g(),{promisify:Hy,callbackify:vy}=require("util"),tr=f(),Gy=Ps(),Ko=Hy(Gy.getTableSchema),Wo=zt(),{DeleteResponseObject:qy}=Gh(),{handleHDBError:vt,hdb_errors:Fy}=K(),{HDB_ERROR_MSGS:wi,HTTP_STATUS_CODES:Gt}=Fy,xy="records successfully deleted",Vy=vy(Vh);kh.exports={delete:Vy,deleteRecord:Vh,deleteFilesBefore:ky,deleteAuditLogsBefore:Yy};async function ky(e){let t=Fh(e,"date");if(t)throw vt(t,t.message,Gt.BAD_REQUEST,void 0,void 0,!0);if(!qh(e.date,qh.ISO_8601).isValid())throw vt(new Error,wi.INVALID_DATE,Gt.BAD_REQUEST,tr.LOG_LEVELS.ERROR,wi.INVALID_DATE,!0);let s=Li.checkSchemaTableExist(e.schema,e.table);if(s)throw vt(new Error,s,Gt.NOT_FOUND,tr.LOG_LEVELS.ERROR,s,!0);try{let n=await Wo.deleteRecordsBefore(e);if(await Ko(e.schema,e.table),xh.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}a(ky,"deleteFilesBefore");async function Yy(e){let t=Fh(e,"timestamp");if(t)throw vt(t,t.message,Gt.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw vt(new Error,wi.INVALID_VALUE("Timestamp"),Gt.BAD_REQUEST,tr.LOG_LEVELS.ERROR,wi.INVALID_VALUE("Timestamp"),!0);let r=Li.checkSchemaTableExist(e.schema,e.table);if(r)throw vt(new Error,r,Gt.NOT_FOUND,tr.LOG_LEVELS.ERROR,r,!0);try{let s=await Wo.deleteAuditLogsBefore(e);return await Ko(e.schema,e.table),xh.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}a(Yy,"deleteAuditLogsBefore");async function Vh(e){let t=By(e);if(t)throw vt(t,t.message,Gt.BAD_REQUEST,void 0,void 0,!0);let r=Li.checkSchemaTableExist(e.schema,e.table);if(r)throw vt(new Error,r,Gt.NOT_FOUND,tr.LOG_LEVELS.ERROR,r,!0);try{await Ko(e.schema,e.table);let s=await Wo.deleteRecords(e);return Li.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${xy}`),s}catch(s){if(s.message===tr.SEARCH_NOT_FOUND_MESSAGE){let n=new qy;return n.message=tr.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(Vh,"deleteRecord")});var yi=d((Qv,Kh)=>{var $y=require("crypto"),Yh=9;function Ky(e){let t=Qy(Yh),r=$h(e+t);return t+r}a(Ky,"createHash");function Wy(e,t){let r=e.substr(0,Yh),s=r+$h(t+r);return e===s}a(Wy,"validateHash");function Qy(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(Qy,"generateSalt");function $h(e){return $y.createHash("md5").update(e).digest("hex")}a($h,"md5");Kh.exports={hash:Ky,validate:Wy}});var Qh=d((Jv,Wh)=>{var Jo=We(),Re={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 Jy(e){return Re.password.presence=!0,Re.username.presence=!0,Re.role.presence=!0,Re.active.presence=!0,Jo.validateObject(e,Re)}a(Jy,"addUserValidation");function Xy(e){return Re.password.presence=!1,Re.username.presence=!0,Re.role.presence=!1,Re.active.presence=!1,Jo.validateObject(e,Re)}a(Xy,"alterUserValidation");function Zy(e){return Re.password.presence=!1,Re.username.presence=!0,Re.role.presence=!1,Re.active.presence=!1,Jo.validateObject(e,Re)}a(Zy,"dropUserValidation");Wh.exports={addUserValidation:Jy,alterUserValidation:Xy,dropUserValidation:Zy}});var Xh=d((Xv,Jh)=>{"use strict";var qt=f(),Hs=class{constructor(t=0,r=qt.STORAGE_TYPES_ENUM.LMDB,s=qt.LICENSE_VALUES.API_CALL_DEFAULT,n=qt.RAM_ALLOCATION_ENUM.DEFAULT,i=qt.LICENSE_VALUES.VERSION_DEFAULT,o){this.exp_date=t,this.storage_type=r,this.api_call=s,this.ram_allocation=n,this.version=i,this.fingerprint=o}};a(Hs,"BaseLicense");var Ui=class extends Hs{constructor(t=0,r=qt.STORAGE_TYPES_ENUM.LMDB,s=qt.LICENSE_VALUES.API_CALL_DEFAULT,n=qt.RAM_ALLOCATION_ENUM.DEFAULT,i=qt.LICENSE_VALUES.VERSION_DEFAULT,o,_=!1){super(t,r,s,n,i,o),this.enterprise=_}};a(Ui,"ExtendedLicense");Jh.exports={BaseLicense:Hs,ExtendedLicense:Ui}});var e_=d((Zv,rS)=>{"use strict";var vr=require("fs-extra"),Zh=yi(),zh=require("crypto"),zy=require("moment"),jy=require("uuid").v4,me=g(),Zo=require("path"),eU=p(),He=f(),tU=Xh().ExtendedLicense,Hr="invalid license key format",rU="061183",sU="mofi25",nU="aes-256-cbc",iU=16,aU=32,jh=Z();jh.initSync();var Xo;rS.exports={validateLicense:eS,generateFingerPrint:_U,licenseSearch:tS,getLicense:EU};function zo(){return Zo.join(jh.getHdbBasePath(),He.LICENSE_KEY_DIR_NAME,He.LICENSE_FILE_NAME)}a(zo,"getLicenseDirPath");function oU(){let e=zo();return Zo.join(e,He.LICENSE_FILE_NAME)}a(oU,"getLicenseFilePath");function jo(){let e=zo();return Zo.join(e,He.REG_KEY_FILE_NAME)}a(jo,"getFingerPrintFilePath");async function _U(){let e=jo();try{return await vr.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await cU();throw me.error(`Error writing fingerprint file to ${e}`),me.error(t),new Error("There was an error generating the fingerprint")}}a(_U,"generateFingerPrint");async function cU(){let e=jy(),t=Zh.hash(e),r=jo();try{await vr.mkdirp(zo()),await vr.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw me.error(`Error writing fingerprint file to ${r}`),me.error(s),new Error("There was an error generating the fingerprint")}return t}a(cU,"writeFingerprint");function eS(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:He.STORAGE_TYPES_ENUM.LMDB,api_call:He.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:He.RAM_ALLOCATION_ENUM.DEFAULT,version:He.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return me.error("empty license key passed to validate."),r;let s=jo(),n=!1;try{n=vr.statSync(s)}catch(i){me.error(i)}if(n){let i;try{i=vr.readFileSync(s,"utf8")}catch{me.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(sU),_=o[1];_=Buffer.concat([Buffer.from(_)],iU);let c=Buffer.concat([Buffer.from(i)],aU),u=zh.createDecipheriv(nU,c,_);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let E=null;try{E=u.update(o[0],"hex","utf8"),E.trim(),E+=u.final("utf8")}catch{let h=uU(o[0],i);if(h)E=h;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Hr),me.error(Hr),new Error(Hr)}let l;if(isNaN(E))try{l=JSON.parse(E),r.api_call=l.api_call,r.version=l.version,r.storage_type=l.storage_type,r.exp_date=l.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),l.ram_allocation&&(r.ram_allocation=l.ram_allocation)}catch{throw console.error(Hr),me.error(Hr),new Error(Hr)}else r.exp_date=E;r.exp_date<zy().valueOf()&&(r.valid_date=!1),Zh.validate(o[1],`${rU}${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||me.error("Invalid licence"),r}a(eS,"validateLicense");function uU(e,t){try{let r=zh.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{me.warn("Check old license failed")}}a(uU,"checkOldLicense");function tS(){let e=new tU;e.api_call=0;let t=[];try{t=vr.readFileSync(oU(),"utf-8").split(He.NEW_LINE)}catch(r){r.code==="ENOENT"?me.info("no license file found"):me.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(eU.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=eS(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.api_call+=i.api_call,e.ram_allocation=i.ram_allocation,e.storage_type=i.storage_type,e.enterprise=!0)}catch(n){me.error("There was an error parsing the license string."),me.error(n),e.api_call=He.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=He.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=He.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=He.LICENSE_VALUES.API_CALL_DEFAULT),Xo=e,e}a(tS,"licenseSearch");async function EU(){return Xo||await tS(),Xo}a(EU,"getLicense")});var qr=d((zv,TS)=>{"use strict";var aS="username is required",oS="nothing to update, must supply active, role or password to update",_S="password cannot be an empty string",cS="If role is specified, it cannot be empty.",uS="active must be true or false";TS.exports={addUser:mU,alterUser:AU,dropUser:OU,userInfo:gU,listUsers:Mi,listUsersExternal:pU,setUsersToGlobal:vs,findAndValidateUser:bU,getClusterUser:LU,USERNAME_REQUIRED:aS,ALTERUSER_NOTHING_TO_UPDATE:oS,EMPTY_PASSWORD:_S,EMPTY_ROLE:cS,ACTIVE_BOOLEAN:uS};var ES=Bs(),lU=Qo(),r_=yi(),lS=Qh(),dS=Ds(),s_=fs(),se=p(),hS=require("validate.js"),w=g(),{promisify:n_}=require("util"),i_=as(),rr=f(),sS=Me(),dU=ss(),a_=Z(),hU=e_(),SU=Qt(),{handleHDBError:_t,hdb_errors:TU}=K(),{HTTP_STATUS_CODES:ct,AUTHENTICATION_ERROR_MSGS:t_,HDB_ERROR_MSGS:Gr}=TU,{UserEventMsg:o_}=Jt(),nS=require("lodash"),SS={username:!0,active:!0,role:!0,password:!0},iS=new Map,Di=n_(dS.searchByValue),fU=n_(dS.searchByHash),RU=n_(lU.delete);async function mU(e){let t=hS.cleanAttributes(e,SS),r=lS.addUserValidation(t);if(r)throw _t(new Error,r.message,ct.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 Di(s)}catch(u){throw w.error("There was an error searching for a role in add user"),w.error(u),u}if(!n||n.length<1)throw _t(new Error,Gr.ROLE_NAME_NOT_FOUND(t.role),ct.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw _t(new Error,Gr.DUP_ROLES_FOUND(t.role),ct.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=i_.encrypt(t.password)),t.password=r_.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await ES.insert(i)}catch(u){throw w.error("There was an error searching for a user."),w.error(u),u}w.debug(o);try{await vs()}catch(u){throw w.error("Got an error setting users to global"),w.error(u),u}if(o.skipped_hashes.length===1)throw _t(new Error,Gr.USER_ALREADY_EXISTS(t.username),ct.CONFLICT,void 0,void 0,!0);let _=Object.assign({},t);_.role=n[0];let c={user:null};return c.user=_,se.sendTransactionToSocketCluster(rr.INTERNAL_SC_CHANNELS.ADD_USER,c,a_.get(rr.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),s_.signalUserChange(new o_(process.pid)),`${_.username} successfully added`}a(mU,"addUser");async function AU(e){let t=hS.cleanAttributes(e,SS);if(se.isEmptyOrZeroLength(t.username))throw new Error(aS);if(se.isEmptyOrZeroLength(t.password)&&se.isEmptyOrZeroLength(t.role)&&se.isEmptyOrZeroLength(t.active))throw new Error(oS);if(!se.isEmpty(t.password)&&se.isEmptyOrZeroLength(t.password.trim()))throw new Error(_S);if(!se.isEmpty(t.active)&&!se.isBoolean(t.active))throw new Error(uS);let r=NU(t.username);if(!se.isEmpty(t.password)&&!se.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=i_.encrypt(t.password)),t.password=r_.hash(t.password)),t.role==="")throw new Error(cS);if(t.role){let o={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},_;try{_=await Di(o)}catch(c){throw w.error("Got an error searching for a role."),w.error(c),c}if(!_||_.length===0){let c=Gr.ALTER_USER_ROLE_NOT_FOUND(t.role);throw w.error(c),_t(new Error,c,ct.NOT_FOUND,void 0,void 0,!0)}if(_.length>1){let c=Gr.ALTER_USER_DUP_ROLES(t.role);throw w.error(c),_t(new Error,c,ct.CONFLICT,void 0,void 0,!0)}t.role=_[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await ES.update(s)}catch(o){throw w.error("Error during update."),w.error(o),o}try{await vs()}catch(o){throw w.error("Got an error setting users to global"),w.error(o),o}let i={user:null};return i.user=t,se.sendTransactionToSocketCluster(rr.INTERNAL_SC_CHANNELS.ALTER_USER,i,a_.get(rr.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),s_.signalUserChange(new o_(process.pid)),n}a(AU,"alterUser");function NU(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(NU,"isClusterUser");async function OU(e){try{let t=lS.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(se.isEmpty(global.hdb_users.get(e.username)))throw _t(new Error,Gr.USER_NOT_EXIST(e.username),ct.NOT_FOUND,void 0,void 0,!0);let s;try{s=await RU(r)}catch(i){throw w.error("Got an error deleting a user."),w.error(i),i}w.debug(s);try{await vs()}catch(i){throw w.error("Got an error setting users to global."),w.error(i),i}let n={user:null};return n.user=e,se.sendTransactionToSocketCluster(rr.INTERNAL_SC_CHANNELS.DROP_USER,n,a_.get(rr.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),s_.signalUserChange(new o_(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(OU,"dropUser");async function gU(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=e.hdb_user;let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await fU(r)}catch(n){throw w.error("Got an error searching for a role."),w.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw w.error(r),r}return t}a(gU,"userInfo");async function pU(){let e;try{e=await Mi()}catch(t){throw w.error("Got an error listing users."),w.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(pU,"listUsersExternal");async function Mi(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=nS.cloneDeep(await Di(e))}catch(r){throw w.error("Got an error searching for roles."),w.error(r),r}if(!se.isEmptyOrZeroLength(t)){let r={};for(let o in t)r[t[o].id]=t[o];let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=nS.cloneDeep(await Di(s))}catch(o){throw w.error("Got an error searching for users."),w.error(o),o}let i=new Map;for(let o in n){let _=n[o];_.role=r[n[o].role],IU(_.role),i.set(_.username,_)}return(await hU.getLicense()).enterprise?i:CU(i)}}catch(e){throw w.error("got an error listing users"),w.error(e),se.errorizeMessage(e)}return null}a(Mi,"listUsers");function IU(e){try{if(!e){w.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(SU)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){w.error("Got an error trying to set system permissions."),w.error(t)}}a(IU,"appendSystemTablesToRole");function CU(e){try{if(w.info("No enterprise license found. System is limited to 1 clustering role and 1 user role"),!e)return new Map;let t=Object.create(null),r=new Map;e.forEach((n,i)=>{n.role.permission.cluster_user===void 0||n.role.permission.cluster_user===!1?n.role.permission.super_user===!0&&(t[n.role.id]||(t[n.role.id]=new Map),t[n.role.id].set(i,n)):r.set(i,n)});let s={role:void 0,count:0};return Object.keys(t).forEach(n=>{let i=t[n];i.size>=s.count&&(s.role=n,s.count=i.size)}),s.role===void 0?(w.error("No roles found with active users. This is bad."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return w.error("error filtering users."),w.error(t),new Map}}a(CU,"nonEnterpriseFilter");async function vs(){try{let e=await Mi();global.hdb_users=e}catch(e){throw w.error(e),e}}a(vs,"setUsersToGlobal");async function bU(e,t,r=!0){global.hdb_users||await vs();let s=global.hdb_users.get(e);if(!s)throw _t(new Error,t_.GENERIC_AUTH_FAIL,ct.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw _t(new Error,t_.USER_INACTIVE,ct.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(iS.get(t)===s.password)return n;if(r_.validate(s.password,t))iS.set(t,s.password);else throw _t(new Error,t_.GENERIC_AUTH_FAIL,ct.UNAUTHORIZED,void 0,void 0,!0)}return n}a(bU,"findAndValidateUser");async function LU(){let e=await Mi(),t=dU.getConfigFromFile(rr.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!se.isEmpty(r))return r.decrypt_hash=i_.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+sS.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+sS.SERVER_SUFFIX.ADMIN,r}a(LU,"getClusterUser")});var __=d((jv,wU)=>{wU.exports={name:"harperdb",version:"4.0.4",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{node:">=14.0.0","preferred-node":"18.13.0","go-lang":"1.19.3","nats-server":"2.9.8"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"See License in ./license/Community+Edition+and+Evaluation+End+User+License+Agreement.pdf",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ data_layer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ data_layer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license --storage_type=lmdb && npm run cover:upgrade && npm run cover:nats && npm run cover:cfserver && npm run cover:lmdbbridge && npm run cover:lmdbutility && npm run cover:hdbserver && npm run cover:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license --storage_type=lmdb","cover:main":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","cover:lmdbbridge":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/data_layer/harperBridge/lmdbBridge/**/*.js' --parallel --config '../unitTests/.mocharc.json'","cover:lmdbutility":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --config '../unitTests/.mocharc.json'","cover:hdbserver":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --config '../unitTests/.mocharc.json'","cover:cfserver":"npm run submodules && cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","cover:nats":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","cover:upgrade":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.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/data_layer/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:{"@fastify/accepts-serializer":"5.1.0","@fastify/autoload":"5.4.0","@fastify/compress":"6.1.1","@fastify/cors":"8.1.0","@fastify/static":"6.5.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",async:"3.2.3","aws-sdk":"2.1096.0",chalk:"4.1.2","cli-progress":"3.10.0",clone:"2.1.2",esbuild:"^0.14.49","fast-glob":"3.2.11",fastify:"4.8.1","fastify-plugin":"4.2.1","fill-range":"7.0.1","fs-extra":"10.0.1","human-readable-ids":"1.0.4",inquirer:"8.2.2","is-number":"7.0.0",joi:"17.6.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"8.5.1",lmdb:"2.7.6",lodash:"4.17.21",mathjs:"10.4.0",microtime:"3.1.1",minimist:"1.2.6",mkcert:"1.5.0",moment:"2.29.4",msgpackr:"1.8.2",nats:"2.9.2",needle:"3.1.0","node-ipc":"9.1.4","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.3.0",papaparse:"5.3.2",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.3.1",pm2:"5.2.0",prompt:"1.2.2","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.3.5","stream-chain":"2.2.5","stream-json":"1.7.4",systeminformation:"5.12.4","tar-fs":"2.1.1","truncate-utf8-bytes":"1.0.2",ulidx:"0.3.0",uuid:"9.0.0","validate.js":"0.11.1",yaml:"1.10.2"},devDependencies:{axios:"0.27.2",chai:"4.3.4","chai-integer":"0.1.0",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1","hook-std":"2.0.0","intercept-stdout":"0.1.2",mocha:"8.3.2","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",newman:"5.2.3","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.21.0","newman-reporter-teamcity":"0.1.11","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.3.2",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.2.3"}}}});var nr=d((uG,HS)=>{"use strict";var ut=Z();ut.initSync();var yU=require("fs-extra"),UU=require("semver"),Vs=require("path"),{monotonicFactory:DU}=require("ulidx"),MU=DU(),RS=require("util"),mS=require("child_process"),PU=RS.promisify(mS.exec),BU=mS.spawn,x=Me(),Y=f(),h_=p(),Ot=g(),Pi=as(),HU=vd(),Gs=ss(),{encode:E_,decode:AS}=require("msgpackr"),{isEmpty:sr}=h_,NS=qr(),eG=ps(),vU=Ds(),tG=RS.promisify(vU.searchByHash),{connect:GU,StorageType:OS,RetentionPolicy:gS,AckPolicy:pS,DeliverPolicy:l_,NatsConnection:rG,JetStreamManager:sG,JetStreamClient:nG,StringCodec:iG,JSONCodec:qU,createInbox:S_,StreamSource:aG,headers:FU,toJsMsg:xU,nuid:oG,JetStreamOptions:_G,ErrorCode:fS,nanos:cG}=require("nats"),{PACKAGE_ROOT:VU}=f(),kU=__(),IS=qU(),YU="clustering",$U=kU.engines[x.NATS_SERVER_NAME],KU=Vs.join(VU,"dependencies"),d_=Vs.join(KU,`${process.platform}-${process.arch}`,x.NATS_BINARY_NAME),c_,u_,qs,Fs,xs,tt;HS.exports={runCommand:CS,checkNATSServerInstalled:WU,createConnection:T_,getConnection:Bi,getJetStreamManager:Fr,getJetStream:bS,getNATSReferences:Ve,getServerList:JU,createLocalStream:f_,listStreams:LS,deleteLocalStream:XU,getServerConfig:ks,listRemoteStreams:ZU,viewStream:zU,publishToStream:jU,createWorkQueueStream:eD,addSourceToWorkStream:wS,request:tD,removeSourceFromWorkStream:US,reloadNATS:R_,reloadNATSHub:rD,reloadNATSLeaf:sD,extractServerName:yS,requestErrorHandler:nD,updateWorkStream:iD,createLocalTableStream:MS,createTableStreams:aD,purgeTableStream:PS,purgeSchemaTableStreams:oD,getStreamInfo:_D,updateNodeNameLocalStreams:cD,closeConnection:QU};async function CS(e,t=void 0){let{stdout:r,stderr:s}=await PU(e,{cwd:t});if(s)throw new Error(s.replace(`
1
+ "use strict";var Ff=Object.defineProperty;var a=(e,t)=>Ff(e,"name",{value:t,configurable:!0});var d=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var f=d((aB,uc)=>{"use strict";var he=require("path"),xf=require("fs");function Vf(){let e=__dirname;for(;!xf.existsSync(he.join(e,"package.json"));){let t=he.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(Vf,"getHDBPackageRoot");var Ye=Vf(),z_="js",Zr=z_,kf="harperdb-config.yaml",$f="defaultConfig.yaml",Yf="hdb",j_=`hdbServer.${Zr}`,ec=`customFunctionsServer.${Zr}`,tc=`hdbIpcServer.${Zr}`,Kf=`restartHdb.${Zr}`,Na="HarperDB",zs="Custom Functions",js="Clustering Hub",en="Clustering Leaf",ga="Clustering Ingest Service",pa="Clustering Reply Service",Wf="foreground.pid",Oa={HDB:Na,IPC:"IPC",CLUSTERING_HUB:js,CLUSTERING_LEAF:en,CLUSTERING_INGEST_SERVICE:ga,CLUSTERING_REPLY_SERVICE:pa,CUSTOM_FUNCTIONS:zs,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",PM2_LOGROTATE:"pm2-logrotate",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},Qf={HDB:"hdb.log",IPC:"ipc.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log",CLUSTERING_INGEST_SERVICE:"clustering_ingest_service.log",CLUSTERING_REPLY_SERVICE:"clustering_reply_service.log",CUSTOM_FUNCTIONS:"custom_functions.log",INSTALL:"install.log",CLI:"cli.log",PM2:"pm2.log",CLUSTERING_UPGRADE:"clustering_upgrade.log",JOBS:"jobs.log"},Jf={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},Xf={harperdb:Na,ipc:"IPC","clustering hub":js,"clustering leaf":en,"clustering ingest service":ga,"clustering reply service":pa,"custom functions":zs,custom_functions:zs,"pm2-logrotate":Oa.PM2_LOGROTATE,logrotate:Oa.PM2_LOGROTATE,clustering:"clustering","clustering config":"clustering config"},Zf={CLUSTERING_HUB_PROC_DESCRIPTOR:js,CLUSTERING_LEAF_PROC_DESCRIPTOR:en,CLUSTERING_INGEST_PROC_DESCRIPTOR:ga,CLUSTERING_REPLY_SERVICE_DESCRIPTOR:pa},Zs={HDB:he.join(Ye,"server/harperdb"),IPC:he.join(Ye,"server/ipc"),CUSTOM_FUNCTIONS:he.join(Ye,"server/customFunctions"),CLUSTERING_HUB:he.join(Ye,"server/nats"),CLUSTERING_LEAF:he.join(Ye,"server/nats")},zf={HDB:he.join(Zs.HDB,j_),IPC:he.join(Zs.IPC,tc),CUSTOM_FUNCTIONS:he.join(Zs.CUSTOM_FUNCTIONS,ec)},jf={HDB:he.join(Ye,"launchServiceScripts/launchHarperDB.js"),CUSTOM_FUNCTIONS:he.join(Ye,"launchServiceScripts/launchCustomFunctions.js"),NATS_INGEST_SERVICE:he.join(Ye,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:he.join(Ye,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:he.resolve(Ye,"launchServiceScripts/launchUpdateNodes4-0-0.js")},eR={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},rc="support@harperdb.io",tR="customer-success@harperdb.io",sc=1,rR=4141,nc="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",sR="https://www.harperdb.io/product",nR=`For support, please submit a request at ${nc} or contact ${rc}`,ic=`For license support, please contact ${tR}`,iR="None of the specified records were found.",aR="hash attribute not found",oR=`Your current license only supports ${sc} role. ${ic}`,_R="Your current license only supports 3 connections to a node.",cR="127.0.0.1",uR=1,ER=/^\.$/,lR=/^\.\.$/,dR="U+002E",hR=/\//g,SR="U+002F",TR=/U\+002F/g,fR=/^U\+002E$/,RR=/^U\+002EU\+002E$/,mR="d",AR=999999,OR="*",NR="--max-old-space-size=",gR="system",pR="__hdb_hash",IR=".harperdb",CR=".hdb",bR="keys",LR="hdb_boot_properties.file",wR=".updateConfig.json",yR="SIGTSTP",UR=24,DR=6e4,MR=448,PR="blob",BR="trash",HR="schema",vR="transactions",GR=".count",qR="id",FR="install_log.log",xR="run_log.log",VR="PROCESS_NAME",kR={SETTINGS_PATH_KEY:"settings_path"},ac=require("lodash"),$R={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",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},YR={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},KR={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},WR={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"},QR={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"},ye="hdb_internal:",JR={CREATE_SCHEMA:ye+"create_schema",CREATE_TABLE:ye+"create_table",CREATE_ATTRIBUTE:ye+"create_attribute",ADD_USER:ye+"add_user",ALTER_USER:ye+"alter_user",DROP_USER:ye+"drop_user",HDB_NODES:ye+"hdb_nodes",HDB_USERS:ye+"hdb_users",HDB_WORKERS:ye+"hdb_workers",CATCHUP:ye+"catchup",SCHEMA_CATCHUP:ye+"schema_catchup",WORKER_ROOM:ye+"cluster_workers"},XR={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"},ZR="060493.ks",zR=".license",jR={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},R={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",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_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",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",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",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",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",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"},em={CSV:".csv",JSON:".json"},tm={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key"},rm={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},gt={};gt[R.CREATE_SCHEMA]=R.CREATE_SCHEMA;gt[R.CREATE_TABLE]=R.CREATE_TABLE;gt[R.CREATE_ATTRIBUTE]=R.CREATE_ATTRIBUTE;gt[R.INSERT]=R.INSERT;gt[R.UPDATE]=R.UPDATE;gt[R.UPSERT]=R.UPSERT;gt[R.DELETE]=R.DELETE;var H=Object.create(null);H[R.DESCRIBE_ALL]=R.DESCRIBE_ALL;H[R.DESCRIBE_TABLE]=R.DESCRIBE_TABLE;H[R.DESCRIBE_SCHEMA]=R.DESCRIBE_SCHEMA;H[R.READ_LOG]=R.READ_LOG;H[R.ADD_NODE]=R.ADD_NODE;H[R.LIST_USERS]=R.LIST_USERS;H[R.LIST_ROLES]=R.LIST_ROLES;H[R.USER_INFO]=R.USER_INFO;H[R.SQL]=R.SQL;H[R.GET_JOB]=R.GET_JOB;H[R.SEARCH_JOBS_BY_START_DATE]=R.SEARCH_JOBS_BY_START_DATE;H[R.DELETE_FILES_BEFORE]=R.DELETE_FILES_BEFORE;H[R.EXPORT_LOCAL]=R.EXPORT_LOCAL;H[R.EXPORT_TO_S3]=R.EXPORT_TO_S3;H[R.CLUSTER_STATUS]=R.CLUSTER_STATUS;H[R.REMOVE_NODE]=R.REMOVE_NODE;H[R.RESTART]=R.RESTART;H[R.CUSTOM_FUNCTIONS_STATUS]=R.CUSTOM_FUNCTIONS_STATUS;H[R.GET_CUSTOM_FUNCTIONS]=R.GET_CUSTOM_FUNCTIONS;H[R.GET_CUSTOM_FUNCTION]=R.GET_CUSTOM_FUNCTION;H[R.SET_CUSTOM_FUNCTION]=R.SET_CUSTOM_FUNCTION;H[R.DROP_CUSTOM_FUNCTION]=R.DROP_CUSTOM_FUNCTION;H[R.ADD_CUSTOM_FUNCTION_PROJECT]=R.ADD_CUSTOM_FUNCTION_PROJECT;H[R.DROP_CUSTOM_FUNCTION_PROJECT]=R.DROP_CUSTOM_FUNCTION_PROJECT;H[R.PACKAGE_CUSTOM_FUNCTION_PROJECT]=R.PACKAGE_CUSTOM_FUNCTION_PROJECT;H[R.DEPLOY_CUSTOM_FUNCTION_PROJECT]=R.DEPLOY_CUSTOM_FUNCTION_PROJECT;var sm={RUN:"run",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade"},nm={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},oc={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",IPC_SERVER_PORT:"IPC_SERVER_PORT",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"},im=ac.invert(oc),S={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_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",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",HTTP_THREADS:"http_threads",IPC_NETWORK_PORT:"ipc_network_port",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_DATEFORMAT:"logging_rotation_dateFormat",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",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",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT:"operationsApi_authentication_operationTokenTimeout",OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT:"operationsApi_authentication_refreshTokenTimeout",OPERATIONSAPI_FOREGROUND:"operationsApi_foreground",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",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_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERT_AUTH:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_NODEENV:"operationsApi_nodeEnv",ROOTPATH:"rootPath",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync"},am={hdb_root_key:S.ROOTPATH,hdb_root:S.ROOTPATH,server_port_key:S.OPERATIONSAPI_NETWORK_PORT,server_port:S.OPERATIONSAPI_NETWORK_PORT,cert_key:S.OPERATIONSAPI_TLS_CERTIFICATE,certificate:S.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:S.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:S.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:S.OPERATIONSAPI_NETWORK_HTTPS,https_on:S.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:S.OPERATIONSAPI_NETWORK_CORS,cors_on:S.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:S.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:S.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:S.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:S.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:S.LOGGING_LEVEL,log_level:S.LOGGING_LEVEL,log_path_key:S.LOGGING_ROOT,log_path:S.LOGGING_ROOT,log_daily_rotate:S.LOGGING_ROTATION_ROTATE,log_rotate:S.LOGGING_ROTATION_ROTATE,log_rotate_max_size:S.LOGGING_ROTATION_MAXSIZE,log_rotate_retain:S.LOGGING_ROTATION_RETAIN,log_rotate_compress:S.LOGGING_ROTATION_COMPRESS,log_rotate_date_format:S.LOGGING_ROTATION_DATEFORMAT,log_rotate_rotate_module:S.LOGGING_ROTATION_ROTATEMODULE,log_rotate_worker_interval:S.LOGGING_ROTATION_WORKERINTERVAL,log_rotate_rotate_interval:S.LOGGING_ROTATION_ROTATEINTERVAL,log_rotate_timezone:S.LOGGING_ROTATION_TIMEZONE,props_env_key:S.OPERATIONSAPI_NODEENV,node_env:S.OPERATIONSAPI_NODEENV,clustering_node_name_key:S.CLUSTERING_NODENAME,node_name:S.CLUSTERING_NODENAME,clustering_enabled_key:S.CLUSTERING_ENABLED,clustering:S.CLUSTERING_ENABLED,max_http_threads:S.HTTP_THREADS,max_hdb_processes:S.HTTP_THREADS,server_timeout_key:S.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:S.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:S.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:S.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:S.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:S.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:S.LOGGING_AUDITLOG,disable_transaction_log:S.LOGGING_AUDITLOG,operation_token_timeout_key:S.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:S.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:S.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:S.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,ipc_server_port:S.IPC_NETWORK_PORT,custom_functions_enabled_key:S.CUSTOMFUNCTIONS_ENABLED,custom_functions:S.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:S.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:S.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:S.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:S.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:S.HTTP_THREADS,log_to_file:S.LOGGING_FILE,log_to_stdstreams:S.LOGGING_STDSTREAMS,run_in_foreground:S.OPERATIONSAPI_FOREGROUND,local_studio_on:S.LOCALSTUDIO_ENABLED,clustering_port:S.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:S.CLUSTERING_USER,clustering_enabled:S.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:S.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:S.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:S.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:S.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:S.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:S.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:S.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_nodename:S.CLUSTERING_NODENAME,clustering_tls_certificate:S.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:S.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:S.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:S.CLUSTERING_TLS_INSECURE,customfunctions_enabled:S.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:S.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:S.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:S.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:S.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:S.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:S.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:S.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:S.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:S.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:S.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:S.CUSTOMFUNCTIONS_NODEENV,http_threads:S.HTTP_THREADS,customfunctions_processes:S.HTTP_THREADS,customfunctions_root:S.CUSTOMFUNCTIONS_ROOT,ipc_network_port:S.IPC_NETWORK_PORT,localstudio_enabled:S.LOCALSTUDIO_ENABLED,logging_file:S.LOGGING_FILE,logging_level:S.LOGGING_LEVEL,logging_root:S.LOGGING_ROOT,logging_rotation_compress:S.LOGGING_ROTATION_COMPRESS,logging_rotation_dateformat:S.LOGGING_ROTATION_DATEFORMAT,logging_rotation_maxsize:S.LOGGING_ROTATION_MAXSIZE,logging_rotation_retain:S.LOGGING_ROTATION_RETAIN,logging_rotation_rotate:S.LOGGING_ROTATION_ROTATE,logging_rotation_rotateinterval:S.LOGGING_ROTATION_ROTATEINTERVAL,logging_rotation_rotatemodule:S.LOGGING_ROTATION_ROTATEMODULE,logging_rotation_timezone:S.LOGGING_ROTATION_TIMEZONE,logging_rotation_workerinterval:S.LOGGING_ROTATION_WORKERINTERVAL,logging_stdstreams:S.LOGGING_STDSTREAMS,logging_auditlog:S.LOGGING_AUDITLOG,operationsapi_authentication_operationtokentimeout:S.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:S.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:S.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:S.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:S.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:S.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:S.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:S.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:S.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:S.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:S.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:S.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:S.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:S.OPERATIONSAPI_NODEENV,operationsapi_root:S.ROOTPATH,rootpath:S.ROOTPATH,storage_writeasync:S.STORAGE_WRITEASYNC,storage_overlappingsync:S.STORAGE_OVERLAPPINGSYNC},om={csv_file_load:"csv_file_load",csv_data_load:R.CSV_DATA_LOAD,csv_url_load:R.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"},_m={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"},cm={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},um={FILE_SYSTEM:"fs",LMDB:"lmdb"},Em={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},lm={DEVELOPMENT:8192,DEFAULT:512},dm={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"},hm={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"},Sm={ENOENT:"ENOENT",EACCES:"EACCES"},_c={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},Tm="__clustering__",fm=Object.values(_c),Rm=15984864e5,cc={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},mm=ac.invert(cc),Am={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"},Om=111,Nm=`\r
2
+ `,gm={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},pm=["*","%"],Im="unauthorized_access",Cm="func_val",bm={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Lm={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},wm="hdb_ipc_server",ym="hdb_ipc_client_",Um={RESTART:"restart",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request"},Dm={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},Mm={STOPPED:"stopped",ONLINE:"online"},Pm="3.x.x";uc.exports={LOCAL_HARPERDB_OPERATIONS:H,HDB_SUPPORT_ADDRESS:rc,HDB_SUPPORT_URL:nc,HDB_PRICING_URL:sR,SUPPORT_HELP_MSG:nR,LICENSE_HELP_MSG:ic,HDB_PROC_NAME:j_,HDB_PROC_DESCRIPTOR:Na,CLUSTERING_LEAF_PROC_DESCRIPTOR:en,CLUSTERING_HUB_PROC_DESCRIPTOR:js,SYSTEM_SCHEMA_NAME:gR,HASH_FOLDER_NAME:pR,HDB_HOME_DIR_NAME:IR,UPDATE_FILE_NAME:wR,LICENSE_KEY_DIR_NAME:bR,BOOT_PROPS_FILE_NAME:LR,JOB_TYPE_ENUM:om,JOB_STATUS_ENUM:jR,SYSTEM_TABLE_NAMES:WR,SYSTEM_TABLE_HASH_ATTRIBUTES:QR,OPERATIONS_ENUM:R,VALID_S3_FILE_TYPES:em,S3_BUCKET_AUTH_KEYS:tm,VALID_SQL_OPS_ENUM:rm,GEO_CONVERSION_ENUM:nm,HDB_SETTINGS_NAMES:oc,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:im,SERVICE_ACTIONS_ENUM:sm,CLUSTER_MESSAGE_TYPE_ENUM:_m,CLUSTER_CONNECTION_DIRECTION_ENUM:cm,CLUSTER_EVENTS_DEFS_ENUM:dm,PERIOD_REGEX:ER,DOUBLE_PERIOD_REGEX:lR,UNICODE_PERIOD:dR,FORWARD_SLASH_REGEX:hR,UNICODE_FORWARD_SLASH:SR,ESCAPED_FORWARD_SLASH_REGEX:TR,ESCAPED_PERIOD_REGEX:fR,ESCAPED_DOUBLE_PERIOD_REGEX:RR,REG_KEY_FILE_NAME:ZR,RESTART_TIMEOUT_MS:DR,HDB_FILE_PERMISSIONS:MR,SCHEMA_DIR_NAME:HR,TRANSACTIONS_DIR_NAME:vR,LIMIT_COUNT_NAME:GR,ID_ATTRIBUTE_STRING:qR,INSERT_MODULE_ENUM:YR,UPGRADE_JSON_FIELD_NAMES_ENUM:KR,RESTART_CODE:yR,RESTART_CODE_NUM:UR,CLUSTER_OPERATIONS:gt,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:XR,HDB_INTERNAL_SC_CHANNEL_PREFIX:ye,INTERNAL_SC_CHANNELS:JR,CLUSTERING_MESSAGE_TYPES:Am,HDB_FILE_SUFFIX:CR,BLOB_FOLDER_NAME:PR,HDB_TRASH_DIR:BR,ORIGINATOR_SET_VALUE:Om,LICENSE_VALUES:Em,RAM_ALLOCATION_ENUM:lm,STORAGE_TYPES_ENUM:um,TIME_STAMP_NAMES_ENUM:_c,TIME_STAMP_NAMES:fm,PERMS_UPDATE_RELEASE_TIMESTAMP:Rm,SEARCH_NOT_FOUND_MESSAGE:iR,SEARCH_ATTRIBUTE_NOT_FOUND:aR,LICENSE_ROLE_DENIED_RESPONSE:oR,LICENSE_MAX_CONNS_REACHED:_R,BASIC_LICENSE_MAX_NON_CU_ROLES:sc,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:rR,VALUE_SEARCH_COMPARATORS:cc,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:mm,LICENSE_FILE_NAME:zR,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:hm,NEW_LINE:Nm,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:uR,MOMENT_DAYS_TAG:mR,API_TURNOVER_SEC:AR,LOOPBACK:cR,CODE_EXTENSION:Zr,WILDCARD_SEARCH_VALUE:OR,NODE_ERROR_CODES:Sm,JAVASCRIPT_EXTENSION:z_,PERMS_CRUD_ENUM:gm,UNAUTHORIZED_PERMISSION_NAME:Im,SEARCH_WILDCARDS:pm,FUNC_VAL:Cm,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:bm,JWT_ENUM:Lm,CLUSTERING_FLAG:Tm,RUN_LOG:xR,INSTALL_LOG:FR,IPC_SERVER_MODULE:tc,HDB_IPC_SERVER:wm,IPC_EVENT_TYPES:Um,HDB_IPC_CLIENT_PREFIX:ym,CUSTOM_FUNCTION_PROC_NAME:ec,CUSTOM_FUNCTION_PROC_DESCRIPTOR:zs,SERVICES:Dm,MEM_SETTING_KEY:NR,HDB_RESTART_SCRIPT:Kf,PROCESS_DESCRIPTORS:Oa,SERVICE_SERVERS:zf,SERVICE_SERVERS_CWD:Zs,PROCESS_DESCRIPTORS_VALIDATE:Xf,LAUNCH_SERVICE_SCRIPTS:jf,LOG_LEVELS:Jf,PROCESS_NAME_ENV_PROP:VR,PROCESS_LOG_NAMES:Qf,PM2_PROCESS_STATUSES:Mm,CONFIG_PARAM_MAP:am,CONFIG_PARAMS:S,HDB_CONFIG_FILE:kf,HDB_DEFAULT_CONFIG_FILE:$f,ROLE_TYPES_ENUM:eR,BOOT_PROP_PARAMS:kR,INSTALL_PROMPTS:$R,HDB_ROOT_DIR_NAME:Yf,CLUSTERING_PROCESSES:Zf,FOREGROUND_PID_FILE:Wf,PACKAGE_ROOT:Ye,PRE_4_0_0_VERSION:Pm}});var hc=d((oB,dc)=>{"use strict";var Ec=require("minimist");dc.exports=Bm;function Bm(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=lc(process.env),s=lc(Ec(process.argv))):(r=process.env,s=Ec(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let _=e[i];s[_]!==void 0?n[_]=s[_].toString().trim():r[_]!==void 0&&(n[_]=r[_].toString().trim())}return n}a(Bm,"assignCMDENVVariables");function lc(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(lc,"objKeysToLowerCase")});var g=d((_B,Oc)=>{"use strict";var Gt=require("fs-extra"),qt=require("path"),Tc=require("yaml"),fc=require("properties-reader"),j=f(),Hm=hc(),vm=require("os"),{PACKAGE_ROOT:ba}=f(),Oe={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},tn=qt.join(ba,"logs"),pt=process.env.pm_id===void 0,Gm=qt.join(ba,"config/yaml/",j.HDB_DEFAULT_CONFIG_FILE),La=process.env.PROCESS_NAME===void 0?j.PROCESS_DESCRIPTORS.INSTALL:process.env.PROCESS_NAME,ur,et,ut,Ae,Ia,Er;Er===void 0&&Rc();Oc.exports={createLogFile:qm,notify:Vm,fatal:km,error:Ca,warn:$m,info:Fm,debug:xm,trace:Ac,setLogLevel:Km,log_level:Ae};function Rc(){try{if(Er===void 0){let e=Ym();Er=fc(e),{level:Ae,config_log_path:Ia,to_file:et,to_stream:ut}=Wm(Er.get("settings_path"))}}catch(e){if(Er=void 0,e.code===j.NODE_ERROR_CODES.ENOENT){let t=Hm(Object.keys(j.CONFIG_PARAM_MAP),!0);for(let i in t){let o=j.CONFIG_PARAM_MAP[i];o&&o.toLowerCase();let _=t[i];if(o===j.CONFIG_PARAMS.LOGGING_LEVEL){Ae=_;continue}if(o===j.CONFIG_PARAMS.LOGGING_STDSTREAMS){ut=_;continue}o===j.CONFIG_PARAMS.LOGGING_FILE&&(et=o)}let{default_level:r,default_to_file:s,default_to_stream:n}=Qm();et=et===void 0?s:et,et=Sc(et),ut=ut===void 0?n:ut,ut=Sc(ut),Ae=Ae===void 0?r:Ae,Ia=tn;return}throw Ca("Error initializing log settings"),Ca(e),e}}a(Rc,"initLogSettings");function qm(e,t){if(!pt){Ac("createLogFile should only be used if the process is not being managed by pm2");return}Er===void 0&&Rc(),La=t;let r;e===j.PROCESS_LOG_NAMES.INSTALL?r=tn:r=Ia,et&&(ur=qt.join(r,e),Gt.ensureFileSync(ur))}a(qm,"createLogFile");function Ft(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1;for(let o=0;o<n;o++){let _=t[o];_ instanceof Error&&_.stack?s+=_.stack:typeof _=="object"?s+=JSON.stringify(_):s+=_,o<i&&(s+=" ")}return`{"process_name": "${La}", "level": "${e}", "timestamp": "${r}", "message": "${s}"}
3
+ `}a(Ft,"createLogRecord");function mc(e){ur===void 0&&(La=j.PROCESS_DESCRIPTORS.INSTALL,Gt.ensureDirSync(tn),ur=qt.join(tn,j.PROCESS_LOG_NAMES.INSTALL),Gt.ensureFileSync(ur)),Gt.appendFileSync(ur,e)}a(mc,"writeToLogFile");function rn(e){et&&mc(e),ut&&process.stdout.write(e)}a(rn,"nonPm2LogStdOut");function wa(e){et&&mc(e),ut&&process.stderr.write(e)}a(wa,"nonPm2LogStdErr");function Fm(...e){if(Oe[Ae]<=Oe.info){let t=Ft("info",e);if(pt){rn(t);return}process.stdout.write(t)}}a(Fm,"info");function Ac(...e){if(Oe[Ae]<=Oe.trace){let t=Ft("trace",e);if(pt){rn(t);return}process.stdout.write(t)}}a(Ac,"trace");function Ca(...e){if(Oe[Ae]<=Oe.error){let t=Ft("error",e);if(pt){wa(t);return}process.stderr.write(t)}}a(Ca,"error");function xm(...e){if(Oe[Ae]<=Oe.debug){let t=Ft("debug",e);if(pt){rn(t);return}process.stdout.write(t)}}a(xm,"debug");function Vm(...e){if(Oe[Ae]<=Oe.notify){let t=Ft("notify",e);if(pt){rn(t);return}process.stdout.write(t)}}a(Vm,"notify");function km(...e){if(Oe[Ae]<=Oe.fatal){let t=Ft("fatal",e);if(pt){wa(t);return}process.stderr.write(t)}}a(km,"fatal");function $m(...e){if(Oe[Ae]<=Oe.warn){let t=Ft("warn",e);if(pt){wa(t);return}process.stderr.write(t)}}a($m,"warn");function Ym(){let e;try{e=vm.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=qt.join(e,j.HDB_HOME_DIR_NAME,j.BOOT_PROPS_FILE_NAME);return Gt.existsSync(t)||(t=qt.join(ba,"utility/hdb_boot_properties.file")),t}a(Ym,"getPropsFilePath");function Km(e){Ae=e}a(Km,"setLogLevel");function Sc(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Sc,"autoCastBoolean");function Wm(e){try{if(e.includes("config/settings.js")){let o=fc(e);return{level:o.get(j.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:qt.dirname(o.get(j.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(j.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(j.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=Tc.parseDocument(Gt.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===j.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(Wm,"getLogConfig");function Qm(){try{let e=Tc.parseDocument(Gt.readFileSync(Gm,"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(Qm,"getDefaultConfig")});var gc=d((cB,Nc)=>{"use strict";var Jm=require("util"),Xm=require("path"),Zm=require("child_process"),zm=Jm.promisify(Zm.execFile),jm=1e3*1e3*10;Nc.exports={findPs:eA};async function eA(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await zm("ps",["wwxo",`pid,${r}`],{maxBuffer:jm});for(let n of s.trim().split(`
4
+ `).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:Xm.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(eA,"findPs")});var Se=d((uB,Ic)=>{"use strict";var tA="__dbis__",rA="__environment_name__",sA="__dbi_defintion__",nA={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"},iA=["__createdtime__","__updatedtime__"],aA="\uFFFF",pc={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},oA=Object.values(pc);Ic.exports={INTERNAL_DBIS_NAME:tA,DBI_DEFINITION_NAME:sA,SEARCH_TYPES:nA,TIMESTAMP_NAMES:iA,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:rA,TRANSACTIONS_DBI_NAMES_ENUM:pc,TRANSACTIONS_DBIS:oA,OVERFLOW_MARKER:aA}});var Ne=d((EB,Pc)=>{"use strict";var Cc=f(),bc=Se(),Lc={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},wc=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),yc={500:wc("There was an error processing your request."),400:"Invalid request"},_A=yc[Lc.INTERNAL_SERVER_ERROR],cA={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.`},uA={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},EA={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"},lA={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_ARRAY:"ids must be an array",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 ${bc.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${bc.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"},dA={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Cc.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 ${Cc.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"},Uc={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"},hA={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid schema 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' schema, tables and records are used internally by HarperDB and cannot be updated or removed."},SA={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 schema metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view schema.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`},TA={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=>`Schema '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`Schema '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in schema '${e}'`,SCHEMA_REQUIRED_ERR:"schema is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},fA={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},RA={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`},Dc={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.`},Mc={INVALID_IPC_DATA_TYPE:"Invalid IPC event data type, must be an object",MISSING_TYPE:"IPC event missing 'type'",MISSING_MSG:"IPC event missing 'message'",MISSING_ORIGIN:"IPC event message missing 'originator' property",INVALID_EVENT:e=>`IPC server received invalid event type: ${e}`},mA={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 customFunctions enabled to true in hdb/harperdb-config.yaml file."},AA={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},OA={...Uc,...EA,...cA,...hA,...SA,...TA,...fA,...RA,...dA,...Dc,...Mc,...mA,...AA,...uA};Pc.exports={CHECK_LOGS_WRAPPER:wc,HDB_ERROR_MSGS:OA,DEFAULT_ERROR_MSGS:yc,DEFAULT_ERROR_RESP:_A,HTTP_STATUS_CODES:Lc,LMDB_ERRORS_ENUM:lA,AUTHENTICATION_ERROR_MSGS:Uc,VALIDATION_ERROR_MSGS:Dc,IPC_ERRORS:Mc}});var Y=d((lB,vc)=>{"use strict";var lr=Ne(),NA=g(),gA=f(),zr=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Bc),this.http_resp_code=s||lr.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(lr.DEFAULT_ERROR_MSGS[s]?lr.DEFAULT_ERROR_MSGS[s]:lr.DEFAULT_ERROR_MSGS[lr.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,typeof this.message!="string"&&(this.stack=t.stack),i&&NA[n](i)}};a(zr,"HdbError");function Bc(e,t,r,s=gA.LOG_LEVELS.ERROR,n=null,i=!1){if(Hc(e))return e;let o=new zr(e,t,r,s,n);return i&&delete o.stack,o}a(Bc,"handleHDBError");function Hc(e){return e.__proto__.constructor.name===zr.name}a(Hc,"isHDBError");vc.exports={isHDBError:Hc,handleHDBError:Bc,hdb_errors:lr}});var p=d((hB,zc)=>{"use strict";var xt=require("path"),pA=require("fs-extra"),re=g(),Gc=require("fs-extra"),IA=require("truncate-utf8-bytes"),jr=require("os"),CA=require("net"),bA=require("recursive-iterator"),ie=f(),kc=gc(),qc=require("papaparse"),sn=require("moment"),{inspect:LA}=require("util"),Fc=require("is-number"),dB=require("lodash"),{hdb_errors:nn}=Y(),$c=require("util").promisify(setTimeout),wA=100,yA=5,UA="",DA=4,xc=255,Vc={true:!0,false:!1,undefined:null,null:null,NaN:NaN};zc.exports={isEmpty:Ue,isEmptyOrZeroLength:tt,arrayHasEmptyValues:BA,arrayHasEmptyOrZeroLengthValues:HA,buildFolderPath:vA,isBoolean:Yc,errorizeMessage:MA,stripFileExtension:qA,autoCast:FA,autoCastJSONDeep:ya,removeDir:VA,compareVersions:kA,isCompatibleDataVersion:$A,escapeRawValue:Wc,unescapeValue:YA,stringifyProps:KA,valueConverter:WA,timeoutPromise:JA,isClusterOperation:ZA,getClusterUser:eO,sendTransactionToSocketCluster:zA,checkGlobalSchemaTable:jA,getHomeDir:Qc,getPropsFilePath:QA,promisifyPapaParse:tO,removeBOM:Jc,createEventPromise:rO,checkProcessRunning:sO,checkSchemaTableExist:nO,checkSchemaExists:Xc,checkTableExists:Zc,getStartOfTomorrowInSeconds:iO,getLimitKey:aO,isObject:GA,isNotEmptyAndHasValue:PA,autoCasterIsNumberCheck:Kc,backtickASTSchemaItems:oO,isPortTaken:XA,stopProcess:_O,createForkArgs:cO,autoCastBoolean:uO,async_set_timeout:$c,getTableHashAttribute:EO,doesSchemaExist:lO,doesTableExist:dO,stringifyObj:hO,ms_to_time:SO,changeExtension:TO,PACKAGE_ROOT:ie.PACKAGE_ROOT};function MA(e){return e instanceof Error?e:new Error(e)}a(MA,"errorizeMessage");function Ue(e){return e==null}a(Ue,"isEmpty");function PA(e){return!Ue(e)&&(e||e===0||e===""||Yc(e))}a(PA,"isNotEmptyAndHasValue");function tt(e){return Ue(e)||e.length===0||e.size===0}a(tt,"isEmptyOrZeroLength");function BA(e){if(Ue(e))return!0;for(let t=0;t<e.length;t++)if(Ue(e[t]))return!0;return!1}a(BA,"arrayHasEmptyValues");function HA(e){if(tt(e))return!0;for(let t=0;t<e.length;t++)if(tt(e[t]))return!0;return!1}a(HA,"arrayHasEmptyOrZeroLengthValues");function vA(...e){try{return e.join(xt.sep)}catch{console.error(e)}}a(vA,"buildFolderPath");function Yc(e){return Ue(e)?!1:e===!0||e===!1}a(Yc,"isBoolean");function GA(e){return Ue(e)?!1:typeof e=="object"}a(GA,"isObject");function qA(e){return tt(e)?UA:e.slice(0,-DA)}a(qA,"stripFileExtension");function FA(e){return Ue(e)||e===""||typeof e!="string"?e:Vc[e]!==void 0?Vc[e]:Kc(e)===!0?Number(e):e}a(FA,"autoCast");function xA(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(xA,"autoCastJSON");function ya(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=ya(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=ya(r);s!==r&&(e[t]=s)}return e}else return xA(e)}a(ya,"autoCastJSONDeep");function Kc(e){if(e.startsWith("0.")&&Fc(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Fc(e))}a(Kc,"autoCasterIsNumberCheck");async function VA(e){if(tt(e))throw new Error(`Directory path: ${e} does not exist`);try{await Gc.emptyDir(e),await Gc.remove(e)}catch(t){throw re.error(`Error removing files in ${e} -- ${t}`),t}}a(VA,"removeDir");function kA(e,t){if(tt(e)){re.info("Invalid current version sent as parameter.");return}if(tt(t)){re.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("."),_=i.replace(s,"").split("."),c=Math.min(o.length,_.length);for(let u=0;u<c;u++)if(r=parseInt(o[u],10)-parseInt(_[u],10),r)return r;return o.length-_.length}a(kA,"compareVersions");function $A(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a($A,"isCompatibleDataVersion");function Wc(e){if(Ue(e))return e;let t=String(e);return t==="."?ie.UNICODE_PERIOD:t===".."?ie.UNICODE_PERIOD+ie.UNICODE_PERIOD:t.replace(ie.FORWARD_SLASH_REGEX,ie.UNICODE_FORWARD_SLASH)}a(Wc,"escapeRawValue");function YA(e){if(Ue(e))return e;let t=String(e);return t===ie.UNICODE_PERIOD?".":t===ie.UNICODE_PERIOD+ie.UNICODE_PERIOD?"..":String(e).replace(ie.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(YA,"unescapeValue");function KA(e,t){if(Ue(e))return re.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+jr.EOL}!tt(s)&&s[0]===";"?r+=" "+s+n+jr.EOL:tt(s)||(r+=s+"="+n+jr.EOL)}catch{re.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(KA,"stringifyProps");function WA(e){let t;try{t=typeof e=="object"?JSON.stringify(e):e}catch(n){re.error(n),t=e}let r=String(Wc(t)),s=Buffer.byteLength(r)>xc?IA(r,xc)+"/blob":r;return{value:t,value_stripped:r,value_path:s}}a(WA,"valueConverter");function Qc(){let e;try{e=jr.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Qc,"getHomeDir");function QA(){let e=xt.join(Qc(),ie.HDB_HOME_DIR_NAME,ie.BOOT_PROPS_FILE_NAME);return pA.existsSync(e)||(e=xt.join(__dirname,"../","hdb_boot_properties.file")),e}a(QA,"getPropsFilePath");function JA(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(JA,"timeoutPromise");async function XA(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=CA.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(XA,"isPortTaken");function ZA(e){try{return ie.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){re.error(`Error checking operation against cluster ops ${t}`)}return!1}a(ZA,"isClusterOperation");function zA(e,t,r){if(global.hdb_socket_client!==void 0){re.trace(`Sending transaction to channel: ${e}`);let{hdb_user:s,hdb_auth_header:n,...i}=t;i.__originator||(i.__originator={}),i.__transacted=!0,r&&(i.__originator[r]=ie.ORIGINATOR_SET_VALUE),global.hdb_socket_client.publish(e,i)}}a(zA,"sendTransactionToSocketCluster");function jA(e,t){if(!global.hdb_schema[e])return nn.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return nn.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(jA,"checkGlobalSchemaTable");function eO(e,t){if(Ue(t)){re.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Ue(e)||tt(e)){re.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){re.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){re.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(eO,"getClusterUser");function tO(){qc.parsePromise=function(e,t){return new Promise(function(r,s){qc.parse(e,{header:!0,transformHeader:Jc,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(tO,"promisifyPapaParse");function Jc(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Jc,"removeBOM");function rO(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;re.info(`Got cluster status event response: ${LA(n)}`);try{i.cancel()}catch{re.error("Error trying to cancel timeout.")}s(n)})})}a(rO,"createEventPromise");async function sO(e){let t=!0,r=0;do await $c(wA*r++),(await kc.findPs(e)).length>0&&(t=!1);while(t&&r<yA);if(t)throw new Error(`process ${e} was not started`)}a(sO,"checkProcessRunning");function nO(e,t){let r=Xc(e);if(r)return r;let s=Zc(e,t);if(s)return s}a(nO,"checkSchemaTableExist");function Xc(e){if(!global.hdb_schema[e])return nn.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Xc,"checkSchemaExists");function Zc(e,t){if(!global.hdb_schema[e][t])return nn.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Zc,"checkTableExists");function iO(){let e=sn().utc().add(1,ie.MOMENT_DAYS_TAG).startOf(ie.MOMENT_DAYS_TAG).unix(),t=sn().utc().unix();return e-t}a(iO,"getStartOfTomorrowInSeconds");function aO(){return sn().utc().format("DD-MM-YYYY")}a(aO,"getLimitKey");function oO(e){try{let t=new bA(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){re.error("Got an error back ticking items."),re.error(t)}}a(oO,"backtickASTSchemaItems");async function _O(e){let t=jr.userInfo();(await kc.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),re.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(_O,"stopProcess");function cO(e){return[e]}a(cO,"createForkArgs");function uO(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(uO,"autoCastBoolean");function EO(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(EO,"getTableHashAttribute");function lO(e){return global?.hdb_schema?.[e]!==void 0}a(lO,"doesSchemaExist");function dO(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(dO,"doesTableExist");function hO(e){try{return JSON.stringify(e)}catch{return e}}a(hO,"stringifyObj");function SO(e){let t=sn.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(SO,"ms_to_time");function TO(e,t){let r=xt.basename(e,xt.extname(e));return xt.join(xt.dirname(e),r+t)}a(TO,"changeExtension")});var Ke=d((SB,jc)=>{"use strict";var ge=require("validate.js");ge.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||ge.validators.type.checks[t](e)?null:` must be a '${t}' value`};ge.validators.type.checks={Object:function(e){return ge.isObject(e)&&!ge.isArray(e)},Array:ge.isArray,Integer:ge.isInteger,Number:ge.isNumber,String:ge.isString,Date:ge.isDate,Boolean:function(e){return typeof e=="boolean"}};ge.validators.hasValidFileExt=function(e,t){return!ge.isString(e)||e===""||t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`};jc.exports={validateObject:fO,validateObjectAsync:RO,validateBySchema:mO};function fO(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=ge(e,t,{format:"flat"});return r?new Error(r):null}a(fO,"validateObject");async function RO(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await ge.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(RO,"validateObjectAsync");function mO(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(mO,"validateBySchema")});var ru=d((TB,tu)=>{"use strict";var AO=require("fs-extra"),U=require("joi"),OO=require("os"),{boolean:ae,string:Et,number:rt,array:Ua}=U.types(),eu=require("path"),NO=g(),an=p(),gO=Ke(),pO="log",IO="custom_functions",CO="Invalid logging.rotation.maxSize unit. Available units are G, M or K",bO="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",LO="rootPath config parameter is undefined",wO="clustering.enabled config parameter is undefined",It=rt.min(0).required(),on=Ua.items({host:Et.required(),port:It}).empty(null),es;tu.exports={configValidator:yO,routesValidator:HO,route_constraints:on};function yO(e){if(es=e.rootPath,an.isEmpty(es))throw LO;let t=ae.required(),r=U.valid("production","development").required(),s=rt.min(1).max(1e3).empty(null).default(PO),n=Et.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(BO),i=U.custom(DO).messages({"any.custom":"{:#label} {:#error}"}),o=Et.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),_=e.clustering?.enabled;if(an.isEmpty(_))throw wO;let c;return _===!0?c=U.object({enabled:t,hubServer:U.object({cluster:U.object({name:U.required().empty(null),network:U.object({port:It,routes:on}).required()}).required(),leafNodes:U.object({network:U.object({port:It}).required()}).required(),network:U.object({port:It}).required()}).required(),leafServer:U.object({network:U.object({port:It,routes:on}).required()}).required(),nodeName:o,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ae.required()}),user:U.string().required()}).required():c=U.object({enabled:t,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ae.required()})}).required(),U.object({clustering:c,customFunctions:U.object({enabled:t,network:U.object({cors:ae.required(),corsAccessList:Ua.required(),headersTimeout:rt.min(1).required(),https:ae.required(),keepAliveTimeout:rt.min(1).required(),port:It,timeout:rt.min(1).required()}),nodeEnv:r,root:n,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),ipc:U.object({network:U.object({port:It})}).required(),localStudio:U.object({enabled:t}).required(),logging:U.object({file:ae.required(),level:U.valid("notify","fatal","error","warn","info","debug","trace"),rotation:U.object({compress:ae.required(),dateFormat:Et.required(),maxSize:Et.custom(MO).required(),retain:rt.min(0).required(),rotate:ae.required(),rotateInterval:Et.required(),rotateModule:ae.required(),timezone:Et.required(),workerInterval:rt.min(1).required()}).required(),root:n,stdStreams:ae.required(),auditLog:ae.required()}).required(),operationsApi:U.object({authentication:U.object({operationTokenTimeout:U.required(),refreshTokenTimeout:U.required()}).required(),foreground:ae.required(),network:U.object({cors:ae.required(),corsAccessList:Ua.required(),headersTimeout:rt.min(1).required(),https:ae.required(),keepAliveTimeout:rt.min(1).required(),port:It,timeout:rt.min(1).required()}).required(),nodeEnv:r,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:Et.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:U.object({threads:s}).required(),storage:U.object({writeAsync:ae.required(),overlappingSync:ae.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(yO,"configValidator");function UO(e){return AO.existsSync(e)?null:`Specified path ${e} does not exist.`}a(UO,"doesPathExist");function DO(e,t){if(e===null)return;U.assert(e,Et.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+\.pem+$/).messages({"string.pattern.base":"must be a valid directory path and specify a .pem file"}));let r=UO(e);return r?t.message(r):e}a(DO,"validatePemFile");function MO(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(CO);let s=e.slice(0,-1);if(isNaN(parseInt(s)))return t.message(bO)}a(MO,"validateRotationMaxSize");function PO(e,t){let r=t.state.path.join("."),s=OO.cpus().length,n=s-1;return n<=2&&(n=2),NO.info(`Detected ${s} cores on this machine, defaulting ${r} to ${n}`),n}a(PO,"setDefaultThreads");function BO(e,t){if(!an.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(an.isEmpty(es))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return eu.join(es,IO);case"logging.root":return eu.join(es,pO);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(BO,"setDefaultRoot");function HO(e){let t=U.object({routes:on});return gO.validateBySchema({routes:e},t)}a(HO,"routesValidator")});var ts=d((fB,cu)=>{"use strict";var k=f(),He=p(),Te=g(),{configValidator:vO,routesValidator:su}=ru(),We=require("fs-extra"),GO=require("yaml"),dr=require("path"),qO=require("is-number"),un=require("properties-reader"),FO=require("lodash"),{handleHDBError:xO}=Y(),{HTTP_STATUS_CODES:VO,HDB_ERROR_MSGS:_n}=Ne(),{PACKAGE_ROOT:kO}=f(),$O="Unable to get config value because config is uninitialized",YO="Config successfully initialized",KO="Error backing up config file",WO="Empty parameter sent to getConfigValue",nu=dr.join(kO,"config","yaml",k.HDB_DEFAULT_CONFIG_FILE),QO="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",cn,pe;cu.exports={createConfigFile:JO,getDefaultConfig:XO,getConfigValue:iu,initConfig:au,flattenConfig:Vt,updateConfigValue:ou,updateConfigObject:ZO,getConfiguration:zO,setConfiguration:jO,readConfigFile:Pa,getClusteringRoutes:eN,initOldConfig:_u,getConfigFromFile:tN};function JO(e){let t=hr(nu);cn=Vt(t.toJSON());for(let i in e){let o=k.CONFIG_PARAM_MAP[i.toLowerCase()];if(o!==void 0){let _=o.split("_"),c=Da(o,e[i]);try{t.setIn([..._],c)}catch(u){Te.error(u)}}}Ma(t);let r=t.toJSON();pe=Vt(r);let s=t.getIn(["rootPath"]),n=dr.join(s,k.HDB_CONFIG_FILE);We.createFileSync(n),We.writeFileSync(n,String(t)),Te.trace(`Config file written to ${n}`)}a(JO,"createConfigFile");function XO(e){if(cn===void 0){let r=hr(nu);cn=Vt(r.toJSON())}let t=k.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return cn[t.toLowerCase()]}a(XO,"getDefaultConfig");function iu(e){if(He.isEmpty(e)){Te.error(WO);return}if(pe===void 0){Te.trace($O);return}let t=k.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return pe[t.toLowerCase()]}a(iu,"getConfigValue");function au(e=!1){if(pe===void 0||e){let t=He.getPropsFilePath();try{We.accessSync(t,We.constants.F_OK|We.constants.R_OK)}catch(o){throw Te.error(o),new Error(`HarperDB properties file at path ${t} does not exist`)}let s=un(t).get(k.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),n;if(s.includes("config/settings.js"))try{_u(s);return}catch(o){if(o.code!==k.NODE_ERROR_CODES.ENOENT)throw o}try{n=hr(s)}catch(o){if(o.code===k.NODE_ERROR_CODES.ENOENT){Te.trace(`HarperDB config file not found at ${s}.
5
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw Te.error(o),new Error(`Error reading HarperDB config file at ${s}`)}Ma(n);let i=n.toJSON();pe=Vt(i),Te.trace(YO)}}a(au,"initConfig");function Ma(e){let t=e.toJSON(),r=vO(t);if(r.error)throw _n.CONFIG_VALIDATION(r.error.message);e.setIn(["http","threads"],r.value.http.threads),e.setIn(["customFunctions","root"],r.value.customFunctions.root),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["operationsApi","tls","certificate"],r.value.operationsApi.tls.certificate),e.setIn(["operationsApi","tls","privateKey"],r.value.operationsApi.tls.privateKey),e.setIn(["operationsApi","tls","certificateAuthority"],r.value.operationsApi.tls.certificateAuthority),e.setIn(["customFunctions","tls","certificate"],r.value.customFunctions.tls.certificate),e.setIn(["customFunctions","tls","privateKey"],r.value.customFunctions.tls.privateKey),e.setIn(["customFunctions","tls","certificateAuthority"],r.value.customFunctions.tls.certificateAuthority),e.setIn(["clustering","tls","certificate"],r.value.clustering.tls.certificate),e.setIn(["clustering","tls","privateKey"],r.value.clustering.tls.privateKey),e.setIn(["clustering","tls","certificateAuthority"],r.value.clustering.tls.certificateAuthority)}a(Ma,"validateConfig");function ZO(e,t){pe===void 0&&(pe={});let r=k.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){Te.trace(`Unable to update config object because config param '${e}' does not exist`);return}pe[r.toLowerCase()]=t}a(ZO,"updateConfigObject");function ou(e,t,r=void 0,s=!1,n=!1){pe===void 0&&au();let i=iu(k.CONFIG_PARAM_MAP.hdb_root),o=dr.join(i,k.HDB_CONFIG_FILE),_=hr(o);if(r===void 0){let E=k.CONFIG_PARAM_MAP[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let l=E.split("_"),T=Da(E,t);_.setIn([...l],T)}else for(let E in r){let l=k.CONFIG_PARAM_MAP[E.toLowerCase()];if(l!==void 0){let T=l.split("_"),h=Da(l,r[E]);try{_.setIn([...T],h)}catch(A){Te.error(A)}}}Ma(_);let c=_.getIn(["rootPath"]),u=dr.join(c,k.HDB_CONFIG_FILE);if(s===!0)try{let E=dr.join(c,"backup",`${k.HDB_CONFIG_FILE}.bak`);We.copySync(o,E),Te.trace(`Config file: ${o} backed up to: ${E}`)}catch(E){Te.error(KO),Te.error(E)}We.writeFileSync(u,String(_)),n&&(pe=Vt(_.toJSON())),Te.trace(`Config parameter: ${e} updated with value: ${t}`)}a(ou,"updateConfigValue");function Vt(e){let t={};for(let r in e)if(!!e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])){let s=Vt(e[r]);for(let n in s)!s.hasOwnProperty(n)||(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}a(Vt,"flattenConfig");function Da(e,t){if(e===k.CONFIG_PARAMS.CLUSTERING_NODENAME||e===k.CONFIG_PARAMS.CLUSTERING_USER){if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(qO(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||He.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 He.autoCast(t)}a(Da,"castConfigValue");function zO(){let e=He.getPropsFilePath(),r=un(e).get(k.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return hr(r).toJSON()}a(zO,"getConfiguration");async function jO(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return ou(void 0,void 0,n,!0),QO}catch(i){throw typeof i=="string"||i instanceof String?xO(i,i,VO.BAD_REQUEST,void 0,void 0,!0):i}}a(jO,"setConfiguration");function Pa(){let e=He.getPropsFilePath();try{We.accessSync(e,We.constants.F_OK|We.constants.R_OK)}catch(n){throw Te.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=un(e).get(k.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return hr(r).toJSON()}a(Pa,"readConfigFile");function hr(e){return GO.parseDocument(We.readFileSync(e,"utf8"),{simpleKeys:!0})}a(hr,"parseYamlDoc");function eN(){let e=Pa(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=He.isEmptyOrZeroLength(t)?[]:t;let r=su(t);if(r)throw _n.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=He.isEmptyOrZeroLength(s)?[]:s;let n=su(s);if(n)throw _n.CONFIG_VALIDATION(n.message);if(!He.isEmptyOrZeroLength(s)&&!He.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(_=>_.host===o.host&&_.port===o.port));if(!He.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw _n.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(eN,"getClusteringRoutes");function _u(e){let t=un(e);pe={};for(let r in k.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(He.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=k.CONFIG_PARAM_MAP[r].toLowerCase();n===k.CONFIG_PARAMS.LOGGING_ROOT?pe[n]=dr.dirname(s):pe[n]=s}return pe}a(_u,"initOldConfig");function tN(e){let t=Pa();return FO.get(t,e.replaceAll("_","."))}a(tN,"getConfigFromFile")});var Z=d((RB,Eu)=>{"use strict";var Ba=require("fs-extra"),st=require("path"),rN=require("os"),sN=require("properties-reader"),rs=g(),Sr=p(),C=f(),En=ts(),nN="Error initializing environment manager",ln="BOOT_PROPS_FILE_PATH",uu=!1,iN={[C.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[C.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[C.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},lt={};Eu.exports={BOOT_PROPS_FILE_PATH:ln,getHdbBasePath:aN,setHdbBasePath:oN,get:_N,initSync:uN,setProperty:P,initTestEnvironment:EN};function aN(){return lt[C.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(aN,"getHdbBasePath");function oN(e){lt[C.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(oN,"setHdbBasePath");function _N(e){let t=En.getConfigValue(e);return t===void 0?lt[e]:t}a(_N,"get");function P(e,t){iN[e]&&(lt[e]=t),En.updateConfigObject(e,t)}a(P,"setProperty");function cN(){let e;try{e=Sr.getPropsFilePath(),Ba.accessSync(e,Ba.constants.F_OK|Ba.constants.R_OK),uu=!0;let t=sN(e);return lt[C.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(C.HDB_SETTINGS_NAMES.INSTALL_USER),lt[C.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(C.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),lt[ln]=e,!0}catch{return rs.trace(`Environment manager found no properties file at ${e}`),!1}}a(cN,"doesPropFileExist");function uN(e=!1){try{(uu||cN())&&(En.initConfig(e),lt[C.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=En.getConfigValue(C.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){rs.error(nN),rs.error(t),console.error(t),process.exit(1)}}a(uN,"initSync");function EN(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:_}=e,c=st.join(__dirname,"../../","unitTests");lt[ln]=st.join(c,"hdb_boot_properties.file"),P(C.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,st.join(c,"settings.test")),P(C.HDB_SETTINGS_NAMES.INSTALL_USER,rN.userInfo().username),P(C.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,st.join(c,"envDir","utility","keys","privateKey.pem")),P(C.HDB_SETTINGS_NAMES.CERT_KEY,st.join(c,"envDir","utility","keys","certificate.pem")),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,st.join(c,"envDir","utility","keys","privateKey.pem")),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,st.join(c,"envDir","utility","keys","certificate.pem")),P(C.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),P(C.HDB_SETTINGS_NAMES.LOG_PATH_KEY,st.join(c,"envDir","log")),P(C.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),P(C.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),P(C.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),P(C.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,st.join(c,"envDir")),P(C.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Sr.isEmpty(n)?!0:n),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Sr.isEmpty(n)?!0:n),P(C.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),P(C.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Sr.isEmpty(i)?!1:i),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Sr.isEmpty(i)?!1:i),P(C.HDB_SETTINGS_NAMES.IPC_SERVER_PORT,9383),P(C.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),P(C.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),P(C.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),P(C.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),P(C.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,st.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),P(C.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Sr.isEmpty(_)?!1:_),o&&(P("CORS_ACCESSLIST",o),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(P(C.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(P(C.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(P(C.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${ln}. Please check your boot props and settings files`;rs.fatal(r),rs.error(t)}}a(EN,"initTestEnvironment")});var De=d((AB,du)=>{"use strict";var{platform:mB}=require("os"),lN="nats-server.zip",Ha="nats-server",dN=process.platform==="win32"?`${Ha}.exe`:Ha,va="HDB",hN=/^[^\s.,*>]+$/,lu="__request__",SN=a(e=>`${e}.${lu}`,"REQUEST_SUBJECT"),TN={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},fN={HUB:"hub.pid",LEAF:"leaf.pid"},RN={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},mN={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:va,deliver_subject:"__HDB__.WORKQUEUE"},AN={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:va,deliver_subject:"HDB.SCHEMAQUEUE"},ON={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:va,deliver_subject:"HDB.USERQUEUE"},NN={SUCCESS:"success",ERROR:"error"},gN={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},pN={TXN:"txn",MSGID:"msgid"};du.exports={NATS_SERVER_ZIP:lN,NATS_SERVER_NAME:Ha,NATS_BINARY_NAME:dN,PID_FILES:fN,NATS_CONFIG_FILES:TN,SERVER_SUFFIX:RN,WORK_QUEUE_CONSUMER_NAMES:mN,SCHEMA_QUEUE_CONSUMER_NAMES:AN,USER_QUEUE_CONSUMER_NAMES:ON,NATS_TERM_CONSTRAINTS_RX:hN,REQUEST_SUFFIX:lu,UPDATE_REMOTE_RESPONSE_STATUSES:NN,CLUSTER_STATUS_STATUSES:gN,REQUEST_SUBJECT:SN,SUBJECT_PREFIXES:pN}});var ns=d((OB,fu)=>{"use strict";var ss=require("crypto"),Su="aes-256-cbc",IN=32,CN=16,Ga=64,Tu=32,bN=Ga+Tu,hu=new Map;fu.exports={encrypt:LN,decrypt:wN,createNatsTableStreamName:yN};function LN(e){let t=ss.randomBytes(IN),r=ss.randomBytes(CN),s=ss.createCipheriv(Su,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),_=n.toString("hex");return i+o+_}a(LN,"encrypt");function wN(e){let t=e.substr(0,Ga),r=e.substr(Ga,Tu),s=e.substr(bN,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=ss.createDecipheriv(Su,Buffer.from(t,"hex"),n),_=o.update(i);return _=Buffer.concat([_,o.final()]),_.toString()}a(wN,"decrypt");function yN(e,t){let r=`${e}.${t}`,s=hu.get(r);return s||(s=ss.createHash("md5").update(`${e}.${t}`).digest("hex"),hu.set(r,s)),s}a(yN,"createNatsTableStreamName")});var qa=d((NB,Ru)=>{"use strict";var dn=class{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")}};a(dn,"BridgeMethods");Ru.exports=dn});var kt=d((IB,Nu)=>{"use strict";var mu=Ne().LMDB_ERRORS_ENUM,gB=require("lmdb"),UN=Se(),pB=require("buffer").Buffer,DN=require("microtime"),{OVERFLOW_MARKER:Au,MAX_SEARCH_KEY_LENGTH:hn}=UN,Ou=["number","string","symbol","boolean","bigint"];function MN(e){if(!e)throw new Error(mu.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(mu.INVALID_ENVIRONMENT)}a(MN,"validateEnv");function PN(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(PN,"stringifyData");function BN(e){return e instanceof Date?e.valueOf():e}a(BN,"convertKeyValueToWrite");function HN(e){if(e==null)return;if(Ou.includes(typeof e))return e.length>hn?[e.slice(0,hn)+Au]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];Ou.includes(typeof n)&&(n.length>hn?t.push(n.slice(0,hn)+Au):t.push(n))}}return t}a(HN,"getIndexedValues");function vN(){let e=DN.now().toString(),t=e.length-3;return Number(e.slice(0,t)+"."+e.slice(t))}a(vN,"getMicroTime");Nu.exports={validateEnv:MN,stringifyData:PN,convertKeyValueToWrite:BN,getMicroTime:vN,getIndexedValues:HN}});var pu=d((CB,gu)=>{"use strict";var Sn=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(Sn,"DBIDefinition");gu.exports=Sn});var Cu=d((bB,Iu)=>{"use strict";var Tn=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache={validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(Tn,"OpenDBIObject");Iu.exports=Tn});var Lu=d((LB,bu)=>{"use strict";var fn=class{constructor(t,r,s,n,i=!1,o=!1,_=void 0){this.path=t,this.mapSize=r,this.maxDbs=s,this.maxReaders=n,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=i,this.trackMetrics=!0,this.noSync=o,_!==void 0&&(this.overlappingSync=_)}};a(fn,"OpenEnvironmentObject");bu.exports=fn});var G=d((yB,Fu)=>{"use strict";var Fa=require("lmdb"),ve=require("fs-extra"),Qe=require("path"),mn=kt(),wu=g(),oe=Ne().LMDB_ERRORS_ENUM,An=pu(),xa=Cu(),yu=Lu(),Ct=Se(),wB=f(),is=Z();is.initSync();var Uu=is.get("STORAGE_WRITEASYNC")===!0||is.get("STORAGE_WRITEASYNC")==="true"||is.get("STORAGE_WRITEASYNC")==="TRUE",Du=is.get("STORAGE_OVERLAPPINGSYNC"),Mu=1024*1024*1024,Pu=1e4,Bu=1e3,Je=Ct.INTERNAL_DBIS_NAME,Hu=Ct.DBI_DEFINITION_NAME,GN="data.mdb",qN="lock.mdb",as=".mdb",FN="-lock",Rn=class{constructor(t,r,s=!1){this.dbi=Ge(t,r),this.key_type=this.dbi[Ct.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Ct.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Fa.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(Rn,"TransactionCursor");function Va(e,t){if(e===void 0)throw new Error(oe.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(oe.ENV_NAME_REQUIRED)}a(Va,"pathEnvNameValidation");async function ka(e,t,r=!0){try{await ve.access(e)}catch(s){throw s.code==="ENOENT"?new Error(oe.INVALID_BASE_PATH):s}try{let s=Qe.join(e,t+as);return await ve.access(s,ve.constants.R_OK|ve.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await ve.access(Qe.join(e,t,GN),ve.constants.R_OK|ve.constants.F_OK),Qe.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(oe.INVALID_ENVIRONMENT)}else throw new Error(oe.INVALID_ENVIRONMENT);throw s}}a(ka,"validateEnvironmentPath");function On(e,t){if(mn.validateEnv(e),t===void 0)throw new Error(oe.DBI_NAME_REQUIRED)}a(On,"validateEnvDBIName");async function xN(e,t,r=!1,s=!1){Va(e,t),t=t.toString();try{return await ka(e,t,s),$a(e,t,r)}catch(n){if(n.message===oe.INVALID_ENVIRONMENT){let i=Qe.join(e,t);await ve.mkdirp(s?i:e);let o=new yu(s?i:i+as,Mu,Pu,Bu,!1,Uu,Du),_=Fa.open(o);_.dbis=Object.create(null);let c=new xa(!1);_.openDB(Je,c),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=Ya(e,t,r);return _[Ct.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=_,_}throw n}}a(xN,"createEnvironment");async function VN(e,t,r,s=!0){let n=await $a(e,t);if(r===void 0)throw new Error(oe.DESTINATION_PATH_REQUIRED);try{await ve.access(Qe.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(oe.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(VN,"copyEnvironment");async function $a(e,t,r=!1){Va(e,t),t=t.toString();let s=Ya(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 ka(e,t),i=Qe.join(e,t+as),o=n!=i,_=new yu(n,Mu,Pu,Bu,o,Uu,Du),c=Fa.open(_);c.dbis=Object.create(null);let u=Gu(c);for(let E=0;E<u.length;E++)Ge(c,u[E]);return c[Ct.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=c,c}a($a,"openEnvironment");async function kN(e,t,r=!1){Va(e,t),t=t.toString();let s=Qe.join(e,t+as),n=await ka(e,t);if(global.lmdb_map!==void 0){let i=Ya(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await vu(o),delete global.lmdb_map[i]}}await ve.remove(n),await ve.remove(n===s?n+FN:Qe.join(Qe.dirname(n),qN))}a(kN,"deleteEnvironment");async function vu(e){mn.validateEnv(e);let t=e[Ct.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(vu,"closeEnvironment");function Ya(e,t,r=!1){let n=`${Qe.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Ya,"getCachedEnvironmentName");function $N(e){mn.validateEnv(e);let t=Object.create(null),r=Ge(e,Je);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Je)try{t[s]=Object.assign(new An,n)}catch{wu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a($N,"listDBIDefinitions");function Gu(e){mn.validateEnv(e);let t=[],r=Ge(e,Je);for(let{key:s}of r.getRange({start:!1}))s!==Je&&t.push(s);return t}a(Gu,"listDBIs");function YN(e,t){let s=Ge(e,Je).getEntry(t),n=new An;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{wu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(YN,"getDBIDefinition");function qu(e,t,r,s=!1){if(On(e,t),t=t.toString(),t===Je)throw new Error(oe.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ge(e,t)}catch(n){if(n.message===oe.DBI_DOES_NOT_EXIST){let i=new xa(r,s===!0),o=e.openDB(t,i),_=new An(r===!0,s);return o[Hu]=_,Ge(e,Je).putSync(t,_),e.dbis[t]=o,o}throw n}}a(qu,"createDBI");function Ge(e,t){if(On(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Je?r=YN(e,t):r=new An,r===void 0)throw new Error(oe.DBI_DOES_NOT_EXIST);let s;try{let n=new xa(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(oe.DBI_DOES_NOT_EXIST):n}return s[Hu]=r,e.dbis[t]=s,s}a(Ge,"openDBI");function KN(e,t){On(e,t),t=t.toString();let r=Ge(e,t),s=r.getStats();return r[Ct.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(KN,"statDBI");async function WN(e,t){try{let r=Qe.join(e,t+as);return(await ve.stat(r)).size}catch{throw new Error(oe.INVALID_ENVIRONMENT)}}a(WN,"environmentDataSize");function QN(e,t){if(On(e,t),t=t.toString(),t===Je)throw new Error(oe.CANNOT_DROP_INTERNAL_DBIS_NAME);Ge(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ge(e,Je).removeSync(t)}a(QN,"dropDBI");function JN(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{Ge(e,n)}catch(i){if(i.message===oe.DBI_DOES_NOT_EXIST)qu(e,n,n!==t,n===t);else throw i}}}a(JN,"initializeDBIs");Fu.exports={openDBI:Ge,openEnvironment:$a,createEnvironment:xN,listDBIs:Gu,listDBIDefinitions:$N,createDBI:qu,dropDBI:QN,statDBI:KN,deleteEnvironment:kN,initializeDBIs:JN,TransactionCursor:Rn,environmentDataSize:WN,copyEnvironment:VN,closeEnvironment:vu}});var Vu=d((UB,xu)=>{"use strict";var Nn=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(Nn,"InsertRecordsResponseObject");xu.exports=Nn});var $u=d((DB,ku)=>{"use strict";var gn=class{constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};a(gn,"UpdateRecordsResponseObject");ku.exports=gn});var Ku=d((MB,Yu)=>{"use strict";var pn=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(pn,"UpsertRecordsResponseObject");Yu.exports=pn});var Tr=d((vB,Qu)=>{"use strict";var XN=G(),ZN=Vu(),zN=$u(),jN=Ku(),_s=kt(),os=Ne().LMDB_ERRORS_ENUM,eg=Se(),bt=f(),tg=p(),rg=require("uuid"),PB=require("lmdb"),{handleHDBError:sg,hdb_errors:ng}=Y(),{OVERFLOW_MARKER:BB,MAX_SEARCH_KEY_LENGTH:HB}=eg,Ka=bt.TIME_STAMP_NAMES_ENUM.CREATED_TIME,$t=bt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function ig(e,t,r,s,n=!0){Xa(e,t,r,s),Wa(e,t,r);let i=new ZN,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c];Wu(u,!0,n);let E=ag(e,t,r,u),l=u[t];o.push(E),_.push(l)}return Qa(o,_,s,i)}a(ig,"insertRecords");function ag(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 _=s[o];if(typeof _=="function"){let u=_([[{}]]);Array.isArray(u)&&(_=u[0][bt.FUNC_VAL],s[o]=_)}let c=_s.getIndexedValues(_);if(c)for(let u=0,E=c.length;u<E;u++)e.dbis[o].put(c[u],n)}e.dbis[t].put(n,s,s[$t])})}a(ag,"insertRecord");function og(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(og,"removeSkippedRecords");function Wu(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[$t]))&&(e[$t]=s),t===!0?(r===!0||!Number.isInteger(e[Ka]))&&(e[Ka]=s):delete e[Ka]}a(Wu,"setTimestamps");function Wa(e,t,r){r.indexOf(bt.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(bt.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(bt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(bt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),XN.initializeDBIs(e,t,r)}a(Wa,"initializeTransaction");async function _g(e,t,r,s,n=!0){Xa(e,t,r,s),Wa(e,t,r);let i=new zN,o=[],_=[],c=[];for(let u=0;u<s.length;u++){let E=s[u],l=E[t],T;try{T=Ja(e,t,E,l,i,!0,n)}catch{i.skipped_hashes.push(l),o.push(u);continue}_.push(T),c.push(l)}return Qa(_,c,s,i,o)}a(_g,"updateRecords");async function cg(e,t,r,s,n=!0){try{Xa(e,t,r,s)}catch(c){throw sg(c,c.message,ng.HTTP_STATUS_CODES.BAD_REQUEST)}Wa(e,t,r);let i=new jN,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c],E;tg.isEmpty(u[t])?(E=rg.v4(),u[t]=E):E=u[t];let l=Ja(e,t,u,E,i,!1,n);o.push(l),_.push(E)}return Qa(o,_,s,i)}a(cg,"upsertRecords");async function Qa(e,t,r,s,n=[]){let i=await Promise.all(e);for(let o=0,_=i.length;o<_;o++)i[o]===!0?s.written_hashes.push(t[o]):(s.skipped_hashes.push(t[o]),n.push(o));return s.txn_time=_s.getMicroTime(),og(r,n),s}a(Qa,"finalizeWrite");function Ja(e,t,r,s,n,i=!1,o=!0){let _=e.dbis[t],c=_.getEntry(s),u=c?.value,E=u;if(!u){if(i)return!1;u={}}if(Wu(r,!E,o),Number.isInteger(r[$t])&&u[$t]>r[$t])return!1;E&&n.original_records.push(u);let l,T=a(()=>{for(let A in r){if(!r.hasOwnProperty(A)||A===t)continue;let O=r[A],I=e.dbis[A];if(I===void 0)continue;let X=u[A];if(typeof O=="function"){let W=O([[u]]);Array.isArray(W)&&(O=W[0][bt.FUNC_VAL],r[A]=O)}if(O===X)continue;let v=_s.getIndexedValues(X);if(v)for(let W=0,$e=v.length;W<$e;W++)I.remove(v[W],s);if(v=_s.getIndexedValues(O),v)for(let W=0,$e=v.length;W<$e;W++)I.put(v[W],s)}let h=Object.assign({},u,r);_.put(s,h,h[$t])},"do_put");return c?l=_.ifVersion(s,c.version,T):l=_.ifNoExists(s,T),l.then(h=>h?!0:Ja(e,t,r,s,n,i,o))}a(Ja,"updateUpsertRecord");function ug(e,t,r){if(_s.validateEnv(e),t===void 0)throw new Error(os.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(os.WRITE_ATTRIBUTES_REQUIRED):new Error(os.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(ug,"validateBasic");function Xa(e,t,r,s){if(ug(e,t,r),!Array.isArray(s))throw s===void 0?new Error(os.RECORDS_REQUIRED):new Error(os.RECORDS_MUST_BE_ARRAY)}a(Xa,"validateWrite");Qu.exports={insertRecords:ig,updateRecords:_g,upsertRecords:cg}});var V=d((GB,Xu)=>{"use strict";var Za=f(),fr=Z(),za=require("path");fr.initSync();var In,Cn,bn;function Ju(){if(In!==void 0)return In;if(fr.getHdbBasePath()!==void 0)return In=za.join(fr.getHdbBasePath(),Za.SCHEMA_DIR_NAME),In}a(Ju,"getBaseSchemaPath");function Eg(){if(Cn!==void 0)return Cn;if(fr.getHdbBasePath()!==void 0)return Cn=za.join(Ju(),Za.SYSTEM_SCHEMA_NAME),Cn}a(Eg,"getSystemSchemaPath");function lg(){if(bn!==void 0)return bn;if(fr.getHdbBasePath()!==void 0)return bn=za.join(fr.getHdbBasePath(),Za.TRANSACTIONS_DIR_NAME),bn}a(lg,"getTransactionAuditStorePath");Xu.exports={getBaseSchemaPath:Ju,getSystemSchemaPath:Eg,getTransactionAuditStorePath:lg}});var Yt=d((qB,dg)=>{dg.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_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var Rr=d((FB,ju)=>{"use strict";var zu=p(),Zu=f(),wn=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,ja=require("joi"),Ln={schema_format:{pattern:wn,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},hg=ja.alternatives(ja.string().min(1).max(Ln.schema_length.maximum).pattern(wn).messages({"string.pattern.base":"{:#label} "+Ln.schema_format.message}),ja.number()).required();function Sg(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Ln.schema_length.maximum?`'${e}' maximum of 250 characters`:wn.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(Sg,"checkValidTable");function Tg(e,t){return zu.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(Tg,"validateSchemaExists");function fg(e,t){let r=t.state.ancestors[0].schema;return zu.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(fg,"validateTableExists");function Rg(e,t){return e.toLowerCase()===Zu.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${Zu.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(Rg,"validateSchemaName");ju.exports={common_validators:Ln,schema_regex:wn,hdb_schema_table:hg,validateSchemaExists:Tg,validateTableExists:fg,validateSchemaName:Rg,checkValidTable:Sg}});var yn=d((xB,eE)=>{var{common_validators:Lt}=Rr(),cs=Ke(),Xe="is required",q={schema:{presence:!0,format:Lt.schema_format,length:Lt.schema_length},table:{presence:!0,format:Lt.schema_format,length:Lt.schema_length},attribute:{presence:!0,format:Lt.schema_format,length:Lt.schema_length},hash_attribute:{presence:!0,format:Lt.schema_format,length:Lt.schema_length}};function us(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(us,"makeAttributesStrings");function mg(e){return e=us(e),q.schema.presence={message:Xe},q.table.presence=!1,q.attribute.presence=!1,q.hash_attribute.presence=!1,cs.validateObject(e,q)}a(mg,"schema_object");function Ag(e){return e=us(e),q.schema.presence={message:Xe},q.table.presence={message:Xe},q.attribute.presence=!1,q.hash_attribute.presence=!1,cs.validateObject(e,q)}a(Ag,"table_object");function Og(e){return e=us(e),q.schema.presence={message:Xe},q.table.presence={message:Xe},q.attribute.presence=!1,q.hash_attribute.presence={message:Xe},cs.validateObject(e,q)}a(Og,"create_table_object");function Ng(e){return e=us(e),q.schema.presence={message:Xe},q.table.presence={message:Xe},q.attribute.presence={message:Xe},q.hash_attribute.presence=!1,cs.validateObject(e,q)}a(Ng,"attribute_object");function gg(e){return e=us(e),q.schema.presence={message:Xe},q.table.presence={message:Xe},q.attribute.presence=!1,q.hash_attribute.presence=!1,cs.validateObject(e,q)}a(gg,"describe_table");function pg(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(pg,"validateTableResidence");eE.exports={schema_object:mg,create_table_object:Og,table_object:Ag,attribute_object:Ng,describe_table:gg,validateTableResidence:pg}});var rE=d((VB,tE)=>{"use strict";var Ig=require("uuid"),Un=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Ig.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(Un,"CreateAttributeObject");tE.exports=Un});var Mn=d((kB,sE)=>{"use strict";var Cg=rE(),Dn=class extends Cg{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(Dn,"LMDBCreateAttributeObject");sE.exports=Dn});var iE=d(($B,nE)=>{"use strict";nE.exports=Lg;var bg="inserted";function Lg(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===bg?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Lg,"returnObject")});var Pn=d((YB,oE)=>{"use strict";var wg=f(),eo=G(),yg=Tr(),{getSystemSchemaPath:Ug,getBaseSchemaPath:Dg}=V(),Mg=require("path"),Pg=Yt(),Bg=yn(),Hg=Mn(),vg=iE(),{handleHDBError:Gg,hdb_errors:qg}=Y(),Fg=p(),to=Pg.hdb_attribute,aE=[];for(let e=0;e<to.attributes.length;e++)aE.push(to.attributes[e].attribute);var xg="inserted";oE.exports=Vg;async function Vg(e){let t=Bg.attribute_object(e);if(t)throw Gg(new Error,t.message,qg.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Fg.isEmpty(e.dup_sort)||e.dup_sort=="true";let r=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(r=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(r)&&r.length>0){for(let n of r)if(n.attribute===e.attribute)throw new Error(`attribute '${n.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new Hg(e.schema,e.table,e.attribute,e.id);try{let n=await eo.openEnvironment(Mg.join(Dg(),e.schema.toString()),e.table);if(n.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);eo.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await eo.openEnvironment(Ug(),wg.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:o,skipped_hashes:_}=await yg.insertRecords(i,to.hash_attribute,aE,[s]);return vg(xg,o,{records:[s]},_)}catch(n){throw n}}a(Vg,"lmdbCreateAttribute")});var so=d((KB,cE)=>{var{hdb_schema_table:_E}=Rr(),kg=Ke(),ro=require("joi"),$g={undefined:"undefined",null:"null"},Yg=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||$g[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"),Kg=ro.object({schema:_E,table:_E,records:ro.array().items(ro.object().custom(Yg)).required()});cE.exports=function(e){return kg.validateBySchema(e,Kg)}});var Bn=d((QB,EE)=>{"use strict";var dt=p(),uE=g(),WB=so();EE.exports=Wg;function Wg(e){if(dt.isEmpty(e))throw new Error("invalid update parameters defined.");if(dt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(dt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");if(!Array.isArray(e.records))throw new Error("records must be an array");let t=global.hdb_schema[e.schema][e.table];if(dt.isEmpty(t))throw new Error(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.hash_attribute,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&dt.isEmptyOrZeroLength(o[r]))throw uE.error("a valid hash attribute must be provided with update record:",o),new Error("a valid hash attribute must be provided with update record, check log for more info");if(!dt.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw uE.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Error(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!dt.isEmpty(o[r])&&o[r]!==""&&s.has(dt.autoCast(o[r]))&&(o.skip=!0),s.add(dt.autoCast(o[r]));for(let _ in o)n[_]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(Wg,"insertUpdateValidate")});var vn=d((JB,lE)=>{"use strict";var Qg=f().OPERATIONS_ENUM,Hn=class{constructor(t,r,s,n,i=void 0){this.operation=Qg.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(Hn,"InsertObject");lE.exports=Hn});var qn=d((ZB,dE)=>{"use strict";var XB=vn(),Gn=f(),io=p(),no=g(),Jg=require("uuid"),{handleHDBError:Es,hdb_errors:Xg}=Y(),{HDB_ERROR_MSGS:ls,HTTP_STATUS_CODES:ds}=Xg;dE.exports=Zg;function Zg(e,t,r){for(let n=0;n<t.length;n++)zg(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];jg(i,r,e.operation)}}a(Zg,"processRows");function zg(e){if(Buffer.byteLength(String(e))>Gn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Es(new Error,ls.ATTR_NAME_LENGTH_ERR(e),ds.BAD_REQUEST,void 0,void 0,!0);if(io.isEmptyOrZeroLength(e)||io.isEmpty(e.trim()))throw Es(new Error,ls.ATTR_NAME_NULLISH_ERR,ds.BAD_REQUEST,void 0,void 0,!0)}a(zg,"validateAttribute");function jg(e,t,r){if(!e.hasOwnProperty(t)||io.isEmptyOrZeroLength(e[t])){if(r===Gn.OPERATIONS_ENUM.INSERT||r===Gn.OPERATIONS_ENUM.UPSERT){e[t]=Jg.v4();return}throw no.error("Update transaction aborted due to record with no hash value:",e),Es(new Error,ls.RECORD_MISSING_HASH_ERR,ds.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Gn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw no.error(e),Es(new Error,ls.HASH_VAL_LENGTH_ERR,ds.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw no.error(e),Es(new Error,ls.INVALID_FORWARD_SLASH_IN_HASH_ERR,ds.BAD_REQUEST,void 0,void 0,!0)}a(jg,"validateHash")});var SE=d((zB,hE)=>{"use strict";var Fn=class{constructor(t,r){this.type=t,this.message=r}};a(Fn,"IPCEventObject");hE.exports=Fn});var Kt=d((jB,TE)=>{"use strict";var ep=g(),ao=p(),tp=f(),{IPC_ERRORS:hs}=Ne();TE.exports={sendIpcEvent:rp,validateEvent:sp,SchemaEventMsg:np,UserEventMsg:ip};function rp(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):ep.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}a(rp,"sendIpcEvent");function sp(e){if(typeof e!="object")return hs.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||ao.isEmpty(e.type))return hs.MISSING_TYPE;if(!e.hasOwnProperty("message")||ao.isEmpty(e.message))return hs.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||ao.isEmpty(e.message.originator))return hs.MISSING_ORIGIN;if(tp.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return hs.INVALID_EVENT(e.type)}a(sp,"validateEvent");function np(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(np,"SchemaEventMsg");function ip(e){this.originator=e}a(ip,"UserEventMsg")});var Ss=d((tH,AE)=>{"use strict";var fE=f(),eH=p(),xn=g(),RE=SE(),{sendIpcEvent:mE}=Kt();function ap(e){try{xn.trace("signalSchemaChange called with message:",e);let t=new RE(fE.IPC_EVENT_TYPES.SCHEMA,e);mE(t)}catch(t){xn.error(t)}}a(ap,"signalSchemaChange");function op(e){try{xn.trace("signalUserChange called with message:",e);let t=new RE(fE.IPC_EVENT_TYPES.USER,e);mE(t)}catch(t){xn.error(t)}}a(op,"signalUserChange");AE.exports={signalSchemaChange:ap,signalUserChange:op}});var Vn=d((rH,NE)=>{"use strict";var OE=p(),_p=f(),cp=g(),up=Pn(),Ep=Mn(),lp=Ss(),{SchemaEventMsg:dp}=Kt(),hp="already exists in";NE.exports=Sp;async function Sp(e,t,r){try{if(OE.isEmptyOrZeroLength(r))return r;let s=[];OE.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 Tp(e,t.schema,t.name,i)})),n}catch(s){throw s}}a(Sp,"lmdbCheckForNewAttributes");async function Tp(e,t,r,s){let n=new Ep(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await fp(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(hp))cp.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(Tp,"createNewAttribute");async function fp(e){let t;try{return t=await up(e),lp.signalSchemaChange(new dp(process.pid,_p.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}a(fp,"createAttribute")});var mr=d((sH,gE)=>{"use strict";var kn=class{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}};a(kn,"LMDBTransactionObject");gE.exports=kn});var IE=d((nH,pE)=>{"use strict";var Rp=mr(),mp=f().OPERATIONS_ENUM,$n=class extends Rp{constructor(t,r,s,n,i=void 0){super(mp.INSERT,r,s,n,i),this.records=t}};a($n,"LMDBInsertTransactionObject");pE.exports=$n});var bE=d((iH,CE)=>{"use strict";var Ap=mr(),Op=f().OPERATIONS_ENUM,Yn=class extends Ap{constructor(t,r,s,n,i,o=void 0){super(Op.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(Yn,"LMDBUpdateTransactionObject");CE.exports=Yn});var wE=d((aH,LE)=>{"use strict";var Np=mr(),gp=f().OPERATIONS_ENUM,Kn=class extends Np{constructor(t,r,s,n,i,o=void 0){super(gp.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(Kn,"LMDBUpsertTransactionObject");LE.exports=Kn});var UE=d((oH,yE)=>{"use strict";var pp=mr(),Ip=f().OPERATIONS_ENUM,Wn=class extends pp{constructor(t,r,s,n,i=void 0){super(Ip.DELETE,s,n,t,i),this.original_records=r}};a(Wn,"LMDBDeleteTransactionObject");yE.exports=Wn});var Ts=d((_H,BE)=>{"use strict";var Cp=require("path"),DE=G(),bp=IE(),Lp=bE(),wp=wE(),yp=UE(),Ar=Se(),ME=p(),{CONFIG_PARAMS:Up}=f(),PE=Z();PE.initSync();var Qn=f().OPERATIONS_ENUM,{getTransactionAuditStorePath:Dp}=V();BE.exports=Mp;async function Mp(e,t){if(PE.get(Up.LOGGING_AUDITLOG)===!1)return;let r=Cp.join(Dp(),e.schema.toString()),s=await DE.openEnvironment(r,e.table,!0),n=Pp(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){DE.initializeDBIs(s,Ar.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ar.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[Ar.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Ar.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),ME.isEmpty(n.user_name)||s.dbis[Ar.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Ar.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}catch(i){throw i}}}a(Mp,"writeTransaction");function Pp(e,t){let r=ME.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Qn.INSERT)return new bp(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Qn.UPDATE)return new Lp(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Qn.UPSERT)return new wp(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Qn.DELETE)return new yp(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(Pp,"createTransactionObject")});var oo=d((uH,HE)=>{"use strict";var Bp=Bn(),cH=vn(),Or=f(),Hp=qn(),vp=Tr().insertRecords,Gp=G(),qp=require("path"),Fp=g(),xp=Vn(),{getBaseSchemaPath:Vp}=V(),kp=Ts();HE.exports=$p;async function $p(e){try{let{schema_table:t,attributes:r}=Bp(e);Hp(e,r,t.hash_attribute),e.schema!==Or.SYSTEM_SCHEMA_NAME&&(r.includes(Or.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Or.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Or.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Or.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await xp(e.hdb_auth_header,t,r),n=qp.join(Vp(),e.schema.toString()),i=await Gp.openEnvironment(n,e.table),o=await vp(i,t.hash_attribute,r,e.records,e[Or.CLUSTERING_FLAG]!==!0);try{await kp(e,o)}catch(_){Fp.error(`unable to write transaction due to ${_.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($p,"lmdbCreateRecords")});var qE=d((EH,GE)=>{"use strict";var vE=f(),Yp=oo(),Kp=vn(),Wp=require("fs-extra"),Qp=require("path"),{getBaseSchemaPath:Jp}=V();GE.exports=Xp;async function Xp(e){let t=[{name:e.schema,createddate:Date.now()}],r=new Kp(vE.SYSTEM_SCHEMA_NAME,vE.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Yp(r),await Wp.mkdirp(Qp.join(Jp(),e.schema.toString()))}a(Xp,"lmdbCreateSchema")});var xE=d((lH,FE)=>{"use strict";var Jn=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(Jn,"DeleteRecordsResponseObject");FE.exports=Jn});var uo=d((TH,$E)=>{"use strict";var VE=G(),_o=kt(),co=Ne().LMDB_ERRORS_ENUM,Zp=Se(),kE=g(),dH=p(),zp=require("lmdb"),jp=xE(),{OVERFLOW_MARKER:hH,MAX_SEARCH_KEY_LENGTH:SH}=Zp;async function eI(e,t,r){if(_o.validateEnv(e),t===void 0)throw new Error(co.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(co.IDS_REQUIRED):new Error(co.IDS_MUST_BE_ARRAY);try{let s=VE.listDBIs(e);VE.initializeDBIs(e,t,s);let n=new jp,i,o=[],_=[];for(let l=0,T=r.length;l<T;l++)try{i=r[l];let h=e.dbis[t].get(i);if(!h){n.skipped.push(i);continue}let A=e.dbis[t].ifVersion(i,zp.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let O=0;O<s.length;O++){let I=s[O];if(!h.hasOwnProperty(I)||I===t)continue;let X=e.dbis[I],v=h[I];if(v!=null)try{let W=_o.getIndexedValues(v);if(W)for(let $e=0,Js=W.length;$e<Js;$e++)X.remove(W[$e],i)}catch{kE.warn(`cannot delete from attribute: ${I}, ${v}:${i}`)}}});o.push(A),_.push(i),n.original_records.push(h)}catch(h){kE.warn(h),n.skipped.push(i)}let c=[],u=await Promise.all(o);for(let l=0,T=u.length;l<T;l++)u[l]===!0?n.deleted.push(_[l]):(n.skipped.push(_[l]),c.push(l));let E=0;for(let l=0;l<c.length;l++){let T=c[l];n.original_records.splice(T-E,1),E++}return n.txn_time=_o.getMicroTime(),n}catch(s){throw s}}a(eI,"deleteRecords");$E.exports={deleteRecords:eI}});var fs=d((fH,KE)=>{"use strict";var Nr=p(),tI=uo(),rI=G(),sI=require("path"),{getBaseSchemaPath:nI}=V(),iI=Ts(),aI=g();KE.exports=oI;async function oI(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Nr.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Nr.isEmptyOrZeroLength(e.hash_values)&&!Nr.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let _=0;_<e.records.length;_++){let c=e.records[_][s];Nr.isEmpty(c)||e.hash_values.push(c)}}if(Nr.isEmptyOrZeroLength(e.hash_values))return YE([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Nr.isEmptyOrZeroLength(e.records)){e.records=[];for(let _=0;_<e.hash_values.length;_++)e.records[_]={[s]:e.hash_values[_]}}let n=sI.join(nI(),e.schema.toString()),i=await rI.openEnvironment(n,e.table),o=await tI.deleteRecords(i,s,e.hash_values);try{t===!0&&await iI(e,o)}catch(_){aI.error(`unable to write transaction due to ${_.message}`)}return YE(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(oI,"lmdbDeleteRecords");function YE(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(YE,"createDeleteResponse")});var lo=d((mH,WE)=>{"use strict";var _I=f(),RH=kt();function Eo(e,t){let r=Object.create(null);if(t.length===1&&_I.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(Eo,"parseRow");function cI(e,t,r,s){let n=Eo(r,e);s.push(n)}a(cI,"searchAll");function uI(e,t,r,s){let n=Eo(r,e);s[t]=n}a(uI,"searchAllToMap");function EI(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(EI,"iterateDBI");function Wt(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(Wt,"pushResults");function lI(e,t,r,s,n,i){t.toString().endsWith(e)&&Wt(t,r,s,n,i)}a(lI,"endsWith");function dI(e,t,r,s,n,i){t.toString().includes(e)&&Wt(t,r,s,n,i)}a(dI,"contains");function hI(e,t,r,s,n,i){t>e&&Wt(t,r,s,n,i)}a(hI,"greaterThanCompare");function SI(e,t,r,s,n,i){t>=e&&Wt(t,r,s,n,i)}a(SI,"greaterThanEqualCompare");function TI(e,t,r,s,n,i){t<e&&Wt(t,r,s,n,i)}a(TI,"lessThanCompare");function fI(e,t,r,s,n,i){t<=e&&Wt(t,r,s,n,i)}a(fI,"lessThanEqualCompare");WE.exports={parseRow:Eo,searchAll:cI,searchAllToMap:uI,iterateDBI:EI,endsWith:lI,contains:dI,greaterThanCompare:hI,greaterThanEqualCompare:SI,lessThanCompare:TI,lessThanEqualCompare:fI,pushResults:Wt}});var gr=d((NH,jE)=>{"use strict";var qe=G(),RI=g(),Me=kt(),wt=Se(),Q=Ne().LMDB_ERRORS_ENUM,AH=p(),mI=f(),Ze=lo(),OH=require("lmdb"),{OVERFLOW_MARKER:QE,MAX_SEARCH_KEY_LENGTH:AI}=wt,Rs={lazy:!0};function JE(e,t,r,s,n=!1,i=void 0,o=void 0){let _=Object.create(null),c=qe.openDBI(e,r);c[wt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let u=ho(e,t,r);for(let{key:E,value:l}of c.getRange({start:n?void 0:!1,end:n?!1:void 0,limit:i,offset:o,reverse:n}))s(u(E,l),l,_,t,r);return _}a(JE,"iterateFullIndex");function ms(e,t,r,s,n,i=!1,o=void 0,_=void 0,c=!1,u=!1){let E=[[],[]],l=qe.openDBI(e,r),T=ho(e,t,r);l[wt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let h=i===!0?s:n,A=i===!0?n:s,O=i===!0?!c:!u,I=i===!0?u:c;for(let{key:X,value:v}of l.getRange({start:A,end:h,reverse:i,limit:o,offset:_,inclusiveEnd:O,exclusiveStart:I}))Ze.pushResults(T(X,v),v,E,t,r);return E}a(ms,"iterateRangeBetween");function ho(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith(QE)){if(!s)if(t)s=qe.openDBI(e,t);else{let _=qe.listDBIs(e);for(let c=0,u=_.length;c<u&&(s=qe.openDBI(e,_[c]),!s[wt.DBI_DEFINITION_NAME].is_hash_attribute);c++);}n=s.get(i,Rs)[r]}return n}}a(ho,"getOverflowCheck");function OI(e,t,r,s=!1,n=void 0,i=void 0){if(Me.validateEnv(e),t===void 0)throw new Error(Q.HASH_ATTRIBUTE_REQUIRED);Xn(r),r=As(e,r);let o=[],_=qe.openDBI(e,t);for(let{key:c,value:u}of _.getRange({start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))Ze.searchAll(r,c,u,o);return o}a(OI,"searchAll");function NI(e,t,r,s=!1,n=void 0,i=void 0){if(Me.validateEnv(e),t===void 0)throw new Error(Q.HASH_ATTRIBUTE_REQUIRED);return Xn(r),r=As(e,r),JE(e,t,t,Ze.searchAllToMap.bind(null,r),s,n,i)}a(NI,"searchAllToMap");function gI(e,t,r=!1,s=void 0,n=void 0){if(Me.validateEnv(e),t===void 0)throw new Error(Q.ATTRIBUTE_REQUIRED);return JE(e,void 0,t,Ze.iterateDBI,r,s,n)}a(gI,"iterateDBI");function pI(e,t){if(Me.validateEnv(e),t===void 0)throw new Error(Q.HASH_ATTRIBUTE_REQUIRED);return qe.statDBI(e,t).entryCount}a(pI,"countAll");function II(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=qe.openDBI(e,r);s=Me.convertKeyValueToWrite(s);let c=[[],[]];if(_[wt.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=_.get(s,Rs);u!==void 0&&Ze.pushResults(s,u,c,t,r)}else for(let u of _.getValues(s,{reverse:n,limit:i,offset:o}))Ze.pushResults(s,u,c,t,r);return c}a(II,"equals");function CI(e,t,r){return yt(e,t,r),qe.openDBI(e,t).getValuesCount(r)}a(CI,"count");function bI(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=[[],[]],c=qe.openDBI(e,r);c[wt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r),s=Me.convertKeyValueToWrite(s);let u=!0;if(typeof s=="number"&&(u=!1),n===!0){let E;for(let l of c.getKeys({start:s}))if(!l.startsWith(s)){E=l;break}E!==void 0&&(Number.isInteger(o)?o++:i++);for(let{key:l,value:T}of c.getRange({start:E,end:void 0,reverse:n,limit:i,offset:o}))if(l!==E){if(l.toString().startsWith(s))Ze.pushResults(l,T,_,t,r);else if(u===!0)break}}else for(let{key:E,value:l}of c.getRange({start:s,reverse:n,limit:i,offset:o}))if(E.toString().startsWith(s))Ze.pushResults(E,l,_,t,r);else if(u===!0)break;return _}a(bI,"startsWith");function LI(e,t,r,s,n=!1,i=void 0,o=void 0){return XE(e,t,r,s,n,i,o,!0)}a(LI,"endsWith");function XE(e,t,r,s,n=!1,i=void 0,o=void 0,_=!1){yt(e,r,s);let c=[[],[]],u=qe.openDBI(e,r);u[wt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let E=ho(e,t,r);o=Number.isInteger(o)?o:0;for(let T of u.getKeys({end:n?!1:void 0,reverse:n})){if(i===0)break;let h=T.toString();if(h.endsWith(QE))for(let A of u.getValues(T)){let O=E(T,A);(_?O.endsWith(s):O.includes(s))&&l(O,A)}else if(_?h.endsWith(s):h.includes(s))if(u[wt.DBI_DEFINITION_NAME].is_hash_attribute)l(T,T);else for(let A of u.getValues(T))l(T,A)}function l(T,h){if(o>0){o--;return}i!==0&&(Ze.pushResults(T,h,c,t,r),i--)}return a(l,"found_match"),c}a(XE,"contains");function wI(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),ms(e,t,r,s,c,n,i,o,!0,!1)}a(wI,"greaterThan");function yI(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),ms(e,t,r,s,c,n,i,o,!1,!1)}a(yI,"greaterThanEqual");function UI(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),ms(e,t,r,c,s,n,i,o,!1,!0)}a(UI,"lessThan");function DI(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),ms(e,t,r,c,s,n,i,o,!1,!1)}a(DI,"lessThanEqual");function MI(e,t,r,s,n,i=!1,o=void 0,_=void 0){if(Me.validateEnv(e),r===void 0)throw new Error(Q.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(Q.START_VALUE_REQUIRED);if(n===void 0)throw new Error(Q.END_VALUE_REQUIRED);if(s=Me.convertKeyValueToWrite(s),n=Me.convertKeyValueToWrite(n),s>n)throw new Error(Q.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return ms(e,t,r,s,n,i,o,_)}a(MI,"between");function PI(e,t,r,s){if(Me.validateEnv(e),t===void 0)throw new Error(Q.HASH_ATTRIBUTE_REQUIRED);if(Xn(r),r=As(e,r),s===void 0)throw new Error(Q.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?Rs:void 0);return i&&(n=Ze.parseRow(i,r)),n}a(PI,"searchByHash");function BI(e,t,r){if(Me.validateEnv(e),t===void 0)throw new Error(Q.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Q.ID_REQUIRED);let s=!0;return e.dbis[t].get(r,Rs)===void 0&&(s=!1),s}a(BI,"checkHashExists");function HI(e,t,r,s,n=[]){zE(e,t,r,s,n);let i=ZE(e,t,r,s,n);return Object.values(i)}a(HI,"batchSearchByHash");function vI(e,t,r,s,n=[]){return zE(e,t,r,s,n),ZE(e,t,r,s,n)}a(vI,"batchSearchByHashToMap");function ZE(e,t,r,s,n=[]){r=As(e,r);let i=Object.create(null),o=r.length<3?Rs:void 0;for(let _=0;_<s.length;_++){let c=s[_];try{let u=e.dbis[t].get(c,o);if(u){let E=Ze.parseRow(u,r);i[c]=E}else n.push(c)}catch(u){throw RI.warn(u),u}}return i}a(ZE,"batchHashSearch");function zE(e,t,r,s,n){if(Me.validateEnv(e),t===void 0)throw new Error(Q.HASH_ATTRIBUTE_REQUIRED);if(Xn(r),!Array.isArray(s))throw s===void 0?new Error(Q.IDS_REQUIRED):new Error(Q.IDS_MUST_BE_ARRAY);Array.isArray(n)||(n=[])}a(zE,"initializeBatchSearchByHash");function Xn(e){if(!Array.isArray(e))throw e===void 0?new Error(Q.FETCH_ATTRIBUTES_REQUIRED):new Error(Q.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Xn,"validateFetchAttributes");function yt(e,t,r){if(Me.validateEnv(e),t===void 0)throw new Error(Q.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Q.SEARCH_VALUE_REQUIRED);if(r?.length>AI)throw new Error(Q.SEARCH_VALUE_TOO_LARGE)}a(yt,"validateComparisonFunctions");function As(e,t){return t.length===1&&mI.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=qe.listDBIs(e)),t}a(As,"setGetWholeRowAttributes");jE.exports={searchAll:OI,searchAllToMap:NI,count:CI,countAll:pI,equals:II,startsWith:bI,endsWith:LI,contains:XE,searchByHash:PI,setGetWholeRowAttributes:As,batchSearchByHash:HI,batchSearchByHashToMap:vI,checkHashExists:BI,iterateDBI:gI,greaterThan:wI,greaterThanEqual:yI,lessThan:UI,lessThanEqual:DI,between:MI}});var Os=d((pH,sl)=>{var el=require("lodash"),tl=Ke(),B=require("joi"),GI=p(),{hdb_schema_table:ze,checkValidTable:rl}=Rr(),{handleHDBError:qI,hdb_errors:FI}=Y(),{HTTP_STATUS_CODES:xI}=FI,gH=B.object({schema:ze,table:ze,hash_values:B.array().min(1).items(B.alternatives(B.string(),B.number())).required(),get_attributes:B.array().min(1).items(ze).required()}),VI=B.object({schema:ze,table:ze,search_attribute:ze,search_value:B.any().required(),get_attributes:B.array().min(1).items(ze).required(),desc:B.bool(),limit:B.number().integer().min(1),offset:B.number().integer().min(0)}),kI=B.object({schema:ze,table:ze,operator:B.string().valid("and","or").default("and").lowercase(),offset:B.number().integer().min(0),limit:B.number().integer().min(1),get_attributes:B.array().min(1).items(ze).required(),conditions:B.array().min(1).items(B.object({search_attribute:ze,search_type:B.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:B.when("search_type",{switch:[{is:"equals",then:B.any()},{is:"between",then:B.array().items(B.alternatives([B.string(),B.number()])).length(2)}],otherwise:B.alternatives(B.string(),B.number())}).required()})).required()});sl.exports=function(e,t){let r=null;switch(t){case"value":r=tl.validateBySchema(e,VI);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(rl("schema",e.schema)),i(rl("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=tl.validateBySchema(e,kI);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=GI.checkGlobalSchemaTable(e.schema,e.table);if(n)return qI(new Error,n,xI.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,_=[...e.get_attributes];if(t==="value"&&_.push(e.search_attribute),t==="conditions")for(let u=0,E=e.conditions.length;u<E;u++){let l=e.conditions[u];_.push(l.search_attribute)}let c=el.filter(_,u=>u!=="*"&&u.attribute!=="*"&&!el.some(o,E=>E===u||E.attribute===u||E.attribute===u.attribute));if(c&&c.length>0){let u=c.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var So=d((IH,nl)=>{"use strict";var $I=G(),YI=Os(),KI=require("path"),{getBaseSchemaPath:WI}=V();nl.exports=QI;function QI(e){let t=YI(e,"hashes");if(t)throw t;let r=KI.join(WI(),e.schema.toString());return $I.openEnvironment(r,e.table)}a(QI,"initialize")});var To=d((CH,il)=>{"use strict";var JI=gr(),XI=So();il.exports=ZI;async function ZI(e){try{let t=await XI(e),r=global.hdb_schema[e.schema][e.table];return JI.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(ZI,"lmdbGetDataByHash")});var Ns=d((bH,al)=>{"use strict";var Zn=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(Zn,"SearchByHashObject");al.exports=Zn});var _l=d((wH,ol)=>{"use strict";var LH=Ns(),zI=gr(),jI=So();ol.exports=eC;async function eC(e){try{let t=await jI(e),r=global.hdb_schema[e.schema][e.table];return zI.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(eC,"lmdbSearchByHash")});var ht=d((yH,cl)=>{"use strict";var zn=class{constructor(t,r,s,n,i,o,_,c=!1,u=void 0,E=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=_,this.reverse=c,this.limit=u,this.offset=E}};a(zn,"SearchObject");cl.exports=zn});var jn=d((UH,hl)=>{"use strict";var fe=gr(),tC=G(),rC=require("path"),sC=p(),N=Se(),Qt=f(),{getBaseSchemaPath:nC}=V(),iC=Yt(),ul=Ne().LMDB_ERRORS_ENUM,{compareKeys:pr}=require("ordered-binary"),St=Qt.SEARCH_WILDCARDS;async function aC(e,t,r){let s;e.schema===Qt.SYSTEM_SCHEMA_NAME?s=iC[e.table]:s=global.hdb_schema[e.schema][e.table];let n=dl(e,s.hash_attribute,r,t);return El(e,n,s.hash_attribute,r)}a(aC,"prepSearch");async function El(e,t,r,s){let n=rC.join(nC(),e.schema.toString()),i=await tC.openEnvironment(n,e.table),o=ll(i,e,t,r);if([N.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,N.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,N.SEARCH_TYPES.SEARCH_ALL,N.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(cC(e,r)===!1)return s===!0?_C(o):o[1];let c=o[0];return s===!0?fe.batchSearchByHashToMap(i,r,e.get_attributes,c):fe.batchSearchByHash(i,r,e.get_attributes,c)}a(El,"executeSearch");function ll(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:_,offset:c}=t;switch(o=typeof o=="boolean"?o:!1,_=Number.isInteger(_)?_:void 0,c=Number.isInteger(c)?c:void 0,r){case N.SEARCH_TYPES.EQUALS:n=fe.equals(e,i,t.search_attribute,t.search_value,o,_,c);break;case N.SEARCH_TYPES.CONTAINS:n=fe.contains(e,i,t.search_attribute,t.search_value,o,_,c);break;case N.SEARCH_TYPES.ENDS_WITH:case N.SEARCH_TYPES._ENDS_WITH:n=fe.endsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case N.SEARCH_TYPES.STARTS_WITH:case N.SEARCH_TYPES._STARTS_WITH:n=fe.startsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case N.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return fe.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case N.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return fe.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case N.SEARCH_TYPES.SEARCH_ALL:return fe.searchAll(e,s,t.get_attributes,o,_,c);case N.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return fe.searchAllToMap(e,s,t.get_attributes,o,_,c);case N.SEARCH_TYPES.BETWEEN:n=fe.between(e,i,t.search_attribute,t.search_value,t.end_value,o,_,c);break;case N.SEARCH_TYPES.GREATER_THAN:case N.SEARCH_TYPES._GREATER_THAN:n=fe.greaterThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case N.SEARCH_TYPES.GREATER_THAN_EQUAL:case N.SEARCH_TYPES._GREATER_THAN_EQUAL:n=fe.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;case N.SEARCH_TYPES.LESS_THAN:case N.SEARCH_TYPES._LESS_THAN:n=fe.lessThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case N.SEARCH_TYPES.LESS_THAN_EQUAL:case N.SEARCH_TYPES._LESS_THAN_EQUAL:n=fe.lessThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;default:return Object.create(null)}return n}a(ll,"searchByType");function oC(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case N.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case N.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case N.SEARCH_TYPES.ENDS_WITH:case N.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case N.SEARCH_TYPES.STARTS_WITH:case N.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case N.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return pr(i,s[0])>=0&&pr(i,s[1])<=0};case N.SEARCH_TYPES.GREATER_THAN:case N.SEARCH_TYPES._GREATER_THAN:return n=>pr(n[r],s)>0;case N.SEARCH_TYPES.GREATER_THAN_EQUAL:case N.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>pr(n[r],s)>=0;case N.SEARCH_TYPES.LESS_THAN:case N.SEARCH_TYPES._LESS_THAN:return n=>pr(n[r],s)<0;case N.SEARCH_TYPES.LESS_THAN_EQUAL:case N.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>pr(n[r],s)<=0;default:return Object.create(null)}}a(oC,"filterByType");function _C(e){let t=Object.create(null);for(let r=0,s=e[0].length;r<s;r++)t[e[0][r]]=e[1][r];return t}a(_C,"createMapFromArrays");function cC(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(cC,"checkToFetchMore");function dl(e,t,r,s){if(sC.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),_=!1;if(e.search_attribute===t&&(_=!0),St.indexOf(n)>-1)return r===!0?N.SEARCH_TYPES.SEARCH_ALL_TO_MAP:N.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(St[0])<0&&n.indexOf(St[1])<0)return _===!0?r===!0?N.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:N.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:N.SEARCH_TYPES.EQUALS;if(St.indexOf(i)>=0&&St.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),N.SEARCH_TYPES.CONTAINS;if(St.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),N.SEARCH_TYPES.ENDS_WITH;if(St.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),N.SEARCH_TYPES.STARTS_WITH;if(n.includes(St[0])||n.includes(St[1]))return N.SEARCH_TYPES.EQUALS;throw new Error(ul.UNKNOWN_SEARCH_TYPE)}else switch(s){case Qt.VALUE_SEARCH_COMPARATORS.BETWEEN:return N.SEARCH_TYPES.BETWEEN;case Qt.VALUE_SEARCH_COMPARATORS.GREATER:return N.SEARCH_TYPES.GREATER_THAN;case Qt.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return N.SEARCH_TYPES.GREATER_THAN_EQUAL;case Qt.VALUE_SEARCH_COMPARATORS.LESS:return N.SEARCH_TYPES.LESS_THAN;case Qt.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return N.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(ul.UNKNOWN_SEARCH_TYPE)}}a(dl,"createSearchTypeFromSearchObject");hl.exports={executeSearch:El,createSearchTypeFromSearchObject:dl,prepSearch:aC,searchByType:ll,filterByType:oC}});var Tl=d((MH,Sl)=>{"use strict";var DH=ht(),uC=Os(),EC=p(),lC=f(),dC=jn();Sl.exports=hC;async function hC(e,t){if(!EC.isEmpty(t)&&lC.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=uC(e,"value");if(s)throw s;let n=!0;try{return await dC.prepSearch(e,t,n)}catch(i){throw i}}a(hC,"lmdbGetDataByValue")});var Ir=d((BH,fl)=>{"use strict";var PH=ht(),SC=Os(),TC=p(),fC=f(),RC=jn();fl.exports=mC;async function mC(e,t){if(!TC.isEmpty(t)&&fC.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=SC(e,"value");if(s)throw s;let n=!1;try{return await RC.prepSearch(e,t,n)}catch(i){throw i}}a(mC,"lmdbSearchByValue")});var ml=d((vH,Rl)=>{"use strict";var HH=Se(),ei=class{constructor(t,r,s,n,i=void 0,o=void 0,_="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=_}};a(ei,"SearchByConditionsObject");var ti=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(ti,"SearchCondition");var ri=class{constructor(t,r){this.attribute=t,this.desc=r}};a(ri,"SortAttribute");Rl.exports={SearchByConditionsObject:ei,SearchCondition:ti,SortAttribute:ri}});var Il=d((qH,pl)=>{"use strict";var GH=ml().SearchByConditionsObject,AC=ht(),OC=Os(),fo=gr(),si=Se(),gl=jn(),NC=lo(),Al=require("lodash"),{getBaseSchemaPath:gC}=V(),pC=require("path"),IC=G(),{handleHDBError:Ol,hdb_errors:CC}=Y(),{HTTP_STATUS_CODES:bC}=CC,LC=1e8,wC={lazy:!0};pl.exports=yC;async function yC(e){try{let t=OC(e,"conditions");if(t)throw Ol(t,t.message,bC.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=pC.join(gC(),e.schema.toString()),s=await IC.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=Al.sortBy(e.conditions,o=>{if(o.estimated_count===void 0){let _=o.search_type;_===si.SEARCH_TYPES.EQUALS?o.estimated_count=fo.count(s,o.search_attribute,o.search_value):_===si.SEARCH_TYPES.CONTAINS||_===si.SEARCH_TYPES.ENDS_WITH?o.estimated_count=1/0:o.estimated_count=LC}return o.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[o]=await Nl(s,e,i[0],n.hash_attribute),_=s.dbis[n.hash_attribute],c=i.slice(1).map(gl.filterByType),u=c.length,E=[],l=fo.setGetWholeRowAttributes(s,e.get_attributes),T=e.offset>-1?e.offset:0,h=e.limit>-1?e.limit:1/0;e:for(let A of o){let O=_.get(A,wC);for(let I=0;I<u;I++)if(!c[I](O))continue e;if(T>0){T--;continue}if(h<=0)break;h--,E.push(NC.parseRow(O,l))}return E}else{let o=[],_=[];for(let c of i){let[u]=await Nl(s,e,c,n.hash_attribute);_.push(u)}if(o=Al.union(..._),e.limit>0||e.offset>0){let c=Number.isInteger(e.limit)?e.limit:o.length;o=o.splice(e.offset,c)}return fo.batchSearchByHash(s,n.hash_attribute,e.get_attributes,o)}}catch(t){throw Ol(t)}}a(yC,"lmdbSearchByConditions");async function Nl(e,t,r,s){let n=new AC(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===si.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,gl.searchByType(e,n,i,s)}a(Nl,"executeConditionSearch")});var gs=d((FH,Cl)=>{"use strict";var UC=f().OPERATIONS_ENUM,ni=class{constructor(t,r,s,n=void 0){this.operation=UC.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(ni,"DeleteObject");Cl.exports=ni});var Ro=d((xH,bl)=>{"use strict";var ii=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(ii,"DropAttributeObject");bl.exports=ii});var Ao=d((kH,Ll)=>{"use strict";var DC=ht(),MC=gs(),VH=Ro(),nt=f(),PC=p(),mo=G(),BC=Yt(),HC=Ir(),vC=fs(),{getBaseSchemaPath:GC}=V(),qC=require("path");Ll.exports=FC;async function FC(e,t=!0){let r;e.schema===nt.SYSTEM_SCHEMA_NAME?r=BC[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await VC(e),n=qC.join(GC(),e.schema.toString()),i=await mo.openEnvironment(n,e.table);return t===!0&&await xC(e,i,r.hash_attribute),mo.dropDBI(i,e.attribute),s}a(FC,"lmdbDropAttribute");async function xC(e,t,r){let s=mo.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:_,version:c}of s.getRange({start:!1,versions:!0})){let u={};for(let E in _)E!==i&&(u[E]=_[E]);n=t.dbis[r].put(o,u,c)}await n}a(xC,"removeAttributeFromAllObjects");async function VC(e){let t=new DC(nt.SYSTEM_SCHEMA_NAME,nt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,nt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[nt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,nt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=(await HC(t)).filter(o=>o[nt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(PC.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[nt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new MC(nt.SYSTEM_SCHEMA_NAME,nt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return vC(i)}a(VC,"dropAttributeFromSystem")});var Dl=d(($H,Ul)=>{"use strict";var kC=Ao(),$C=Ro(),wl=p(),yl=g(),YC=Ne().LMDB_ERRORS_ENUM;Ul.exports=KC;async function KC(e){if(wl.isEmpty(global.hdb_schema[e.schema])||wl.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);let t=global.hdb_schema[e.schema][e.table],r;try{for(let s=0;s<t.attributes.length;s++){r=t.attributes[s].attribute;let n=new $C(e.schema,e.table,r);try{await kC(n,!1)}catch(i){i.message!==YC.DBI_DOES_NOT_EXIST&&yl.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw yl.error(`Error dropping attribute ${r}`),s}}a(KC,"lmdbDropAllAttributes")});var Oo=d((KH,xl)=>{"use strict";var vl=ht(),Gl=gs(),ql=Ir(),Fl=fs(),YH=Dl(),Ie=f(),Ml=p(),Pl=G(),{getBaseSchemaPath:WC,getTransactionAuditStorePath:QC}=V(),Bl=require("path"),Hl=g();xl.exports=JC;async function JC(e){try{if(Ml.isEmpty(global.hdb_schema[e.schema])||Ml.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await XC(e),await ZC(e);let t=Bl.join(WC(),e.schema.toString());try{await Pl.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Hl.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Bl.join(QC(),e.schema.toString());await Pl.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Hl.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(JC,"lmdbDropTable");async function XC(e){let t=new vl(Ie.SYSTEM_SCHEMA_NAME,Ie.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ie.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ie.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=await ql(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 Gl(Ie.SYSTEM_SCHEMA_NAME,Ie.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Fl(n)}a(XC,"deleteAttributesFromSystem");async function ZC(e){let t=new vl(Ie.SYSTEM_SCHEMA_NAME,Ie.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ie.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ie.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ie.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ie.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=await ql(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 Gl(Ie.SYSTEM_SCHEMA_NAME,Ie.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Fl(n)}catch(i){throw i}}a(ZC,"dropTableFromSystem")});var kl=d((QH,Vl)=>{"use strict";var zC=require("fs-extra"),jC=ht(),eb=Ns(),tb=gs(),rb=Oo(),sb=fs(),nb=To(),ib=Ir(),Tt=f(),WH=p(),ab=require("path"),{getBaseSchemaPath:ob}=V(),{handleHDBError:_b,hdb_errors:cb}=Y(),{HDB_ERROR_MSGS:ub,HTTP_STATUS_CODES:Eb}=cb;Vl.exports=lb;async function lb(e){let t;try{t=await db(e.schema);let r=new jC(Tt.SYSTEM_SCHEMA_NAME,Tt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Tt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Tt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=await ib(r);for(let o=0;o<s.length;o++){let _={schema:t,table:s[o].name};try{await rb(_)}catch(c){if(c.message!=="invalid environment")throw c}}let n=new tb(Tt.SYSTEM_SCHEMA_NAME,Tt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await sb(n);let i=ab.join(ob(),t.toString());await zC.remove(i)}catch(r){throw r}}a(lb,"lmdbDropSchema");async function db(e){let t=new eb(Tt.SYSTEM_SCHEMA_NAME,Tt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Tt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=await nb(t)}catch(n){throw n}for(let n in r)r[n].name===e&&(s=e);if(!s)throw _b(new Error,ub.SCHEMA_NOT_FOUND(e),Eb.NOT_FOUND,void 0,void 0,!0);return s}a(db,"validateDropSchema")});var No=d((JH,$l)=>{"use strict";var ai=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(ai,"CreateTableObject");$l.exports=ai});var Kl=d((ZH,Yl)=>{"use strict";var hb=require("path"),Sb=require("fs-extra"),oi=G(),{getTransactionAuditStorePath:Tb}=V(),go=Se(),XH=No();Yl.exports=fb;async function fb(e){let t;try{let r=hb.join(Tb(),e.schema.toString());await Sb.mkdirp(r),t=await oi.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{oi.createDBI(t,go.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),oi.createDBI(t,go.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),oi.createDBI(t,go.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(fb,"createTransactionsAuditEnvironment")});var Xl=d((zH,Jl)=>{"use strict";var po=f(),Wl=G(),Rb=Tr(),mb=require("path"),{getSystemSchemaPath:Ab,getBaseSchemaPath:Ob}=V(),Nb=Yt(),gb=Pn(),Io=Mn(),pb=g(),Ib=Kl(),bo=Nb.hdb_table,Ql=[];for(let e=0;e<bo.attributes.length;e++)Ql.push(bo.attributes[e].attribute);Jl.exports=Cb;async function Cb(e,t){let r=mb.join(Ob(),t.schema.toString()),s=new Io(t.schema,t.table,po.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Io(t.schema,t.table,po.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Io(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Wl.createEnvironment(r,t.table),e!==void 0){let o=await Wl.openEnvironment(Ab(),po.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Rb.insertRecords(o,bo.hash_attribute,Ql,[e]),await Co(s),await Co(n),await Co(i)}await Ib(t)}catch(o){throw o}}a(Cb,"lmdbCreateTable");async function Co(e){try{await gb(e)}catch(t){pb.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Co,"createAttribute")});var zl=d((jH,Zl)=>{"use strict";var bb=Bn(),Lb=qn(),wb=Vn(),Cr=f(),yb=Tr().updateRecords,Ub=G(),Db=require("path"),{getBaseSchemaPath:Mb}=V(),Pb=Ts(),Bb=g();Zl.exports=Hb;async function Hb(e){try{let{schema_table:t,attributes:r}=bb(e);Lb(e,r,t.hash_attribute),e.schema!==Cr.SYSTEM_SCHEMA_NAME&&(r.includes(Cr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Cr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Cr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Cr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await wb(e.hdb_auth_header,t,r),n=Db.join(Mb(),e.schema.toString()),i=await Ub.openEnvironment(n,e.table),o=await yb(i,t.hash_attribute,r,e.records,e[Cr.CLUSTERING_FLAG]!==!0);try{await Pb(e,o)}catch(_){Bb.error(`unable to write transaction due to ${_.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(Hb,"lmdbUpdateRecords")});var ed=d((ev,jl)=>{"use strict";var vb=f().OPERATIONS_ENUM,_i=class{constructor(t,r,s,n=void 0){this.operation=vb.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(_i,"UpsertObject");jl.exports=_i});var rd=d((rv,td)=>{"use strict";var tv=ed(),Gb=Bn(),qb=qn(),Fb=Vn(),br=f(),xb=Tr().upsertRecords,Vb=G(),kb=require("path"),{getBaseSchemaPath:$b}=V(),Yb=Ts(),Kb=g(),{handleHDBError:Wb,hdb_errors:Qb}=Y();td.exports=Jb;async function Jb(e){let t;try{t=Gb(e)}catch(c){throw Wb(c,c.message,Qb.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;qb(e,s,r.hash_attribute),e.schema!==br.SYSTEM_SCHEMA_NAME&&(s.includes(br.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(br.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(br.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(br.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Fb(e.hdb_auth_header,r,s),i=kb.join($b(),e.schema.toString()),o=await Vb.openEnvironment(i,e.table),_=await xb(o,r.hash_attribute,s,e.records,e[br.CLUSTERING_FLAG]!==!0);try{await Yb(e,_)}catch(c){Kb.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:_.written_hashes,schema_table:r,new_attributes:n,txn_time:_.txn_time}}a(Jb,"lmdbUpsertRecords")});var _d=d((sv,od)=>{"use strict";var Xb=ht(),sd=p(),nd=g(),Zb=Ir(),id=f(),zb=uo().deleteRecords,jb=G(),eL=require("path"),{getBaseSchemaPath:tL}=V(),{promisify:rL}=require("util"),sL=rL(setTimeout),ad=1e4,nL=10;od.exports=iL;async function iL(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(sd.isEmptyOrZeroLength(t))throw new Error(`Could not retrieve hash attribute for schema: ${e.schema} table: ${e.table}`);let r=Date.parse(e.date),s;try{let n=new Xb(e.schema,e.table,id.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await Zb(n,id.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw nd.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return sd.isEmptyOrZeroLength(s)?(nd.trace("No records found to delete"),{message:"No records found to delete"}):await aL(e,s,t)}a(iL,"lmdbDeleteRecordsBefore");async function aL(e,t,r){let s=eL.join(tL(),e.schema.toString()),n=await jb.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,_=t.length;o<_;o+=ad){let c=t.slice(o,o+ad),u=[];for(let E=0,l=c.length;E<l;E++)u.push(c[E][r]);try{let E=await zb(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(E.deleted),i.skipped_hashes=i.skipped_hashes.concat(E.skipped)}catch(E){throw E}await sL(nL)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(aL,"chunkDeletes")});var ud=d((nv,cd)=>{"use strict";var ci=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(ci,"DeleteBeforeObject");cd.exports=ci});var ld=d((iv,Ed)=>{"use strict";var ui=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(ui,"DeleteAuditLogsBeforeResults");Ed.exports=ui});var Sd=d((ov,hd)=>{"use strict";var Lo=G(),{getTransactionAuditStorePath:oL}=V(),av=ud(),_L=require("path"),ps=Se(),cL=p(),dd=ld(),uL=require("util").promisify,EL=uL(setTimeout),lL=1e4,dL=100;hd.exports=hL;async function hL(e){let t=_L.join(oL(),e.schema),r=await Lo.openEnvironment(t,e.table,!0),s=Lo.listDBIs(r);Lo.initializeDBIs(r,ps.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new dd;do n=await SL(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 EL(dL);while(n.transactions_deleted>0);return i}a(hL,"deleteAuditLogsBefore");async function SL(e,t){let r=new dd;try{let s=e.dbis[ps.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 _=o[ps.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];cL.isEmpty(_)||(n=e.dbis[ps.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(_,i));for(let c=0;c<o.hash_values.length;c++)n=e.dbis[ps.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[c],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>lL)break}return await n,r}catch(s){throw s}}a(SL,"deleteTransactions")});var Nd=d((_v,Od)=>{"use strict";var wo=G(),Lr=Se(),Td=kt(),yo=f(),fd=p(),{getTransactionAuditStorePath:TL}=V(),fL=require("path"),RL=gr(),Ei=mr(),mL=g();Od.exports=AL;async function AL(e){let t=fL.join(TL(),e.schema),r=await wo.openEnvironment(t,e.table,!0),s=wo.listDBIs(r);wo.initializeDBIs(r,Lr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case yo.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Rd(r,e.search_values);case yo.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,NL(r,e.search_values,n);case yo.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return OL(r,e.search_values);default:return Rd(r)}}a(AL,"readAuditLog");function Rd(e,t=[0,Td.getMicroTime()]){fd.isEmpty(t[0])&&(t[0]=0),fd.isEmpty(t[1])&&(t[1]=Td.getMicroTime());let r=[];try{let s=e.dbis[Lr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let i of s.getKeys({start:t[1]}))if(i!==t[1]){n=i;break}for(let{value:i}of s.getRange({start:t[0],end:n})){let o=Object.assign(new Ei,i);r.push(o)}return r}catch(s){throw s}}a(Rd,"searchTransactionsByTimestamp");function OL(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[Lr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,Ad(e,i))}return Object.fromEntries(r)}a(OL,"searchTransactionsByUsername");function NL(e,t,r){let s=new Map;for(let _=0,c=t.length;_<c;_++){let u=t[_],E=RL.equals(e,Lr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Lr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let l=0,T=E[0].length;l<T;l++){let h=E[0][l],A=Number(h);s.has(A)?s.get(A).push(u.toString()):s.set(A,[u.toString()])}}let n=Array.from(s.keys()),i=Ad(e,n),o=new Map;for(let _=0;_<i.length;_++){let c=i[_],u=c.timestamp,E=s.get(u);md(c,"records",r,E,o),md(c,"original_records",r,E,o)}return Object.fromEntries(o)}a(NL,"searchTransactionsByHashValues");function md(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let _=e[t][o],c=_[r].toString();if(s.indexOf(c)>=0)if(n.has(c)){let u=n.get(c),E=u[u.length-1];if(E.timestamp===i)E[t]=[_];else{let l=new Ei(e.operation,e.user_name,i,void 0);l[t]=[_],u.push(l)}}else{let u=new Ei(e.operation,e.user_name,i,void 0);u[t]=[_],n.set(c,[u])}}}a(md,"loopRecords");function Ad(e,t){let r=[];try{let s=e.dbis[Lr.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 Ei,i);r.push(o)}}catch(i){mL.warn(i)}return r}catch(s){throw s}}a(Ad,"batchSearchTransactions")});var pd=d((cv,gd)=>{"use strict";var gL=require("path"),{getBaseSchemaPath:pL}=V(),IL=G();gd.exports={writeTransaction:CL};async function CL(e,t,r){let s=gL.join(pL(),e);return(await IL.openEnvironment(s,t)).transaction(r)}a(CL,"writeTransaction")});var Cd=d((uv,Id)=>{"use strict";var bL=require("path"),{getBaseSchemaPath:LL}=V(),wL=G();Id.exports={flush:yL};async function yL(e,t){let r=bL.join(LL(),e.toString());return(await wL.openEnvironment(r,t.toString())).flushed}a(yL,"flush")});var Ld=d((Ev,bd)=>{"use strict";var ee=g(),{handleHDBError:UL}=Y(),DL=qa(),ML=Pn(),PL=oo(),BL=qE(),HL=fs(),vL=To(),GL=_l(),qL=Tl(),FL=Ir(),xL=Il(),VL=kl(),kL=Xl(),$L=zl(),YL=rd(),KL=_d(),WL=Sd(),QL=Oo(),JL=Ao(),XL=Nd(),ZL=pd(),zL=Cd(),li=class extends DL{async searchByConditions(t){try{return xL(t)}catch(r){throw ee.error(r),r}}async getDataByHash(t){try{return await vL(t)}catch(r){throw ee.error(r),r}}async searchByHash(t){try{return await GL(t)}catch(r){throw ee.error(r),r}}async getDataByValue(t,r){try{return await qL(t,r)}catch(s){throw ee.error(s),s}}async searchByValue(t){try{return await FL(t)}catch(r){throw ee.error(r),r}}async createSchema(t){try{return await BL(t)}catch(r){throw ee.error(r),r}}async dropSchema(t){try{return await VL(t)}catch(r){throw ee.error(r),r}}async createTable(t,r){try{return await kL(t,r)}catch(s){throw ee.error(s),s}}async dropTable(t){try{return await QL(t)}catch(r){throw ee.error(r),r}}async createAttribute(t){try{return await ML(t)}catch(r){throw ee.error(r),r}}async createRecords(t){try{return await PL(t)}catch(r){throw ee.error(r),r}}async updateRecords(t){try{return await $L(t)}catch(r){throw ee.error(r),r}}async upsertRecords(t){try{return await YL(t)}catch(r){throw UL(r,null,null,ee.ERR,r)}}async deleteRecords(t){try{return await HL(t)}catch(r){throw ee.error(r),r}}async deleteRecordsBefore(t){try{return await KL(t)}catch(r){throw ee.error(r),r}}async dropAttribute(t){try{return await JL(t)}catch(r){throw ee.error(r),r}}async deleteAuditLogsBefore(t){try{return await WL(t)}catch(r){throw ee.error(r),r}}async readAuditLog(t){try{return await XL(t)}catch(r){throw ee.error(r),r}}writeTransaction(t,r,s){return ZL.writeTransaction(t,r,s)}flush(t,r){return zL.flush(t,r)}};a(li,"LMDBBridge");bd.exports=li});var Jt=d((lv,yd)=>{"use strict";var jL=Ld(),ew=qa(),tw=Z();tw.initSync();var wd;function rw(){return wd instanceof ew?wd:new jL}a(rw,"getBridge");yd.exports=rw()});var Dd=d((dv,Ud)=>{"use strict";var sw=Jt();Ud.exports={writeTransaction:nw};function nw(e,t,r){return sw.writeTransaction(e,t,r)}a(nw,"writeTransaction")});var Yd=d((Sv,$d)=>{"use strict";var Uo=require("recursive-iterator"),iw=require("alasql"),Do=require("clone"),Md=p(),{handleHDBError:Pd,hdb_errors:aw}=Y(),{HDB_ERROR_MSGS:Bd,HTTP_STATUS_CODES:Hd}=aw,ow=["DISTINCT_ARRAY"],vd=Symbol("validateTables"),Mo=Symbol("validateTable"),hv=Symbol("getAllColumns"),Gd=Symbol("validateAllColumns"),di=Symbol("findColumn"),qd=Symbol("validateOrderBy"),Is=Symbol("validateSegment"),Po=Symbol("validateColumn"),Fd=Symbol("setColumnsForTable"),xd=Symbol("checkColumnsForAsterisk"),Vd=Symbol("validateGroupBy"),kd=Symbol("hasColumns"),hi=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[vd](),this[xd](),this[Gd]()}[vd](){if(this[kd]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Mo](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Mo](t.table)})}}[kd](){let t=!1,r=new Uo(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Mo](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw Pd(new Error,Bd.SCHEMA_NOT_FOUND(t.databaseid),Hd.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw Pd(new Error,Bd.TABLE_NOT_FOUND(t.databaseid,t.tableid),Hd.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=Do(s);n.table=Do(t),this.attributes.push(n)})}[di](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)}[xd](){let t=new Uo(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Fd](r.tableid)}[Fd](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new iw.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Gd](){this[Is](this.statement.columns,!1),this[Is](this.statement.joins,!1),this[Is](this.statement.where,!1),this[Vd](this.statement.group,!1),this[Is](this.statement.order,!0)}[Is](t,r){if(!t)return;let s=new Uo(t),n=[];for(let{node:i,path:o}of s)!Md.isEmpty(i)&&!Md.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[qd](i):n.push(this[Po](i)));return n}[Vd](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&ow.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Do(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[di](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[di](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,_)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(_,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`}[qd](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[Po](t)}[Po](t){let r=this[di](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]}};a(hi,"SelectValidator");$d.exports=hi});var Jd=d((Tv,Qd)=>{"use strict";var Kd=require("lodash"),Cs=require("mathjs"),_w=require("jsonata"),Wd=p();Qd.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Kd.uniqWith(e,Kd.isEqual):e,searchJSON:cw,mad:bs.bind(null,Cs.mad),mean:bs.bind(null,Cs.mean),mode:bs.bind(null,Cs.mode),prod:bs.bind(null,Cs.prod),median:bs.bind(null,Cs.median)};function bs(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(bs,"aggregateFunction");function cw(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(Wd.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Wd.isEmpty(this.__ala__.res[r])){let s=_w(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(cw,"searchJSON")});var Zd=d((fv,Xd)=>{"use strict";var z=require("moment"),Bo="YYYY-MM-DDTHH:mm:ss.SSSZZ";z.suppressDeprecationWarnings=!0;Xd.exports={current_date:()=>z().utc().format("YYYY-MM-DD"),current_time:()=>z().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return z(e).utc().format("YYYY");case"month":return z(e).utc().format("MM");case"day":return z(e).utc().format("DD");case"hour":return z(e).utc().format("HH");case"minute":return z(e).utc().format("mm");case"second":return z(e).utc().format("ss");case"millisecond":return z(e).utc().format("SSS");default:break}},date:e=>z(e).utc().format(Bo),date_format:(e,t)=>z(e).utc().format(t),date_add:(e,t,r)=>z(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>z(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=z(e).utc(),n=z(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>z().utc().valueOf(),get_server_time:()=>z().format(Bo),offset_utc:(e,t)=>z(e).utc().utcOffset(t).format(Bo)}});var th=d((Rv,eh)=>{"use strict";var uw=require("@turf/area"),Ew=require("@turf/length"),lw=require("@turf/circle"),dw=require("@turf/difference"),hw=require("@turf/distance"),Sw=require("@turf/boolean-contains"),Tw=require("@turf/boolean-equal"),fw=require("@turf/boolean-disjoint"),Rw=require("@turf/helpers"),zd=f(),D=p();eh.exports={geoArea:mw,geoLength:Aw,geoCircle:Ow,geoDifference:Nw,geoDistance:jd,geoNear:gw,geoContains:pw,geoEqual:Iw,geoCrosses:Cw,geoConvert:bw};var Ho="geo1 is required",vo="geo2 is required";function mw(e){if(D.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=D.autoCast(e)),uw.default(e)}a(mw,"geoArea");function Aw(e,t){if(D.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=D.autoCast(e)),Ew.default(e,{units:t||"kilometers"})}a(Aw,"geoLength");function Ow(e,t,r){if(D.isEmpty(e))throw new Error("point is required");if(D.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=D.autoCast(e)),lw.default(e,t,{units:r||"kilometers"})}a(Ow,"geoCircle");function Nw(e,t){if(D.isEmpty(e))throw new Error("poly1 is required");if(D.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),dw(e,t)}a(Nw,"geoDifference");function jd(e,t,r){if(D.isEmpty(e))throw new Error("point1 is required");if(D.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),hw.default(e,t,{units:r||"kilometers"})}a(jd,"geoDistance");function gw(e,t,r,s){if(D.isEmpty(e))throw new Error("point1 is required");if(D.isEmpty(t))throw new Error("point2 is required");if(D.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),isNaN(r))throw new Error("distance must be a number");return jd(e,t,s)<=r}a(gw,"geoNear");function pw(e,t){if(D.isEmpty(e))throw new Error(Ho);if(D.isEmpty(e))throw new Error(vo);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),Sw.default(e,t)}a(pw,"geoContains");function Iw(e,t){if(D.isEmpty(e))throw new Error(Ho);if(D.isEmpty(e))throw new Error(vo);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),Tw.default(e,t)}a(Iw,"geoEqual");function Cw(e,t){if(D.isEmpty(e))throw new Error(Ho);if(D.isEmpty(e))throw new Error(vo);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),!fw.default(e,t)}a(Cw,"geoCrosses");function bw(e,t,r){if(D.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(D.isEmpty(t))throw new Error("geo_type is required");if(D.isEmpty(zd.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(zd.GEO_CONVERSION_ENUM).join(",")}`);return Rw[t](e,r)}a(bw,"geoConvert")});var sh=d((mv,rh)=>{var Xt=Jd(),Pe=Zd(),it=th();rh.exports=e=>{e.aggr.mad=e.aggr.MAD=Xt.mad,e.aggr.mean=e.aggr.MEAN=Xt.mean,e.aggr.mode=e.aggr.MODE=Xt.mode,e.aggr.prod=e.aggr.PROD=Xt.prod,e.aggr.median=e.aggr.MEDIAN=Xt.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Xt.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Xt.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Pe.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Pe.current_time,e.fn.extract=e.fn.EXTRACT=Pe.extract,e.fn.date=e.fn.DATE=Pe.date,e.fn.date_format=e.fn.DATE_FORMAT=Pe.date_format,e.fn.date_add=e.fn.DATE_ADD=Pe.date_add,e.fn.date_sub=e.fn.DATE_SUB=Pe.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Pe.date_diff,e.fn.now=e.fn.NOW=Pe.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Pe.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Pe.get_server_time,e.fn.getdate=e.fn.GETDATE=Pe.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Pe.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=it.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=it.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=it.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=it.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=it.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=it.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=it.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=it.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=it.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=it.geoNear}});var ah=d((Av,ih)=>{"use strict";var Ls=require("lodash"),_e=require("alasql");_e.options.cache=!1;var Lw=sh(),nh=require("clone"),Si=require("recursive-iterator"),L=g(),y=p(),wr=Jt(),ww=f(),{hdb_errors:yw}=Y(),Uw="IS NULL",ws="There was a problem performing this search. Please check the logs and try again.";Lw(_e);var Ti=class{constructor(t,r){if(y.isEmpty(t))throw L.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(),y.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!y.isEmptyOrZeroLength(s))return L.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw L.error("Error thrown from checkEmptySQL in SQLSearch class method search."),L.error(s),new Error(ws)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw L.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),L.error(s),new Error(ws)}if(Object.keys(this.data).length===0)return L.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw L.error("Error thrown from processJoins in SQLSearch class method search."),L.error(s),new Error(ws)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw L.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),L.error(s),new Error(ws)}try{return t=await this._finalSQL(),t}catch(s){throw L.error("Error thrown from finalSQL in SQLSearch class method search."),L.error(s),new Error(ws)}}_getColumns(){let t=new Si(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(nh(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Ls.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=global.hdb_schema[r.databaseid][r.tableid].hash_attribute,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(y.isEmpty(this.statement.where)){L.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Si(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!y.isEmpty(r)&&r.right)if(y.isNotEmptyAndHasValue(r.right.value)){let s=y.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new _e.yy.LogicValue({value:s}):r.right instanceof _e.yy.StringValue&&!y.isEmpty(s)&&y.autoCasterIsNumberCheck(s.toString())&&(r.right=new _e.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=y.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new _e.yy.LogicValue({value:i}):s instanceof _e.yy.StringValue&&y.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new _e.yy.NumValue({value:i}))});if(t){L.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Si(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(!y.isEmpty(ww.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(y.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(y.isEmptyOrZeroLength(r.left.columnid)||y.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(y.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let _=!1;switch(r.op){case"=":!y.isEmpty(r.right.value)||!y.isEmpty(r.left.value)?s.add(y.isEmpty(r.right.value)?r.left.value:r.right.value):_=!0;break;case"IN":let c=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<c.length;u++)if(c[u].value)s.add(c[u].value);else{_=!0;break}break;default:_=!0;break}this.exact_search_values[o].ignore=_,_?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(y.isEmptyOrZeroLength(this.all_table_attributes)&&y.isEmptyOrZeroLength(this.statement.from)&&y.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&&Ls.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(y.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);y.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(y.isEmptyOrZeroLength(this.all_table_attributes)&&!y.isEmptyOrZeroLength(this.columns.columns))return t;if(y.isEmptyOrZeroLength(this.all_table_attributes)&&y.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await _e.promise(r)}catch(r){throw L.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),L.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(nh(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(y.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(Uw)>-1&&this.tables.forEach(n=>{let i={columnid:global.hdb_schema[n.databaseid][n.tableid].hash_attribute,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Ls.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}`,_=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,_)),i.attribute!==_&&(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,_={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},c=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(c=!0),!y.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!y.isEmptyOrZeroLength(this.exact_search_values[u].values))if(c)try{_.hash_values=Array.from(this.exact_search_values[u].values);let E=await wr.getDataByHash(_);for(let l of _.hash_values)l in E&&!this.data[i].__merged_data[l]&&(this.data[i].__merged_data[l]=[...s[i]],this._setMergedHashAttribute(i,l))}catch(E){L.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),L.error(E)}else try{_.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async E=>{let l=Object.assign({},_);l.search_value=E;let T=await wr.getDataByValue(l);for(let h in T)this.data[i].__merged_data[h]?this._updateMergedAttribute(i,h,n.attribute,T[h][n.attribute]):(this.data[i].__merged_data[h]=[...s[i]],this._updateMergedAttribute(i,h,n.attribute,T[h][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(h)))}))}catch(E){L.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),L.error(E)}else if(!y.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!y.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let E=this.comparator_search_values[u].comparators;for(let l=0,T=E.length;l<T;l++){let h=E[l];_.search_attribute=h.attribute,_.search_value=h.search_value;let A=await wr.getDataByValue(_,h.operation);if(c)for(let O in A)this.data[i].__merged_data[O]||(this.data[i].__merged_data[O]=[...s[i]],this._setMergedHashAttribute(i,y.autoCast(O)));else for(let O in A)this.data[i].__merged_data[O]?this._updateMergedAttribute(i,O,n.attribute,A[O][n.attribute]):(this.data[i].__merged_data[O]=[...s[i]],this._updateMergedAttribute(i,O,n.attribute,A[O][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(O)))}}catch(E){L.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),L.error(E)}else try{_.search_attribute=n.attribute,_.search_value="*";let E=await wr.getDataByValue(_);if(c)for(let l in E)this.data[i].__merged_data[l]||(this.data[i].__merged_data[l]=[...s[i]],this._setMergedHashAttribute(i,y.autoCast(l)));else for(let l in E)this.data[i].__merged_data[l]?this._updateMergedAttribute(i,l,n.attribute,E[l][n.attribute]):(this.data[i].__merged_data[l]=[...s[i]],this._updateMergedAttribute(i,l,n.attribute,E[l][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(l)))}catch(E){L.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),L.error(E)}}}_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 _e.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 _e.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new _e.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 _e.yy.FuncValue:new _e.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(h=>{h.joinmode&&h.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(h.table);let A=h.joinmode+" JOIN ? AS "+(h.as?h.as:h.table.tableid);h.on&&(A+=" ON "+h.on.toString()),i.push(A),t.push(Object.values(this.data[`${h.table.databaseid_orig}_${h.table.as?h.table.as_orig:h.table.tableid_orig}`].__merged_data))});let o=[],_={};n.forEach(h=>{let A=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__hash_name,O=h.as?h.as_orig:h.tableid_orig;o.push({key:`'${O}.${A}'`,schema:h.databaseid_orig,table:h.as?h.as_orig:h.tableid_orig,keys:new Set}),r.push(`${h.as?h.as:h.tableid}.\`${A}\` AS "${O}.${A}"`),_[h.as?h.as_orig:h.tableid_orig]=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__merged_attributes});let c=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(h=>{h.is_func?r.push(h.initial_select_column.toString()):h.initial_select_column.tableid?r.push(`${h.initial_select_column.tableid}.${h.initial_select_column.columnid} AS ${h.expression.columnid}`):r.push(`${h.initial_select_column.columnid} AS ${h.expression.columnid}`)}));let E="",l="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(E=this.statement.limit?"LIMIT "+this.statement.limit:"",l=this.statement.offset?"OFFSET "+this.statement.offset:"");let T=[];try{let h=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${c} ${u} ${E} ${l}`,A=this._convertColumnsToIndexes(h,n);T=await _e.promise(A,t),t=null}catch(h){throw L.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),L.error(h),new Error("There was a problem processing the data.")}if(T&&T.length>0){for(let h=0,A=T.length;h<A;h++){let O=T[h];o.forEach(I=>{O[I.key]!==null&&O[I.key]!==void 0&&I.keys.add(O[I.key])})}o.forEach(h=>{let A=Object.keys(this.data[`${h.schema}_${h.table}`].__merged_data),O=Ls.difference(A,[...h.keys].map(I=>I.toString()));for(let I=0,X=O.length;I<X;I++){let v=O[I];delete this.data[`${h.schema}_${h.table}`].__merged_data[v]}})}return{existing_attributes:_,joined_length:T?T.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Si(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let _=o.table.as?o.table.as:o.table.tableid;(!t[_]||t[_].indexOf(o.attribute)<0)&&s.push(o)}}s=Ls.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){L.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),L.error(i)}}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 E in i)o.push(i[E][0]);this.data[s].__merged_attributes.push(...n.columns);let _={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},c=await wr.getDataByHash(_),u=n.columns.length;for(let E=0,l=o.length;E<l;E++){let T=o[E],h=c[T];for(let A=0;A<u;A++){let O=n.columns[A],I=h[O]===void 0?null:h[O];this.data[s].__merged_data[T].push(I)}}}}catch(r){throw L.error("Error thrown from getDataByHash function in SQLSearch class method getData."),L.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 _=o.aggregatorid?o.expression:o,c=o.aggregatorid?o.as_orig:_.as_orig;return n.expression.tableid?_.columnid_orig===n.expression.columnid_orig&&_.tableid_orig===n.expression.tableid_orig:_.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===c}).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();L.trace(`Final SQL: ${n}`),s=await _e.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),L.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw L.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),L.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 L.error(yw.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),L.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,_)=>{let c=n[i],u=new RegExp(`${c}.\`${o}\``,"g"),E=`${c}.[${_}]`;s=s.replace(u,E)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=new RegExp(`\`${o}\``,"g"),u=`[${_}]`;s=s.replace(c,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 wr.getDataByValue(i);for(let _ in o)this.data[n].__merged_data[_]||(this.data[n].__merged_data[_]=Object.assign({},r[n])),this.data[n].__merged_data[_][t[s.attribute]]=o[_][s.attribute]}catch(o){L.error("There was an error when processing this SQL operation. Check your logs"),L.error(o)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(Ti,"SQLSearch");ih.exports=Ti});var ys=d((Ov,_h)=>{"use strict";var Dw=Yd();_h.exports={searchByConditions:Hw,searchByHash:vw,searchByValue:Gw,search:qw};var Go=Jt(),oh=require("util"),Mw=oh.callbackify(Go.searchByHash),Pw=oh.callbackify(Go.searchByValue),Bw=ah();async function Hw(e){return Go.searchByConditions(e)}a(Hw,"searchByConditions");function vw(e,t){try{Mw(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(vw,"searchByHash");function Gw(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),Pw(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(Gw,"searchByValue");function qw(e,t){try{let r=new Dw(e);r.validate(),new Bw(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(qw,"search")});var Ur=d((Nv,Sh)=>{"use strict";var uh=ys(),Ut=g(),Eh=yn(),Fw=require("lodash"),xw=require("path"),Vw=ns(),qo=p(),{promisify:lh}=require("util"),F=f(),{handleHDBError:fi,hdb_errors:kw}=Y(),{HDB_ERROR_MSGS:Ri,HTTP_STATUS_CODES:dh}=kw,$w=Z();$w.initSync();var ch=G(),Yw=V(),Us=lh(uh.searchByValue),Kw=lh(uh.searchByHash),yr="name",hh="hash_attribute",Fo="schema",Ww="schema_table",Qw="attribute";Sh.exports={describeAll:Jw,describeTable:mi,describeSchema:Zw};async function Jw(e){try{let t=qo.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:F.SYSTEM_SCHEMA_NAME,table:F.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:yr,search_value:F.WILDCARD_SEARCH_VALUE,get_attributes:[yr]},i=await Us(n);if(qo.isEmptyOrZeroLength(i))return{};let o={},_={};for(let T in i)o[i[T].name]=!0,!t&&!s&&(_[i[T].name]=r[i[T].name].describe);let c={schema:F.SYSTEM_SCHEMA_NAME,table:F.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:F.ID_ATTRIBUTE_STRING,search_value:F.WILDCARD_SEARCH_VALUE,get_attributes:[hh,F.ID_ATTRIBUTE_STRING,yr,Fo]},u=await Us(c),E=[];for(let T of u)try{let h;if(t||s)h=await mi({schema:T.schema,table:T.name});else if(r&&r[T.schema].describe&&r[T.schema].tables[T.name].describe){let A=r[T.schema].tables[T.name].attribute_permissions;h=await mi({schema:T.schema,table:T.name},A)}h&&E.push(h)}catch(h){Ut.error(h)}let l={};for(let T in E)t||s?(l[E[T].schema]==null&&(l[E[T].schema]={}),l[E[T].schema][E[T].name]=E[T],o[E[T].schema]&&delete o[E[T].schema]):_[E[T].schema]&&(l[E[T].schema]==null&&(l[E[T].schema]={}),l[E[T].schema][E[T].name]=E[T],o[E[T].schema]&&delete o[E[T].schema]);for(let T in o)t||s?l[T]={}:_[T]&&(l[T]={});return l}catch(t){return Ut.error("Got an error in describeAll"),Ut.error(t),fi(new Error,Ri.DESCRIBE_ALL_ERR)}}a(Jw,"describeAll");async function mi(e,t){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={},o=Eh.describe_table(e);if(o)throw o;if(r===F.SYSTEM_SCHEMA_NAME)return global.hdb_schema[F.SYSTEM_SCHEMA_NAME][s];let _={schema:F.SYSTEM_SCHEMA_NAME,table:F.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:F.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:yr,search_value:s,hash_values:[],get_attributes:[F.WILDCARD_SEARCH_VALUE]},c=await Us(_);if(!c||c.length===0)throw fi(new Error,Ri.TABLE_NOT_FOUND(e.schema,e.table),dh.NOT_FOUND);for await(let u of c)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw fi(new Error,Ri.INVALID_TABLE_ERR(i));let E={schema:F.SYSTEM_SCHEMA_NAME,table:F.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:F.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:Ww,search_value:r+"."+s,get_attributes:[Qw]},l=await Us(E);l=Fw.uniqBy(l,T=>T.attribute),n&&n.length>0&&(l=Xw(n)),i.attributes=l,i.clustering_stream_name=Vw.createNatsTableStreamName(u.schema,u.name);try{let T=xw.join(Yw.getBaseSchemaPath(),i.schema.toString()),h=await ch.openEnvironment(T,i.name),A=ch.statDBI(h,i.hash_attribute);i.record_count=A.entryCount}catch(T){Ut.warn(`unable to stat table dbi due to ${T}`)}}catch(E){Ut.error(`There was an error getting attributes for table '${u.name}'`),Ut.error(E)}return i}a(mi,"descTable");function Xw(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(Xw,"getAttrsByPerms");async function Zw(e){let t=Eh.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(),n={schema:F.SYSTEM_SCHEMA_NAME,table:F.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:F.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Fo,search_value:s,hash_values:[],get_attributes:[hh,F.ID_ATTRIBUTE_STRING,yr,Fo]},i=await Us(n);if(i&&i.length<1){let o={schema:F.SYSTEM_SCHEMA_NAME,table:F.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:F.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[yr]},_=await Kw(o);if(_&&_.length<1)throw fi(new Error,Ri.SCHEMA_NOT_FOUND(e.schema),dh.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async _=>{try{let c;if(r&&r.tables[_.name]&&(c=r.tables[_.name]),qo.isEmpty(c)||c.describe){let u=await mi({schema:e.schema,table:_.name},c?c.attribute_permissions:null);u&&(o[u.name]=u)}}catch(c){Ut.error(`Error describing schema table '${e.schema}.${_}'`),Ut.error(c)}})),o}}a(Zw,"describeSchema")});var Ds=d((Iv,Ah)=>{var gv=require("async"),Dr=Yt(),pv=g(),{callbackify:Rh,promisify:zw}=require("util");Ah.exports={setSchemaDataToGlobal:Th,getTableSchema:ty,getSystemSchema:sy,setSchemaDataToGlobalAsync:zw(Th)};var mh=Ur(),jw=Rh(mh.describeAll),ey=Rh(mh.describeTable);function Th(e){jw(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Dr),global.hdb_schema=r,e(null,null)})}a(Th,"setSchemaDataToGlobal");function fh(e,t){return e==="system"?Dr[t]:global.hdb_schema[e][t]}a(fh,"returnSchema");function ty(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?ry(e,t,s=>{if(s)return r(s);if(!global.hdb_schema[e])return r(`schema ${e} does not exist`);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return r(`table ${e}.${t} does not exist`);r(null,fh(e,t))}):r(null,fh(e,t))}a(ty,"getTableSchema");function ry(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=Dr:global.hdb_schema={system:Dr},r();return}ey(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:Dr}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(ry,"setTableDataToGlobal");function sy(){return Dr}a(sy,"getSystemSchema")});var Ms=d((Cv,gh)=>{"use strict";var Oi=so(),Fe=p(),ny=require("util"),Ni=Jt(),iy=Ds(),xo=g(),{handleHDBError:Dt,hdb_errors:ay}=Y(),{HTTP_STATUS_CODES:Zt}=ay,oy=ny.promisify(iy.getTableSchema),_y="updated",Oh="inserted",Nh="upserted";gh.exports={insert:uy,update:Ey,upsert:ly,validation:cy,flush:dy};async function cy(e){if(Fe.isEmpty(e))throw new Error("invalid update parameters defined.");if(Fe.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Fe.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await oy(e.schema,e.table),r=Oi(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(_=>{if(o&&Fe.isEmptyOrZeroLength(_[s]))throw xo.error("a valid hash attribute must be provided with update record:",_),new Error("a valid hash attribute must be provided with update record");if(!Fe.isEmptyOrZeroLength(_[s])&&(_[s]==="null"||_[s]==="undefined"))throw xo.error(`a valid hash value must be provided with ${e.operation} record:`,_),new Error(`"${_[s]}" is not a valid hash attribute value`);!Fe.isEmpty(_[s])&&_[s]!==""&&n.has(Fe.autoCast(_[s]))&&(_.skip=!0),n.add(Fe.autoCast(_[s]));for(let c in _)i[c]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(cy,"validation");async function uy(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Oi(e);if(t)throw Dt(new Error,t.message,Zt.BAD_REQUEST);let r=Fe.checkSchemaTableExist(e.schema,e.table);if(r)throw Dt(new Error,r,Zt.BAD_REQUEST);try{let s=await Ni.createRecords(e);return Ai(Oh,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}a(uy,"insertData");async function Ey(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Oi(e);if(t)throw Dt(new Error,t.message,Zt.BAD_REQUEST);let r=Fe.checkSchemaTableExist(e.schema,e.table);if(r)throw Dt(new Error,r,Zt.BAD_REQUEST);try{let s=await Ni.updateRecords(e);return Fe.isEmpty(s.existing_rows)?Ai(_y,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Ai(s.update_action,[],e,s.hashes,void 0,s.txn_time)}catch(s){throw s}}a(Ey,"updateData");async function ly(e){if(e.operation!=="upsert")throw Dt(new Error,"invalid operation, must be upsert",Zt.INTERNAL_SERVER_ERROR);let t=Oi(e);if(t)throw Dt(new Error,t.message,Zt.BAD_REQUEST);let r=Fe.checkSchemaTableExist(e.schema,e.table);if(r)throw Dt(new Error,r,Zt.BAD_REQUEST);try{let s=await Ni.upsertRecords(e);return Ai(Nh,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw Dt(s,null,null,xo.ERR,n)}}a(ly,"upsertData");function Ai(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===Oh?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===Nh?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Ai,"returnObject");function dy(e){return Ni.flush(e.schema,e.table)}a(dy,"flush")});var bh=d((bv,Ch)=>{var hy=Ke(),Vo=require("joi"),{hdb_schema_table:ph}=Rr(),Ih={schema:ph,table:ph},Sy={date:Vo.date().iso().required()},Ty={timestamp:Vo.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Ch.exports=function(e,t){let r=t==="timestamp"?{...Ih,...Ty}:{...Ih,...Sy},s=Vo.object(r);return hy.validateBySchema(e,s)}});var Uh=d((Lv,yh)=>{var fy=Ke(),Lh=require("joi"),{hdb_schema_table:wh}=Rr(),Ry=Lh.object({schema:wh,table:wh,hash_values:Lh.array().required()});yh.exports=function(e){return fy.validateBySchema(e,Ry)}});var Mh=d((wv,Dh)=>{"use strict";var gi=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(gi,"InsertObject");var pi=class{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}};a(pi,"NoSQLSeachObject");var Ii=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(Ii,"DeleteResponseObject");Dh.exports={InsertObject:gi,NoSQLSeachObject:pi,DeleteResponseObject:Ii}});var Yo=d((yv,Gh)=>{"use strict";var Bh=bh(),my=Uh(),Ci=p(),Ph=require("moment"),Hh=g(),{promisify:Ay,callbackify:Oy}=require("util"),zt=f(),Ny=Ds(),ko=Ay(Ny.getTableSchema),$o=Jt(),{DeleteResponseObject:gy}=Mh(),{handleHDBError:Mt,hdb_errors:py}=Y(),{HDB_ERROR_MSGS:bi,HTTP_STATUS_CODES:Pt}=py,Iy="records successfully deleted",Cy=Oy(vh);Gh.exports={delete:Cy,deleteRecord:vh,deleteFilesBefore:by,deleteAuditLogsBefore:Ly};async function by(e){let t=Bh(e,"date");if(t)throw Mt(t,t.message,Pt.BAD_REQUEST,void 0,void 0,!0);if(!Ph(e.date,Ph.ISO_8601).isValid())throw Mt(new Error,bi.INVALID_DATE,Pt.BAD_REQUEST,zt.LOG_LEVELS.ERROR,bi.INVALID_DATE,!0);let s=Ci.checkSchemaTableExist(e.schema,e.table);if(s)throw Mt(new Error,s,Pt.NOT_FOUND,zt.LOG_LEVELS.ERROR,s,!0);try{let n=await $o.deleteRecordsBefore(e);if(await ko(e.schema,e.table),Hh.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}a(by,"deleteFilesBefore");async function Ly(e){let t=Bh(e,"timestamp");if(t)throw Mt(t,t.message,Pt.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Mt(new Error,bi.INVALID_VALUE("Timestamp"),Pt.BAD_REQUEST,zt.LOG_LEVELS.ERROR,bi.INVALID_VALUE("Timestamp"),!0);let r=Ci.checkSchemaTableExist(e.schema,e.table);if(r)throw Mt(new Error,r,Pt.NOT_FOUND,zt.LOG_LEVELS.ERROR,r,!0);try{let s=await $o.deleteAuditLogsBefore(e);return await ko(e.schema,e.table),Hh.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}a(Ly,"deleteAuditLogsBefore");async function vh(e){let t=my(e);if(t)throw Mt(t,t.message,Pt.BAD_REQUEST,void 0,void 0,!0);let r=Ci.checkSchemaTableExist(e.schema,e.table);if(r)throw Mt(new Error,r,Pt.NOT_FOUND,zt.LOG_LEVELS.ERROR,r,!0);try{await ko(e.schema,e.table);let s=await $o.deleteRecords(e);return Ci.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${Iy}`),s}catch(s){if(s.message===zt.SEARCH_NOT_FOUND_MESSAGE){let n=new gy;return n.message=zt.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(vh,"deleteRecord")});var Li=d((Uv,xh)=>{var wy=require("crypto"),qh=9;function yy(e){let t=Dy(qh),r=Fh(e+t);return t+r}a(yy,"createHash");function Uy(e,t){let r=e.substr(0,qh),s=r+Fh(t+r);return e===s}a(Uy,"validateHash");function Dy(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(Dy,"generateSalt");function Fh(e){return wy.createHash("md5").update(e).digest("hex")}a(Fh,"md5");xh.exports={hash:yy,validate:Uy}});var kh=d((Dv,Vh)=>{var Ko=Ke(),Re={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 My(e){return Re.password.presence=!0,Re.username.presence=!0,Re.role.presence=!0,Re.active.presence=!0,Ko.validateObject(e,Re)}a(My,"addUserValidation");function Py(e){return Re.password.presence=!1,Re.username.presence=!0,Re.role.presence=!1,Re.active.presence=!1,Ko.validateObject(e,Re)}a(Py,"alterUserValidation");function By(e){return Re.password.presence=!1,Re.username.presence=!0,Re.role.presence=!1,Re.active.presence=!1,Ko.validateObject(e,Re)}a(By,"dropUserValidation");Vh.exports={addUserValidation:My,alterUserValidation:Py,dropUserValidation:By}});var Yh=d((Mv,$h)=>{"use strict";var Bt=f(),Ps=class{constructor(t=0,r=Bt.STORAGE_TYPES_ENUM.LMDB,s=Bt.LICENSE_VALUES.API_CALL_DEFAULT,n=Bt.RAM_ALLOCATION_ENUM.DEFAULT,i=Bt.LICENSE_VALUES.VERSION_DEFAULT,o){this.exp_date=t,this.storage_type=r,this.api_call=s,this.ram_allocation=n,this.version=i,this.fingerprint=o}};a(Ps,"BaseLicense");var wi=class extends Ps{constructor(t=0,r=Bt.STORAGE_TYPES_ENUM.LMDB,s=Bt.LICENSE_VALUES.API_CALL_DEFAULT,n=Bt.RAM_ALLOCATION_ENUM.DEFAULT,i=Bt.LICENSE_VALUES.VERSION_DEFAULT,o,_=!1){super(t,r,s,n,i,o),this.enterprise=_}};a(wi,"ExtendedLicense");$h.exports={BaseLicense:Ps,ExtendedLicense:wi}});var Zo=d((Pv,Zh)=>{"use strict";var Pr=require("fs-extra"),Kh=Li(),Wh=require("crypto"),Hy=require("moment"),vy=require("uuid").v4,me=g(),Qo=require("path"),Gy=p(),Be=f(),qy=Yh().ExtendedLicense,Mr="invalid license key format",Fy="061183",xy="mofi25",Vy="aes-256-cbc",ky=16,$y=32,Qh=Z();Qh.initSync();var Wo;Zh.exports={validateLicense:Jh,generateFingerPrint:Ky,licenseSearch:Xh,getLicense:Jy};function Jo(){return Qo.join(Qh.getHdbBasePath(),Be.LICENSE_KEY_DIR_NAME,Be.LICENSE_FILE_NAME)}a(Jo,"getLicenseDirPath");function Yy(){let e=Jo();return Qo.join(e,Be.LICENSE_FILE_NAME)}a(Yy,"getLicenseFilePath");function Xo(){let e=Jo();return Qo.join(e,Be.REG_KEY_FILE_NAME)}a(Xo,"getFingerPrintFilePath");async function Ky(){let e=Xo();try{return await Pr.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await Wy();throw me.error(`Error writing fingerprint file to ${e}`),me.error(t),new Error("There was an error generating the fingerprint")}}a(Ky,"generateFingerPrint");async function Wy(){let e=vy(),t=Kh.hash(e),r=Xo();try{await Pr.mkdirp(Jo()),await Pr.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw me.error(`Error writing fingerprint file to ${r}`),me.error(s),new Error("There was an error generating the fingerprint")}return t}a(Wy,"writeFingerprint");function Jh(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Be.STORAGE_TYPES_ENUM.LMDB,api_call:Be.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Be.RAM_ALLOCATION_ENUM.DEFAULT,version:Be.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return me.error("empty license key passed to validate."),r;let s=Xo(),n=!1;try{n=Pr.statSync(s)}catch(i){me.error(i)}if(n){let i;try{i=Pr.readFileSync(s,"utf8")}catch{me.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(xy),_=o[1];_=Buffer.concat([Buffer.from(_)],ky);let c=Buffer.concat([Buffer.from(i)],$y),u=Wh.createDecipheriv(Vy,c,_);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let E=null;try{E=u.update(o[0],"hex","utf8"),E.trim(),E+=u.final("utf8")}catch{let h=Qy(o[0],i);if(h)E=h;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Mr),me.error(Mr),new Error(Mr)}let l;if(isNaN(E))try{l=JSON.parse(E),r.api_call=l.api_call,r.version=l.version,r.storage_type=l.storage_type,r.exp_date=l.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),l.ram_allocation&&(r.ram_allocation=l.ram_allocation)}catch{throw console.error(Mr),me.error(Mr),new Error(Mr)}else r.exp_date=E;r.exp_date<Hy().valueOf()&&(r.valid_date=!1),Kh.validate(o[1],`${Fy}${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||me.error("Invalid licence"),r}a(Jh,"validateLicense");function Qy(e,t){try{let r=Wh.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{me.warn("Check old license failed")}}a(Qy,"checkOldLicense");function Xh(){let e=new qy;e.api_call=0;let t=[];try{t=Pr.readFileSync(Yy(),"utf-8").split(Be.NEW_LINE)}catch(r){r.code==="ENOENT"?me.info("no license file found"):me.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(Gy.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=Jh(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.api_call+=i.api_call,e.ram_allocation=i.ram_allocation,e.storage_type=i.storage_type,e.enterprise=!0)}catch(n){me.error("There was an error parsing the license string."),me.error(n),e.api_call=Be.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Be.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Be.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Be.LICENSE_VALUES.API_CALL_DEFAULT),Wo=e,e}a(Xh,"licenseSearch");async function Jy(){return Wo||await Xh(),Wo}a(Jy,"getLicense")});var Hr=d((Bv,ES)=>{"use strict";var tS="username is required",rS="nothing to update, must supply active, role or password to update",sS="password cannot be an empty string",nS="If role is specified, it cannot be empty.",iS="active must be true or false";ES.exports={addUser:sU,alterUser:nU,dropUser:aU,userInfo:oU,listUsers:Ui,listUsersExternal:_U,setUsersToGlobal:Bs,findAndValidateUser:EU,getClusterUser:lU,USERNAME_REQUIRED:tS,ALTERUSER_NOTHING_TO_UPDATE:rS,EMPTY_PASSWORD:sS,EMPTY_ROLE:nS,ACTIVE_BOOLEAN:iS};var aS=Ms(),Xy=Yo(),jo=Li(),oS=kh(),_S=ys(),e_=Ss(),se=p(),cS=require("validate.js"),w=g(),{promisify:t_}=require("util"),r_=ns(),jt=f(),zh=De(),Zy=ts(),s_=Z(),zy=Zo(),jy=Yt(),{handleHDBError:at,hdb_errors:eU}=Y(),{HTTP_STATUS_CODES:ot,AUTHENTICATION_ERROR_MSGS:zo,HDB_ERROR_MSGS:Br}=eU,{UserEventMsg:n_}=Kt(),jh=require("lodash"),uS={username:!0,active:!0,role:!0,password:!0},eS=new Map,yi=t_(_S.searchByValue),tU=t_(_S.searchByHash),rU=t_(Xy.delete);async function sU(e){let t=cS.cleanAttributes(e,uS),r=oS.addUserValidation(t);if(r)throw at(new Error,r.message,ot.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 yi(s)}catch(u){throw w.error("There was an error searching for a role in add user"),w.error(u),u}if(!n||n.length<1)throw at(new Error,Br.ROLE_NAME_NOT_FOUND(t.role),ot.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw at(new Error,Br.DUP_ROLES_FOUND(t.role),ot.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=r_.encrypt(t.password)),t.password=jo.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await aS.insert(i)}catch(u){throw w.error("There was an error searching for a user."),w.error(u),u}w.debug(o);try{await Bs()}catch(u){throw w.error("Got an error setting users to global"),w.error(u),u}if(o.skipped_hashes.length===1)throw at(new Error,Br.USER_ALREADY_EXISTS(t.username),ot.CONFLICT,void 0,void 0,!0);let _=Object.assign({},t);_.role=n[0];let c={user:null};return c.user=_,se.sendTransactionToSocketCluster(jt.INTERNAL_SC_CHANNELS.ADD_USER,c,s_.get(jt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),e_.signalUserChange(new n_(process.pid)),`${_.username} successfully added`}a(sU,"addUser");async function nU(e){let t=cS.cleanAttributes(e,uS);if(se.isEmptyOrZeroLength(t.username))throw new Error(tS);if(se.isEmptyOrZeroLength(t.password)&&se.isEmptyOrZeroLength(t.role)&&se.isEmptyOrZeroLength(t.active))throw new Error(rS);if(!se.isEmpty(t.password)&&se.isEmptyOrZeroLength(t.password.trim()))throw new Error(sS);if(!se.isEmpty(t.active)&&!se.isBoolean(t.active))throw new Error(iS);let r=iU(t.username);if(!se.isEmpty(t.password)&&!se.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=r_.encrypt(t.password)),t.password=jo.hash(t.password)),t.role==="")throw new Error(nS);if(t.role){let o={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},_;try{_=await yi(o)}catch(c){throw w.error("Got an error searching for a role."),w.error(c),c}if(!_||_.length===0){let c=Br.ALTER_USER_ROLE_NOT_FOUND(t.role);throw w.error(c),at(new Error,c,ot.NOT_FOUND,void 0,void 0,!0)}if(_.length>1){let c=Br.ALTER_USER_DUP_ROLES(t.role);throw w.error(c),at(new Error,c,ot.CONFLICT,void 0,void 0,!0)}t.role=_[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await aS.update(s)}catch(o){throw w.error("Error during update."),w.error(o),o}try{await Bs()}catch(o){throw w.error("Got an error setting users to global"),w.error(o),o}let i={user:null};return i.user=t,se.sendTransactionToSocketCluster(jt.INTERNAL_SC_CHANNELS.ALTER_USER,i,s_.get(jt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),e_.signalUserChange(new n_(process.pid)),n}a(nU,"alterUser");function iU(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(iU,"isClusterUser");async function aU(e){try{let t=oS.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(se.isEmpty(global.hdb_users.get(e.username)))throw at(new Error,Br.USER_NOT_EXIST(e.username),ot.NOT_FOUND,void 0,void 0,!0);let s;try{s=await rU(r)}catch(i){throw w.error("Got an error deleting a user."),w.error(i),i}w.debug(s);try{await Bs()}catch(i){throw w.error("Got an error setting users to global."),w.error(i),i}let n={user:null};return n.user=e,se.sendTransactionToSocketCluster(jt.INTERNAL_SC_CHANNELS.DROP_USER,n,s_.get(jt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),e_.signalUserChange(new n_(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(aU,"dropUser");async function oU(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=e.hdb_user;let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await tU(r)}catch(n){throw w.error("Got an error searching for a role."),w.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw w.error(r),r}return t}a(oU,"userInfo");async function _U(){let e;try{e=await Ui()}catch(t){throw w.error("Got an error listing users."),w.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(_U,"listUsersExternal");async function Ui(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=jh.cloneDeep(await yi(e))}catch(r){throw w.error("Got an error searching for roles."),w.error(r),r}if(!se.isEmptyOrZeroLength(t)){let r={};for(let o in t)r[t[o].id]=t[o];let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=jh.cloneDeep(await yi(s))}catch(o){throw w.error("Got an error searching for users."),w.error(o),o}let i=new Map;for(let o in n){let _=n[o];_.role=r[n[o].role],cU(_.role),i.set(_.username,_)}return(await zy.getLicense()).enterprise?i:uU(i)}}catch(e){throw w.error("got an error listing users"),w.error(e),se.errorizeMessage(e)}return null}a(Ui,"listUsers");function cU(e){try{if(!e){w.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(jy)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){w.error("Got an error trying to set system permissions."),w.error(t)}}a(cU,"appendSystemTablesToRole");function uU(e){try{if(w.info("No enterprise license found. System is limited to 1 clustering role and 1 user role"),!e)return new Map;let t=Object.create(null),r=new Map;e.forEach((n,i)=>{n.role.permission.cluster_user===void 0||n.role.permission.cluster_user===!1?n.role.permission.super_user===!0&&(t[n.role.id]||(t[n.role.id]=new Map),t[n.role.id].set(i,n)):r.set(i,n)});let s={role:void 0,count:0};return Object.keys(t).forEach(n=>{let i=t[n];i.size>=s.count&&(s.role=n,s.count=i.size)}),s.role===void 0?(w.error("No roles found with active users. This is bad."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return w.error("error filtering users."),w.error(t),new Map}}a(uU,"nonEnterpriseFilter");async function Bs(){try{let e=await Ui();global.hdb_users=e}catch(e){throw w.error(e),e}}a(Bs,"setUsersToGlobal");async function EU(e,t,r=!0){global.hdb_users||await Bs();let s=global.hdb_users.get(e);if(!s)throw at(new Error,zo.GENERIC_AUTH_FAIL,ot.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw at(new Error,zo.USER_INACTIVE,ot.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(eS.get(t)===s.password)return n;if(jo.validate(s.password,t))eS.set(t,s.password);else throw at(new Error,zo.GENERIC_AUTH_FAIL,ot.UNAUTHORIZED,void 0,void 0,!0)}return n}a(EU,"findAndValidateUser");async function lU(){let e=await Ui(),t=Zy.getConfigFromFile(jt.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!se.isEmpty(r))return r.decrypt_hash=r_.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+zh.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+zh.SERVER_SUFFIX.ADMIN,r}a(lU,"getClusterUser")});var i_=d((Hv,dU)=>{dU.exports={name:"harperdb",version:"4.0.5",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:{node:">=14.0.0","preferred-node":"18.13.0","go-lang":"1.19.3","nats-server":"2.9.8"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"See License in ./license/Community+Edition+and+Evaluation+End+User+License+Agreement.pdf",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ data_layer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ data_layer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license --storage_type=lmdb && npm run cover:upgrade && npm run cover:nats && npm run cover:cfserver && npm run cover:lmdbbridge && npm run cover:lmdbutility && npm run cover:hdbserver && npm run cover:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license --storage_type=lmdb","cover:main":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","cover:lmdbbridge":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/data_layer/harperBridge/lmdbBridge/**/*.js' --parallel --config '../unitTests/.mocharc.json'","cover:lmdbutility":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --config '../unitTests/.mocharc.json'","cover:hdbserver":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --config '../unitTests/.mocharc.json'","cover:cfserver":"npm run submodules && cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","cover:nats":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","cover:upgrade":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.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/data_layer/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:{"@fastify/accepts-serializer":"5.1.0","@fastify/autoload":"5.4.0","@fastify/compress":"6.1.1","@fastify/cors":"8.1.0","@fastify/static":"6.5.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",async:"3.2.3","aws-sdk":"2.1096.0",chalk:"4.1.2","cli-progress":"3.10.0",clone:"2.1.2",esbuild:"^0.14.49","fast-glob":"3.2.11",fastify:"4.8.1","fastify-plugin":"4.2.1","fill-range":"7.0.1","fs-extra":"10.0.1","human-readable-ids":"1.0.4",inquirer:"8.2.2","is-number":"7.0.0",joi:"17.6.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"8.5.1",lmdb:"2.7.6",lodash:"4.17.21",mathjs:"10.4.0",microtime:"3.1.1",minimist:"1.2.6",mkcert:"1.5.0",moment:"2.29.4",msgpackr:"1.8.2",nats:"2.9.2",needle:"3.1.0","node-ipc":"9.1.4","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.3.0",papaparse:"5.3.2",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.3.1",pm2:"5.2.0",prompt:"1.2.2","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.3.5","stream-chain":"2.2.5","stream-json":"1.7.4",systeminformation:"5.12.4","tar-fs":"2.1.1","truncate-utf8-bytes":"1.0.2",ulidx:"0.3.0",uuid:"9.0.0","validate.js":"0.11.1",yaml:"1.10.2"},devDependencies:{axios:"0.27.2",chai:"4.3.4","chai-integer":"0.1.0",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1","hook-std":"2.0.0","intercept-stdout":"0.1.2",mocha:"8.3.2","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",newman:"5.2.3","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.21.0","newman-reporter-teamcity":"0.1.11","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.3.2",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.2.3"}}}});var tr=d((Wv,US)=>{"use strict";var ft=Z();ft.initSync();var hU=require("fs-extra"),SU=require("semver"),Fs=require("path"),{monotonicFactory:TU}=require("ulidx"),fU=TU(),dS=require("util"),hS=require("child_process"),RU=dS.promisify(hS.exec),mU=hS.spawn,x=De(),K=f(),E_=p(),Rt=g(),Di=ns(),AU=Dd(),Hs=ts(),{encode:__,decode:SS}=require("msgpackr"),{isEmpty:er}=E_,TS=Hr(),vv=Ns(),OU=ys(),Gv=dS.promisify(OU.searchByHash),{connect:NU,StorageType:fS,RetentionPolicy:RS,AckPolicy:mS,DeliverPolicy:c_,NatsConnection:qv,JetStreamManager:Fv,JetStreamClient:xv,StringCodec:Vv,JSONCodec:gU,createInbox:l_,StreamSource:kv,headers:pU,toJsMsg:IU,nuid:$v,JetStreamOptions:Yv,ErrorCode:lS,nanos:Kv}=require("nats"),{PACKAGE_ROOT:CU}=f(),bU=i_(),AS=gU(),LU="clustering",wU=bU.engines[x.NATS_SERVER_NAME],yU=Fs.join(CU,"dependencies"),u_=Fs.join(yU,`${process.platform}-${process.arch}`,x.NATS_BINARY_NAME),a_,o_,vs,Gs,qs,je;US.exports={runCommand:OS,checkNATSServerInstalled:UU,createConnection:d_,getConnection:Mi,getJetStreamManager:vr,getJetStream:NS,getNATSReferences:xe,getServerList:MU,createLocalStream:h_,listStreams:gS,deleteLocalStream:PU,getServerConfig:xs,listRemoteStreams:BU,viewStream:HU,publishToStream:vU,createWorkQueueStream:GU,addSourceToWorkStream:pS,request:qU,removeSourceFromWorkStream:CS,reloadNATS:S_,reloadNATSHub:FU,reloadNATSLeaf:xU,extractServerName:IS,requestErrorHandler:VU,updateWorkStream:kU,createLocalTableStream:LS,createTableStreams:$U,purgeTableStream:wS,purgeSchemaTableStreams:YU,getStreamInfo:KU,updateNodeNameLocalStreams:WU,closeConnection:DU};async function OS(e,t=void 0){let{stdout:r,stderr:s}=await RU(e,{cwd:t});if(s)throw new Error(s.replace(`
6
6
  `,""));return r.replace(`
7
- `,"")}a(CS,"runCommand");async function WU(){try{await yU.access(d_)}catch{return!1}let e=await CS(`${d_} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return UU.eq(t,$U)}a(WU,"checkNATSServerInstalled");async function T_(e,t,r,s=!0,n="127.0.0.1"){return GU({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:ut.get(Y.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:ut.get(Y.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:ut.get(Y.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),insecure:ut.get(Y.CONFIG_PARAMS.CLUSTERING_TLS_INSECURE)}})}a(T_,"createConnection");async function QU(){tt&&(await tt.close(),tt=void 0)}a(QU,"closeConnection");async function Bi(){if(!tt){let e=await NS.getClusterUser();if(sr(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=ut.get(Y.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);tt=await T_(t,e.username,e.decrypt_hash)}return tt}a(Bi,"getConnection");async function Fr(){if(Fs)return Fs;sr(tt)&&await Bi();let{domain:e}=ks(Y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(sr(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Fs=await tt.jetstreamManager({domain:e}),Fs}a(Fr,"getJetStreamManager");async function bS(){if(xs)return xs;sr(tt)&&await Bi();let{domain:e}=ks(Y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(sr(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return xs=tt.jetstream({domain:e}),xs}a(bS,"getJetStream");async function Ve(){let e=tt||await Bi(),t=Fs||await Fr(),r=xs||await bS();return{connection:e,jsm:t,js:r}}a(Ve,"getNATSReferences");async function JU(){let e=ut.get(Y.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),{sys_name:t,decrypt_hash:r}=await NS.getClusterUser(),s=await T_(e,t,r),n=S_(),i=s.subscribe(n),o=[],_=(async()=>{for await(let c of i)o.push(IS.decode(c.data))})();return await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:n}),await s.flush(),await h_.async_set_timeout(50),await i.drain(),await s.close(),await _,o}a(JU,"getServerList");async function f_(e,t){let{jsm:r}=await Ve();await r.streams.add({name:e,storage:OS.File,retention:gS.Limits,subjects:t})}a(f_,"createLocalStream");async function LS(){let{jsm:e}=await Ve(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(LS,"listStreams");async function XU(e){let{jsm:t}=await Ve();await t.streams.delete(e)}a(XU,"deleteLocalStream");async function ZU(e){let{connection:t}=await Ve(),r=[],s=S_(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(IS.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(ZU,"listRemoteStreams");async function zU(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await Ve(),i=MU(),o=[],_={ack_policy:pS.None,durable_name:i,deliver_subject:i,deliver_policy:l_.All};t&&(_.deliver_policy=l_.StartTime,_.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,_);let c={timeout:2e3};r&&(c.max=r);let u=await n.subscribe(i,c);for await(let E of u){let l=xU(E),S=AS(l.data),h={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:S,originators:[]},A=[];if(l.headers){let N=l.headers.get("originators");N&&(A=N.split(","),h.originators=A)}o.push(h),u.getPending()===1&&l.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),o}catch(c){if(await s.consumers.delete(e,i),c.code==="TIMEOUT")return o;throw c}}a(zU,"viewStream");async function jU(e,t,r=[],s=[]){Ot.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,r,"originators:",s);let{connection:n,js:i}=await Ve(),o=await Hi(),_=`${e}.${o}`,c=FU();s.push(o),c.append("originators",s.join());for(let u=0,E=r.length;u<E;u++)try{Ot.trace(`publishToStream publishing to subject: ${_}, data:`,r[u]),await i.publish(_,E_(r[u]),{headers:c})}catch(l){if(l.code&&l.code.toString()==="503")Ot.trace(`publishToStream creating stream: ${t}`),await f_(t,[_]),await i.publish(_,E_(r[u]),{headers:c});else throw l}}a(jU,"publishToStream");function ks(e){e=e.toLowerCase();let t=Vs.join(ut.get(Y.CONFIG_PARAMS.ROOTPATH),YU);if(e===Y.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return sr(u_)&&(u_={port:Gs.getConfigFromFile(Y.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Gs.getConfigFromFile(Y.CONFIG_PARAMS.CLUSTERING_NODENAME)+x.SERVER_SUFFIX.HUB,config_file:x.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Vs.join(t,x.PID_FILES.HUB),hdb_nats_path:t}),u_;if(e===Y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return sr(c_)&&(c_={port:Gs.getConfigFromFile(Y.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Gs.getConfigFromFile(Y.CONFIG_PARAMS.CLUSTERING_NODENAME)+x.SERVER_SUFFIX.LEAF,config_file:x.NATS_CONFIG_FILES.LEAF_SERVER,domain:Gs.getConfigFromFile(Y.CONFIG_PARAMS.CLUSTERING_NODENAME)+x.SERVER_SUFFIX.LEAF,pid_file_path:Vs.join(t,x.PID_FILES.LEAF),hdb_nats_path:t}),c_;Ot.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(ks,"getServerConfig");async function eD(e){let{jsm:t}=await Ve(),r=await Hi();try{await t.streams.add({name:e.stream_name,storage:OS.File,retention:gS.Workqueue,subjects:[`${x.SUBJECT_PREFIXES.MSGID}.${r}`,`${x.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:pS.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:l_.All,max_ack_pending:1e4,deliver_group:e.deliver_group,filter_subject:`${x.SUBJECT_PREFIXES.TXN}.>`});else throw s}}a(eD,"createWorkQueueStream");async function wS(e,t,r){let{jsm:s}=await Ve(),n=await s.streams.info(t),i=yS(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:_,table:c}=r,u=Pi.createNatsTableStreamName(_,c),E=i===e,l,S,h=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let N=0,I=n.config.sources.length;N<I;N++)if(l=n.config.sources[N],S=N,E&&l.name===u||!E&&l.name===u&&l.external&&l.external.api===`$JS.${e}.API`){h=!0;break}if(h===!0){if(l.opt_start_time===o)return;await DS(_,c,l,t),n.config.sources.splice(S,1),await s.streams.update(t,n.config)}let A={name:u,opt_start_time:o,filter_subject:`${x.SUBJECT_PREFIXES.TXN}.>`};E||(A.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(A),await s.streams.update(t,n.config)}a(wS,"addSourceToWorkStream");function yS(e){return e.split(".")[1]}a(yS,"extractServerName");async function US(e,t,r){let{schema:s,table:n}=r,i=Pi.createNatsTableStreamName(s,n),{jsm:o}=await Ve(),_=await o.streams.info(t);if(!Array.isArray(_.config.sources)||_.config.sources.length===0)return;let c=_.config.sources.length,u;for(;c--;)if(u=_.config.sources[c],u.name===i&&u.external.api===`$JS.${e}.API`){_.config.sources.splice(c,1);break}await o.streams.update(t,_.config),await DS(s,n,u,t)}a(US,"removeSourceFromWorkStream");async function DS(e,t,r,s){let n=await Fr(),i;try{i=BS(e,t,r.external.api.split(".")[1]),await n.streams.purge(s,{filter:i})}catch{Ot.error("Error purging source subject",i,"from work stream",s)}}a(DS,"purgeSourceFromWorkStream");async function tD(e,t,r=2e3,s=S_()){if(!h_.isObject(t))throw new Error("data param must be an object");let n=E_(t),{connection:i}=await Ve(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let _=await i.request(e,n,o);return AS(_.data)}a(tD,"request");function R_(e){return new Promise(async(t,r)=>{let s=BU(d_,["--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(R_,"reloadNATS");async function rD(){let{pid_file_path:e}=ks(Y.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await R_(e)}a(rD,"reloadNATSHub");async function sD(){let{pid_file_path:e}=ks(Y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await R_(e)}a(sD,"reloadNATSLeaf");function nD(e,t,r){let s;switch(e.code){case fS.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case fS.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(nD,"requestErrorHandler");async function iD(e,t){let r=t+x.SERVER_SUFFIX.LEAF;await HU.writeTransaction(Y.SYSTEM_SCHEMA_NAME,Y.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await wS(r,x.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await US(r,x.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(iD,"updateWorkStream");async function MS(e,t){let r=Pi.createNatsTableStreamName(e,t),s=await Hi(),n=BS(e,t,s);await f_(r,[n])}a(MS,"createLocalTableStream");async function aD(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await MS(s,n)}}a(aD,"createTableStreams");async function PS(e,t){if(ut.get(Y.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Pi.createNatsTableStreamName(e,t),{jsm:s}=await Ve();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Ot.warn(r);else throw r}}a(PS,"purgeTableStream");async function oD(e,t){if(ut.get(Y.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await PS(e,t[r])}a(oD,"purgeSchemaTableStreams");async function _D(e){return(await Fr()).streams.info(e)}a(_D,"getStreamInfo");function BS(e,t,r){return`${x.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(BS,"createSubjectName");async function Hi(){if(qs)return qs;if(qs=(await Fr())?.nc?.info?.server_name,qs===void 0)throw new Error("Unable to get jetstream manager server name");return qs}a(Hi,"getJsmServerName");async function cD(){let e=await Fr(),t=await Hi(),r=await LS();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=i.split(".");if(o[o.length-1]!==t){if(n.name===x.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let c=`${x.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Ot.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c}else if(n.name===x.WORK_QUEUE_CONSUMER_NAMES.stream_name){let c=`${x.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Ot.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c,await e.consumers.update(x.WORK_QUEUE_CONSUMER_NAMES.stream_name,x.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${x.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let c=i.split(".");c[c.length-1]=t;let u=c.join(".");Ot.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}await e.streams.update(n.name,n)}}}a(cD,"updateNodeNameLocalStreams")});var qS=d((EG,GS)=>{"use strict";var m_=G(),uD=g(),vS=Oe().LMDB_ERRORS_ENUM;GS.exports=ED;async function ED(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 m_.closeEnvironment(global.lmdb_map[o])}catch(_){if(_.message!==vS.ENV_REQUIRED)throw _}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await m_.closeEnvironment(global.lmdb_map[s]),await m_.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==vS.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){uD.error(t)}}a(ED,"cleanLMDBMap")});var YS=d((lG,kS)=>{"use strict";var ir=g(),vi=f(),lD=qS(),FS=Ps(),dD=Pr(),hD=qr(),{validateEvent:VS}=Jt(),SD={[vi.IPC_EVENT_TYPES.SCHEMA]:TD,[vi.IPC_EVENT_TYPES.USER]:RD};async function TD(e){let t=VS(e);if(t){ir.error(t);return}ir.trace(`IPC schemaHandler ${vi.HDB_IPC_CLIENT_PREFIX}${process.pid} received schema event:`,e),await lD(e.message),await fD(e.message)}a(TD,"schemaHandler");async function fD(e){try{if(global.hdb_schema!==void 0&&typeof global.hdb_schema=="object"&&e.operation!==void 0)switch(e.operation){case"drop_schema":delete global.hdb_schema[e.schema];break;case"drop_table":global.hdb_schema[e.schema]!==void 0&&delete global.hdb_schema[e.schema][e.table];break;case"create_schema":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={});break;case"create_table":case"create_attribute":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={}),global.hdb_schema[e.schema][e.table]=await dD.describeTable({schema:e.schema,table:e.table});break;default:FS.setSchemaDataToGlobal(xS);break}else FS.setSchemaDataToGlobal(xS)}catch(t){ir.error(t)}}a(fD,"syncSchemaMetadata");function xS(e){e&&ir.error(e)}a(xS,"handleErrorCallback");async function RD(e){try{let t=VS(e);if(t){ir.error(t);return}ir.trace(`IPC userHandler ${vi.HDB_IPC_CLIENT_PREFIX}${process.pid} received user event:`,e),await hD.setUsersToGlobal()}catch(t){ir.error(t)}}a(RD,"userHandler");kS.exports=SD});var QS=d((dG,WS)=>{"use strict";var mD=require("node-ipc").IPC,$S=p(),KS=f(),gt=g(),{IPC_ERRORS:xr}=Oe(),AD=require("os"),Gi=class{constructor(t,r){this.ipc=new mD,this.server_name=KS.HDB_IPC_SERVER,this.ipc.config.retry=AD.platform()=="win32"?6e5:100,this.ipc.config.id=KS.HDB_IPC_CLIENT_PREFIX+t,this.ipc.config.silent=!0,this.event_handlers=r,this.connect()}connect(){this.ipc.connectTo(this.server_name,()=>{this.generateEventHandlers(this.event_handlers)})}addEventHandler(t,r){this.ipc.of[this.server_name].on(t,r)}generateEventHandlers(t){this.ipc.of[this.server_name].on("connect",()=>{gt.info(`IPC client ${this.ipc.config.id} connected to ${this.server_name}`)}),this.ipc.of[this.server_name].on("disconnect",()=>{gt.info(`IPC client ${this.ipc.config.id} disconnected from ${this.server_name}`)}),this.ipc.of[this.server_name].on("error",r=>{r.code==="ECONNREFUSED"&&gt.warn("Error connecting to HDB IPC server. Confirm that the server is running."),gt.warn(`Error with IPC client ${this.ipc.config.id}`),gt.warn(r)});for(let[r,s]of Object.entries(t))this.addEventHandler(r,s)}emitToServer(t){if(typeof t!="object")throw gt.warn(xr.INVALID_IPC_DATA_TYPE),new Error(xr.INVALID_IPC_DATA_TYPE);if($S.isEmpty(t.type))throw gt.warn(xr.MISSING_TYPE),new Error(xr.MISSING_TYPE);if($S.isEmpty(t.message))throw gt.warn(xr.MISSING_MSG),new Error(xr.MISSING_MSG);gt.trace(`IPC client ${this.ipc.config.id} emitting`,t),this.ipc.of[this.server_name].emit("message",t)}};a(Gi,"IPCClient");WS.exports=Gi});var jS=d((hG,zS)=>{"use strict";var ZS=require("joi"),{string:Ys,boolean:JS,array:ND}=ZS.types(),XS=f(),OD=We();zS.exports=gD;function gD(e){let t=ZS.object({operation:Ys.valid(XS.OPERATIONS_ENUM.ADD_NODE,XS.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:Ys.required(),subscriptions:ND.items({schema:Ys.required(),table:Ys.required(),hash_attribute:Ys.optional(),subscribe:JS.required(),publish:JS.required()}).min(1).required()});return OD.validateBySchema(e,t)}a(gD,"updateRemoteSourceValidator")});var tT=d((SG,eT)=>{var pD=We(),ID={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};eT.exports=function(e){return pD.validateObject(e,ID)}});var A_=d((TG,rT)=>{"use strict";var CD=f().OPERATIONS_ENUM,qi=class{constructor(t,r,s,n=void 0){this.operation=CD.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(qi,"UpdateObject");rT.exports=qi});var nT=d((fG,sT)=>{"use strict";var bD={OPERATION:"operation",REFRESH:"refresh"},Fi=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(Fi,"JWTTokens");var xi=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(xi,"JWTRSAKeys");sT.exports={JWTTokens:Fi,TOKEN_TYPE_ENUM:bD,JWTRSAKeys:xi}});var cT=d((RG,_T)=>{"use strict";var Ks=require("jsonwebtoken"),N_=require("fs-extra"),O_=p(),ke=f(),{handleHDBError:be,hdb_errors:LD}=K(),{HTTP_STATUS_CODES:Le,AUTHENTICATION_ERROR_MSGS:we}=LD,$s=g(),iT=yi(),I_=qr(),wD=Bs().update,yD=A_(),UD=fs(),{UserEventMsg:DD}=Jt(),Ft=Z();Ft.initSync();var g_=require("path"),{JWTTokens:MD,JWTRSAKeys:PD,TOKEN_TYPE_ENUM:Vi}=nT(),BD=Ft.get(ke.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Ft.get(ke.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",HD=Ft.get(ke.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Ft.get(ke.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",ki="RS256",p_;_T.exports={createTokens:vD,validateOperationToken:qD,refreshOperationToken:GD,validateRefreshToken:oT};async function vD(e){if(O_.isEmpty(e)||typeof e!="object")throw be(new Error,we.INVALID_AUTH_OBJECT,Le.BAD_REQUEST,void 0,void 0,!0);if(O_.isEmpty(e.username))throw be(new Error,we.USERNAME_REQUIRED,Le.BAD_REQUEST,void 0,void 0,!0);if(O_.isEmpty(e.password))throw be(new Error,we.PASSWORD_REQUIRED,Le.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await I_.findAndValidateUser(e.username,e.password),!t)throw be(new Error,we.INVALID_CREDENTIALS,Le.UNAUTHORIZED,void 0,void 0,!0)}catch(S){throw $s.error(S),be(new Error,we.INVALID_CREDENTIALS,Le.UNAUTHORIZED,void 0,void 0,!0)}let r=await Yi(),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 aT(i,r.private_key,r.passphrase),_=await Ks.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:HD,algorithm:ki,subject:Vi.REFRESH}),c=iT.hash(_),u=new yD(ke.SYSTEM_SCHEMA_NAME,ke.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:c}]),E,l;try{E=await wD(u)}catch(S){$s.error(S),l=S}if(l!==void 0||E.skipped_hashes.length>0)throw be(new Error,we.REFRESH_TOKEN_SAVE_FAILED,Le.INTERNAL_SERVER_ERROR);return UD.signalUserChange(new DD(process.pid)),new MD(o,_)}a(vD,"createTokens");async function aT(e,t,r){return await Ks.sign(e,{key:t,passphrase:r},{expiresIn:BD,algorithm:ki,subject:Vi.OPERATION})}a(aT,"signOperationToken");async function Yi(){if(p_===void 0)try{let e=g_.join(Ft.getHdbBasePath(),ke.LICENSE_KEY_DIR_NAME,ke.JWT_ENUM.JWT_PASSPHRASE_NAME),t=g_.join(Ft.getHdbBasePath(),ke.LICENSE_KEY_DIR_NAME,ke.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=g_.join(Ft.getHdbBasePath(),ke.LICENSE_KEY_DIR_NAME,ke.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await N_.readFile(e)).toString(),n=(await N_.readFile(t)).toString(),i=(await N_.readFile(r)).toString();p_=new PD(i,n,s)}catch(e){throw $s.error(e),be(new Error,we.NO_ENCRYPTION_KEYS,Le.INTERNAL_SERVER_ERROR)}return p_}a(Yi,"getJWTRSAKeys");async function GD(e){if(!e)throw be(new Error,we.INVALID_BODY,Le.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw be(new Error,we.REFRESH_TOKEN_REQUIRED,Le.BAD_REQUEST,void 0,void 0,!0);await oT(e.refresh_token);let t=await Yi(),r=await Ks.decode(e.refresh_token);return{operation_token:await aT({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(GD,"refreshOperationToken");async function qD(e){try{let t=await Yi(),r=await Ks.verify(e,t.public_key,{algorithms:ki,subject:Vi.OPERATION});return await I_.findAndValidateUser(r.username,void 0,!1)}catch(t){throw $s.warn(t),t.name&&t.name==="TokenExpiredError"?be(new Error,we.TOKEN_EXPIRED,Le.FORBIDDEN):be(new Error,we.INVALID_TOKEN,Le.UNAUTHORIZED)}}a(qD,"validateOperationToken");async function oT(e){let t;try{let r=await Yi(),s=await Ks.verify(e,r.public_key,{algorithms:ki,subject:Vi.REFRESH});t=await I_.findAndValidateUser(s.username,void 0,!1)}catch(r){throw $s.warn(r),r.name&&r.name==="TokenExpiredError"?be(new Error,we.TOKEN_EXPIRED,Le.FORBIDDEN):be(new Error,we.INVALID_TOKEN,Le.UNAUTHORIZED)}if(!iT.validate(t.refresh_token,e))throw be(new Error,we.INVALID_TOKEN,Le.UNAUTHORIZED);return t}a(oT,"validateRefreshToken")});var dT=d((AG,lT)=>{"use strict";var FD=tT(),Vr=require("passport"),xD=require("passport-local").Strategy,VD=require("passport-http").BasicStrategy,kD=require("util"),YD=qr(),ET=kD.callbackify(YD.findAndValidateUser),mG=Oe(),$D=f(),uT=cT();Vr.use(new xD(function(e,t,r){ET(e,t,r)}));Vr.use(new VD(function(e,t,r){ET(e,t,r)}));Vr.serializeUser(function(e,t){t(null,e)});Vr.deserializeUser(function(e,t){t(null,e)});function KD(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,_){return o?r(o):_?r(null,_):r("User not found")}switch(a(i,"handleResponse"),s){case"Basic":Vr.authenticate("basic",{session:!1},(o,_)=>{i(o,_)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===$D.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?uT.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):uT.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Vr.authenticate("local",{session:!1},function(o,_){i(o,_)})(e,t,r);break}}a(KD,"authorize");function WD(e,t){let r=FD(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n||!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 _ in o)e.attributes.indexOf(o[_].attribute_name)>-1&&!o[_][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[_].attribute_name} `))}return t(null,s)}a(WD,"checkPermissions");lT.exports={authorize:KD,checkPermissions:WD}});var Wi=d((NG,hT)=>{"use strict";var $i=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a($i,"Node");var Ki=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(Ki,"NodeSubscription");hT.exports={Node:$i,NodeSubscription:Ki}});var TT=d((OG,ST)=>{"use strict";var QD=f().OPERATIONS_ENUM,Qi=class{constructor(t,r,s,n=void 0){this.operation=QD.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Qi,"UpsertObject");ST.exports=Qi});var RT=d((gG,fT)=>{"use strict";var Ji=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(Ji,"RemotePayloadObject");var Xi=class{constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o}};a(Xi,"RemotePayloadSubscription");fT.exports={RemotePayloadObject:Ji,RemotePayloadSubscription:Xi}});var AT=d((pG,mT)=>{"use strict";var Zi=class{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}};a(Zi,"TableSizeObject");mT.exports=Zi});var pT=d((IG,gT)=>{"use strict";var JD=AT(),NT=require("path"),OT=V(),XD=Se(),kr=G(),ZD=g();gT.exports=zD;async function zD(e){let t=new JD;try{let r=NT.join(OT.getBaseSchemaPath(),e.schema.toString()),s=await kr.openEnvironment(r,e.name),n=kr.statDBI(s,e.hash_attribute),i=NT.join(OT.getTransactionAuditStorePath(),e.schema.toString()),o=await kr.openEnvironment(i,e.name,!0),_=kr.statDBI(o,XD.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),c=await kr.environmentDataSize(r,e.name),u=await kr.environmentDataSize(i,e.name);t.schema=e.schema,t.table=e.name,t.table_size=c,t.record_count=n.entryCount,t.transaction_log_size=u,t.transaction_log_record_count=_.entryCount}catch(r){ZD.warn(`unable to stat table dbi due to ${r}`)}return t}a(zD,"lmdbGetTableSize")});var CT=d((CG,IT)=>{"use strict";var jD=f(),zi=class{constructor(t){this.operator=jD.OPERATIONS_ENUM.SYSTEM_INFORMATION,this.attributes=t}};a(zi,"SystemInformationOperation");IT.exports=zi});var LT=d((bG,bT)=>{"use strict";var ji=class{constructor(t,r,s,n,i,o,_){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=_}};a(ji,"SystemInformationObject");bT.exports=ji});var yT=d((wG,wT)=>{"use strict";var ce=require("systeminformation"),Yr=g(),eM=f(),tM=pT(),rM=Pr(),sM=Z();sM.initSync();var LG=CT(),nM=LT(),ea;wT.exports={getHDBProcessInfo:w_,getNetworkInfo:U_,getDiskInfo:y_,getMemoryInfo:L_,getCPUInfo:b_,getTimeInfo:C_,getSystemInformation:D_,systemInformation:iM,getTableSize:M_};function C_(){return ce.time()}a(C_,"getTimeInfo");async function b_(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:_,socket:c,cache:u,...E}=await ce.cpu();E.cpu_speed=await ce.cpuCurrentSpeed();let{raw_currentload:l,raw_currentload_idle:S,raw_currentload_irq:h,raw_currentload_nice:A,raw_currentload_system:N,raw_currentload_user:I,cpus:X,...v}=await ce.currentLoad();return v.cpus=[],X.forEach(W=>{let{raw_load:$e,raw_load_idle:Zs,raw_load_irq:z_,raw_load_nice:j_,raw_load_system:ec,raw_load_user:zs,...Ct}=W;v.cpus.push(Ct)}),E.current_load=v,E}catch(e){return Yr.error(`error in getCPUInfo: ${e}`),{}}}a(b_,"getCPUInfo");async function L_(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await ce.mem();return n}catch(e){return Yr.error(`error in getMemoryInfo: ${e}`),{}}}a(L_,"getMemoryInfo");async function w_(){let e={core:[],clustering:[]};try{return(await ce.processes()).list.forEach(r=>{r.params.includes(eM.HDB_PROC_NAME)?e.core.push(r):r.params.includes("socketcluster")&&e.clustering.push(r)}),e}catch(t){return Yr.error(`error in getHDBProcessInfo: ${t}`),e}}a(w_,"getHDBProcessInfo");async function y_(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await ce.disksIO();e.io=i;let{rx_sec:o,tx_sec:_,wx_sec:c,...u}=await ce.fsStats();return e.read_write=u,e.size=await ce.fsSize(),e}catch(t){return Yr.error(`error in getDiskInfo: ${t}`),e}}a(y_,"getDiskInfo");async function U_(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await ce.networkInterfaceDefault(),e.latency=await ce.inetChecksite("google.com"),(await ce.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:_,dnsSuffix:c,ieee8021xAuth:u,ieee8021xState:E,carrier_changes:l,...S}=s;e.interfaces.push(S)}),(await ce.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,..._}=s;e.stats.push(_)}),e.connections=await ce.networkConnections(),e}catch(t){return Yr.error(`error in getNetworkInfo: ${t}`),e}}a(U_,"getNetworkInfo");async function D_(){if(ea!==void 0)return ea;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,..._}=await ce.osInfo();e=_;let c=await ce.versions("node, npm");return e.node_version=c.node,e.npm_version=c.npm,ea=e,ea}catch(t){return Yr.error(`error in getSystemInformation: ${t}`),e}}a(D_,"getSystemInformation");async function M_(){let e=[],t=await rM.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await tM(s));return e}a(M_,"getTableSize");async function iM(e){let t=new nM;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await D_(),t.time=C_(),t.cpu=await b_(),t.memory=await L_(),t.disk=await y_(),t.network=await U_(),t.harperdb_processes=await w_(),t.table_size=await M_(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await D_();break;case"time":t.time=C_();break;case"cpu":t.cpu=await b_();break;case"memory":t.memory=await L_();break;case"disk":t.disk=await y_();break;case"network":t.network=await U_();break;case"harperdb_processes":t.harperdb_processes=await w_();break;case"table_size":t.table_size=await M_();break;default:break}return t}a(iM,"systemInformation")});var DT=d((DG,UT)=>{"use strict";var yG=require("fs-extra"),UG=g();UT.exports={version:aM,printVersion:_M,nodeVersion:oM};var xt=__();function aM(){if(xt)return xt.version}a(aM,"version");function oM(){if(xt&&xt.engines&&xt.engines["preferred-node"])return xt.engines["preferred-node"]}a(oM,"nodeVersion");function _M(){xt&&console.log(`HarperDB Version ${xt.version}`)}a(_M,"printVersion")});var Ws=d((BG,HT)=>{"use strict";var cM=Bs(),P_=p(),B_=require("util"),ar=f(),MT=Z();MT.initSync();var uM=dT(),PT=Ds(),{Node:MG,NodeSubscription:PG}=Wi(),EM=ps(),lM=TT(),{RemotePayloadObject:dM,RemotePayloadSubscription:hM}=RT(),{handleHDBError:SM,hdb_errors:TM}=K(),{HTTP_STATUS_CODES:fM,HDB_ERROR_MSGS:RM}=TM,mM=mt(),AM=yT(),NM=DT(),OM=B_.promisify(uM.authorize),gM=B_.promisify(PT.searchByHash),pM=B_.promisify(PT.searchByValue);HT.exports={authHeaderToUser:IM,isEmpty:CM,getNodeRecord:bM,upsertNodeRecord:LM,buildNodePayloads:wM,checkClusteringEnabled:yM,getAllNodeRecords:UM,getSystemInfo:DM,reverseSubscription:BT};async function IM(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await OM(t,null),e}a(IM,"authHeaderToUser");function CM(e){return e==null}a(CM,"isEmpty");async function bM(e){let t=new EM(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return gM(t)}a(bM,"getNodeRecord");async function LM(e){let t=new lM(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return cM.upsert(t)}a(LM,"upsertNodeRecord");function BT(e){if(P_.isEmpty(e.subscribe)||P_.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(BT,"reverseSubscription");function wM(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let _=e[i],{schema:c,table:u}=_,E=P_.getTableHashAttribute(c,u),{subscribe:l,publish:S}=BT(_),h=new hM(c,u,E,S,l,_.start_time);n.push(h)}return new dM(r,t,n,s)}a(wM,"buildNodePayloads");function yM(){if(!MT.get(ar.CONFIG_PARAMS.CLUSTERING_ENABLED))throw SM(new Error,RM.CLUSTERING_NOT_ENABLED,fM.BAD_REQUEST,void 0,void 0,!0)}a(yM,"checkClusteringEnabled");async function UM(){let e=new mM(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return pM(e)}a(UM,"getAllNodeRecords");async function DM(){let e=await AM.getSystemInformation();return{hdb_version:NM.version(),node_version:e.node_version,platform:e.platform}}a(DM,"getSystemInfo")});var qT=d((HG,GT)=>{"use strict";var v_=Pr(),{hdb_errors:H_}=K();GT.exports={checkSchemaExists:vT,checkSchemaTableExists:MM,schema_describe:v_};async function vT(e){if(!global.hdb_schema[e])try{let t=await v_.describeSchema({schema:e});global.hdb_schema[e]=t}catch{return H_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}}a(vT,"checkSchemaExists");async function MM(e,t){let r=await vT(e);if(r)return r;if(!global.hdb_schema[e][t])try{let s=await v_.describeTable({schema:e,table:t});if(!s||Object.keys(s).length===0)return H_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t);global.hdb_schema[e][t]=s}catch{return H_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}}a(MM,"checkSchemaTableExists")});var $T=d((GG,YT)=>{"use strict";var $r=Dn(),or=qT(),FT=g(),PM=require("uuid").v4,vG=require("clone"),Wr=fs(),_r=f(),BM=require("util"),cr=zt(),{handleHDBError:ue,hdb_errors:HM}=K(),{HDB_ERROR_MSGS:Kr,HTTP_STATUS_CODES:Ee}=HM,{SchemaEventMsg:Qr}=Jt(),xT=nr();YT.exports={createSchema:vM,createSchemaStructure:VT,createTable:GM,createTableStructure:kT,createAttribute:kM,dropSchema:qM,dropTable:FM,dropAttribute:xM};async function vM(e){try{let t=await VT(e);return Wr.signalSchemaChange(new Qr(process.pid,e.operation,e.schema)),t}catch(t){throw t}}a(vM,"createSchema");async function VT(e){let t=$r.schema_object(e);if(t)throw ue(t,t.message,Ee.BAD_REQUEST,void 0,void 0,!0);if(!await or.checkSchemaExists(e.schema))throw ue(new Error,Kr.SCHEMA_EXISTS_ERR(e.schema),Ee.BAD_REQUEST,_r.LOG_LEVELS.ERROR,Kr.SCHEMA_EXISTS_ERR(e.schema),!0);try{return await cr.createSchema(e),`schema '${e.schema}' successfully created`}catch(r){throw r}}a(VT,"createSchemaStructure");async function GM(e){try{let t=await kT(e);return Wr.signalSchemaChange(new Qr(process.pid,e.operation,e.schema,e.table)),t}catch(t){throw t}}a(GM,"createTable");async function kT(e){let t=$r.create_table_object(e);if(t)throw ue(t,t.message,Ee.BAD_REQUEST,void 0,void 0,!0);$r.validateTableResidence(e.residence);let r=await or.checkSchemaExists(e.schema);if(r)throw ue(new Error,r,Ee.NOT_FOUND,_r.LOG_LEVELS.ERROR,r,!0);if(!await or.checkSchemaTableExists(e.schema,e.table))throw ue(new Error,Kr.TABLE_EXISTS_ERR(e.schema,e.table),Ee.BAD_REQUEST,_r.LOG_LEVELS.ERROR,Kr.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:PM(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await cr.createTable(n,e);else throw ue(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Ee.BAD_REQUEST);else await cr.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(i){throw i}}a(kT,"createTableStructure");async function qM(e){let t=$r.schema_object(e);if(t)throw ue(t,t.message,Ee.BAD_REQUEST,void 0,void 0,!0);let r=await or.checkSchemaExists(e.schema);if(r)throw ue(new Error,r,Ee.NOT_FOUND,_r.LOG_LEVELS.ERROR,r,!0);let s=await or.schema_describe.describeSchema({schema:e.schema});global.hdb_schema[e.schema]=s;let n=Object.keys(global.hdb_schema[e.schema]);return await cr.dropSchema(e),Wr.signalSchemaChange(new Qr(process.pid,e.operation,e.schema)),delete global.hdb_schema[e.schema],await xT.purgeSchemaTableStreams(e.schema,n),`successfully deleted schema '${e.schema}'`}a(qM,"dropSchema");async function FM(e){let t=$r.table_object(e);if(t)throw ue(t,t.message,Ee.BAD_REQUEST,void 0,void 0,!0);let r=await or.checkSchemaTableExists(e.schema,e.table);if(r)throw ue(new Error,r,Ee.NOT_FOUND,_r.LOG_LEVELS.ERROR,r,!0);return await cr.dropTable(e),Wr.signalSchemaChange(new Qr(process.pid,e.operation,e.schema,e.table)),await xT.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(FM,"dropTable");async function xM(e){let t=$r.attribute_object(e);if(t)throw ue(t,t.message,Ee.BAD_REQUEST,void 0,void 0,!0);let r=await or.checkSchemaTableExists(e.schema,e.table);if(r)throw ue(new Error,r,Ee.NOT_FOUND,_r.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw ue(new Error,"You cannot drop a hash attribute",Ee.BAD_REQUEST,void 0,void 0,!0);if(_r.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw ue(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Ee.BAD_REQUEST,void 0,void 0,!0);try{return await cr.dropAttribute(e),VM(e),Wr.signalSchemaChange(new Qr(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw FT.error(`Got an error deleting attribute ${BM.inspect(e)}.`),s}}a(xM,"dropAttribute");function VM(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(VM,"dropAttributeFromGlobal");async function kM(e){if(!global.hdb_schema[e.schema])throw ue(new Error,Kr.SCHEMA_NOT_FOUND(e.schema),Ee.NOT_FOUND,void 0,void 0,!0);if(!global.hdb_schema[e.schema][e.table])throw ue(new Error,Kr.TABLE_NOT_FOUND(e.schema,e.table),Ee.NOT_FOUND,void 0,void 0,!0);try{return await cr.createAttribute(e),Wr.signalSchemaChange(new Qr(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}catch(t){throw FT.error(t),t}}a(kM,"createAttribute")});var Qs=d((qG,KT)=>{"use strict";var ta=class{constructor(t,r,s=void 0){this.status=t,this.message=r,this.system_info=s}};a(ta,"UpdateRemoteResponseObject");KT.exports=ta});var ZT=d((FG,XT)=>{"use strict";var YM=jS(),ur=g(),G_=Me(),$M=f(),q_=Ws(),WT=nr(),QT=$T(),KM=Io(),{Node:WM,NodeSubscription:JT}=Wi(),F_=Qs(),x_=p(),QM=Z(),{cloneDeep:JM}=require("lodash");XT.exports=XM;async function XM(e){try{let t=YM(e);if(t)return ur.error(`Validation error in updateRemoteSource: ${t.message}`),new F_(G_.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:s,system_info:n}=e,i=[],o=JM(await q_.getNodeRecord(s)),_=!x_.isEmptyOrZeroLength(o);o=_?o[0]:o,_&&ur.trace(`Existing record found for ${s}, updating records subscriptions`);for(let u=0,E=r.length;u<E;u++){let l=r[u],S=l.schema,h=l.table;if(x_.doesSchemaExist(S)||(ur.trace(`updateRemoteSource creating schema: ${S}`),await QT.createSchema({operation:"create_schema",schema:S})),!x_.doesTableExist(S,h)){ur.trace(`updateRemoteSource creating table: ${h} in schema: ${S}`);let A=new KM(S,h,l.hash_attribute);await QT.createTable(A),ur.trace(`Creating local stream for ${S}.${h}`),await WT.createLocalTableStream(S,h)}if(await WT.updateWorkStream(l,s),_){let A=!1;for(let N=0,I=o.subscriptions.length;N<I;N++){let X=o.subscriptions[N];if(X.schema===S&&X.table===h){X.publish=l.publish,X.subscribe=l.subscribe,A=!0;break}}A||o.subscriptions.push(new JT(S,h,l.publish,l.subscribe))}else i.push(new JT(S,h,l.publish,l.subscribe))}_||(o=new WM(s,i,void 0),ur.trace(`No record found for ${s}, creating a new one`));let c=Object.create({});return Object.assign(c,o),c.system_info=n,await q_.upsertNodeRecord(c),new F_(G_.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${QM.get($M.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await q_.getSystemInfo())}catch(t){ur.error(t);let r=t.message?t.message:t;return new F_(G_.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(XM,"updateRemoteSource")});var tf=d((xG,ef)=>{"use strict";var jT=require("joi"),{string:zT}=jT.types(),ZM=f(),zM=We();ef.exports=jM;function jM(e){let t=jT.object({operation:zT.valid(ZM.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:zT.required()});return zM.validateBySchema(e,t)}a(jM,"removeRemoteSourceValidator")});var sf=d((VG,rf)=>{"use strict";var eP=tf(),ra=g(),sa=Me(),V_=f(),tP=Ws(),rP=p(),sP=nr(),nP=Z(),na=Qs(),{NodeSubscription:iP}=Wi(),aP=Is(),oP=Qo(),_P=nP.get(V_.CONFIG_PARAMS.CLUSTERING_NODENAME);rf.exports=cP;async function cP(e){try{let t=eP(e);if(t)return ra.error(`Validation error in removeRemoteSource: ${t.message}`),new na(sa.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,s=await tP.getNodeRecord(r);if(rP.isEmptyOrZeroLength(s)){let i=`No record found for node '${r}'`;return ra.error(i),new na(sa.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}s=s[0];for(let i=0,o=s.subscriptions.length;i<o;i++){let _=s.subscriptions[i];ra.trace(`remove remote source removing subscription: ${_.schema}.${_.table} for node: ${r}`);let c=new iP(_.schema,_.table,!1,!1);await sP.updateWorkStream(c,r)}let n=new aP(V_.SYSTEM_SCHEMA_NAME,V_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await oP.deleteRecord(n),new na(sa.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${_P} successfully removed node '${r}'.`)}catch(t){ra.error(t);let r=t.message?t.message:t;return new na(sa.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(cP,"removeRemoteSource")});var af=d((kG,nf)=>{"use strict";var uP=Me(),ia=class{constructor(t,r,s,n,i,o,_,c,u,E,l,S,h){this.port=t,this.server_name=r+uP.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:_},this.leafnodes={port:c,tls:{cert_file:n,key_file:i,ca_file:o,insecure:_}},this.cluster={name:u,port:E,routes:l,tls:{cert_file:n,key_file:i,ca_file:o,insecure:_}},this.accounts={SYS:{users:S},HDB:{users:h}},this.system_account="SYS"}};a(ia,"HubConfigObject");nf.exports=ia});var cf=d((YG,_f)=>{"use strict";var of=Me(),aa=class{constructor(t,r,s,n,i,o,_,c,u,E,l,S){this.port=t,this.server_name=r+of.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+of.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:E,ca_file:l,insecure:S},this.leafnodes={remotes:[{tls:{ca_file:l,insecure:S},urls:i,account:"SYS"},{tls:{ca_file:l,insecure:S},urls:o,account:"HDB"}]},this.accounts={SYS:{users:_},HDB:{users:c,jetstream:"enabled"}},this.system_account="SYS"}};a(aa,"LeafConfigObject");_f.exports=aa});var Ef=d(($G,uf)=>{"use strict";var oa=class{constructor(t,r){this.user=t,this.password=r}};a(oa,"HdbUserObject");uf.exports=oa});var df=d((KG,lf)=>{"use strict";var EP=Me(),_a=class{constructor(t,r){this.user=t+EP.SERVER_SUFFIX.ADMIN,this.password=r}};a(_a,"SysUserObject");lf.exports=_a});var ff=d((WG,Tf)=>{"use strict";var Jr=require("path"),la=require("fs-extra"),lP=af(),dP=cf(),hP=Ef(),SP=df(),k_=qr(),Zr=p(),Ye=ss(),Ea=f(),ca=Me(),{CONFIG_PARAMS:ne}=Ea,da=g(),ha=Z(),hf=as(),Y_=nr(),Xr="clustering",TP=1e4,Sf=5;Tf.exports={generateNatsConfig:fP,removeNatsConfig:RP};async function fP(e=!1,t=void 0){ha.initSync();let r=ha.get(ne.ROOTPATH),s=Jr.join(r,Xr,ca.PID_FILES.HUB),n=Jr.join(r,Xr,ca.PID_FILES.LEAF),i=Jr.join(r,Xr,"leaf"),o=Jr.join(r,Xr,ca.NATS_CONFIG_FILES.HUB_SERVER),_=Jr.join(r,Xr,ca.NATS_CONFIG_FILES.LEAF_SERVER),c=Ye.getConfigFromFile(ne.CLUSTERING_TLS_CERTIFICATE),u=Ye.getConfigFromFile(ne.CLUSTERING_TLS_PRIVATEKEY),E=Ye.getConfigFromFile(ne.CLUSTERING_TLS_CERT_AUTH),l=Ye.getConfigFromFile(ne.CLUSTERING_TLS_INSECURE),S=Ye.getConfigFromFile(ne.CLUSTERING_NODENAME),h=Ye.getConfigFromFile(ne.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await Y_.checkNATSServerInstalled()||Sa("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let A=await k_.listUsers(),N=Ye.getConfigFromFile(ne.CLUSTERING_USER),I=await k_.getClusterUser();(Zr.isEmpty(I)||I.active!==!0)&&Sa(`invalid cluster user '${N}'`),e||(await ua(ne.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await ua(ne.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await ua(ne.CLUSTERING_HUBSERVER_NETWORK_PORT),await ua(ne.CLUSTERING_LEAFSERVER_NETWORK_PORT));let X=[],v=[];for(let[zs,Ct]of A.entries())Ct.role.role===Ea.ROLE_TYPES_ENUM.CLUSTER_USER&&Ct.active&&(X.push(new SP(Ct.username,hf.decrypt(Ct.hash))),v.push(new hP(Ct.username,hf.decrypt(Ct.hash))));let W=[],{hub_routes:$e}=Ye.getClusteringRoutes();if(!Zr.isEmptyOrZeroLength($e))for(let zs of $e)W.push(`tls://${I.sys_name_encoded}:${I.uri_encoded_d_hash}@${zs.host}:${zs.port}`);let Zs=new lP(Ye.getConfigFromFile(ne.CLUSTERING_HUBSERVER_NETWORK_PORT),S,s,c,u,E,l,h,Ye.getConfigFromFile(ne.CLUSTERING_HUBSERVER_CLUSTER_NAME),Ye.getConfigFromFile(ne.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),W,X,v);t=Zr.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Ea.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await la.writeJson(o,Zs),da.trace(`Hub server config written to ${o}`));let z_=`tls://${I.sys_name_encoded}:${I.uri_encoded_d_hash}@0.0.0.0:${h}`,j_=`tls://${I.uri_encoded_name}:${I.uri_encoded_d_hash}@0.0.0.0:${h}`,ec=new dP(Ye.getConfigFromFile(ne.CLUSTERING_LEAFSERVER_NETWORK_PORT),S,n,i,[z_],[j_],X,v,c,u,E,l);(t===void 0||t===Ea.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await la.writeJson(_,ec),da.trace(`Leaf server config written to ${_}`))}a(fP,"generateNatsConfig");async function ua(e){let t=ha.get(e);Zr.isEmpty(t)&&Sa(`port undefined for '${e}'`),await Zr.isPortTaken(t)&&Sa(`'${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.`)}a(ua,"isPortAvailable");function Sa(e){let t=`Error generating clustering config: ${e}`;da.error(t),console.error(t),process.exit(1)}a(Sa,"generateNatsConfigError");async function RP(e){let{port:t,config_file:r}=Y_.getServerConfig(e),{username:s,decrypt_hash:n}=await k_.getClusterUser(),i=0,o=500;for(;i<Sf;){try{let u=await Y_.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){da.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=Sf)throw new Error(`removeNatsConfig timed out waiting to connect to ${e}`);await Zr.async_set_timeout(o*i)}let _="0".repeat(TP),c=Jr.join(ha.get(ne.ROOTPATH),Xr,r);await la.writeFile(c,_),await la.remove(c)}a(RP,"removeNatsConfig")});var K_=d((QG,pf)=>{"use strict";var $=Z(),Rf=e_(),m=f(),$_=Me(),te=require("path"),{PACKAGE_ROOT:Ta}=f(),J="/dev/null",zr=te.join(Ta,"launchServiceScripts"),mf=te.join(Ta,"utility/scripts"),mP=te.join(mf,m.HDB_RESTART_SCRIPT),Af=te.resolve(Ta,"dependencies",`${process.platform}-${process.arch}`,$_.NATS_BINARY_NAME),le,de;function Et(){(le===void 0||de===void 0)&&($.initSync(),le=$.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),de=$.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY))}a(Et,"initLogConfig");function Nf(){Et();let e=te.join(de,m.PROCESS_LOG_NAMES.IPC),t={name:m.PROCESS_DESCRIPTORS.IPC,exec_mode:"fork",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.IPC},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:m.SERVICE_SERVERS_CWD.IPC};return le||(t.out_file=J,t.error_file=J),{...t,script:m.SERVICE_SERVERS.IPC}}a(Nf,"generateIPCServerConfig");function Of(){Et(),$.initSync(),le=$.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),de=$.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=te.join(de,m.PROCESS_LOG_NAMES.HDB),t=Rf.licenseSearch(),r=t.ram_allocation?m.MEM_SETTING_KEY+t.ram_allocation:m.MEM_SETTING_KEY+m.RAM_ALLOCATION_ENUM.DEFAULT,s={name:m.PROCESS_DESCRIPTORS.HDB,script:m.LAUNCH_SERVICE_SCRIPTS.HDB,exec_mode:"cluster",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.HDB},merge_logs:!0,out_file:e,error_file:e,instances:$.get(m.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:zr};return le||(s.out_file=J,s.error_file=J),s}a(Of,"generateHDBServerConfig");function gf(){Et(),$.initSync(),le=$.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),de=$.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=te.join(de,m.PROCESS_LOG_NAMES.CUSTOM_FUNCTIONS),t=Rf.licenseSearch(),r=t.ram_allocation?m.MEM_SETTING_KEY+t.ram_allocation:m.MEM_SETTING_KEY+m.RAM_ALLOCATION_ENUM.DEFAULT,s={name:m.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS,script:m.LAUNCH_SERVICE_SCRIPTS.CUSTOM_FUNCTIONS,exec_mode:"cluster",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS},merge_logs:!0,out_file:e,error_file:e,instances:$.get(m.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:zr};return le||(s.out_file=J,s.error_file=J),s}a(gf,"generateCFServerConfig");function AP(){Et(),$.initSync(),le=$.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),de=$.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=$.get(m.CONFIG_PARAMS.ROOTPATH),t=te.join(e,"clustering",$_.NATS_CONFIG_FILES.HUB_SERVER),r=te.join(de,m.PROCESS_LOG_NAMES.CLUSTERING_HUB),s={name:m.PROCESS_DESCRIPTORS.CLUSTERING_HUB,script:Af,args:`-c ${t}`,exec_mode:"fork",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return le||(s.out_file=J,s.error_file=J),s}a(AP,"generateNatsHubServerConfig");function NP(){Et(),$.initSync(),le=$.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),de=$.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=$.get(m.CONFIG_PARAMS.ROOTPATH),t=te.join(e,"clustering",$_.NATS_CONFIG_FILES.LEAF_SERVER),r=te.join(de,m.PROCESS_LOG_NAMES.CLUSTERING_LEAF),s={name:m.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,script:Af,args:`-c ${t}`,exec_mode:"fork",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return le||(s.out_file=J,s.error_file=J),s}a(NP,"generateNatsLeafServerConfig");function OP(){Et(),$.initSync();let e=te.join(de,m.PROCESS_LOG_NAMES.CLUSTERING_INGEST_SERVICE),t={name:m.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,script:m.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,exec_mode:"cluster",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:zr};return le||(t.out_file=J,t.error_file=J),t}a(OP,"generateNatsIngestServiceConfig");function gP(){Et(),$.initSync();let e=te.join(de,m.PROCESS_LOG_NAMES.CLUSTERING_REPLY_SERVICE),t={name:m.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE,script:m.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,exec_mode:"cluster",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:zr};return le||(t.out_file=J,t.error_file=J),t}a(gP,"generateNatsReplyServiceConfig");function pP(){Et(),$.initSync();let e=te.join(de,m.PROCESS_LOG_NAMES.CLUSTERING_UPGRADE),t={name:m.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:m.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:zr,autorestart:!1};return le||(t.out_file=J,t.error_file=J),t}a(pP,"generateClusteringUpgradeV4ServiceConfig");function IP(){Et();let e=te.join(de,m.PROCESS_LOG_NAMES.PM2),t={name:m.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.RESTART_HDB},merge_logs:!0,out_file:e,error_file:e,instances:1,autorestart:!1,cwd:mf};return le||(t.out_file=J,t.error_file=J),{...t,script:mP}}a(IP,"generateRestart");function CP(e){Et();let t=te.join(de,m.PROCESS_LOG_NAMES.JOBS),r=te.join(Ta,"server/jobs"),s={name:`JOB-${e}`,exec_mode:"fork",env:{[m.PROCESS_NAME_ENV_PROP]:`JOB-${e}`},merge_logs:!0,out_file:t,error_file:t,instances:1,cwd:zr,autorestart:!1};return le||(s.out_file=J,s.error_file=J),{...s,script:te.join(r,"jobProcess.js")}}a(CP,"generateJobConfig");function bP(){return{apps:[Nf(),Of(),gf()]}}a(bP,"generateAllServiceConfigs");pf.exports={generateAllServiceConfigs:bP,generateIPCServerConfig:Nf,generateHDBServerConfig:Of,generateCFServerConfig:gf,generateRestart:IP,generateNatsHubServerConfig:AP,generateNatsLeafServerConfig:NP,generateNatsIngestServiceConfig:OP,generateNatsReplyServiceConfig:gP,generateClusteringUpgradeV4ServiceConfig:pP,generateJobConfig:CP}});var Hf=d((JG,Bf)=>{"use strict";var b=f(),fa=p(),Js=ff(),Ra=nr(),LP=Me(),M=require("pm2"),wP=require("fs-extra"),pt=K_(),ye=Z(),It=g(),yP=K_(),UP=Ws(),DP=require("util"),Cf=DP.promisify(require("child_process").exec),bf=require("path");Bf.exports={start:Er,stop:Aa,reload:wf,restart:yf,list:Q_,describe:Na,connect:lt,kill:Df,startAllServices:VP,startService:ma,getUniqueServicesList:J_,restartAllServices:kP,stopAllServices:YP,isServiceRegistered:Mf,reloadStopStart:W_,restartHdb:Uf,deleteProcess:FP,configureLogRotate:WP,startClustering:Pf,isHdbRestartRunning:xP,isClusteringRunning:JP,stopClustering:QP,reloadClustering:XP};var{PACKAGE_ROOT:MP}=f(),PP="2.7.0",Lf=bf.join(MP,"node_modules/pm2/bin/pm2"),BP="Log rotate installed.",HP="Error installing log rotate.",vP="Log rotate updated.",GP="Error updating log rotate.",qP="The number of HarperDB processes running is different from the settings value. To restart and update the number HarperDB processes running you must stop and then start HarperDB";function lt(){return new Promise((e,t)=>{M.connect((r,s)=>{r&&t(r),e(s)})})}a(lt,"connect");function Er(e){return new Promise(async(t,r)=>{try{await lt()}catch(s){r(s)}M.start(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(Er,"start");function Aa(e){return new Promise(async(t,r)=>{try{await lt()}catch(s){r(s)}M.stop(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.delete(e,(i,o)=>{i&&(M.disconnect(),r(s)),M.disconnect(),t(o)})})})}a(Aa,"stop");function wf(e){return new Promise(async(t,r)=>{try{await lt()}catch(s){r(s)}M.reload(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(wf,"reload");function yf(e){return new Promise(async(t,r)=>{try{await lt()}catch(s){r(s)}M.restart(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(yf,"restart");function FP(e){return new Promise(async(t,r)=>{try{await lt()}catch(s){r(s)}M.delete(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(FP,"deleteProcess");async function Uf(){await Er(yP.generateRestart())}a(Uf,"restartHdb");async function xP(){let e=await Q_();for(let t in e)if(e[t].name===b.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(xP,"isHdbRestartRunning");function Q_(){return new Promise(async(e,t)=>{try{await lt()}catch(r){t(r)}M.list((r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(Q_,"list");function Na(e){return new Promise(async(t,r)=>{try{await lt()}catch(s){r(s)}M.describe(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(Na,"describe");function Df(){return new Promise(async(e,t)=>{try{await lt()}catch(r){t(r)}M.killDaemon((r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(Df,"kill");async function VP(){try{await Pf(),await Er(pt.generateAllServiceConfigs())}catch(e){throw M.disconnect(),e}}a(VP,"startAllServices");async function ma(e){try{let t;switch(e=e.toLowerCase(),e){case b.PROCESS_DESCRIPTORS.IPC.toLowerCase():t=pt.generateIPCServerConfig();break;case b.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=pt.generateHDBServerConfig();break;case b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase():t=pt.generateCFServerConfig();break;case b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=pt.generateNatsIngestServiceConfig();break;case b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=pt.generateNatsReplyServiceConfig();break;case b.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=pt.generateNatsHubServerConfig(),await Er(t),await Js.removeNatsConfig(e);return;case b.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=pt.generateNatsLeafServerConfig(),await Er(t),await Js.removeNatsConfig(e);return;case b.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=pt.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Er(t)}catch(t){throw M.disconnect(),t}}a(ma,"startService");async function J_(){try{let e=await Q_(),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 M.disconnect(),e}}a(J_,"getUniqueServicesList");async function kP(e=[]){try{let t=!1,r=await J_();for(let s=0,n=Object.values(r).length;s<n;s++){let i=Object.values(r)[s],o=i.name;e.includes(o)||(i.exec_mode==="cluster_mode"?o===b.PROCESS_DESCRIPTORS.HDB?t=!0:await W_(o):await yf(o))}t&&await W_(b.PROCESS_DESCRIPTORS.HDB)}catch(t){throw M.disconnect(),t}}a(kP,"restartAllServices");async function YP(){try{let e=await J_();for(let t=0,r=Object.values(e).length;t<r;t++){let s=Object.values(e)[t];await Aa(s.name)}if(await Df(),ye.get(b.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND)===!0){let t=(await wP.readFile(bf.join(ye.get(b.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),b.FOREGROUND_PID_FILE))).toString();try{process.kill(t,"SIGTERM")}catch(r){It.warn(`Error terminating foreground process: ${r}`)}}}catch(e){throw M.disconnect(),e}}a(YP,"stopAllServices");async function Mf(e){return!fa.isEmptyOrZeroLength(await Na(e))}a(Mf,"isServiceRegistered");async function W_(e){let t=e===b.PROCESS_DESCRIPTORS.HDB?ye.get(b.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):ye.get(b.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await Na(e),s=fa.isEmptyOrZeroLength(r)?0:r.length;t!==s?e===b.PROCESS_DESCRIPTORS.HDB?It.error(qP):(await Aa(e),await ma(e)):e===b.PROCESS_DESCRIPTORS.HDB?await Uf():await wf(e)}a(W_,"reloadStopStart");function $P(){return new Promise(async(e,t)=>{try{await lt()}catch(r){t(r)}M.stop(b.PROCESS_DESCRIPTORS.PM2_LOGROTATE,(r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a($P,"stopLogrotate");async function KP(){let{stdout:e,stderr:t}=await Cf(`${process.platform==="win32"?"node":""} ${Lf} install pm2-logrotate@${PP}`);if(It.debug(`loadLogRotate stdout: ${e}`),t)throw It.error(HP),t;It.info(BP)}a(KP,"installLogRotate");async function If(){let e={max_size:ye.get(b.HDB_SETTINGS_NAMES.LOG_ROTATE_MAX_SIZE),retain:ye.get(b.HDB_SETTINGS_NAMES.LOG_ROTATE_RETAIN),compress:ye.get(b.HDB_SETTINGS_NAMES.LOG_ROTATE_COMPRESS),dateFormat:ye.get(b.HDB_SETTINGS_NAMES.LOG_ROTATE_DATE_FORMAT),rotateModule:ye.get(b.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_MODULE),workerInterval:ye.get(b.HDB_SETTINGS_NAMES.LOG_ROTATE_WORKER_INTERVAL),rotateInterval:ye.get(b.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_INTERVAL),TZ:ye.get(b.HDB_SETTINGS_NAMES.LOG_ROTATE_TIMEZONE)},t="";for(let n in e)t+=`${process.platform==="win32"?"node":""} ${Lf} set pm2-logrotate:${n} ${e[n]}`,n!=="TZ"&&(t+=" && ");let{stdout:r,stderr:s}=await Cf(t);if(It.debug(`updateLogRotateConfig stdout: ${r}`),s)throw It.error(GP),s;It.info(vP)}a(If,"updateLogRotateConfig");async function WP(){ye.initSync();let e=fa.autoCastBoolean(ye.get(b.HDB_SETTINGS_NAMES.LOG_ROTATE)),t=await Na(b.PROCESS_DESCRIPTORS.PM2_LOGROTATE),r,s=!1;if(fa.isEmptyOrZeroLength(t)||(s=!0,r=t[0].pm2_env.status),e&&!s){await KP(),await If();return}if(e&&s){await Er(b.PROCESS_DESCRIPTORS.PM2_LOGROTATE),await If();return}!e&&r===b.PM2_PROCESS_STATUSES.ONLINE&&await $P()}a(WP,"configureLogRotate");async function Pf(){for(let t in b.CLUSTERING_PROCESSES){let r=b.CLUSTERING_PROCESSES[t];await ma(r)}await Ra.createWorkQueueStream(LP.WORK_QUEUE_CONSUMER_NAMES),await Ra.updateNodeNameLocalStreams();let e=await UP.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===b.PRE_4_0_0_VERSION){It.info("Starting clustering upgrade 4.0.0 process"),await ma(b.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0);break}}a(Pf,"startClustering");async function QP(){for(let e in b.CLUSTERING_PROCESSES){let t=b.CLUSTERING_PROCESSES[e];await Aa(t)}}a(QP,"stopClustering");async function JP(){for(let e in b.CLUSTERING_PROCESSES){let t=b.CLUSTERING_PROCESSES[e];if(await Mf(t)===!1)return!1}return!0}a(JP,"isClusteringRunning");async function XP(){await Js.generateNatsConfig(!0),await Ra.reloadNATSHub(),await Ra.reloadNATSLeaf(),await Js.removeNatsConfig(b.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Js.removeNatsConfig(b.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(XP,"reloadClustering")});var xf=d((XG,Ff)=>{"use strict";var Oa=g(),Xs=f(),vf=Me(),Gf=Z(),ZP=p(),qf=Qs(),zP=Hf(),jP=Ws(),eB=A_(),tB=Bs();Ff.exports=rB;async function rB(e){try{Oa.trace("getRemoteSourceConfig called");let r=(await zP.describe(Xs.CLUSTERING_HUB_PROC_DESCRIPTOR))[0].pm2_env.pm_uptime,s=ZP.ms_to_time(Date.now()-r),n=new sB(Gf.get(Xs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Gf.get(Xs.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT),s,await jP.getSystemInfo());try{let i={name:e.node_name,system_info:e.system_info},o=new eB(Xs.SYSTEM_SCHEMA_NAME,Xs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[i]);await tB.update(o)}catch(i){Oa.error("Get remote config encountered an error updating system info for node:",e.node_name,i)}return Oa.trace("getRemoteSourceConfig response:",n),new qf(vf.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,n)}catch(t){Oa.error(t);let r=t.message?t.message:t;return new qf(vf.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(rB,"getRemoteSourceConfig");function sB(e,t,r,s){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=s}a(sB,"ConfigResponseObject")});var Yf=d((ZG,kf)=>{"use strict";var Vf=Z();Vf.initSync();var nB=nr(),iB=YS(),aB=QS(),lr=g(),jr=f(),X_=Me(),oB=ZT(),_B=sf(),cB=xf(),uB=Qs(),{encode:EB,decode:lB}=require("msgpackr"),dB=Ps(),hB=Pr(),SB=require("util"),TB=SB.promisify(dB.setSchemaDataToGlobal),Z_=Vf.get(jr.CONFIG_PARAMS.CLUSTERING_NODENAME);kf.exports=fB;async function fB(){try{lr.notify("Starting reply service."),await TB();try{global.hdb_ipc=new aB(process.pid,iB)}catch(s){throw lr.error("Error instantiating new instance of IPC client in natsReplyService"),s}let e=await nB.getConnection(),t=`${Z_}.__request__`,r=e.subscribe(t,{queue:Z_});await RB(r)}catch(e){lr.error(e)}}a(fB,"initialize");async function RB(e){for await(let t of e){let r=lB(t.data);lr.trace("Received request:",r);let s;switch(r.operation){case jr.OPERATIONS_ENUM.ADD_NODE:case jr.OPERATIONS_ENUM.UPDATE_NODE:s=await oB(r);break;case jr.OPERATIONS_ENUM.REMOVE_NODE:s=await _B(r);break;case jr.OPERATIONS_ENUM.CLUSTER_STATUS:s=await cB(r);break;case jr.OPERATIONS_ENUM.DESCRIBE_ALL:s=await mB();break;default:let n=`node '${Z_}' reply service received unrecognized request operation`;lr.error(n),s=new uB(X_.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,n)}lr.trace(s),t.respond(EB(s))}}a(RB,"handleRequest");async function mB(){try{return{status:X_.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await hB.describeAll()}}catch(e){return lr.error(e),{status:X_.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}a(mB,"getRemoteDescribeAll")});var AB=Yf();(async()=>{try{await AB()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();
7
+ `,"")}a(OS,"runCommand");async function UU(){try{await hU.access(u_)}catch{return!1}let e=await OS(`${u_} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return SU.eq(t,wU)}a(UU,"checkNATSServerInstalled");async function d_(e,t,r,s=!0,n="127.0.0.1"){return NU({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:ft.get(K.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:ft.get(K.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:ft.get(K.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}a(d_,"createConnection");async function DU(){je&&(await je.close(),je=void 0)}a(DU,"closeConnection");async function Mi(){if(!je){let e=await TS.getClusterUser();if(er(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=ft.get(K.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);je=await d_(t,e.username,e.decrypt_hash)}return je}a(Mi,"getConnection");async function vr(){if(Gs)return Gs;er(je)&&await Mi();let{domain:e}=xs(K.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(er(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Gs=await je.jetstreamManager({domain:e}),Gs}a(vr,"getJetStreamManager");async function NS(){if(qs)return qs;er(je)&&await Mi();let{domain:e}=xs(K.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(er(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return qs=je.jetstream({domain:e}),qs}a(NS,"getJetStream");async function xe(){let e=je||await Mi(),t=Gs||await vr(),r=qs||await NS();return{connection:e,jsm:t,js:r}}a(xe,"getNATSReferences");async function MU(){let e=ft.get(K.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),{sys_name:t,decrypt_hash:r}=await TS.getClusterUser(),s=await d_(e,t,r),n=l_(),i=s.subscribe(n),o=[],_=(async()=>{for await(let c of i)o.push(AS.decode(c.data))})();return await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:n}),await s.flush(),await E_.async_set_timeout(50),await i.drain(),await s.close(),await _,o}a(MU,"getServerList");async function h_(e,t){let{jsm:r}=await xe();await r.streams.add({name:e,storage:fS.File,retention:RS.Limits,subjects:t})}a(h_,"createLocalStream");async function gS(){let{jsm:e}=await xe(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(gS,"listStreams");async function PU(e){let{jsm:t}=await xe();await t.streams.delete(e)}a(PU,"deleteLocalStream");async function BU(e){let{connection:t}=await xe(),r=[],s=l_(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(AS.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(BU,"listRemoteStreams");async function HU(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await xe(),i=fU(),o=[],_={ack_policy:mS.None,durable_name:i,deliver_subject:i,deliver_policy:c_.All};t&&(_.deliver_policy=c_.StartTime,_.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,_);let c={timeout:2e3};r&&(c.max=r);let u=await n.subscribe(i,c);for await(let E of u){let l=IU(E),T=SS(l.data),h={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:T,originators:[]},A=[];if(l.headers){let O=l.headers.get("originators");O&&(A=O.split(","),h.originators=A)}o.push(h),u.getPending()===1&&l.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),o}catch(c){if(await s.consumers.delete(e,i),c.code==="TIMEOUT")return o;throw c}}a(HU,"viewStream");async function vU(e,t,r=[],s=[]){Rt.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,r,"originators:",s);let{connection:n,js:i}=await xe(),o=await Pi(),_=`${e}.${o}`,c=pU();s.push(o),c.append("originators",s.join());for(let u=0,E=r.length;u<E;u++)try{Rt.trace(`publishToStream publishing to subject: ${_}, data:`,r[u]),await i.publish(_,__(r[u]),{headers:c})}catch(l){if(l.code&&l.code.toString()==="503")Rt.trace(`publishToStream creating stream: ${t}`),await h_(t,[_]),await i.publish(_,__(r[u]),{headers:c});else throw l}}a(vU,"publishToStream");function xs(e){e=e.toLowerCase();let t=Fs.join(ft.get(K.CONFIG_PARAMS.ROOTPATH),LU);if(e===K.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return er(o_)&&(o_={port:Hs.getConfigFromFile(K.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Hs.getConfigFromFile(K.CONFIG_PARAMS.CLUSTERING_NODENAME)+x.SERVER_SUFFIX.HUB,config_file:x.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Fs.join(t,x.PID_FILES.HUB),hdb_nats_path:t}),o_;if(e===K.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return er(a_)&&(a_={port:Hs.getConfigFromFile(K.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Hs.getConfigFromFile(K.CONFIG_PARAMS.CLUSTERING_NODENAME)+x.SERVER_SUFFIX.LEAF,config_file:x.NATS_CONFIG_FILES.LEAF_SERVER,domain:Hs.getConfigFromFile(K.CONFIG_PARAMS.CLUSTERING_NODENAME)+x.SERVER_SUFFIX.LEAF,pid_file_path:Fs.join(t,x.PID_FILES.LEAF),hdb_nats_path:t}),a_;Rt.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(xs,"getServerConfig");async function GU(e){let{jsm:t}=await xe(),r=await Pi();try{await t.streams.add({name:e.stream_name,storage:fS.File,retention:RS.Workqueue,subjects:[`${x.SUBJECT_PREFIXES.MSGID}.${r}`,`${x.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:mS.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:c_.All,max_ack_pending:1e4,deliver_group:e.deliver_group,filter_subject:`${x.SUBJECT_PREFIXES.TXN}.>`});else throw s}}a(GU,"createWorkQueueStream");async function pS(e,t,r){let{jsm:s}=await xe(),n=await s.streams.info(t),i=IS(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:_,table:c}=r,u=Di.createNatsTableStreamName(_,c),E=i===e,l,T,h=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let O=0,I=n.config.sources.length;O<I;O++)if(l=n.config.sources[O],T=O,E&&l.name===u||!E&&l.name===u&&l.external&&l.external.api===`$JS.${e}.API`){h=!0;break}if(h===!0){if(l.opt_start_time===o)return;await bS(_,c,l,t),n.config.sources.splice(T,1),await s.streams.update(t,n.config)}let A={name:u,opt_start_time:o,filter_subject:`${x.SUBJECT_PREFIXES.TXN}.>`};E||(A.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(A),await s.streams.update(t,n.config)}a(pS,"addSourceToWorkStream");function IS(e){return e.split(".")[1]}a(IS,"extractServerName");async function CS(e,t,r){let{schema:s,table:n}=r,i=Di.createNatsTableStreamName(s,n),{jsm:o}=await xe(),_=await o.streams.info(t);if(!Array.isArray(_.config.sources)||_.config.sources.length===0)return;let c=_.config.sources.length,u;for(;c--;)if(u=_.config.sources[c],u.name===i&&u.external.api===`$JS.${e}.API`){_.config.sources.splice(c,1);break}await o.streams.update(t,_.config),await bS(s,n,u,t)}a(CS,"removeSourceFromWorkStream");async function bS(e,t,r,s){let n=await vr(),i;try{i=yS(e,t,r.external.api.split(".")[1]),await n.streams.purge(s,{filter:i})}catch{Rt.error("Error purging source subject",i,"from work stream",s)}}a(bS,"purgeSourceFromWorkStream");async function qU(e,t,r=2e3,s=l_()){if(!E_.isObject(t))throw new Error("data param must be an object");let n=__(t),{connection:i}=await xe(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let _=await i.request(e,n,o);return SS(_.data)}a(qU,"request");function S_(e){return new Promise(async(t,r)=>{let s=mU(u_,["--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(S_,"reloadNATS");async function FU(){let{pid_file_path:e}=xs(K.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await S_(e)}a(FU,"reloadNATSHub");async function xU(){let{pid_file_path:e}=xs(K.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await S_(e)}a(xU,"reloadNATSLeaf");function VU(e,t,r){let s;switch(e.code){case lS.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case lS.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(VU,"requestErrorHandler");async function kU(e,t){let r=t+x.SERVER_SUFFIX.LEAF;await AU.writeTransaction(K.SYSTEM_SCHEMA_NAME,K.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await pS(r,x.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await CS(r,x.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(kU,"updateWorkStream");async function LS(e,t){let r=Di.createNatsTableStreamName(e,t),s=await Pi(),n=yS(e,t,s);await h_(r,[n])}a(LS,"createLocalTableStream");async function $U(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await LS(s,n)}}a($U,"createTableStreams");async function wS(e,t){if(ft.get(K.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Di.createNatsTableStreamName(e,t),{jsm:s}=await xe();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Rt.warn(r);else throw r}}a(wS,"purgeTableStream");async function YU(e,t){if(ft.get(K.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await wS(e,t[r])}a(YU,"purgeSchemaTableStreams");async function KU(e){return(await vr()).streams.info(e)}a(KU,"getStreamInfo");function yS(e,t,r){return`${x.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(yS,"createSubjectName");async function Pi(){if(vs)return vs;if(vs=(await vr())?.nc?.info?.server_name,vs===void 0)throw new Error("Unable to get jetstream manager server name");return vs}a(Pi,"getJsmServerName");async function WU(){let e=await vr(),t=await Pi(),r=await gS();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=i.split(".");if(o[o.length-1]!==t){if(n.name===x.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let c=`${x.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Rt.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c}else if(n.name===x.WORK_QUEUE_CONSUMER_NAMES.stream_name){let c=`${x.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Rt.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c,await e.consumers.update(x.WORK_QUEUE_CONSUMER_NAMES.stream_name,x.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${x.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let c=i.split(".");c[c.length-1]=t;let u=c.join(".");Rt.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}await e.streams.update(n.name,n)}}}a(WU,"updateNodeNameLocalStreams")});var PS=d((Qv,MS)=>{"use strict";var T_=G(),QU=g(),DS=Ne().LMDB_ERRORS_ENUM;MS.exports=JU;async function JU(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 T_.closeEnvironment(global.lmdb_map[o])}catch(_){if(_.message!==DS.ENV_REQUIRED)throw _}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await T_.closeEnvironment(global.lmdb_map[s]),await T_.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==DS.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){QU.error(t)}}a(JU,"cleanLMDBMap")});var qS=d((Jv,GS)=>{"use strict";var rr=g(),Bi=f(),XU=PS(),BS=Ds(),ZU=Ur(),zU=Hr(),{validateEvent:vS}=Kt(),jU={[Bi.IPC_EVENT_TYPES.SCHEMA]:eD,[Bi.IPC_EVENT_TYPES.USER]:rD};async function eD(e){let t=vS(e);if(t){rr.error(t);return}rr.trace(`IPC schemaHandler ${Bi.HDB_IPC_CLIENT_PREFIX}${process.pid} received schema event:`,e),await XU(e.message),await tD(e.message)}a(eD,"schemaHandler");async function tD(e){try{if(global.hdb_schema!==void 0&&typeof global.hdb_schema=="object"&&e.operation!==void 0)switch(e.operation){case"drop_schema":delete global.hdb_schema[e.schema];break;case"drop_table":global.hdb_schema[e.schema]!==void 0&&delete global.hdb_schema[e.schema][e.table];break;case"create_schema":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={});break;case"create_table":case"create_attribute":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={}),global.hdb_schema[e.schema][e.table]=await ZU.describeTable({schema:e.schema,table:e.table});break;default:BS.setSchemaDataToGlobal(HS);break}else BS.setSchemaDataToGlobal(HS)}catch(t){rr.error(t)}}a(tD,"syncSchemaMetadata");function HS(e){e&&rr.error(e)}a(HS,"handleErrorCallback");async function rD(e){try{let t=vS(e);if(t){rr.error(t);return}rr.trace(`IPC userHandler ${Bi.HDB_IPC_CLIENT_PREFIX}${process.pid} received user event:`,e),await zU.setUsersToGlobal()}catch(t){rr.error(t)}}a(rD,"userHandler");GS.exports=jU});var kS=d((Xv,VS)=>{"use strict";var sD=require("node-ipc").IPC,FS=p(),xS=f(),mt=g(),{IPC_ERRORS:Gr}=Ne(),nD=require("os"),Hi=class{constructor(t,r){this.ipc=new sD,this.server_name=xS.HDB_IPC_SERVER,this.ipc.config.retry=nD.platform()=="win32"?6e5:100,this.ipc.config.id=xS.HDB_IPC_CLIENT_PREFIX+t,this.ipc.config.silent=!0,this.event_handlers=r,this.connect()}connect(){this.ipc.connectTo(this.server_name,()=>{this.generateEventHandlers(this.event_handlers)})}addEventHandler(t,r){this.ipc.of[this.server_name].on(t,r)}generateEventHandlers(t){this.ipc.of[this.server_name].on("connect",()=>{mt.info(`IPC client ${this.ipc.config.id} connected to ${this.server_name}`)}),this.ipc.of[this.server_name].on("disconnect",()=>{mt.info(`IPC client ${this.ipc.config.id} disconnected from ${this.server_name}`)}),this.ipc.of[this.server_name].on("error",r=>{r.code==="ECONNREFUSED"&&mt.warn("Error connecting to HDB IPC server. Confirm that the server is running."),mt.warn(`Error with IPC client ${this.ipc.config.id}`),mt.warn(r)});for(let[r,s]of Object.entries(t))this.addEventHandler(r,s)}emitToServer(t){if(typeof t!="object")throw mt.warn(Gr.INVALID_IPC_DATA_TYPE),new Error(Gr.INVALID_IPC_DATA_TYPE);if(FS.isEmpty(t.type))throw mt.warn(Gr.MISSING_TYPE),new Error(Gr.MISSING_TYPE);if(FS.isEmpty(t.message))throw mt.warn(Gr.MISSING_MSG),new Error(Gr.MISSING_MSG);mt.trace(`IPC client ${this.ipc.config.id} emitting`,t),this.ipc.of[this.server_name].emit("message",t)}};a(Hi,"IPCClient");VS.exports=Hi});var QS=d((Zv,WS)=>{"use strict";var KS=require("joi"),{string:Vs,boolean:$S,array:iD}=KS.types(),YS=f(),aD=Ke();WS.exports=oD;function oD(e){let t=KS.object({operation:Vs.valid(YS.OPERATIONS_ENUM.ADD_NODE,YS.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:Vs.required(),subscriptions:iD.items({schema:Vs.required(),table:Vs.required(),hash_attribute:Vs.optional(),subscribe:$S.required(),publish:$S.required()}).min(1).required()});return aD.validateBySchema(e,t)}a(oD,"updateRemoteSourceValidator")});var XS=d((zv,JS)=>{var _D=Ke(),cD={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};JS.exports=function(e){return _D.validateObject(e,cD)}});var f_=d((jv,ZS)=>{"use strict";var uD=f().OPERATIONS_ENUM,vi=class{constructor(t,r,s,n=void 0){this.operation=uD.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(vi,"UpdateObject");ZS.exports=vi});var jS=d((eG,zS)=>{"use strict";var ED={OPERATION:"operation",REFRESH:"refresh"},Gi=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(Gi,"JWTTokens");var qi=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(qi,"JWTRSAKeys");zS.exports={JWTTokens:Gi,TOKEN_TYPE_ENUM:ED,JWTRSAKeys:qi}});var nT=d((tG,sT)=>{"use strict";var $s=require("jsonwebtoken"),R_=require("fs-extra"),m_=p(),Ve=f(),{handleHDBError:Ce,hdb_errors:lD}=Y(),{HTTP_STATUS_CODES:be,AUTHENTICATION_ERROR_MSGS:Le}=lD,ks=g(),eT=Li(),N_=Hr(),dD=Ms().update,hD=f_(),SD=Ss(),{UserEventMsg:TD}=Kt(),Ht=Z();Ht.initSync();var A_=require("path"),{JWTTokens:fD,JWTRSAKeys:RD,TOKEN_TYPE_ENUM:Fi}=jS(),mD=Ht.get(Ve.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Ht.get(Ve.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",AD=Ht.get(Ve.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Ht.get(Ve.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",xi="RS256",O_;sT.exports={createTokens:OD,validateOperationToken:gD,refreshOperationToken:ND,validateRefreshToken:rT};async function OD(e){if(m_.isEmpty(e)||typeof e!="object")throw Ce(new Error,Le.INVALID_AUTH_OBJECT,be.BAD_REQUEST,void 0,void 0,!0);if(m_.isEmpty(e.username))throw Ce(new Error,Le.USERNAME_REQUIRED,be.BAD_REQUEST,void 0,void 0,!0);if(m_.isEmpty(e.password))throw Ce(new Error,Le.PASSWORD_REQUIRED,be.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await N_.findAndValidateUser(e.username,e.password),!t)throw Ce(new Error,Le.INVALID_CREDENTIALS,be.UNAUTHORIZED,void 0,void 0,!0)}catch(T){throw ks.error(T),Ce(new Error,Le.INVALID_CREDENTIALS,be.UNAUTHORIZED,void 0,void 0,!0)}let r=await Vi(),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 tT(i,r.private_key,r.passphrase),_=await $s.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:AD,algorithm:xi,subject:Fi.REFRESH}),c=eT.hash(_),u=new hD(Ve.SYSTEM_SCHEMA_NAME,Ve.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:c}]),E,l;try{E=await dD(u)}catch(T){ks.error(T),l=T}if(l!==void 0||E.skipped_hashes.length>0)throw Ce(new Error,Le.REFRESH_TOKEN_SAVE_FAILED,be.INTERNAL_SERVER_ERROR);return SD.signalUserChange(new TD(process.pid)),new fD(o,_)}a(OD,"createTokens");async function tT(e,t,r){return await $s.sign(e,{key:t,passphrase:r},{expiresIn:mD,algorithm:xi,subject:Fi.OPERATION})}a(tT,"signOperationToken");async function Vi(){if(O_===void 0)try{let e=A_.join(Ht.getHdbBasePath(),Ve.LICENSE_KEY_DIR_NAME,Ve.JWT_ENUM.JWT_PASSPHRASE_NAME),t=A_.join(Ht.getHdbBasePath(),Ve.LICENSE_KEY_DIR_NAME,Ve.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=A_.join(Ht.getHdbBasePath(),Ve.LICENSE_KEY_DIR_NAME,Ve.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await R_.readFile(e)).toString(),n=(await R_.readFile(t)).toString(),i=(await R_.readFile(r)).toString();O_=new RD(i,n,s)}catch(e){throw ks.error(e),Ce(new Error,Le.NO_ENCRYPTION_KEYS,be.INTERNAL_SERVER_ERROR)}return O_}a(Vi,"getJWTRSAKeys");async function ND(e){if(!e)throw Ce(new Error,Le.INVALID_BODY,be.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Ce(new Error,Le.REFRESH_TOKEN_REQUIRED,be.BAD_REQUEST,void 0,void 0,!0);await rT(e.refresh_token);let t=await Vi(),r=await $s.decode(e.refresh_token);return{operation_token:await tT({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(ND,"refreshOperationToken");async function gD(e){try{let t=await Vi(),r=await $s.verify(e,t.public_key,{algorithms:xi,subject:Fi.OPERATION});return await N_.findAndValidateUser(r.username,void 0,!1)}catch(t){throw ks.warn(t),t.name&&t.name==="TokenExpiredError"?Ce(new Error,Le.TOKEN_EXPIRED,be.FORBIDDEN):Ce(new Error,Le.INVALID_TOKEN,be.UNAUTHORIZED)}}a(gD,"validateOperationToken");async function rT(e){let t;try{let r=await Vi(),s=await $s.verify(e,r.public_key,{algorithms:xi,subject:Fi.REFRESH});t=await N_.findAndValidateUser(s.username,void 0,!1)}catch(r){throw ks.warn(r),r.name&&r.name==="TokenExpiredError"?Ce(new Error,Le.TOKEN_EXPIRED,be.FORBIDDEN):Ce(new Error,Le.INVALID_TOKEN,be.UNAUTHORIZED)}if(!eT.validate(t.refresh_token,e))throw Ce(new Error,Le.INVALID_TOKEN,be.UNAUTHORIZED);return t}a(rT,"validateRefreshToken")});var _T=d((sG,oT)=>{"use strict";var pD=XS(),qr=require("passport"),ID=require("passport-local").Strategy,CD=require("passport-http").BasicStrategy,bD=require("util"),LD=Hr(),aT=bD.callbackify(LD.findAndValidateUser),rG=Ne(),wD=f(),iT=nT();qr.use(new ID(function(e,t,r){aT(e,t,r)}));qr.use(new CD(function(e,t,r){aT(e,t,r)}));qr.serializeUser(function(e,t){t(null,e)});qr.deserializeUser(function(e,t){t(null,e)});function yD(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,_){return o?r(o):_?r(null,_):r("User not found")}switch(a(i,"handleResponse"),s){case"Basic":qr.authenticate("basic",{session:!1},(o,_)=>{i(o,_)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===wD.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?iT.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):iT.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:qr.authenticate("local",{session:!1},function(o,_){i(o,_)})(e,t,r);break}}a(yD,"authorize");function UD(e,t){let r=pD(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n||!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 _ in o)e.attributes.indexOf(o[_].attribute_name)>-1&&!o[_][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[_].attribute_name} `))}return t(null,s)}a(UD,"checkPermissions");oT.exports={authorize:yD,checkPermissions:UD}});var Yi=d((nG,cT)=>{"use strict";var ki=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(ki,"Node");var $i=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a($i,"NodeSubscription");cT.exports={Node:ki,NodeSubscription:$i}});var ET=d((iG,uT)=>{"use strict";var DD=f().OPERATIONS_ENUM,Ki=class{constructor(t,r,s,n=void 0){this.operation=DD.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Ki,"UpsertObject");uT.exports=Ki});var dT=d((aG,lT)=>{"use strict";var Wi=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(Wi,"RemotePayloadObject");var Qi=class{constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o}};a(Qi,"RemotePayloadSubscription");lT.exports={RemotePayloadObject:Wi,RemotePayloadSubscription:Qi}});var ST=d((oG,hT)=>{"use strict";var Ji=class{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}};a(Ji,"TableSizeObject");hT.exports=Ji});var mT=d((_G,RT)=>{"use strict";var MD=ST(),TT=require("path"),fT=V(),PD=Se(),Fr=G(),BD=g();RT.exports=HD;async function HD(e){let t=new MD;try{let r=TT.join(fT.getBaseSchemaPath(),e.schema.toString()),s=await Fr.openEnvironment(r,e.name),n=Fr.statDBI(s,e.hash_attribute),i=TT.join(fT.getTransactionAuditStorePath(),e.schema.toString()),o=await Fr.openEnvironment(i,e.name,!0),_=Fr.statDBI(o,PD.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),c=await Fr.environmentDataSize(r,e.name),u=await Fr.environmentDataSize(i,e.name);t.schema=e.schema,t.table=e.name,t.table_size=c,t.record_count=n.entryCount,t.transaction_log_size=u,t.transaction_log_record_count=_.entryCount}catch(r){BD.warn(`unable to stat table dbi due to ${r}`)}return t}a(HD,"lmdbGetTableSize")});var OT=d((cG,AT)=>{"use strict";var vD=f(),Xi=class{constructor(t){this.operator=vD.OPERATIONS_ENUM.SYSTEM_INFORMATION,this.attributes=t}};a(Xi,"SystemInformationOperation");AT.exports=Xi});var gT=d((uG,NT)=>{"use strict";var Zi=class{constructor(t,r,s,n,i,o,_){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=_}};a(Zi,"SystemInformationObject");NT.exports=Zi});var IT=d((lG,pT)=>{"use strict";var ce=require("systeminformation"),xr=g(),GD=f(),qD=mT(),FD=Ur(),xD=Z();xD.initSync();var EG=OT(),VD=gT(),zi;pT.exports={getHDBProcessInfo:C_,getNetworkInfo:L_,getDiskInfo:b_,getMemoryInfo:I_,getCPUInfo:p_,getTimeInfo:g_,getSystemInformation:w_,systemInformation:kD,getTableSize:y_};function g_(){return ce.time()}a(g_,"getTimeInfo");async function p_(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:_,socket:c,cache:u,...E}=await ce.cpu();E.cpu_speed=await ce.cpuCurrentSpeed();let{raw_currentload:l,raw_currentload_idle:T,raw_currentload_irq:h,raw_currentload_nice:A,raw_currentload_system:O,raw_currentload_user:I,cpus:X,...v}=await ce.currentLoad();return v.cpus=[],X.forEach(W=>{let{raw_load:$e,raw_load_idle:Js,raw_load_irq:J_,raw_load_nice:X_,raw_load_system:Z_,raw_load_user:Xs,...Nt}=W;v.cpus.push(Nt)}),E.current_load=v,E}catch(e){return xr.error(`error in getCPUInfo: ${e}`),{}}}a(p_,"getCPUInfo");async function I_(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await ce.mem();return n}catch(e){return xr.error(`error in getMemoryInfo: ${e}`),{}}}a(I_,"getMemoryInfo");async function C_(){let e={core:[],clustering:[]};try{return(await ce.processes()).list.forEach(r=>{r.params.includes(GD.HDB_PROC_NAME)?e.core.push(r):r.params.includes("socketcluster")&&e.clustering.push(r)}),e}catch(t){return xr.error(`error in getHDBProcessInfo: ${t}`),e}}a(C_,"getHDBProcessInfo");async function b_(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await ce.disksIO();e.io=i;let{rx_sec:o,tx_sec:_,wx_sec:c,...u}=await ce.fsStats();return e.read_write=u,e.size=await ce.fsSize(),e}catch(t){return xr.error(`error in getDiskInfo: ${t}`),e}}a(b_,"getDiskInfo");async function L_(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await ce.networkInterfaceDefault(),e.latency=await ce.inetChecksite("google.com"),(await ce.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:_,dnsSuffix:c,ieee8021xAuth:u,ieee8021xState:E,carrier_changes:l,...T}=s;e.interfaces.push(T)}),(await ce.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,..._}=s;e.stats.push(_)}),e.connections=await ce.networkConnections(),e}catch(t){return xr.error(`error in getNetworkInfo: ${t}`),e}}a(L_,"getNetworkInfo");async function w_(){if(zi!==void 0)return zi;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,..._}=await ce.osInfo();e=_;let c=await ce.versions("node, npm");return e.node_version=c.node,e.npm_version=c.npm,zi=e,zi}catch(t){return xr.error(`error in getSystemInformation: ${t}`),e}}a(w_,"getSystemInformation");async function y_(){let e=[],t=await FD.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await qD(s));return e}a(y_,"getTableSize");async function kD(e){let t=new VD;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await w_(),t.time=g_(),t.cpu=await p_(),t.memory=await I_(),t.disk=await b_(),t.network=await L_(),t.harperdb_processes=await C_(),t.table_size=await y_(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await w_();break;case"time":t.time=g_();break;case"cpu":t.cpu=await p_();break;case"memory":t.memory=await I_();break;case"disk":t.disk=await b_();break;case"network":t.network=await L_();break;case"harperdb_processes":t.harperdb_processes=await C_();break;case"table_size":t.table_size=await y_();break;default:break}return t}a(kD,"systemInformation")});var bT=d((SG,CT)=>{"use strict";var dG=require("fs-extra"),hG=g();CT.exports={version:$D,printVersion:KD,nodeVersion:YD};var vt=i_();function $D(){if(vt)return vt.version}a($D,"version");function YD(){if(vt&&vt.engines&&vt.engines["preferred-node"])return vt.engines["preferred-node"]}a(YD,"nodeVersion");function KD(){vt&&console.log(`HarperDB Version ${vt.version}`)}a(KD,"printVersion")});var Ys=d((RG,UT)=>{"use strict";var WD=Ms(),U_=p(),D_=require("util"),sr=f(),LT=Z();LT.initSync();var QD=_T(),wT=ys(),{Node:TG,NodeSubscription:fG}=Yi(),JD=Ns(),XD=ET(),{RemotePayloadObject:ZD,RemotePayloadSubscription:zD}=dT(),{handleHDBError:jD,hdb_errors:eM}=Y(),{HTTP_STATUS_CODES:tM,HDB_ERROR_MSGS:rM}=eM,sM=ht(),nM=IT(),iM=bT(),aM=D_.promisify(QD.authorize),oM=D_.promisify(wT.searchByHash),_M=D_.promisify(wT.searchByValue);UT.exports={authHeaderToUser:cM,isEmpty:uM,getNodeRecord:EM,upsertNodeRecord:lM,buildNodePayloads:dM,checkClusteringEnabled:hM,getAllNodeRecords:SM,getSystemInfo:TM,reverseSubscription:yT};async function cM(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await aM(t,null),e}a(cM,"authHeaderToUser");function uM(e){return e==null}a(uM,"isEmpty");async function EM(e){let t=new JD(sr.SYSTEM_SCHEMA_NAME,sr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return oM(t)}a(EM,"getNodeRecord");async function lM(e){let t=new XD(sr.SYSTEM_SCHEMA_NAME,sr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return WD.upsert(t)}a(lM,"upsertNodeRecord");function yT(e){if(U_.isEmpty(e.subscribe)||U_.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(yT,"reverseSubscription");function dM(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let _=e[i],{schema:c,table:u}=_,E=U_.getTableHashAttribute(c,u),{subscribe:l,publish:T}=yT(_),h=new zD(c,u,E,T,l,_.start_time);n.push(h)}return new ZD(r,t,n,s)}a(dM,"buildNodePayloads");function hM(){if(!LT.get(sr.CONFIG_PARAMS.CLUSTERING_ENABLED))throw jD(new Error,rM.CLUSTERING_NOT_ENABLED,tM.BAD_REQUEST,void 0,void 0,!0)}a(hM,"checkClusteringEnabled");async function SM(){let e=new sM(sr.SYSTEM_SCHEMA_NAME,sr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return _M(e)}a(SM,"getAllNodeRecords");async function TM(){let e=await nM.getSystemInformation();return{hdb_version:iM.version(),node_version:e.node_version,platform:e.platform}}a(TM,"getSystemInfo")});var PT=d((mG,MT)=>{"use strict";var P_=Ur(),{hdb_errors:M_}=Y();MT.exports={checkSchemaExists:DT,checkSchemaTableExists:fM,schema_describe:P_};async function DT(e){if(!global.hdb_schema[e])try{let t=await P_.describeSchema({schema:e});global.hdb_schema[e]=t}catch{return M_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}}a(DT,"checkSchemaExists");async function fM(e,t){let r=await DT(e);if(r)return r;if(!global.hdb_schema[e][t])try{let s=await P_.describeTable({schema:e,table:t});if(!s||Object.keys(s).length===0)return M_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t);global.hdb_schema[e][t]=s}catch{return M_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}}a(fM,"checkSchemaTableExists")});var FT=d((OG,qT)=>{"use strict";var Vr=yn(),nr=PT(),BT=g(),RM=require("uuid").v4,AG=require("clone"),$r=Ss(),ir=f(),mM=require("util"),ar=Jt(),{handleHDBError:ue,hdb_errors:AM}=Y(),{HDB_ERROR_MSGS:kr,HTTP_STATUS_CODES:Ee}=AM,{SchemaEventMsg:Yr}=Kt(),HT=tr();qT.exports={createSchema:OM,createSchemaStructure:vT,createTable:NM,createTableStructure:GT,createAttribute:bM,dropSchema:gM,dropTable:pM,dropAttribute:IM};async function OM(e){try{let t=await vT(e);return $r.signalSchemaChange(new Yr(process.pid,e.operation,e.schema)),t}catch(t){throw t}}a(OM,"createSchema");async function vT(e){let t=Vr.schema_object(e);if(t)throw ue(t,t.message,Ee.BAD_REQUEST,void 0,void 0,!0);if(!await nr.checkSchemaExists(e.schema))throw ue(new Error,kr.SCHEMA_EXISTS_ERR(e.schema),Ee.BAD_REQUEST,ir.LOG_LEVELS.ERROR,kr.SCHEMA_EXISTS_ERR(e.schema),!0);try{return await ar.createSchema(e),`schema '${e.schema}' successfully created`}catch(r){throw r}}a(vT,"createSchemaStructure");async function NM(e){try{let t=await GT(e);return $r.signalSchemaChange(new Yr(process.pid,e.operation,e.schema,e.table)),t}catch(t){throw t}}a(NM,"createTable");async function GT(e){let t=Vr.create_table_object(e);if(t)throw ue(t,t.message,Ee.BAD_REQUEST,void 0,void 0,!0);Vr.validateTableResidence(e.residence);let r=await nr.checkSchemaExists(e.schema);if(r)throw ue(new Error,r,Ee.NOT_FOUND,ir.LOG_LEVELS.ERROR,r,!0);if(!await nr.checkSchemaTableExists(e.schema,e.table))throw ue(new Error,kr.TABLE_EXISTS_ERR(e.schema,e.table),Ee.BAD_REQUEST,ir.LOG_LEVELS.ERROR,kr.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:RM(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await ar.createTable(n,e);else throw ue(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Ee.BAD_REQUEST);else await ar.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(i){throw i}}a(GT,"createTableStructure");async function gM(e){let t=Vr.schema_object(e);if(t)throw ue(t,t.message,Ee.BAD_REQUEST,void 0,void 0,!0);let r=await nr.checkSchemaExists(e.schema);if(r)throw ue(new Error,r,Ee.NOT_FOUND,ir.LOG_LEVELS.ERROR,r,!0);let s=await nr.schema_describe.describeSchema({schema:e.schema});global.hdb_schema[e.schema]=s;let n=Object.keys(global.hdb_schema[e.schema]);return await ar.dropSchema(e),$r.signalSchemaChange(new Yr(process.pid,e.operation,e.schema)),delete global.hdb_schema[e.schema],await HT.purgeSchemaTableStreams(e.schema,n),`successfully deleted schema '${e.schema}'`}a(gM,"dropSchema");async function pM(e){let t=Vr.table_object(e);if(t)throw ue(t,t.message,Ee.BAD_REQUEST,void 0,void 0,!0);let r=await nr.checkSchemaTableExists(e.schema,e.table);if(r)throw ue(new Error,r,Ee.NOT_FOUND,ir.LOG_LEVELS.ERROR,r,!0);return await ar.dropTable(e),$r.signalSchemaChange(new Yr(process.pid,e.operation,e.schema,e.table)),await HT.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(pM,"dropTable");async function IM(e){let t=Vr.attribute_object(e);if(t)throw ue(t,t.message,Ee.BAD_REQUEST,void 0,void 0,!0);let r=await nr.checkSchemaTableExists(e.schema,e.table);if(r)throw ue(new Error,r,Ee.NOT_FOUND,ir.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw ue(new Error,"You cannot drop a hash attribute",Ee.BAD_REQUEST,void 0,void 0,!0);if(ir.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw ue(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Ee.BAD_REQUEST,void 0,void 0,!0);try{return await ar.dropAttribute(e),CM(e),$r.signalSchemaChange(new Yr(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw BT.error(`Got an error deleting attribute ${mM.inspect(e)}.`),s}}a(IM,"dropAttribute");function CM(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(CM,"dropAttributeFromGlobal");async function bM(e){if(!global.hdb_schema[e.schema])throw ue(new Error,kr.SCHEMA_NOT_FOUND(e.schema),Ee.NOT_FOUND,void 0,void 0,!0);if(!global.hdb_schema[e.schema][e.table])throw ue(new Error,kr.TABLE_NOT_FOUND(e.schema,e.table),Ee.NOT_FOUND,void 0,void 0,!0);try{return await ar.createAttribute(e),$r.signalSchemaChange(new Yr(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}catch(t){throw BT.error(t),t}}a(bM,"createAttribute")});var Ks=d((NG,xT)=>{"use strict";var ji=class{constructor(t,r,s=void 0){this.status=t,this.message=r,this.system_info=s}};a(ji,"UpdateRemoteResponseObject");xT.exports=ji});var KT=d((gG,YT)=>{"use strict";var LM=QS(),or=g(),B_=De(),wM=f(),H_=Ys(),VT=tr(),kT=FT(),yM=No(),{Node:UM,NodeSubscription:$T}=Yi(),v_=Ks(),G_=p(),DM=Z(),{cloneDeep:MM}=require("lodash");YT.exports=PM;async function PM(e){try{let t=LM(e);if(t)return or.error(`Validation error in updateRemoteSource: ${t.message}`),new v_(B_.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:s,system_info:n}=e,i=[],o=MM(await H_.getNodeRecord(s)),_=!G_.isEmptyOrZeroLength(o);o=_?o[0]:o,_&&or.trace(`Existing record found for ${s}, updating records subscriptions`);for(let u=0,E=r.length;u<E;u++){let l=r[u],T=l.schema,h=l.table;if(G_.doesSchemaExist(T)||(or.trace(`updateRemoteSource creating schema: ${T}`),await kT.createSchema({operation:"create_schema",schema:T})),!G_.doesTableExist(T,h)){or.trace(`updateRemoteSource creating table: ${h} in schema: ${T}`);let A=new yM(T,h,l.hash_attribute);await kT.createTable(A),or.trace(`Creating local stream for ${T}.${h}`),await VT.createLocalTableStream(T,h)}if(await VT.updateWorkStream(l,s),_){let A=!1;for(let O=0,I=o.subscriptions.length;O<I;O++){let X=o.subscriptions[O];if(X.schema===T&&X.table===h){X.publish=l.publish,X.subscribe=l.subscribe,A=!0;break}}A||o.subscriptions.push(new $T(T,h,l.publish,l.subscribe))}else i.push(new $T(T,h,l.publish,l.subscribe))}_||(o=new UM(s,i,void 0),or.trace(`No record found for ${s}, creating a new one`));let c=Object.create({});return Object.assign(c,o),c.system_info=n,await H_.upsertNodeRecord(c),new v_(B_.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${DM.get(wM.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await H_.getSystemInfo())}catch(t){or.error(t);let r=t.message?t.message:t;return new v_(B_.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(PM,"updateRemoteSource")});var XT=d((pG,JT)=>{"use strict";var QT=require("joi"),{string:WT}=QT.types(),BM=f(),HM=Ke();JT.exports=vM;function vM(e){let t=QT.object({operation:WT.valid(BM.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:WT.required()});return HM.validateBySchema(e,t)}a(vM,"removeRemoteSourceValidator")});var zT=d((IG,ZT)=>{"use strict";var GM=XT(),ea=g(),ta=De(),q_=f(),qM=Ys(),FM=p(),xM=tr(),VM=Z(),ra=Ks(),{NodeSubscription:kM}=Yi(),$M=gs(),YM=Yo(),KM=VM.get(q_.CONFIG_PARAMS.CLUSTERING_NODENAME);ZT.exports=WM;async function WM(e){try{let t=GM(e);if(t)return ea.error(`Validation error in removeRemoteSource: ${t.message}`),new ra(ta.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,s=await qM.getNodeRecord(r);if(FM.isEmptyOrZeroLength(s)){let i=`No record found for node '${r}'`;return ea.error(i),new ra(ta.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}s=s[0];for(let i=0,o=s.subscriptions.length;i<o;i++){let _=s.subscriptions[i];ea.trace(`remove remote source removing subscription: ${_.schema}.${_.table} for node: ${r}`);let c=new kM(_.schema,_.table,!1,!1);await xM.updateWorkStream(c,r)}let n=new $M(q_.SYSTEM_SCHEMA_NAME,q_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await YM.deleteRecord(n),new ra(ta.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${KM} successfully removed node '${r}'.`)}catch(t){ea.error(t);let r=t.message?t.message:t;return new ra(ta.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(WM,"removeRemoteSource")});var ef=d((CG,jT)=>{"use strict";var QM=De(),sa=class{constructor(t,r,s,n,i,o,_,c,u,E,l,T,h){this.port=t,o===null&&(o=void 0),this.server_name=r+QM.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:_},this.leafnodes={port:c,tls:{cert_file:n,key_file:i,ca_file:o,insecure:_}},this.cluster={name:u,port:E,routes:l,tls:{cert_file:n,key_file:i,ca_file:o,insecure:_}},this.accounts={SYS:{users:T},HDB:{users:h}},this.system_account="SYS"}};a(sa,"HubConfigObject");jT.exports=sa});var sf=d((bG,rf)=>{"use strict";var tf=De(),na=class{constructor(t,r,s,n,i,o,_,c,u,E,l){this.port=t,l===null&&(l=void 0),this.server_name=r+tf.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+tf.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:E,ca_file:l,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:l,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:l,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:_},HDB:{users:c,jetstream:"enabled"}},this.system_account="SYS"}};a(na,"LeafConfigObject");rf.exports=na});var af=d((LG,nf)=>{"use strict";var ia=class{constructor(t,r){this.user=t,this.password=r}};a(ia,"HdbUserObject");nf.exports=ia});var _f=d((wG,of)=>{"use strict";var JM=De(),aa=class{constructor(t,r){this.user=t+JM.SERVER_SUFFIX.ADMIN,this.password=r}};a(aa,"SysUserObject");of.exports=aa});var lf=d((yG,Ef)=>{"use strict";var Kr=require("path"),ua=require("fs-extra"),XM=ef(),ZM=sf(),zM=af(),jM=_f(),F_=Hr(),Qr=p(),ke=ts(),ca=f(),oa=De(),{CONFIG_PARAMS:ne}=ca,Ea=g(),la=Z(),cf=ns(),x_=tr(),Wr="clustering",eP=1e4,uf=5;Ef.exports={generateNatsConfig:tP,removeNatsConfig:rP};async function tP(e=!1,t=void 0){la.initSync();let r=la.get(ne.ROOTPATH),s=Kr.join(r,Wr,oa.PID_FILES.HUB),n=Kr.join(r,Wr,oa.PID_FILES.LEAF),i=Kr.join(r,Wr,"leaf"),o=Kr.join(r,Wr,oa.NATS_CONFIG_FILES.HUB_SERVER),_=Kr.join(r,Wr,oa.NATS_CONFIG_FILES.LEAF_SERVER),c=ke.getConfigFromFile(ne.CLUSTERING_TLS_CERTIFICATE),u=ke.getConfigFromFile(ne.CLUSTERING_TLS_PRIVATEKEY),E=ke.getConfigFromFile(ne.CLUSTERING_TLS_CERT_AUTH),l=ke.getConfigFromFile(ne.CLUSTERING_TLS_INSECURE),T=ke.getConfigFromFile(ne.CLUSTERING_NODENAME),h=ke.getConfigFromFile(ne.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await x_.checkNATSServerInstalled()||da("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let A=await F_.listUsers(),O=ke.getConfigFromFile(ne.CLUSTERING_USER),I=await F_.getClusterUser();(Qr.isEmpty(I)||I.active!==!0)&&da(`invalid cluster user '${O}'`),e||(await _a(ne.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await _a(ne.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await _a(ne.CLUSTERING_HUBSERVER_NETWORK_PORT),await _a(ne.CLUSTERING_LEAFSERVER_NETWORK_PORT));let X=[],v=[];for(let[Xs,Nt]of A.entries())Nt.role.role===ca.ROLE_TYPES_ENUM.CLUSTER_USER&&Nt.active&&(X.push(new jM(Nt.username,cf.decrypt(Nt.hash))),v.push(new zM(Nt.username,cf.decrypt(Nt.hash))));let W=[],{hub_routes:$e}=ke.getClusteringRoutes();if(!Qr.isEmptyOrZeroLength($e))for(let Xs of $e)W.push(`tls://${I.sys_name_encoded}:${I.uri_encoded_d_hash}@${Xs.host}:${Xs.port}`);let Js=new XM(ke.getConfigFromFile(ne.CLUSTERING_HUBSERVER_NETWORK_PORT),T,s,c,u,E,l,h,ke.getConfigFromFile(ne.CLUSTERING_HUBSERVER_CLUSTER_NAME),ke.getConfigFromFile(ne.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),W,X,v);t=Qr.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===ca.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await ua.writeJson(o,Js),Ea.trace(`Hub server config written to ${o}`));let J_=`tls://${I.sys_name_encoded}:${I.uri_encoded_d_hash}@0.0.0.0:${h}`,X_=`tls://${I.uri_encoded_name}:${I.uri_encoded_d_hash}@0.0.0.0:${h}`,Z_=new ZM(ke.getConfigFromFile(ne.CLUSTERING_LEAFSERVER_NETWORK_PORT),T,n,i,[J_],[X_],X,v,c,u,E,l);(t===void 0||t===ca.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await ua.writeJson(_,Z_),Ea.trace(`Leaf server config written to ${_}`))}a(tP,"generateNatsConfig");async function _a(e){let t=la.get(e);Qr.isEmpty(t)&&da(`port undefined for '${e}'`),await Qr.isPortTaken(t)&&da(`'${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.`)}a(_a,"isPortAvailable");function da(e){let t=`Error generating clustering config: ${e}`;Ea.error(t),console.error(t),process.exit(1)}a(da,"generateNatsConfigError");async function rP(e){let{port:t,config_file:r}=x_.getServerConfig(e),{username:s,decrypt_hash:n}=await F_.getClusterUser(),i=0,o=500;for(;i<uf;){try{let u=await x_.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){Ea.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=uf)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check the ${e} log for further details.`);await Qr.async_set_timeout(o*i)}let _="0".repeat(eP),c=Kr.join(la.get(ne.ROOTPATH),Wr,r);await ua.writeFile(c,_),await ua.remove(c)}a(rP,"removeNatsConfig")});var k_=d((UG,mf)=>{"use strict";var $=Z(),df=Zo(),m=f(),V_=De(),te=require("path"),{PACKAGE_ROOT:ha}=f(),J="/dev/null",Jr=te.join(ha,"launchServiceScripts"),hf=te.join(ha,"utility/scripts"),sP=te.join(hf,m.HDB_RESTART_SCRIPT),Sf=te.resolve(ha,"dependencies",`${process.platform}-${process.arch}`,V_.NATS_BINARY_NAME),le,de;function _t(){(le===void 0||de===void 0)&&($.initSync(),le=$.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),de=$.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY))}a(_t,"initLogConfig");function Tf(){_t();let e=te.join(de,m.PROCESS_LOG_NAMES.IPC),t={name:m.PROCESS_DESCRIPTORS.IPC,exec_mode:"fork",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.IPC},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:m.SERVICE_SERVERS_CWD.IPC};return le||(t.out_file=J,t.error_file=J),{...t,script:m.SERVICE_SERVERS.IPC}}a(Tf,"generateIPCServerConfig");function ff(){_t(),$.initSync(),le=$.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),de=$.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=te.join(de,m.PROCESS_LOG_NAMES.HDB),t=df.licenseSearch(),r=t.ram_allocation?m.MEM_SETTING_KEY+t.ram_allocation:m.MEM_SETTING_KEY+m.RAM_ALLOCATION_ENUM.DEFAULT,s={name:m.PROCESS_DESCRIPTORS.HDB,script:m.LAUNCH_SERVICE_SCRIPTS.HDB,exec_mode:"cluster",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.HDB},merge_logs:!0,out_file:e,error_file:e,instances:$.get(m.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Jr};return le||(s.out_file=J,s.error_file=J),s}a(ff,"generateHDBServerConfig");function Rf(){_t(),$.initSync(),le=$.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),de=$.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=te.join(de,m.PROCESS_LOG_NAMES.CUSTOM_FUNCTIONS),t=df.licenseSearch(),r=t.ram_allocation?m.MEM_SETTING_KEY+t.ram_allocation:m.MEM_SETTING_KEY+m.RAM_ALLOCATION_ENUM.DEFAULT,s={name:m.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS,script:m.LAUNCH_SERVICE_SCRIPTS.CUSTOM_FUNCTIONS,exec_mode:"cluster",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS},merge_logs:!0,out_file:e,error_file:e,instances:$.get(m.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Jr};return le||(s.out_file=J,s.error_file=J),s}a(Rf,"generateCFServerConfig");function nP(){_t(),$.initSync(),le=$.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),de=$.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=$.get(m.CONFIG_PARAMS.ROOTPATH),t=te.join(e,"clustering",V_.NATS_CONFIG_FILES.HUB_SERVER),r=te.join(de,m.PROCESS_LOG_NAMES.CLUSTERING_HUB),s={name:m.PROCESS_DESCRIPTORS.CLUSTERING_HUB,script:Sf,args:`-c ${t}`,exec_mode:"fork",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return le||(s.out_file=J,s.error_file=J),s}a(nP,"generateNatsHubServerConfig");function iP(){_t(),$.initSync(),le=$.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),de=$.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=$.get(m.CONFIG_PARAMS.ROOTPATH),t=te.join(e,"clustering",V_.NATS_CONFIG_FILES.LEAF_SERVER),r=te.join(de,m.PROCESS_LOG_NAMES.CLUSTERING_LEAF),s={name:m.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,script:Sf,args:`-c ${t}`,exec_mode:"fork",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return le||(s.out_file=J,s.error_file=J),s}a(iP,"generateNatsLeafServerConfig");function aP(){_t(),$.initSync();let e=te.join(de,m.PROCESS_LOG_NAMES.CLUSTERING_INGEST_SERVICE),t={name:m.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,script:m.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,exec_mode:"cluster",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Jr};return le||(t.out_file=J,t.error_file=J),t}a(aP,"generateNatsIngestServiceConfig");function oP(){_t(),$.initSync();let e=te.join(de,m.PROCESS_LOG_NAMES.CLUSTERING_REPLY_SERVICE),t={name:m.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE,script:m.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,exec_mode:"cluster",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Jr};return le||(t.out_file=J,t.error_file=J),t}a(oP,"generateNatsReplyServiceConfig");function _P(){_t(),$.initSync();let e=te.join(de,m.PROCESS_LOG_NAMES.CLUSTERING_UPGRADE),t={name:m.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:m.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Jr,autorestart:!1};return le||(t.out_file=J,t.error_file=J),t}a(_P,"generateClusteringUpgradeV4ServiceConfig");function cP(){_t();let e=te.join(de,m.PROCESS_LOG_NAMES.PM2),t={name:m.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.RESTART_HDB},merge_logs:!0,out_file:e,error_file:e,instances:1,autorestart:!1,cwd:hf};return le||(t.out_file=J,t.error_file=J),{...t,script:sP}}a(cP,"generateRestart");function uP(e){_t();let t=te.join(de,m.PROCESS_LOG_NAMES.JOBS),r=te.join(ha,"server/jobs"),s={name:`JOB-${e}`,exec_mode:"fork",env:{[m.PROCESS_NAME_ENV_PROP]:`JOB-${e}`},merge_logs:!0,out_file:t,error_file:t,instances:1,cwd:Jr,autorestart:!1};return le||(s.out_file=J,s.error_file=J),{...s,script:te.join(r,"jobProcess.js")}}a(uP,"generateJobConfig");function EP(){return{apps:[Tf(),ff(),Rf()]}}a(EP,"generateAllServiceConfigs");mf.exports={generateAllServiceConfigs:EP,generateIPCServerConfig:Tf,generateHDBServerConfig:ff,generateCFServerConfig:Rf,generateRestart:cP,generateNatsHubServerConfig:nP,generateNatsLeafServerConfig:iP,generateNatsIngestServiceConfig:aP,generateNatsReplyServiceConfig:oP,generateClusteringUpgradeV4ServiceConfig:_P,generateJobConfig:uP}});var Uf=d((DG,yf)=>{"use strict";var b=f(),Sa=p(),Ws=lf(),Ta=tr(),lP=De(),M=require("pm2"),dP=require("fs-extra"),At=k_(),we=Z(),Ot=g(),hP=k_(),SP=Ys(),TP=require("util"),Of=TP.promisify(require("child_process").exec),Nf=require("path");yf.exports={start:_r,stop:Ra,reload:pf,restart:If,list:Y_,describe:ma,connect:ct,kill:bf,startAllServices:CP,startService:fa,getUniqueServicesList:K_,restartAllServices:bP,stopAllServices:LP,isServiceRegistered:Lf,reloadStopStart:$_,restartHdb:Cf,deleteProcess:pP,configureLogRotate:UP,startClustering:wf,isHdbRestartRunning:IP,isClusteringRunning:MP,stopClustering:DP,reloadClustering:PP};var{PACKAGE_ROOT:fP}=f(),RP="2.7.0",gf=Nf.join(fP,"node_modules/pm2/bin/pm2"),mP="Log rotate installed.",AP="Error installing log rotate.",OP="Log rotate updated.",NP="Error updating log rotate.",gP="The number of HarperDB processes running is different from the settings value. To restart and update the number HarperDB processes running you must stop and then start HarperDB";function ct(){return new Promise((e,t)=>{M.connect((r,s)=>{r&&t(r),e(s)})})}a(ct,"connect");function _r(e){return new Promise(async(t,r)=>{try{await ct()}catch(s){r(s)}M.start(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(_r,"start");function Ra(e){return new Promise(async(t,r)=>{try{await ct()}catch(s){r(s)}M.stop(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.delete(e,(i,o)=>{i&&(M.disconnect(),r(s)),M.disconnect(),t(o)})})})}a(Ra,"stop");function pf(e){return new Promise(async(t,r)=>{try{await ct()}catch(s){r(s)}M.reload(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(pf,"reload");function If(e){return new Promise(async(t,r)=>{try{await ct()}catch(s){r(s)}M.restart(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(If,"restart");function pP(e){return new Promise(async(t,r)=>{try{await ct()}catch(s){r(s)}M.delete(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(pP,"deleteProcess");async function Cf(){await _r(hP.generateRestart())}a(Cf,"restartHdb");async function IP(){let e=await Y_();for(let t in e)if(e[t].name===b.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(IP,"isHdbRestartRunning");function Y_(){return new Promise(async(e,t)=>{try{await ct()}catch(r){t(r)}M.list((r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(Y_,"list");function ma(e){return new Promise(async(t,r)=>{try{await ct()}catch(s){r(s)}M.describe(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(ma,"describe");function bf(){return new Promise(async(e,t)=>{try{await ct()}catch(r){t(r)}M.killDaemon((r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(bf,"kill");async function CP(){try{await wf(),await _r(At.generateAllServiceConfigs())}catch(e){throw M.disconnect(),e}}a(CP,"startAllServices");async function fa(e){try{let t;switch(e=e.toLowerCase(),e){case b.PROCESS_DESCRIPTORS.IPC.toLowerCase():t=At.generateIPCServerConfig();break;case b.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=At.generateHDBServerConfig();break;case b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase():t=At.generateCFServerConfig();break;case b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=At.generateNatsIngestServiceConfig();break;case b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=At.generateNatsReplyServiceConfig();break;case b.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=At.generateNatsHubServerConfig(),await _r(t),await Ws.removeNatsConfig(e);return;case b.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=At.generateNatsLeafServerConfig(),await _r(t),await Ws.removeNatsConfig(e);return;case b.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=At.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await _r(t)}catch(t){throw M.disconnect(),t}}a(fa,"startService");async function K_(){try{let e=await Y_(),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 M.disconnect(),e}}a(K_,"getUniqueServicesList");async function bP(e=[]){try{let t=!1,r=await K_();for(let s=0,n=Object.values(r).length;s<n;s++){let i=Object.values(r)[s],o=i.name;e.includes(o)||(i.exec_mode==="cluster_mode"?o===b.PROCESS_DESCRIPTORS.HDB?t=!0:await $_(o):await If(o))}t&&await $_(b.PROCESS_DESCRIPTORS.HDB)}catch(t){throw M.disconnect(),t}}a(bP,"restartAllServices");async function LP(){try{let e=await K_();for(let t=0,r=Object.values(e).length;t<r;t++){let s=Object.values(e)[t];await Ra(s.name)}if(await bf(),we.get(b.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND)===!0){let t=(await dP.readFile(Nf.join(we.get(b.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),b.FOREGROUND_PID_FILE))).toString();try{process.kill(t,"SIGTERM")}catch(r){Ot.warn(`Error terminating foreground process: ${r}`)}}}catch(e){throw M.disconnect(),e}}a(LP,"stopAllServices");async function Lf(e){return!Sa.isEmptyOrZeroLength(await ma(e))}a(Lf,"isServiceRegistered");async function $_(e){let t=e===b.PROCESS_DESCRIPTORS.HDB?we.get(b.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):we.get(b.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await ma(e),s=Sa.isEmptyOrZeroLength(r)?0:r.length;t!==s?e===b.PROCESS_DESCRIPTORS.HDB?Ot.error(gP):(await Ra(e),await fa(e)):e===b.PROCESS_DESCRIPTORS.HDB?await Cf():await pf(e)}a($_,"reloadStopStart");function wP(){return new Promise(async(e,t)=>{try{await ct()}catch(r){t(r)}M.stop(b.PROCESS_DESCRIPTORS.PM2_LOGROTATE,(r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(wP,"stopLogrotate");async function yP(){let{stdout:e,stderr:t}=await Of(`${process.platform==="win32"?"node":""} ${gf} install pm2-logrotate@${RP}`);if(Ot.debug(`loadLogRotate stdout: ${e}`),t)throw Ot.error(AP),t;Ot.info(mP)}a(yP,"installLogRotate");async function Af(){let e={max_size:we.get(b.HDB_SETTINGS_NAMES.LOG_ROTATE_MAX_SIZE),retain:we.get(b.HDB_SETTINGS_NAMES.LOG_ROTATE_RETAIN),compress:we.get(b.HDB_SETTINGS_NAMES.LOG_ROTATE_COMPRESS),dateFormat:we.get(b.HDB_SETTINGS_NAMES.LOG_ROTATE_DATE_FORMAT),rotateModule:we.get(b.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_MODULE),workerInterval:we.get(b.HDB_SETTINGS_NAMES.LOG_ROTATE_WORKER_INTERVAL),rotateInterval:we.get(b.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_INTERVAL),TZ:we.get(b.HDB_SETTINGS_NAMES.LOG_ROTATE_TIMEZONE)},t="";for(let n in e)t+=`${process.platform==="win32"?"node":""} ${gf} set pm2-logrotate:${n} ${e[n]}`,n!=="TZ"&&(t+=" && ");let{stdout:r,stderr:s}=await Of(t);if(Ot.debug(`updateLogRotateConfig stdout: ${r}`),s)throw Ot.error(NP),s;Ot.info(OP)}a(Af,"updateLogRotateConfig");async function UP(){we.initSync();let e=Sa.autoCastBoolean(we.get(b.HDB_SETTINGS_NAMES.LOG_ROTATE)),t=await ma(b.PROCESS_DESCRIPTORS.PM2_LOGROTATE),r,s=!1;if(Sa.isEmptyOrZeroLength(t)||(s=!0,r=t[0].pm2_env.status),e&&!s){await yP(),await Af();return}if(e&&s){await _r(b.PROCESS_DESCRIPTORS.PM2_LOGROTATE),await Af();return}!e&&r===b.PM2_PROCESS_STATUSES.ONLINE&&await wP()}a(UP,"configureLogRotate");async function wf(){for(let t in b.CLUSTERING_PROCESSES){let r=b.CLUSTERING_PROCESSES[t];await fa(r)}await Ta.createWorkQueueStream(lP.WORK_QUEUE_CONSUMER_NAMES),await Ta.updateNodeNameLocalStreams();let e=await SP.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===b.PRE_4_0_0_VERSION){Ot.info("Starting clustering upgrade 4.0.0 process"),await fa(b.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0);break}}a(wf,"startClustering");async function DP(){for(let e in b.CLUSTERING_PROCESSES){let t=b.CLUSTERING_PROCESSES[e];await Ra(t)}}a(DP,"stopClustering");async function MP(){for(let e in b.CLUSTERING_PROCESSES){let t=b.CLUSTERING_PROCESSES[e];if(await Lf(t)===!1)return!1}return!0}a(MP,"isClusteringRunning");async function PP(){await Ws.generateNatsConfig(!0),await Ta.reloadNATSHub(),await Ta.reloadNATSLeaf(),await Ws.removeNatsConfig(b.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ws.removeNatsConfig(b.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(PP,"reloadClustering")});var Hf=d((MG,Bf)=>{"use strict";var Aa=g(),Qs=f(),Df=De(),Mf=Z(),BP=p(),Pf=Ks(),HP=Uf(),vP=Ys(),GP=f_(),qP=Ms();Bf.exports=FP;async function FP(e){try{Aa.trace("getRemoteSourceConfig called");let r=(await HP.describe(Qs.CLUSTERING_HUB_PROC_DESCRIPTOR))[0].pm2_env.pm_uptime,s=BP.ms_to_time(Date.now()-r),n=new xP(Mf.get(Qs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Mf.get(Qs.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT),s,await vP.getSystemInfo());try{let i={name:e.node_name,system_info:e.system_info},o=new GP(Qs.SYSTEM_SCHEMA_NAME,Qs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[i]);await qP.update(o)}catch(i){Aa.error("Get remote config encountered an error updating system info for node:",e.node_name,i)}return Aa.trace("getRemoteSourceConfig response:",n),new Pf(Df.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,n)}catch(t){Aa.error(t);let r=t.message?t.message:t;return new Pf(Df.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(FP,"getRemoteSourceConfig");function xP(e,t,r,s){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=s}a(xP,"ConfigResponseObject")});var qf=d((PG,Gf)=>{"use strict";var vf=Z();vf.initSync();var VP=tr(),kP=qS(),$P=kS(),cr=g(),Xr=f(),W_=De(),YP=KT(),KP=zT(),WP=Hf(),QP=Ks(),{encode:JP,decode:XP}=require("msgpackr"),ZP=Ds(),zP=Ur(),jP=require("util"),eB=jP.promisify(ZP.setSchemaDataToGlobal),Q_=vf.get(Xr.CONFIG_PARAMS.CLUSTERING_NODENAME);Gf.exports=tB;async function tB(){try{cr.notify("Starting reply service."),await eB();try{global.hdb_ipc=new $P(process.pid,kP)}catch(s){throw cr.error("Error instantiating new instance of IPC client in natsReplyService"),s}let e=await VP.getConnection(),t=`${Q_}.__request__`,r=e.subscribe(t,{queue:Q_});await rB(r)}catch(e){cr.error(e)}}a(tB,"initialize");async function rB(e){for await(let t of e){let r=XP(t.data);cr.trace("Received request:",r);let s;switch(r.operation){case Xr.OPERATIONS_ENUM.ADD_NODE:case Xr.OPERATIONS_ENUM.UPDATE_NODE:s=await YP(r);break;case Xr.OPERATIONS_ENUM.REMOVE_NODE:s=await KP(r);break;case Xr.OPERATIONS_ENUM.CLUSTER_STATUS:s=await WP(r);break;case Xr.OPERATIONS_ENUM.DESCRIBE_ALL:s=await sB();break;default:let n=`node '${Q_}' reply service received unrecognized request operation`;cr.error(n),s=new QP(W_.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,n)}cr.trace(s),t.respond(JP(s))}}a(rB,"handleRequest");async function sB(){try{return{status:W_.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await zP.describeAll()}}catch(e){return cr.error(e),{status:W_.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}a(sB,"getRemoteDescribeAll")});var nB=qf();(async()=>{try{await nB()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();