harperdb 4.0.1 → 4.0.2

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
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
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
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===1&&s===2&&(n=s),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.1",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.3",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.7.0",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(`
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.2",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{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(`
6
6
  `,""));return r.replace(`
7
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 unavailable`)}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)}})();