harperdb 4.0.4 → 4.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
- "use strict";var vf=Object.defineProperty;var a=(e,t)=>vf(e,"name",{value:t,configurable:!0});var d=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var f=d((SB,ac)=>{"use strict";var de=require("path"),Gf=require("fs");function qf(){let e=__dirname;for(;!Gf.existsSync(de.join(e,"package.json"));){let t=de.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(qf,"getHDBPackageRoot");var Ke=qf(),Q_="js",Jr=Q_,Ff="harperdb-config.yaml",xf="defaultConfig.yaml",Vf="hdb",J_=`hdbServer.${Jr}`,X_=`customFunctionsServer.${Jr}`,Z_=`hdbIpcServer.${Jr}`,kf=`restartHdb.${Jr}`,Na="HarperDB",Js="Custom Functions",Xs="Clustering Hub",Zs="Clustering Leaf",Oa="Clustering Ingest Service",ga="Clustering Reply Service",Yf="foreground.pid",Aa={HDB:Na,IPC:"IPC",CLUSTERING_HUB:Xs,CLUSTERING_LEAF:Zs,CLUSTERING_INGEST_SERVICE:Oa,CLUSTERING_REPLY_SERVICE:ga,CUSTOM_FUNCTIONS:Js,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"},$f={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"},Kf={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},Wf={harperdb:Na,ipc:"IPC","clustering hub":Xs,"clustering leaf":Zs,"clustering ingest service":Oa,"clustering reply service":ga,"custom functions":Js,custom_functions:Js,"pm2-logrotate":Aa.PM2_LOGROTATE,logrotate:Aa.PM2_LOGROTATE,clustering:"clustering","clustering config":"clustering config"},Qf={CLUSTERING_HUB_PROC_DESCRIPTOR:Xs,CLUSTERING_LEAF_PROC_DESCRIPTOR:Zs,CLUSTERING_INGEST_PROC_DESCRIPTOR:Oa,CLUSTERING_REPLY_SERVICE_DESCRIPTOR:ga},Qs={HDB:de.join(Ke,"server/harperdb"),IPC:de.join(Ke,"server/ipc"),CUSTOM_FUNCTIONS:de.join(Ke,"server/customFunctions"),CLUSTERING_HUB:de.join(Ke,"server/nats"),CLUSTERING_LEAF:de.join(Ke,"server/nats")},Jf={HDB:de.join(Qs.HDB,J_),IPC:de.join(Qs.IPC,Z_),CUSTOM_FUNCTIONS:de.join(Qs.CUSTOM_FUNCTIONS,X_)},Xf={HDB:de.join(Ke,"launchServiceScripts/launchHarperDB.js"),CUSTOM_FUNCTIONS:de.join(Ke,"launchServiceScripts/launchCustomFunctions.js"),NATS_INGEST_SERVICE:de.join(Ke,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:de.join(Ke,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:de.resolve(Ke,"launchServiceScripts/launchUpdateNodes4-0-0.js")},Zf={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},z_="support@harperdb.io",zf="customer-success@harperdb.io",j_=1,jf=4141,ec="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",eR="https://www.harperdb.io/product",tR=`For support, please submit a request at ${ec} or contact ${z_}`,tc=`For license support, please contact ${zf}`,rR="None of the specified records were found.",sR="hash attribute not found",nR=`Your current license only supports ${j_} role. ${tc}`,iR="Your current license only supports 3 connections to a node.",aR="127.0.0.1",oR=1,_R=/^\.$/,cR=/^\.\.$/,uR="U+002E",ER=/\//g,lR="U+002F",dR=/U\+002F/g,SR=/^U\+002E$/,hR=/^U\+002EU\+002E$/,TR="d",fR=999999,RR="*",mR="--max-old-space-size=",AR="system",NR="__hdb_hash",OR=".harperdb",gR=".hdb",pR="keys",IR="hdb_boot_properties.file",CR=".updateConfig.json",bR="SIGTSTP",LR=24,wR=6e4,yR=448,UR="blob",DR="trash",MR="schema",PR="transactions",BR=".count",HR="id",vR="install_log.log",GR="run_log.log",qR="PROCESS_NAME",FR={SETTINGS_PATH_KEY:"settings_path"},rc=require("lodash"),xR={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"},VR={HDB_PATH_KEY:"HDB_INTERNAL_PATH",HDB_AUTH_HEADER:"hdb_auth_header",HDB_USER_DATA_KEY:"hdb_user",CHUNK_SIZE:1e3,MAX_CHARACTER_SIZE:250},kR={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},YR={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"},$R={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:",KR={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"},WR={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"},QR="060493.ks",JR=".license",XR={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"},ZR={CSV:".csv",JSON:".json"},zR={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key"},jR={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 em={RUN:"run",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade"},tm={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},sc={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"},rm=rc.invert(sc),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"},sm={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},nm={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"},im={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"},am={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},om={FILE_SYSTEM:"fs",LMDB:"lmdb"},_m={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},cm={DEVELOPMENT:8192,DEFAULT:512},um={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"},Em={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"},lm={ENOENT:"ENOENT",EACCES:"EACCES"},nc={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},dm="__clustering__",Sm=Object.values(nc),hm=15984864e5,ic={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Tm=rc.invert(ic),fm={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"},Rm=111,mm=`\r
2
- `,Am={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Nm=["*","%"],Om="unauthorized_access",gm="func_val",pm={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Im={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},Cm="hdb_ipc_server",bm="hdb_ipc_client_",Lm={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"},wm={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},ym={STOPPED:"stopped",ONLINE:"online"},Um="3.x.x";ac.exports={LOCAL_HARPERDB_OPERATIONS:H,HDB_SUPPORT_ADDRESS:z_,HDB_SUPPORT_URL:ec,HDB_PRICING_URL:eR,SUPPORT_HELP_MSG:tR,LICENSE_HELP_MSG:tc,HDB_PROC_NAME:J_,HDB_PROC_DESCRIPTOR:Na,CLUSTERING_LEAF_PROC_DESCRIPTOR:Zs,CLUSTERING_HUB_PROC_DESCRIPTOR:Xs,SYSTEM_SCHEMA_NAME:AR,HASH_FOLDER_NAME:NR,HDB_HOME_DIR_NAME:OR,UPDATE_FILE_NAME:CR,LICENSE_KEY_DIR_NAME:pR,BOOT_PROPS_FILE_NAME:IR,JOB_TYPE_ENUM:nm,JOB_STATUS_ENUM:XR,SYSTEM_TABLE_NAMES:YR,SYSTEM_TABLE_HASH_ATTRIBUTES:$R,OPERATIONS_ENUM:R,VALID_S3_FILE_TYPES:ZR,S3_BUCKET_AUTH_KEYS:zR,VALID_SQL_OPS_ENUM:jR,GEO_CONVERSION_ENUM:tm,HDB_SETTINGS_NAMES:sc,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:rm,SERVICE_ACTIONS_ENUM:em,CLUSTER_MESSAGE_TYPE_ENUM:im,CLUSTER_CONNECTION_DIRECTION_ENUM:am,CLUSTER_EVENTS_DEFS_ENUM:um,PERIOD_REGEX:_R,DOUBLE_PERIOD_REGEX:cR,UNICODE_PERIOD:uR,FORWARD_SLASH_REGEX:ER,UNICODE_FORWARD_SLASH:lR,ESCAPED_FORWARD_SLASH_REGEX:dR,ESCAPED_PERIOD_REGEX:SR,ESCAPED_DOUBLE_PERIOD_REGEX:hR,REG_KEY_FILE_NAME:QR,RESTART_TIMEOUT_MS:wR,HDB_FILE_PERMISSIONS:yR,SCHEMA_DIR_NAME:MR,TRANSACTIONS_DIR_NAME:PR,LIMIT_COUNT_NAME:BR,ID_ATTRIBUTE_STRING:HR,INSERT_MODULE_ENUM:VR,UPGRADE_JSON_FIELD_NAMES_ENUM:kR,RESTART_CODE:bR,RESTART_CODE_NUM:LR,CLUSTER_OPERATIONS:bt,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:WR,HDB_INTERNAL_SC_CHANNEL_PREFIX:Ue,INTERNAL_SC_CHANNELS:KR,CLUSTERING_MESSAGE_TYPES:fm,HDB_FILE_SUFFIX:gR,BLOB_FOLDER_NAME:UR,HDB_TRASH_DIR:DR,ORIGINATOR_SET_VALUE:Rm,LICENSE_VALUES:_m,RAM_ALLOCATION_ENUM:cm,STORAGE_TYPES_ENUM:om,TIME_STAMP_NAMES_ENUM:nc,TIME_STAMP_NAMES:Sm,PERMS_UPDATE_RELEASE_TIMESTAMP:hm,SEARCH_NOT_FOUND_MESSAGE:rR,SEARCH_ATTRIBUTE_NOT_FOUND:sR,LICENSE_ROLE_DENIED_RESPONSE:nR,LICENSE_MAX_CONNS_REACHED:iR,BASIC_LICENSE_MAX_NON_CU_ROLES:j_,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:jf,VALUE_SEARCH_COMPARATORS:ic,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:Tm,LICENSE_FILE_NAME:JR,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:Em,NEW_LINE:mm,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:oR,MOMENT_DAYS_TAG:TR,API_TURNOVER_SEC:fR,LOOPBACK:aR,CODE_EXTENSION:Jr,WILDCARD_SEARCH_VALUE:RR,NODE_ERROR_CODES:lm,JAVASCRIPT_EXTENSION:Q_,PERMS_CRUD_ENUM:Am,UNAUTHORIZED_PERMISSION_NAME:Om,SEARCH_WILDCARDS:Nm,FUNC_VAL:gm,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:pm,JWT_ENUM:Im,CLUSTERING_FLAG:dm,RUN_LOG:GR,INSTALL_LOG:vR,IPC_SERVER_MODULE:Z_,HDB_IPC_SERVER:Cm,IPC_EVENT_TYPES:Lm,HDB_IPC_CLIENT_PREFIX:bm,CUSTOM_FUNCTION_PROC_NAME:X_,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Js,SERVICES:wm,MEM_SETTING_KEY:mR,HDB_RESTART_SCRIPT:kf,PROCESS_DESCRIPTORS:Aa,SERVICE_SERVERS:Jf,SERVICE_SERVERS_CWD:Qs,PROCESS_DESCRIPTORS_VALIDATE:Wf,LAUNCH_SERVICE_SCRIPTS:Xf,LOG_LEVELS:Kf,PROCESS_NAME_ENV_PROP:qR,PROCESS_LOG_NAMES:$f,PM2_PROCESS_STATUSES:ym,CONFIG_PARAM_MAP:sm,CONFIG_PARAMS:T,HDB_CONFIG_FILE:Ff,HDB_DEFAULT_CONFIG_FILE:xf,ROLE_TYPES_ENUM:Zf,BOOT_PROP_PARAMS:FR,INSTALL_PROMPTS:xR,HDB_ROOT_DIR_NAME:Vf,CLUSTERING_PROCESSES:Qf,FOREGROUND_PID_FILE:Yf,PACKAGE_ROOT:Ke,PRE_4_0_0_VERSION:Um}});var uc=d((hB,cc)=>{"use strict";var oc=require("minimist");cc.exports=Dm;function Dm(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=_c(process.env),s=_c(oc(process.argv))):(r=process.env,s=oc(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(Dm,"assignCMDENVVariables");function _c(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(_c,"objKeysToLowerCase")});var p=d((TB,fc)=>{"use strict";var kt=require("fs-extra"),Yt=require("path"),lc=require("yaml"),dc=require("properties-reader"),z=f(),Mm=uc(),Pm=require("os"),{PACKAGE_ROOT:Ca}=f(),Oe={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},zs=Yt.join(Ca,"logs"),Lt=process.env.pm_id===void 0,Bm=Yt.join(Ca,"config/yaml/",z.HDB_DEFAULT_CONFIG_FILE),ba=process.env.PROCESS_NAME===void 0?z.PROCESS_DESCRIPTORS.INSTALL:process.env.PROCESS_NAME,Er,st,St,Ne,pa,lr;lr===void 0&&Sc();fc.exports={createLogFile:Hm,notify:qm,fatal:Fm,error:Ia,warn:xm,info:vm,debug:Gm,trace:Tc,setLogLevel:km,log_level:Ne};function Sc(){try{if(lr===void 0){let e=Vm();lr=dc(e),{level:Ne,config_log_path:pa,to_file:st,to_stream:St}=Ym(lr.get("settings_path"))}}catch(e){if(lr=void 0,e.code===z.NODE_ERROR_CODES.ENOENT){let t=Mm(Object.keys(z.CONFIG_PARAM_MAP),!0);for(let i in t){let o=z.CONFIG_PARAM_MAP[i];o&&o.toLowerCase();let _=t[i];if(o===z.CONFIG_PARAMS.LOGGING_LEVEL){Ne=_;continue}if(o===z.CONFIG_PARAMS.LOGGING_STDSTREAMS){St=_;continue}o===z.CONFIG_PARAMS.LOGGING_FILE&&(st=o)}let{default_level:r,default_to_file:s,default_to_stream:n}=$m();st=st===void 0?s:st,st=Ec(st),St=St===void 0?n:St,St=Ec(St),Ne=Ne===void 0?r:Ne,pa=zs;return}throw Ia("Error initializing log settings"),Ia(e),e}}a(Sc,"initLogSettings");function Hm(e,t){if(!Lt){Tc("createLogFile should only be used if the process is not being managed by pm2");return}lr===void 0&&Sc(),ba=t;let r;e===z.PROCESS_LOG_NAMES.INSTALL?r=zs:r=pa,st&&(Er=Yt.join(r,e),kt.ensureFileSync(Er))}a(Hm,"createLogFile");function $t(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": "${ba}", "level": "${e}", "timestamp": "${r}", "message": "${s}"}
3
- `}a($t,"createLogRecord");function hc(e){Er===void 0&&(ba=z.PROCESS_DESCRIPTORS.INSTALL,kt.ensureDirSync(zs),Er=Yt.join(zs,z.PROCESS_LOG_NAMES.INSTALL),kt.ensureFileSync(Er)),kt.appendFileSync(Er,e)}a(hc,"writeToLogFile");function js(e){st&&hc(e),St&&process.stdout.write(e)}a(js,"nonPm2LogStdOut");function La(e){st&&hc(e),St&&process.stderr.write(e)}a(La,"nonPm2LogStdErr");function vm(...e){if(Oe[Ne]<=Oe.info){let t=$t("info",e);if(Lt){js(t);return}process.stdout.write(t)}}a(vm,"info");function Tc(...e){if(Oe[Ne]<=Oe.trace){let t=$t("trace",e);if(Lt){js(t);return}process.stdout.write(t)}}a(Tc,"trace");function Ia(...e){if(Oe[Ne]<=Oe.error){let t=$t("error",e);if(Lt){La(t);return}process.stderr.write(t)}}a(Ia,"error");function Gm(...e){if(Oe[Ne]<=Oe.debug){let t=$t("debug",e);if(Lt){js(t);return}process.stdout.write(t)}}a(Gm,"debug");function qm(...e){if(Oe[Ne]<=Oe.notify){let t=$t("notify",e);if(Lt){js(t);return}process.stdout.write(t)}}a(qm,"notify");function Fm(...e){if(Oe[Ne]<=Oe.fatal){let t=$t("fatal",e);if(Lt){La(t);return}process.stderr.write(t)}}a(Fm,"fatal");function xm(...e){if(Oe[Ne]<=Oe.warn){let t=$t("warn",e);if(Lt){La(t);return}process.stderr.write(t)}}a(xm,"warn");function Vm(){let e;try{e=Pm.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Yt.join(e,z.HDB_HOME_DIR_NAME,z.BOOT_PROPS_FILE_NAME);return kt.existsSync(t)||(t=Yt.join(Ca,"utility/hdb_boot_properties.file")),t}a(Vm,"getPropsFilePath");function km(e){Ne=e}a(km,"setLogLevel");function Ec(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Ec,"autoCastBoolean");function Ym(e){try{if(e.includes("config/settings.js")){let o=dc(e);return{level:o.get(z.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Yt.dirname(o.get(z.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(z.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(z.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=lc.parseDocument(kt.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===z.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(Ym,"getLogConfig");function $m(){try{let e=lc.parseDocument(kt.readFileSync(Bm,"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($m,"getDefaultConfig")});var mc=d((fB,Rc)=>{"use strict";var Km=require("util"),Wm=require("path"),Qm=require("child_process"),Jm=Km.promisify(Qm.execFile),Xm=1e3*1e3*10;Rc.exports={findPs:Zm};async function Zm(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await Jm("ps",["wwxo",`pid,${r}`],{maxBuffer:Xm});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:Wm.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(Zm,"findPs")});var Se=d((RB,Nc)=>{"use strict";var zm="__dbis__",jm="__environment_name__",eA="__dbi_defintion__",tA={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"},rA=["__createdtime__","__updatedtime__"],sA="\uFFFF",Ac={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},nA=Object.values(Ac);Nc.exports={INTERNAL_DBIS_NAME:zm,DBI_DEFINITION_NAME:eA,SEARCH_TYPES:tA,TIMESTAMP_NAMES:rA,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:jm,TRANSACTIONS_DBI_NAMES_ENUM:Ac,TRANSACTIONS_DBIS:nA,OVERFLOW_MARKER:sA}});var He=d((mB,yc)=>{"use strict";var Oc=f(),gc=Se(),pc={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},Ic=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Cc={500:Ic("There was an error processing your request."),400:"Invalid request"},iA=Cc[pc.INTERNAL_SERVER_ERROR],aA={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.`},oA={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},_A={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"},cA={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 ${gc.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${gc.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"},uA={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Oc.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 ${Oc.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"},bc={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"},EA={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."},lA={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`},dA={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"},SA={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},hA={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`},Lc={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.`},wc={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}`},TA={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."},fA={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},RA={...bc,..._A,...aA,...EA,...lA,...dA,...SA,...hA,...uA,...Lc,...wc,...TA,...fA,...oA};yc.exports={CHECK_LOGS_WRAPPER:Ic,HDB_ERROR_MSGS:RA,DEFAULT_ERROR_MSGS:Cc,DEFAULT_ERROR_RESP:iA,HTTP_STATUS_CODES:pc,LMDB_ERRORS_ENUM:cA,AUTHENTICATION_ERROR_MSGS:bc,VALIDATION_ERROR_MSGS:Lc,IPC_ERRORS:wc}});var q=d((AB,Mc)=>{"use strict";var dr=He(),mA=p(),AA=f(),Xr=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Uc),this.http_resp_code=s||dr.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(dr.DEFAULT_ERROR_MSGS[s]?dr.DEFAULT_ERROR_MSGS[s]:dr.DEFAULT_ERROR_MSGS[dr.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&&mA[n](i)}};a(Xr,"HdbError");function Uc(e,t,r,s=AA.LOG_LEVELS.ERROR,n=null,i=!1){if(Dc(e))return e;let o=new Xr(e,t,r,s,n);return i&&delete o.stack,o}a(Uc,"handleHDBError");function Dc(e){return e.__proto__.constructor.name===Xr.name}a(Dc,"isHDBError");Mc.exports={isHDBError:Dc,handleHDBError:Uc,hdb_errors:dr}});var g=d((OB,Qc)=>{"use strict";var wa=require("path"),NA=require("fs-extra"),te=p(),Pc=require("fs-extra"),OA=require("truncate-utf8-bytes"),Zr=require("os"),gA=require("net"),pA=require("recursive-iterator"),ne=f(),qc=mc(),Bc=require("papaparse"),en=require("moment"),{inspect:IA}=require("util"),Hc=require("is-number"),NB=require("lodash"),{hdb_errors:tn}=q(),Fc=require("util").promisify(setTimeout),CA=100,bA=5,LA="",wA=4,vc=255,Gc={true:!0,false:!1,undefined:null,null:null,NaN:NaN};Qc.exports={isEmpty:De,isEmptyOrZeroLength:nt,arrayHasEmptyValues:DA,arrayHasEmptyOrZeroLengthValues:MA,buildFolderPath:PA,isBoolean:xc,errorizeMessage:yA,stripFileExtension:HA,autoCast:vA,autoCastJSONDeep:ya,removeDir:qA,compareVersions:FA,isCompatibleDataVersion:xA,escapeRawValue:kc,unescapeValue:VA,stringifyProps:kA,valueConverter:YA,timeoutPromise:KA,isClusterOperation:QA,getClusterUser:ZA,sendTransactionToSocketCluster:JA,checkGlobalSchemaTable:XA,getHomeDir:Yc,getPropsFilePath:$A,promisifyPapaParse:zA,removeBOM:$c,createEventPromise:jA,checkProcessRunning:eN,checkSchemaTableExist:tN,checkSchemaExists:Kc,checkTableExists:Wc,getStartOfTomorrowInSeconds:rN,getLimitKey:sN,isObject:BA,isNotEmptyAndHasValue:UA,autoCasterIsNumberCheck:Vc,backtickASTSchemaItems:nN,isPortTaken:WA,stopProcess:iN,createForkArgs:aN,autoCastBoolean:oN,async_set_timeout:Fc,getTableHashAttribute:_N,doesSchemaExist:cN,doesTableExist:uN,stringifyObj:EN,ms_to_time:lN,PACKAGE_ROOT:ne.PACKAGE_ROOT};function yA(e){return e instanceof Error?e:new Error(e)}a(yA,"errorizeMessage");function De(e){return e==null}a(De,"isEmpty");function UA(e){return!De(e)&&(e||e===0||e===""||xc(e))}a(UA,"isNotEmptyAndHasValue");function nt(e){return De(e)||e.length===0||e.size===0}a(nt,"isEmptyOrZeroLength");function DA(e){if(De(e))return!0;for(let t=0;t<e.length;t++)if(De(e[t]))return!0;return!1}a(DA,"arrayHasEmptyValues");function MA(e){if(nt(e))return!0;for(let t=0;t<e.length;t++)if(nt(e[t]))return!0;return!1}a(MA,"arrayHasEmptyOrZeroLengthValues");function PA(...e){try{return e.join(wa.sep)}catch{console.error(e)}}a(PA,"buildFolderPath");function xc(e){return De(e)?!1:e===!0||e===!1}a(xc,"isBoolean");function BA(e){return De(e)?!1:typeof e=="object"}a(BA,"isObject");function HA(e){return nt(e)?LA:e.slice(0,-wA)}a(HA,"stripFileExtension");function vA(e){return De(e)||e===""||typeof e!="string"?e:Gc[e]!==void 0?Gc[e]:Vc(e)===!0?Number(e):e}a(vA,"autoCast");function GA(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(GA,"autoCastJSON");function ya(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=ya(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=ya(r);s!==r&&(e[t]=s)}return e}else return GA(e)}a(ya,"autoCastJSONDeep");function Vc(e){if(e.startsWith("0.")&&Hc(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Hc(e))}a(Vc,"autoCasterIsNumberCheck");async function qA(e){if(nt(e))throw new Error(`Directory path: ${e} does not exist`);try{await Pc.emptyDir(e),await Pc.remove(e)}catch(t){throw te.error(`Error removing files in ${e} -- ${t}`),t}}a(qA,"removeDir");function FA(e,t){if(nt(e)){te.info("Invalid current version sent as parameter.");return}if(nt(t)){te.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(FA,"compareVersions");function xA(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(xA,"isCompatibleDataVersion");function kc(e){if(De(e))return e;let t=String(e);return t==="."?ne.UNICODE_PERIOD:t===".."?ne.UNICODE_PERIOD+ne.UNICODE_PERIOD:t.replace(ne.FORWARD_SLASH_REGEX,ne.UNICODE_FORWARD_SLASH)}a(kc,"escapeRawValue");function VA(e){if(De(e))return e;let t=String(e);return t===ne.UNICODE_PERIOD?".":t===ne.UNICODE_PERIOD+ne.UNICODE_PERIOD?"..":String(e).replace(ne.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(VA,"unescapeValue");function kA(e,t){if(De(e))return te.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+Zr.EOL}!nt(s)&&s[0]===";"?r+=" "+s+n+Zr.EOL:nt(s)||(r+=s+"="+n+Zr.EOL)}catch{te.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(kA,"stringifyProps");function YA(e){let t;try{t=typeof e=="object"?JSON.stringify(e):e}catch(n){te.error(n),t=e}let r=String(kc(t)),s=Buffer.byteLength(r)>vc?OA(r,vc)+"/blob":r;return{value:t,value_stripped:r,value_path:s}}a(YA,"valueConverter");function Yc(){let e;try{e=Zr.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Yc,"getHomeDir");function $A(){let e=wa.join(Yc(),ne.HDB_HOME_DIR_NAME,ne.BOOT_PROPS_FILE_NAME);return NA.existsSync(e)||(e=wa.join(__dirname,"../","hdb_boot_properties.file")),e}a($A,"getPropsFilePath");function KA(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(KA,"timeoutPromise");async function WA(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=gA.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(WA,"isPortTaken");function QA(e){try{return ne.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){te.error(`Error checking operation against cluster ops ${t}`)}return!1}a(QA,"isClusterOperation");function JA(e,t,r){if(global.hdb_socket_client!==void 0){te.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]=ne.ORIGINATOR_SET_VALUE),global.hdb_socket_client.publish(e,i)}}a(JA,"sendTransactionToSocketCluster");function XA(e,t){if(!global.hdb_schema[e])return tn.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return tn.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(XA,"checkGlobalSchemaTable");function ZA(e,t){if(De(t)){te.warn("No CLUSTERING_USER defined, clustering disabled");return}if(De(e)||nt(e)){te.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){te.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){te.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(ZA,"getClusterUser");function zA(){Bc.parsePromise=function(e,t){return new Promise(function(r,s){Bc.parse(e,{header:!0,transformHeader:$c,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(zA,"promisifyPapaParse");function $c(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a($c,"removeBOM");function jA(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;te.info(`Got cluster status event response: ${IA(n)}`);try{i.cancel()}catch{te.error("Error trying to cancel timeout.")}s(n)})})}a(jA,"createEventPromise");async function eN(e){let t=!0,r=0;do await Fc(CA*r++),(await qc.findPs(e)).length>0&&(t=!1);while(t&&r<bA);if(t)throw new Error(`process ${e} was not started`)}a(eN,"checkProcessRunning");function tN(e,t){let r=Kc(e);if(r)return r;let s=Wc(e,t);if(s)return s}a(tN,"checkSchemaTableExist");function Kc(e){if(!global.hdb_schema[e])return tn.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Kc,"checkSchemaExists");function Wc(e,t){if(!global.hdb_schema[e][t])return tn.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Wc,"checkTableExists");function rN(){let e=en().utc().add(1,ne.MOMENT_DAYS_TAG).startOf(ne.MOMENT_DAYS_TAG).unix(),t=en().utc().unix();return e-t}a(rN,"getStartOfTomorrowInSeconds");function sN(){return en().utc().format("DD-MM-YYYY")}a(sN,"getLimitKey");function nN(e){try{let t=new pA(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){te.error("Got an error back ticking items."),te.error(t)}}a(nN,"backtickASTSchemaItems");async function iN(e){let t=Zr.userInfo();(await qc.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),te.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(iN,"stopProcess");function aN(e){return[e]}a(aN,"createForkArgs");function oN(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(oN,"autoCastBoolean");function _N(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(_N,"getTableHashAttribute");function cN(e){return global?.hdb_schema?.[e]!==void 0}a(cN,"doesSchemaExist");function uN(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(uN,"doesTableExist");function EN(e){try{return JSON.stringify(e)}catch{return e}}a(EN,"stringifyObj");function lN(e){let t=en.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(lN,"ms_to_time")});var Kt=d((gB,Zc)=>{"use strict";var Xc=g(),Jc=f(),sn=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ua=require("joi"),rn={schema_format:{pattern:sn,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},dN=Ua.alternatives(Ua.string().min(1).max(rn.schema_length.maximum).pattern(sn).messages({"string.pattern.base":"{:#label} "+rn.schema_format.message}),Ua.number()).required();function SN(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>rn.schema_length.maximum?`'${e}' maximum of 250 characters`:sn.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(SN,"checkValidTable");function hN(e,t){return Xc.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(hN,"validateSchemaExists");function TN(e,t){let r=t.state.ancestors[0].schema;return Xc.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(TN,"validateTableExists");function fN(e,t){return e.toLowerCase()===Jc.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${Jc.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(fN,"validateSchemaName");Zc.exports={common_validators:rn,schema_regex:sn,hdb_schema_table:dN,validateSchemaExists:hN,validateTableExists:TN,validateSchemaName:fN,checkValidTable:SN}});var We=d((pB,zc)=>{"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("', '")}'`};zc.exports={validateObject:RN,validateObjectAsync:mN,validateBySchema:AN};function RN(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(RN,"validateObject");async function mN(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(mN,"validateObjectAsync");function AN(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(AN,"validateBySchema")});var Ma=d((IB,eu)=>{var{hdb_schema_table:jc}=Kt(),NN=We(),Da=require("joi"),ON={undefined:"undefined",null:"null"},gN=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||ON[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"),pN=Da.object({schema:jc,table:jc,records:Da.array().items(Da.object().custom(gN)).required()});eu.exports=function(e){return NN.validateBySchema(e,pN)}});var Pa=d((CB,tu)=>{"use strict";var nn=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(nn,"BridgeMethods");tu.exports=nn});var Wt=d((wB,iu)=>{"use strict";var ru=He().LMDB_ERRORS_ENUM,bB=require("lmdb"),IN=Se(),LB=require("buffer").Buffer,CN=require("microtime"),{OVERFLOW_MARKER:su,MAX_SEARCH_KEY_LENGTH:an}=IN,nu=["number","string","symbol","boolean","bigint"];function bN(e){if(!e)throw new Error(ru.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(ru.INVALID_ENVIRONMENT)}a(bN,"validateEnv");function LN(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(LN,"stringifyData");function wN(e){return e instanceof Date?e.valueOf():e}a(wN,"convertKeyValueToWrite");function yN(e){if(e==null)return;if(nu.includes(typeof e))return e.length>an?[e.slice(0,an)+su]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];nu.includes(typeof n)&&(n.length>an?t.push(n.slice(0,an)+su):t.push(n))}}return t}a(yN,"getIndexedValues");function UN(){let e=CN.now().toString(),t=e.length-3;return Number(e.slice(0,t)+"."+e.slice(t))}a(UN,"getMicroTime");iu.exports={validateEnv:bN,stringifyData:LN,convertKeyValueToWrite:wN,getMicroTime:UN,getIndexedValues:yN}});var ou=d((yB,au)=>{"use strict";var on=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(on,"DBIDefinition");au.exports=on});var cu=d((UB,_u)=>{"use strict";var _n=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(_n,"OpenDBIObject");_u.exports=_n});var Eu=d((DB,uu)=>{"use strict";var cn=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(cn,"OpenEnvironmentObject");uu.exports=cn});var du=d((MB,lu)=>{"use strict";var DN={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))},MN="certificate.pem",PN="privateKey.pem",BN="ca.pem";lu.exports={CERTIFICATE_VALUES:DN,CERTIFICATE_PEM_NAME:MN,PRIVATEKEY_PEM_NAME:PN,CA_PEM_NAME:BN}});var Tu=d((PB,hu)=>{"use strict";var HN=require("fs-extra"),U=require("joi"),vN=require("os"),{boolean:ie,string:Tt,number:it,array:Ba}=U.types(),Qe=require("path"),GN=p(),un=g(),ft=du(),qN=We(),ht="keys",FN=ft.CERTIFICATE_PEM_NAME,xN=ft.PRIVATEKEY_PEM_NAME,VN=ft.CA_PEM_NAME,kN=ft.CERTIFICATE_PEM_NAME,YN=ft.PRIVATEKEY_PEM_NAME,$N=ft.CA_PEM_NAME,KN=ft.CERTIFICATE_PEM_NAME,WN=ft.PRIVATEKEY_PEM_NAME,QN=ft.CA_PEM_NAME,JN="log",XN="custom_functions",ZN="Invalid logging.rotation.maxSize unit. Available units are G, M or K",zN="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",jN="rootPath config parameter is undefined",eO="clustering.enabled config parameter is undefined",wt=it.min(0).required(),En=Ba.items({host:Tt.required(),port:wt}).empty(null),pe;hu.exports={configValidator:tO,routesValidator:aO,route_constraints:En};function tO(e){if(pe=e.rootPath,un.isEmpty(pe))throw jN;let t=ie.required(),r=U.valid("production","development").required(),s=it.min(1).max(1e3).empty(null).default(iO),n=Tt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Su),i=U.custom(sO).messages({"any.custom":"{:#label} {:#error}"}).empty(null).default(Su),o=Tt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),_=e.clustering?.enabled;if(un.isEmpty(_))throw eO;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:En}).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:En}).required()}).required(),nodeName:o,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ie.required()}),user:U.string().required()}).required():c=U.object({enabled:t,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ie.required()})}).required(),U.object({clustering:c,customFunctions:U.object({enabled:t,network:U.object({cors:ie.required(),corsAccessList:Ba.required(),headersTimeout:it.min(1).required(),https:ie.required(),keepAliveTimeout:it.min(1).required(),port:wt,timeout:it.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:ie.required(),level:U.valid("notify","fatal","error","warn","info","debug","trace"),rotation:U.object({compress:ie.required(),dateFormat:Tt.required(),maxSize:Tt.custom(nO).required(),retain:it.min(0).required(),rotate:ie.required(),rotateInterval:Tt.required(),rotateModule:ie.required(),timezone:Tt.required(),workerInterval:it.min(1).required()}).required(),root:n,stdStreams:ie.required(),auditLog:ie.required()}).required(),operationsApi:U.object({authentication:U.object({operationTokenTimeout:U.required(),refreshTokenTimeout:U.required()}).required(),foreground:ie.required(),network:U.object({cors:ie.required(),corsAccessList:Ba.required(),headersTimeout:it.min(1).required(),https:ie.required(),keepAliveTimeout:it.min(1).required(),port:wt,timeout:it.min(1).required()}).required(),nodeEnv:r,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:Tt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:U.object({threads:s}).required(),storage:U.object({writeAsync:ie.required(),overlappingSync:ie.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(tO,"configValidator");function rO(e){return HN.existsSync(e)?null:`Specified path ${e} does not exist.`}a(rO,"doesPathExist");function sO(e,t){U.assert(e,Tt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+\.pem+$/).messages({"string.pattern.base":"must be a valid directory path and specify a .pem file"}));let r=rO(e);if(r)return t.message(r)}a(sO,"validatePemFile");function nO(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(ZN);let s=e.slice(0,-1);if(isNaN(parseInt(s)))return t.message(zN)}a(nO,"validateRotationMaxSize");function iO(e,t){let r=t.state.path.join("."),s=vN.cpus().length,n=s-1;return n<=2&&(n=2),GN.info(`Detected ${s} cores on this machine, defaulting ${r} to ${n}`),n}a(iO,"setDefaultThreads");function Su(e,t){if(!un.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(un.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,XN);case"logging.root":return Qe.join(pe,JN);case"operationsApi.tls.certificate":return Qe.join(pe,ht,FN);case"operationsApi.tls.privateKey":return Qe.join(pe,ht,xN);case"operationsApi.tls.certificateAuthority":return Qe.join(pe,ht,VN);case"customFunctions.tls.certificate":return Qe.join(pe,ht,kN);case"customFunctions.tls.privateKey":return Qe.join(pe,ht,YN);case"customFunctions.tls.certificateAuthority":return Qe.join(pe,ht,$N);case"clustering.tls.certificate":return Qe.join(pe,ht,KN);case"clustering.tls.privateKey":return Qe.join(pe,ht,WN);case"clustering.tls.certificateAuthority":return Qe.join(pe,ht,QN);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Su,"setDefaultRoot");function aO(e){let t=U.object({routes:En});return qN.validateBySchema({routes:e},t)}a(aO,"routesValidator")});var zr=d((BB,gu)=>{"use strict";var Y=f(),ve=g(),he=p(),{configValidator:oO,routesValidator:fu}=Tu(),Je=require("fs-extra"),_O=require("yaml"),Sr=require("path"),cO=require("is-number"),Sn=require("properties-reader"),uO=require("lodash"),{handleHDBError:EO}=q(),{HTTP_STATUS_CODES:lO,HDB_ERROR_MSGS:ln}=He(),{PACKAGE_ROOT:dO}=f(),SO="Unable to get config value because config is uninitialized",hO="Config successfully initialized",TO="Error backing up config file",fO="Empty parameter sent to getConfigValue",Ru=Sr.join(dO,"config","yaml",Y.HDB_DEFAULT_CONFIG_FILE),RO="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",dn,Ie;gu.exports={createConfigFile:mO,getDefaultConfig:AO,getConfigValue:mu,initConfig:Au,flattenConfig:Qt,updateConfigValue:Nu,updateConfigObject:NO,getConfiguration:OO,setConfiguration:gO,readConfigFile:Ga,getClusteringRoutes:pO,initOldConfig:Ou,getConfigFromFile:IO};function mO(e){let t=hr(Ru);dn=Qt(t.toJSON());for(let i in e){let o=Y.CONFIG_PARAM_MAP[i.toLowerCase()];if(o!==void 0){let _=o.split("_"),c=Ha(o,e[i]);try{t.setIn([..._],c)}catch(u){he.error(u)}}}va(t);let r=t.toJSON();Ie=Qt(r);let s=t.getIn(["rootPath"]),n=Sr.join(s,Y.HDB_CONFIG_FILE);Je.createFileSync(n),Je.writeFileSync(n,String(t)),he.trace(`Config file written to ${n}`)}a(mO,"createConfigFile");function AO(e){if(dn===void 0){let r=hr(Ru);dn=Qt(r.toJSON())}let t=Y.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return dn[t.toLowerCase()]}a(AO,"getDefaultConfig");function mu(e){if(ve.isEmpty(e)){he.error(fO);return}if(Ie===void 0){he.trace(SO);return}let t=Y.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return Ie[t.toLowerCase()]}a(mu,"getConfigValue");function Au(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 he.error(o),new Error(`HarperDB properties file at path ${t} does not exist`)}let s=Sn(t).get(Y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),n;if(s.includes("config/settings.js"))try{Ou(s);return}catch(o){if(o.code!==Y.NODE_ERROR_CODES.ENOENT)throw o}try{n=hr(s)}catch(o){if(o.code===Y.NODE_ERROR_CODES.ENOENT){he.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 he.error(o),new Error(`Error reading HarperDB config file at ${s}`)}va(n);let i=n.toJSON();Ie=Qt(i),he.trace(hO)}}a(Au,"initConfig");function va(e){let t=e.toJSON(),r=oO(t);if(r.error)throw ln.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(va,"validateConfig");function NO(e,t){Ie===void 0&&(Ie={});let r=Y.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){he.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ie[r.toLowerCase()]=t}a(NO,"updateConfigObject");function Nu(e,t,r=void 0,s=!1,n=!1){Ie===void 0&&Au();let i=mu(Y.CONFIG_PARAM_MAP.hdb_root),o=Sr.join(i,Y.HDB_CONFIG_FILE),_=hr(o);if(r===void 0){let E=Y.CONFIG_PARAM_MAP[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let l=E.split("_"),h=Ha(E,t);_.setIn([...l],h)}else for(let E in r){let l=Y.CONFIG_PARAM_MAP[E.toLowerCase()];if(l!==void 0){let h=l.split("_"),S=Ha(l,r[E]);try{_.setIn([...h],S)}catch(A){he.error(A)}}}va(_);let c=_.getIn(["rootPath"]),u=Sr.join(c,Y.HDB_CONFIG_FILE);if(s===!0)try{let E=Sr.join(c,"backup",`${Y.HDB_CONFIG_FILE}.bak`);Je.copySync(o,E),he.trace(`Config file: ${o} backed up to: ${E}`)}catch(E){he.error(TO),he.error(E)}Je.writeFileSync(u,String(_)),n&&(Ie=Qt(_.toJSON())),he.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Nu,"updateConfigValue");function Qt(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=Qt(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(Qt,"flattenConfig");function Ha(e,t){if(e===Y.CONFIG_PARAMS.CLUSTERING_NODENAME||e===Y.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(cO(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(Ha,"castConfigValue");function OO(){let e=ve.getPropsFilePath(),r=Sn(e).get(Y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return hr(r).toJSON()}a(OO,"getConfiguration");async function gO(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Nu(void 0,void 0,n,!0),RO}catch(i){throw typeof i=="string"||i instanceof String?EO(i,i,lO.BAD_REQUEST,void 0,void 0,!0):i}}a(gO,"setConfiguration");function Ga(){let e=ve.getPropsFilePath();try{Je.accessSync(e,Je.constants.F_OK|Je.constants.R_OK)}catch(n){throw he.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=Sn(e).get(Y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return hr(r).toJSON()}a(Ga,"readConfigFile");function hr(e){return _O.parseDocument(Je.readFileSync(e,"utf8"),{simpleKeys:!0})}a(hr,"parseYamlDoc");function pO(){let e=Ga(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=ve.isEmptyOrZeroLength(t)?[]:t;let r=fu(t);if(r)throw ln.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=ve.isEmptyOrZeroLength(s)?[]:s;let n=fu(s);if(n)throw ln.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 ln.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(pO,"getClusteringRoutes");function Ou(e){let t=Sn(e);Ie={};for(let r in Y.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(ve.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Y.CONFIG_PARAM_MAP[r].toLowerCase();n===Y.CONFIG_PARAMS.LOGGING_ROOT?Ie[n]=Sr.dirname(s):Ie[n]=s}return Ie}a(Ou,"initOldConfig");function IO(e){let t=Ga();return uO.get(t,e.replaceAll("_","."))}a(IO,"getConfigFromFile")});var Q=d((HB,Iu)=>{"use strict";var qa=require("fs-extra"),at=require("path"),CO=require("os"),bO=require("properties-reader"),jr=p(),Tr=g(),I=f(),hn=zr(),LO="Error initializing environment manager",Tn="BOOT_PROPS_FILE_PATH",pu=!1,wO={[I.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[I.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Rt={};Iu.exports={BOOT_PROPS_FILE_PATH:Tn,getHdbBasePath:yO,setHdbBasePath:UO,get:DO,initSync:PO,setProperty:P,initTestEnvironment:BO};function yO(){return Rt[I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(yO,"getHdbBasePath");function UO(e){Rt[I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(UO,"setHdbBasePath");function DO(e){let t=hn.getConfigValue(e);return t===void 0?Rt[e]:t}a(DO,"get");function P(e,t){wO[e]&&(Rt[e]=t),hn.updateConfigObject(e,t)}a(P,"setProperty");function MO(){let e;try{e=Tr.getPropsFilePath(),qa.accessSync(e,qa.constants.F_OK|qa.constants.R_OK),pu=!0;let t=bO(e);return Rt[I.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(I.HDB_SETTINGS_NAMES.INSTALL_USER),Rt[I.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(I.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Rt[Tn]=e,!0}catch{return jr.trace(`Environment manager found no properties file at ${e}`),!1}}a(MO,"doesPropFileExist");function PO(e=!1){try{(pu||MO())&&(hn.initConfig(e),Rt[I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=hn.getConfigValue(I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){jr.error(LO),jr.error(t),console.error(t),process.exit(1)}}a(PO,"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=at.join(__dirname,"../../","unitTests");Rt[Tn]=at.join(c,"hdb_boot_properties.file"),P(I.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,at.join(c,"settings.test")),P(I.HDB_SETTINGS_NAMES.INSTALL_USER,CO.userInfo().username),P(I.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,at.join(c,"envDir","utility","keys","privateKey.pem")),P(I.HDB_SETTINGS_NAMES.CERT_KEY,at.join(c,"envDir","utility","keys","certificate.pem")),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,at.join(c,"envDir","utility","keys","privateKey.pem")),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,at.join(c,"envDir","utility","keys","certificate.pem")),P(I.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),P(I.HDB_SETTINGS_NAMES.LOG_PATH_KEY,at.join(c,"envDir","log")),P(I.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),P(I.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),P(I.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),P(I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,at.join(c,"envDir")),P(I.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Tr.isEmpty(n)?!0:n),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Tr.isEmpty(n)?!0:n),P(I.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),P(I.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Tr.isEmpty(i)?!1:i),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Tr.isEmpty(i)?!1:i),P(I.HDB_SETTINGS_NAMES.IPC_SERVER_PORT,9383),P(I.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),P(I.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),P(I.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),P(I.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),P(I.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,at.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),P(I.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Tr.isEmpty(_)?!1:_),o&&(P("CORS_ACCESSLIST",o),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(P(I.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(P(I.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(P(I.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Tn}. Please check your boot props and settings files`;jr.fatal(r),jr.error(t)}}a(BO,"initTestEnvironment")});var F=d((GB,vu)=>{"use strict";var Fa=require("lmdb"),Ge=require("fs-extra"),Xe=require("path"),Rn=Wt(),Cu=p(),ae=He().LMDB_ERRORS_ENUM,mn=ou(),xa=cu(),bu=Eu(),yt=Se(),vB=f(),es=Q();es.initSync();var Lu=es.get("STORAGE_WRITEASYNC")===!0||es.get("STORAGE_WRITEASYNC")==="true"||es.get("STORAGE_WRITEASYNC")==="TRUE",wu=es.get("STORAGE_OVERLAPPINGSYNC"),yu=1024*1024*1024,Uu=1e4,Du=1e3,Ze=yt.INTERNAL_DBIS_NAME,Mu=yt.DBI_DEFINITION_NAME,HO="data.mdb",vO="lock.mdb",ts=".mdb",GO="-lock",fn=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 Fa.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(fn,"TransactionCursor");function Va(e,t){if(e===void 0)throw new Error(ae.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(ae.ENV_NAME_REQUIRED)}a(Va,"pathEnvNameValidation");async function ka(e,t,r=!0){try{await Ge.access(e)}catch(s){throw s.code==="ENOENT"?new Error(ae.INVALID_BASE_PATH):s}try{let s=Xe.join(e,t+ts);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,HO),Ge.constants.R_OK|Ge.constants.F_OK),Xe.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(ae.INVALID_ENVIRONMENT)}else throw new Error(ae.INVALID_ENVIRONMENT);throw s}}a(ka,"validateEnvironmentPath");function An(e,t){if(Rn.validateEnv(e),t===void 0)throw new Error(ae.DBI_NAME_REQUIRED)}a(An,"validateEnvDBIName");async function qO(e,t,r=!1,s=!1){Va(e,t),t=t.toString();try{return await ka(e,t,s),Ya(e,t,r)}catch(n){if(n.message===ae.INVALID_ENVIRONMENT){let i=Xe.join(e,t);await Ge.mkdirp(s?i:e);let o=new bu(s?i:i+ts,yu,Uu,Du,!1,Lu,wu),_=Fa.open(o);_.dbis=Object.create(null);let c=new xa(!1);_.openDB(Ze,c),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=$a(e,t,r);return _[yt.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=_,_}throw n}}a(qO,"createEnvironment");async function FO(e,t,r,s=!0){let n=await Ya(e,t);if(r===void 0)throw new Error(ae.DESTINATION_PATH_REQUIRED);try{await Ge.access(Xe.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(ae.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(FO,"copyEnvironment");async function Ya(e,t,r=!1){Va(e,t),t=t.toString();let s=$a(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+ts),o=n!=i,_=new bu(n,yu,Uu,Du,o,Lu,wu),c=Fa.open(_);c.dbis=Object.create(null);let u=Bu(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(Ya,"openEnvironment");async function xO(e,t,r=!1){Va(e,t),t=t.toString();let s=Xe.join(e,t+ts),n=await ka(e,t);if(global.lmdb_map!==void 0){let i=$a(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Pu(o),delete global.lmdb_map[i]}}await Ge.remove(n),await Ge.remove(n===s?n+GO:Xe.join(Xe.dirname(n),vO))}a(xO,"deleteEnvironment");async function Pu(e){Rn.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(Pu,"closeEnvironment");function $a(e,t,r=!1){let n=`${Xe.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a($a,"getCachedEnvironmentName");function VO(e){Rn.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 mn,n)}catch{Cu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(VO,"listDBIDefinitions");function Bu(e){Rn.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(Bu,"listDBIs");function kO(e,t){let s=qe(e,Ze).getEntry(t),n=new mn;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{Cu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(kO,"getDBIDefinition");function Hu(e,t,r,s=!1){if(An(e,t),t=t.toString(),t===Ze)throw new Error(ae.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return qe(e,t)}catch(n){if(n.message===ae.DBI_DOES_NOT_EXIST){let i=new xa(r,s===!0),o=e.openDB(t,i),_=new mn(r===!0,s);return o[Mu]=_,qe(e,Ze).putSync(t,_),e.dbis[t]=o,o}throw n}}a(Hu,"createDBI");function qe(e,t){if(An(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Ze?r=kO(e,t):r=new mn,r===void 0)throw new Error(ae.DBI_DOES_NOT_EXIST);let s;try{let n=new xa(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(ae.DBI_DOES_NOT_EXIST):n}return s[Mu]=r,e.dbis[t]=s,s}a(qe,"openDBI");function YO(e,t){An(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(YO,"statDBI");async function $O(e,t){try{let r=Xe.join(e,t+ts);return(await Ge.stat(r)).size}catch{throw new Error(ae.INVALID_ENVIRONMENT)}}a($O,"environmentDataSize");function KO(e,t){if(An(e,t),t=t.toString(),t===Ze)throw new Error(ae.CANNOT_DROP_INTERNAL_DBIS_NAME);qe(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],qe(e,Ze).removeSync(t)}a(KO,"dropDBI");function WO(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===ae.DBI_DOES_NOT_EXIST)Hu(e,n,n!==t,n===t);else throw i}}}a(WO,"initializeDBIs");vu.exports={openDBI:qe,openEnvironment:Ya,createEnvironment:qO,listDBIs:Bu,listDBIDefinitions:VO,createDBI:Hu,dropDBI:KO,statDBI:YO,deleteEnvironment:xO,initializeDBIs:WO,TransactionCursor:fn,environmentDataSize:$O,copyEnvironment:FO,closeEnvironment:Pu}});var qu=d((qB,Gu)=>{"use strict";var Nn=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(Nn,"InsertRecordsResponseObject");Gu.exports=Nn});var xu=d((FB,Fu)=>{"use strict";var On=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(On,"UpdateRecordsResponseObject");Fu.exports=On});var ku=d((xB,Vu)=>{"use strict";var gn=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(gn,"UpsertRecordsResponseObject");Vu.exports=gn});var fr=d(($B,$u)=>{"use strict";var QO=F(),JO=qu(),XO=xu(),ZO=ku(),ss=Wt(),rs=He().LMDB_ERRORS_ENUM,zO=Se(),Ut=f(),jO=g(),eg=require("uuid"),VB=require("lmdb"),{handleHDBError:tg,hdb_errors:rg}=q(),{OVERFLOW_MARKER:kB,MAX_SEARCH_KEY_LENGTH:YB}=zO,Ka=Ut.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Jt=Ut.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function sg(e,t,r,s,n=!0){Xa(e,t,r,s),Wa(e,t,r);let i=new JO,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c];Yu(u,!0,n);let E=ng(e,t,r,u),l=u[t];o.push(E),_.push(l)}return Qa(o,_,s,i)}a(sg,"insertRecords");function ng(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=ss.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[Jt])})}a(ng,"insertRecord");function ig(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(ig,"removeSkippedRecords");function Yu(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[Jt]))&&(e[Jt]=s),t===!0?(r===!0||!Number.isInteger(e[Ka]))&&(e[Ka]=s):delete e[Ka]}a(Yu,"setTimestamps");function Wa(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),QO.initializeDBIs(e,t,r)}a(Wa,"initializeTransaction");async function ag(e,t,r,s,n=!0){Xa(e,t,r,s),Wa(e,t,r);let i=new XO,o=[],_=[],c=[];for(let u=0;u<s.length;u++){let E=s[u],l=E[t],h;try{h=Ja(e,t,E,l,i,!0,n)}catch{i.skipped_hashes.push(l),o.push(u);continue}_.push(h),c.push(l)}return Qa(_,c,s,i,o)}a(ag,"updateRecords");async function og(e,t,r,s,n=!0){try{Xa(e,t,r,s)}catch(c){throw tg(c,c.message,rg.HTTP_STATUS_CODES.BAD_REQUEST)}Wa(e,t,r);let i=new ZO,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c],E;jO.isEmpty(u[t])?(E=eg.v4(),u[t]=E):E=u[t];let l=Ja(e,t,u,E,i,!1,n);o.push(l),_.push(E)}return Qa(o,_,s,i)}a(og,"upsertRecords");async function Qa(e,t,r,s,n=[]){let i=await Promise.all(e);for(let o=0,_=i.length;o<_;o++)i[o]===!0?s.written_hashes.push(t[o]):(s.skipped_hashes.push(t[o]),n.push(o));return s.txn_time=ss.getMicroTime(),ig(r,n),s}a(Qa,"finalizeWrite");function Ja(e,t,r,s,n,i=!1,o=!0){let _=e.dbis[t],c=_.getEntry(s),u=c?.value,E=u;if(!u){if(i)return!1;u={}}if(Yu(r,!E,o),Number.isInteger(r[Jt])&&u[Jt]>r[Jt])return!1;E&&n.original_records.push(u);let l,h=a(()=>{for(let A in r){if(!r.hasOwnProperty(A)||A===t)continue;let N=r[A],b=e.dbis[A];if(b===void 0)continue;let Ae=u[A];if(typeof N=="function"){let W=N([[u]]);Array.isArray(W)&&(N=W[0][Ut.FUNC_VAL],r[A]=N)}if(N===Ae)continue;let v=ss.getIndexedValues(Ae);if(v)for(let W=0,$e=v.length;W<$e;W++)b.remove(v[W],s);if(v=ss.getIndexedValues(N),v)for(let W=0,$e=v.length;W<$e;W++)b.put(v[W],s)}let S=Object.assign({},u,r);_.put(s,S,S[Jt])},"do_put");return c?l=_.ifVersion(s,c.version,h):l=_.ifNoExists(s,h),l.then(S=>S?!0:Ja(e,t,r,s,n,i,o))}a(Ja,"updateUpsertRecord");function _g(e,t,r){if(ss.validateEnv(e),t===void 0)throw new Error(rs.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(rs.WRITE_ATTRIBUTES_REQUIRED):new Error(rs.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(_g,"validateBasic");function Xa(e,t,r,s){if(_g(e,t,r),!Array.isArray(s))throw s===void 0?new Error(rs.RECORDS_REQUIRED):new Error(rs.RECORDS_MUST_BE_ARRAY)}a(Xa,"validateWrite");$u.exports={insertRecords:sg,updateRecords:ag,upsertRecords:og}});var k=d((KB,Wu)=>{"use strict";var Za=f(),Rr=Q(),za=require("path");Rr.initSync();var pn,In,Cn;function Ku(){if(pn!==void 0)return pn;if(Rr.getHdbBasePath()!==void 0)return pn=za.join(Rr.getHdbBasePath(),Za.SCHEMA_DIR_NAME),pn}a(Ku,"getBaseSchemaPath");function cg(){if(In!==void 0)return In;if(Rr.getHdbBasePath()!==void 0)return In=za.join(Ku(),Za.SYSTEM_SCHEMA_NAME),In}a(cg,"getSystemSchemaPath");function ug(){if(Cn!==void 0)return Cn;if(Rr.getHdbBasePath()!==void 0)return Cn=za.join(Rr.getHdbBasePath(),Za.TRANSACTIONS_DIR_NAME),Cn}a(ug,"getTransactionAuditStorePath");Wu.exports={getBaseSchemaPath:Ku,getSystemSchemaPath:cg,getTransactionAuditStorePath:ug}});var Xt=d((WB,Eg)=>{Eg.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 bn=d((QB,Qu)=>{var{common_validators:Dt}=Kt(),ns=We(),ze="is required",G={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 is(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(is,"makeAttributesStrings");function lg(e){return e=is(e),G.schema.presence={message:ze},G.table.presence=!1,G.attribute.presence=!1,G.hash_attribute.presence=!1,ns.validateObject(e,G)}a(lg,"schema_object");function dg(e){return e=is(e),G.schema.presence={message:ze},G.table.presence={message:ze},G.attribute.presence=!1,G.hash_attribute.presence=!1,ns.validateObject(e,G)}a(dg,"table_object");function Sg(e){return e=is(e),G.schema.presence={message:ze},G.table.presence={message:ze},G.attribute.presence=!1,G.hash_attribute.presence={message:ze},ns.validateObject(e,G)}a(Sg,"create_table_object");function hg(e){return e=is(e),G.schema.presence={message:ze},G.table.presence={message:ze},G.attribute.presence={message:ze},G.hash_attribute.presence=!1,ns.validateObject(e,G)}a(hg,"attribute_object");function Tg(e){return e=is(e),G.schema.presence={message:ze},G.table.presence={message:ze},G.attribute.presence=!1,G.hash_attribute.presence=!1,ns.validateObject(e,G)}a(Tg,"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");Qu.exports={schema_object:lg,create_table_object:Sg,table_object:dg,attribute_object:hg,describe_table:Tg,validateTableResidence:fg}});var Xu=d((JB,Ju)=>{"use strict";var Rg=require("uuid"),Ln=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Rg.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(Ln,"CreateAttributeObject");Ju.exports=Ln});var yn=d((XB,Zu)=>{"use strict";var mg=Xu(),wn=class extends mg{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(wn,"LMDBCreateAttributeObject");Zu.exports=wn});var ju=d((ZB,zu)=>{"use strict";zu.exports=Ng;var Ag="inserted";function Ng(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Ag?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Ng,"returnObject")});var Un=d((zB,tE)=>{"use strict";var Og=f(),ja=F(),gg=fr(),{getSystemSchemaPath:pg,getBaseSchemaPath:Ig}=k(),Cg=require("path"),bg=Xt(),Lg=bn(),wg=yn(),yg=ju(),{handleHDBError:Ug,hdb_errors:Dg}=q(),Mg=g(),eo=bg.hdb_attribute,eE=[];for(let e=0;e<eo.attributes.length;e++)eE.push(eo.attributes[e].attribute);var Pg="inserted";tE.exports=Bg;async function Bg(e){let t=Lg.attribute_object(e);if(t)throw Ug(new Error,t.message,Dg.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Mg.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 wg(e.schema,e.table,e.attribute,e.id);try{let n=await ja.openEnvironment(Cg.join(Ig(),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}`);ja.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await ja.openEnvironment(pg(),Og.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:o,skipped_hashes:_}=await gg.insertRecords(i,eo.hash_attribute,eE,[s]);return yg(Pg,o,{records:[s]},_)}catch(n){throw n}}a(Bg,"lmdbCreateAttribute")});var Dn=d((eH,sE)=>{"use strict";var mt=g(),rE=p(),jB=Ma();sE.exports=Hg;function Hg(e){if(mt.isEmpty(e))throw new Error("invalid update parameters defined.");if(mt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(mt.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(mt.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&&mt.isEmptyOrZeroLength(o[r]))throw rE.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(!mt.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw rE.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`);!mt.isEmpty(o[r])&&o[r]!==""&&s.has(mt.autoCast(o[r]))&&(o.skip=!0),s.add(mt.autoCast(o[r]));for(let _ in o)n[_]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(Hg,"insertUpdateValidate")});var Pn=d((tH,nE)=>{"use strict";var vg=f().OPERATIONS_ENUM,Mn=class{constructor(t,r,s,n,i=void 0){this.operation=vg.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(Mn,"InsertObject");nE.exports=Mn});var Hn=d((sH,iE)=>{"use strict";var rH=Pn(),Bn=f(),ro=g(),to=p(),Gg=require("uuid"),{handleHDBError:as,hdb_errors:qg}=q(),{HDB_ERROR_MSGS:os,HTTP_STATUS_CODES:_s}=qg;iE.exports=Fg;function Fg(e,t,r){for(let n=0;n<t.length;n++)xg(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Vg(i,r,e.operation)}}a(Fg,"processRows");function xg(e){if(Buffer.byteLength(String(e))>Bn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw as(new Error,os.ATTR_NAME_LENGTH_ERR(e),_s.BAD_REQUEST,void 0,void 0,!0);if(ro.isEmptyOrZeroLength(e)||ro.isEmpty(e.trim()))throw as(new Error,os.ATTR_NAME_NULLISH_ERR,_s.BAD_REQUEST,void 0,void 0,!0)}a(xg,"validateAttribute");function Vg(e,t,r){if(!e.hasOwnProperty(t)||ro.isEmptyOrZeroLength(e[t])){if(r===Bn.OPERATIONS_ENUM.INSERT||r===Bn.OPERATIONS_ENUM.UPSERT){e[t]=Gg.v4();return}throw to.error("Update transaction aborted due to record with no hash value:",e),as(new Error,os.RECORD_MISSING_HASH_ERR,_s.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Bn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw to.error(e),as(new Error,os.HASH_VAL_LENGTH_ERR,_s.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw to.error(e),as(new Error,os.INVALID_FORWARD_SLASH_IN_HASH_ERR,_s.BAD_REQUEST,void 0,void 0,!0)}a(Vg,"validateHash")});var oE=d((nH,aE)=>{"use strict";var vn=class{constructor(t,r){this.type=t,this.message=r}};a(vn,"IPCEventObject");aE.exports=vn});var mr=d((iH,_E)=>{"use strict";var kg=p(),so=g(),Yg=f(),{IPC_ERRORS:cs}=He();_E.exports={sendIpcEvent:$g,validateEvent:Kg,SchemaEventMsg:Wg,UserEventMsg:Qg};function $g(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):kg.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}a($g,"sendIpcEvent");function Kg(e){if(typeof e!="object")return cs.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||so.isEmpty(e.type))return cs.MISSING_TYPE;if(!e.hasOwnProperty("message")||so.isEmpty(e.message))return cs.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||so.isEmpty(e.message.originator))return cs.MISSING_ORIGIN;if(Yg.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return cs.INVALID_EVENT(e.type)}a(Kg,"validateEvent");function Wg(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(Wg,"SchemaEventMsg");function Qg(e){this.originator=e}a(Qg,"UserEventMsg")});var us=d((oH,lE)=>{"use strict";var cE=f(),aH=g(),Gn=p(),uE=oE(),{sendIpcEvent:EE}=mr();function Jg(e){try{Gn.trace("signalSchemaChange called with message:",e);let t=new uE(cE.IPC_EVENT_TYPES.SCHEMA,e);EE(t)}catch(t){Gn.error(t)}}a(Jg,"signalSchemaChange");function Xg(e){try{Gn.trace("signalUserChange called with message:",e);let t=new uE(cE.IPC_EVENT_TYPES.USER,e);EE(t)}catch(t){Gn.error(t)}}a(Xg,"signalUserChange");lE.exports={signalSchemaChange:Jg,signalUserChange:Xg}});var qn=d((_H,SE)=>{"use strict";var dE=g(),Zg=f(),zg=p(),jg=Un(),ep=yn(),tp=us(),{SchemaEventMsg:rp}=mr(),sp="already exists in";SE.exports=np;async function np(e,t,r){try{if(dE.isEmptyOrZeroLength(r))return r;let s=[];dE.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 ip(e,t.schema,t.name,i)})),n}catch(s){throw s}}a(np,"lmdbCheckForNewAttributes");async function ip(e,t,r,s){let n=new ep(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await ap(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(sp))zg.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(ip,"createNewAttribute");async function ap(e){let t;try{return t=await jg(e),tp.signalSchemaChange(new rp(process.pid,Zg.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}a(ap,"createAttribute")});var Ar=d((cH,hE)=>{"use strict";var Fn=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(Fn,"LMDBTransactionObject");hE.exports=Fn});var fE=d((uH,TE)=>{"use strict";var op=Ar(),_p=f().OPERATIONS_ENUM,xn=class extends op{constructor(t,r,s,n,i=void 0){super(_p.INSERT,r,s,n,i),this.records=t}};a(xn,"LMDBInsertTransactionObject");TE.exports=xn});var mE=d((EH,RE)=>{"use strict";var cp=Ar(),up=f().OPERATIONS_ENUM,Vn=class extends cp{constructor(t,r,s,n,i,o=void 0){super(up.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(Vn,"LMDBUpdateTransactionObject");RE.exports=Vn});var NE=d((lH,AE)=>{"use strict";var Ep=Ar(),lp=f().OPERATIONS_ENUM,kn=class extends Ep{constructor(t,r,s,n,i,o=void 0){super(lp.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(kn,"LMDBUpsertTransactionObject");AE.exports=kn});var gE=d((dH,OE)=>{"use strict";var dp=Ar(),Sp=f().OPERATIONS_ENUM,Yn=class extends dp{constructor(t,r,s,n,i=void 0){super(Sp.DELETE,s,n,t,i),this.original_records=r}};a(Yn,"LMDBDeleteTransactionObject");OE.exports=Yn});var Es=d((SH,bE)=>{"use strict";var hp=require("path"),pE=F(),Tp=fE(),fp=mE(),Rp=NE(),mp=gE(),Nr=Se(),IE=g(),{CONFIG_PARAMS:Ap}=f(),CE=Q();CE.initSync();var $n=f().OPERATIONS_ENUM,{getTransactionAuditStorePath:Np}=k();bE.exports=Op;async function Op(e,t){if(CE.get(Ap.LOGGING_AUDITLOG)===!1)return;let r=hp.join(Np(),e.schema.toString()),s=await pE.openEnvironment(r,e.table,!0),n=gp(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){pE.initializeDBIs(s,Nr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Nr.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[Nr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Nr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),IE.isEmpty(n.user_name)||s.dbis[Nr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Nr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}catch(i){throw i}}}a(Op,"writeTransaction");function gp(e,t){let r=IE.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===$n.INSERT)return new Tp(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===$n.UPDATE)return new fp(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===$n.UPSERT)return new Rp(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===$n.DELETE)return new mp(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(gp,"createTransactionObject")});var no=d((TH,LE)=>{"use strict";var pp=Dn(),hH=Pn(),Or=f(),Ip=Hn(),Cp=fr().insertRecords,bp=F(),Lp=require("path"),wp=p(),yp=qn(),{getBaseSchemaPath:Up}=k(),Dp=Es();LE.exports=Mp;async function Mp(e){try{let{schema_table:t,attributes:r}=pp(e);Ip(e,r,t.hash_attribute),e.schema!==Or.SYSTEM_SCHEMA_NAME&&(r.includes(Or.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Or.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Or.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Or.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await yp(e.hdb_auth_header,t,r),n=Lp.join(Up(),e.schema.toString()),i=await bp.openEnvironment(n,e.table),o=await Cp(i,t.hash_attribute,r,e.records,e[Or.CLUSTERING_FLAG]!==!0);try{await Dp(e,o)}catch(_){wp.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(Mp,"lmdbCreateRecords")});var UE=d((fH,yE)=>{"use strict";var wE=f(),Pp=no(),Bp=Pn(),Hp=require("fs-extra"),vp=require("path"),{getBaseSchemaPath:Gp}=k();yE.exports=qp;async function qp(e){let t=[{name:e.schema,createddate:Date.now()}],r=new Bp(wE.SYSTEM_SCHEMA_NAME,wE.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Pp(r),await Hp.mkdirp(vp.join(Gp(),e.schema.toString()))}a(qp,"lmdbCreateSchema")});var ME=d((RH,DE)=>{"use strict";var Kn=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(Kn,"DeleteRecordsResponseObject");DE.exports=Kn});var oo=d((OH,HE)=>{"use strict";var PE=F(),io=Wt(),ao=He().LMDB_ERRORS_ENUM,Fp=Se(),BE=p(),mH=g(),xp=require("lmdb"),Vp=ME(),{OVERFLOW_MARKER:AH,MAX_SEARCH_KEY_LENGTH:NH}=Fp;async function kp(e,t,r){if(io.validateEnv(e),t===void 0)throw new Error(ao.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ao.IDS_REQUIRED):new Error(ao.IDS_MUST_BE_ARRAY);try{let s=PE.listDBIs(e);PE.initializeDBIs(e,t,s);let n=new Vp,i,o=[],_=[];for(let l=0,h=r.length;l<h;l++)try{i=r[l];let S=e.dbis[t].get(i);if(!S){n.skipped.push(i);continue}let A=e.dbis[t].ifVersion(i,xp.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let N=0;N<s.length;N++){let b=s[N];if(!S.hasOwnProperty(b)||b===t)continue;let Ae=e.dbis[b],v=S[b];if(v!=null)try{let W=io.getIndexedValues(v);if(W)for(let $e=0,Ks=W.length;$e<Ks;$e++)Ae.remove(W[$e],i)}catch{BE.warn(`cannot delete from attribute: ${b}, ${v}:${i}`)}}});o.push(A),_.push(i),n.original_records.push(S)}catch(S){BE.warn(S),n.skipped.push(i)}let c=[],u=await Promise.all(o);for(let l=0,h=u.length;l<h;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 h=c[l];n.original_records.splice(h-E,1),E++}return n.txn_time=io.getMicroTime(),n}catch(s){throw s}}a(kp,"deleteRecords");HE.exports={deleteRecords:kp}});var ls=d((gH,GE)=>{"use strict";var gr=g(),Yp=oo(),$p=F(),Kp=require("path"),{getBaseSchemaPath:Wp}=k(),Qp=Es(),Jp=p();GE.exports=Xp;async function Xp(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(gr.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(gr.isEmptyOrZeroLength(e.hash_values)&&!gr.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let _=0;_<e.records.length;_++){let c=e.records[_][s];gr.isEmpty(c)||e.hash_values.push(c)}}if(gr.isEmptyOrZeroLength(e.hash_values))return vE([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(gr.isEmptyOrZeroLength(e.records)){e.records=[];for(let _=0;_<e.hash_values.length;_++)e.records[_]={[s]:e.hash_values[_]}}let n=Kp.join(Wp(),e.schema.toString()),i=await $p.openEnvironment(n,e.table),o=await Yp.deleteRecords(i,s,e.hash_values);try{t===!0&&await Qp(e,o)}catch(_){Jp.error(`unable to write transaction due to ${_.message}`)}return vE(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(Xp,"lmdbDeleteRecords");function vE(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(vE,"createDeleteResponse")});var co=d((IH,qE)=>{"use strict";var Zp=f(),pH=Wt();function _o(e,t){let r=Object.create(null);if(t.length===1&&Zp.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(_o,"parseRow");function zp(e,t,r,s){let n=_o(r,e);s.push(n)}a(zp,"searchAll");function jp(e,t,r,s){let n=_o(r,e);s[t]=n}a(jp,"searchAllToMap");function eI(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(eI,"iterateDBI");function Zt(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(Zt,"pushResults");function tI(e,t,r,s,n,i){t.toString().endsWith(e)&&Zt(t,r,s,n,i)}a(tI,"endsWith");function rI(e,t,r,s,n,i){t.toString().includes(e)&&Zt(t,r,s,n,i)}a(rI,"contains");function sI(e,t,r,s,n,i){t>e&&Zt(t,r,s,n,i)}a(sI,"greaterThanCompare");function nI(e,t,r,s,n,i){t>=e&&Zt(t,r,s,n,i)}a(nI,"greaterThanEqualCompare");function iI(e,t,r,s,n,i){t<e&&Zt(t,r,s,n,i)}a(iI,"lessThanCompare");function aI(e,t,r,s,n,i){t<=e&&Zt(t,r,s,n,i)}a(aI,"lessThanEqualCompare");qE.exports={parseRow:_o,searchAll:zp,searchAllToMap:jp,iterateDBI:eI,endsWith:tI,contains:rI,greaterThanCompare:sI,greaterThanEqualCompare:nI,lessThanCompare:iI,lessThanEqualCompare:aI,pushResults:Zt}});var pr=d((LH,$E)=>{"use strict";var Fe=F(),oI=p(),Me=Wt(),Mt=Se(),J=He().LMDB_ERRORS_ENUM,CH=g(),_I=f(),je=co(),bH=require("lmdb"),{OVERFLOW_MARKER:FE,MAX_SEARCH_KEY_LENGTH:cI}=Mt,ds={lazy:!0};function xE(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=uo(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(xE,"iterateFullIndex");function Ss(e,t,r,s,n,i=!1,o=void 0,_=void 0,c=!1,u=!1){let E=[[],[]],l=Fe.openDBI(e,r),h=uo(e,t,r);l[Mt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let S=i===!0?s:n,A=i===!0?n:s,N=i===!0?!c:!u,b=i===!0?u:c;for(let{key:Ae,value:v}of l.getRange({start:A,end:S,reverse:i,limit:o,offset:_,inclusiveEnd:N,exclusiveStart:b}))je.pushResults(h(Ae,v),v,E,t,r);return E}a(Ss,"iterateRangeBetween");function uo(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith(FE)){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,ds)[r]}return n}}a(uo,"getOverflowCheck");function uI(e,t,r,s=!1,n=void 0,i=void 0){if(Me.validateEnv(e),t===void 0)throw new Error(J.HASH_ATTRIBUTE_REQUIRED);Wn(r),r=hs(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(uI,"searchAll");function EI(e,t,r,s=!1,n=void 0,i=void 0){if(Me.validateEnv(e),t===void 0)throw new Error(J.HASH_ATTRIBUTE_REQUIRED);return Wn(r),r=hs(e,r),xE(e,t,t,je.searchAllToMap.bind(null,r),s,n,i)}a(EI,"searchAllToMap");function lI(e,t,r=!1,s=void 0,n=void 0){if(Me.validateEnv(e),t===void 0)throw new Error(J.ATTRIBUTE_REQUIRED);return xE(e,void 0,t,je.iterateDBI,r,s,n)}a(lI,"iterateDBI");function dI(e,t){if(Me.validateEnv(e),t===void 0)throw new Error(J.HASH_ATTRIBUTE_REQUIRED);return Fe.statDBI(e,t).entryCount}a(dI,"countAll");function SI(e,t,r,s,n=!1,i=void 0,o=void 0){Pt(e,r,s);let _=Fe.openDBI(e,r);s=Me.convertKeyValueToWrite(s);let c=[[],[]];if(_[Mt.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=_.get(s,ds);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(SI,"equals");function hI(e,t,r){return Pt(e,t,r),Fe.openDBI(e,t).getValuesCount(r)}a(hI,"count");function TI(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=Me.convertKeyValueToWrite(s);let u=!0;if(typeof s=="number"&&(u=!1),n===!0){let E;for(let l of c.getKeys({start:s}))if(!l.startsWith(s)){E=l;break}E!==void 0&&(Number.isInteger(o)?o++:i++);for(let{key:l,value:h}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,h,_,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(TI,"startsWith");function fI(e,t,r,s,n=!1,i=void 0,o=void 0){return VE(e,t,r,s,n,i,o,!0)}a(fI,"endsWith");function VE(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=uo(e,t,r);o=Number.isInteger(o)?o:0;for(let h of u.getKeys({end:n?!1:void 0,reverse:n})){if(i===0)break;let S=h.toString();if(S.endsWith(FE))for(let A of u.getValues(h)){let N=E(h,A);(_?N.endsWith(s):N.includes(s))&&l(N,A)}else if(_?S.endsWith(s):S.includes(s))if(u[Mt.DBI_DEFINITION_NAME].is_hash_attribute)l(h,h);else for(let A of u.getValues(h))l(h,A)}function l(h,S){if(o>0){o--;return}i!==0&&(je.pushResults(h,S,c,t,r),i--)}return a(l,"found_match"),c}a(VE,"contains");function RI(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),Ss(e,t,r,s,c,n,i,o,!0,!1)}a(RI,"greaterThan");function mI(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),Ss(e,t,r,s,c,n,i,o,!1,!1)}a(mI,"greaterThanEqual");function AI(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),Ss(e,t,r,c,s,n,i,o,!1,!0)}a(AI,"lessThan");function NI(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),Ss(e,t,r,c,s,n,i,o,!1,!1)}a(NI,"lessThanEqual");function OI(e,t,r,s,n,i=!1,o=void 0,_=void 0){if(Me.validateEnv(e),r===void 0)throw new Error(J.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(J.START_VALUE_REQUIRED);if(n===void 0)throw new Error(J.END_VALUE_REQUIRED);if(s=Me.convertKeyValueToWrite(s),n=Me.convertKeyValueToWrite(n),s>n)throw new Error(J.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ss(e,t,r,s,n,i,o,_)}a(OI,"between");function gI(e,t,r,s){if(Me.validateEnv(e),t===void 0)throw new Error(J.HASH_ATTRIBUTE_REQUIRED);if(Wn(r),r=hs(e,r),s===void 0)throw new Error(J.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?ds:void 0);return i&&(n=je.parseRow(i,r)),n}a(gI,"searchByHash");function pI(e,t,r){if(Me.validateEnv(e),t===void 0)throw new Error(J.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(J.ID_REQUIRED);let s=!0;return e.dbis[t].get(r,ds)===void 0&&(s=!1),s}a(pI,"checkHashExists");function II(e,t,r,s,n=[]){YE(e,t,r,s,n);let i=kE(e,t,r,s,n);return Object.values(i)}a(II,"batchSearchByHash");function CI(e,t,r,s,n=[]){return YE(e,t,r,s,n),kE(e,t,r,s,n)}a(CI,"batchSearchByHashToMap");function kE(e,t,r,s,n=[]){r=hs(e,r);let i=Object.create(null),o=r.length<3?ds: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 oI.warn(u),u}}return i}a(kE,"batchHashSearch");function YE(e,t,r,s,n){if(Me.validateEnv(e),t===void 0)throw new Error(J.HASH_ATTRIBUTE_REQUIRED);if(Wn(r),!Array.isArray(s))throw s===void 0?new Error(J.IDS_REQUIRED):new Error(J.IDS_MUST_BE_ARRAY);Array.isArray(n)||(n=[])}a(YE,"initializeBatchSearchByHash");function Wn(e){if(!Array.isArray(e))throw e===void 0?new Error(J.FETCH_ATTRIBUTES_REQUIRED):new Error(J.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Wn,"validateFetchAttributes");function Pt(e,t,r){if(Me.validateEnv(e),t===void 0)throw new Error(J.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(J.SEARCH_VALUE_REQUIRED);if(r?.length>cI)throw new Error(J.SEARCH_VALUE_TOO_LARGE)}a(Pt,"validateComparisonFunctions");function hs(e,t){return t.length===1&&_I.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Fe.listDBIs(e)),t}a(hs,"setGetWholeRowAttributes");$E.exports={searchAll:uI,searchAllToMap:EI,count:hI,countAll:dI,equals:SI,startsWith:TI,endsWith:fI,contains:VE,searchByHash:gI,setGetWholeRowAttributes:hs,batchSearchByHash:II,batchSearchByHashToMap:CI,checkHashExists:pI,iterateDBI:lI,greaterThan:RI,greaterThanEqual:mI,lessThan:AI,lessThanEqual:NI,between:OI}});var Ts=d((yH,JE)=>{var KE=require("lodash"),WE=We(),B=require("joi"),bI=g(),{hdb_schema_table:et,checkValidTable:QE}=Kt(),{handleHDBError:LI,hdb_errors:wI}=q(),{HTTP_STATUS_CODES:yI}=wI,wH=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()}),UI=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)}),DI=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()});JE.exports=function(e,t){let r=null;switch(t){case"value":r=WE.validateBySchema(e,UI);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(QE("schema",e.schema)),i(QE("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=WE.validateBySchema(e,DI);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=bI.checkGlobalSchemaTable(e.schema,e.table);if(n)return LI(new Error,n,yI.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=KE.filter(_,u=>u!=="*"&&u.attribute!=="*"&&!KE.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 Eo=d((UH,XE)=>{"use strict";var MI=F(),PI=Ts(),BI=require("path"),{getBaseSchemaPath:HI}=k();XE.exports=vI;function vI(e){let t=PI(e,"hashes");if(t)throw t;let r=BI.join(HI(),e.schema.toString());return MI.openEnvironment(r,e.table)}a(vI,"initialize")});var lo=d((DH,ZE)=>{"use strict";var GI=pr(),qI=Eo();ZE.exports=FI;async function FI(e){try{let t=await qI(e),r=global.hdb_schema[e.schema][e.table];return GI.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(FI,"lmdbGetDataByHash")});var fs=d((MH,zE)=>{"use strict";var Qn=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(Qn,"SearchByHashObject");zE.exports=Qn});var el=d((BH,jE)=>{"use strict";var PH=fs(),xI=pr(),VI=Eo();jE.exports=kI;async function kI(e){try{let t=await VI(e),r=global.hdb_schema[e.schema][e.table];return xI.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(kI,"lmdbSearchByHash")});var At=d((HH,tl)=>{"use strict";var Jn=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(Jn,"SearchObject");tl.exports=Jn});var Xn=d((vH,al)=>{"use strict";var Te=pr(),YI=F(),$I=require("path"),KI=g(),O=Se(),zt=f(),{getBaseSchemaPath:WI}=k(),QI=Xt(),rl=He().LMDB_ERRORS_ENUM,{compareKeys:Ir}=require("ordered-binary"),Nt=zt.SEARCH_WILDCARDS;async function JI(e,t,r){let s;e.schema===zt.SYSTEM_SCHEMA_NAME?s=QI[e.table]:s=global.hdb_schema[e.schema][e.table];let n=il(e,s.hash_attribute,r,t);return sl(e,n,s.hash_attribute,r)}a(JI,"prepSearch");async function sl(e,t,r,s){let n=$I.join(WI(),e.schema.toString()),i=await YI.openEnvironment(n,e.table),o=nl(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(zI(e,r)===!1)return s===!0?ZI(o):o[1];let c=o[0];return s===!0?Te.batchSearchByHashToMap(i,r,e.get_attributes,c):Te.batchSearchByHash(i,r,e.get_attributes,c)}a(sl,"executeSearch");function nl(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=Te.equals(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.CONTAINS:n=Te.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=Te.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=Te.startsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Te.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Te.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case O.SEARCH_TYPES.SEARCH_ALL:return Te.searchAll(e,s,t.get_attributes,o,_,c);case O.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Te.searchAllToMap(e,s,t.get_attributes,o,_,c);case O.SEARCH_TYPES.BETWEEN:n=Te.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=Te.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=Te.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=Te.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=Te.lessThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;default:return Object.create(null)}return n}a(nl,"searchByType");function XI(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 Ir(i,s[0])>=0&&Ir(i,s[1])<=0};case O.SEARCH_TYPES.GREATER_THAN:case O.SEARCH_TYPES._GREATER_THAN:return n=>Ir(n[r],s)>0;case O.SEARCH_TYPES.GREATER_THAN_EQUAL:case O.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>Ir(n[r],s)>=0;case O.SEARCH_TYPES.LESS_THAN:case O.SEARCH_TYPES._LESS_THAN:return n=>Ir(n[r],s)<0;case O.SEARCH_TYPES.LESS_THAN_EQUAL:case O.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>Ir(n[r],s)<=0;default:return Object.create(null)}}a(XI,"filterByType");function ZI(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(ZI,"createMapFromArrays");function zI(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(zI,"checkToFetchMore");function il(e,t,r,s){if(KI.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),Nt.indexOf(n)>-1)return r===!0?O.SEARCH_TYPES.SEARCH_ALL_TO_MAP:O.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Nt[0])<0&&n.indexOf(Nt[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(Nt.indexOf(i)>=0&&Nt.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),O.SEARCH_TYPES.CONTAINS;if(Nt.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),O.SEARCH_TYPES.ENDS_WITH;if(Nt.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),O.SEARCH_TYPES.STARTS_WITH;if(n.includes(Nt[0])||n.includes(Nt[1]))return O.SEARCH_TYPES.EQUALS;throw new Error(rl.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(rl.UNKNOWN_SEARCH_TYPE)}}a(il,"createSearchTypeFromSearchObject");al.exports={executeSearch:sl,createSearchTypeFromSearchObject:il,prepSearch:JI,searchByType:nl,filterByType:XI}});var _l=d((qH,ol)=>{"use strict";var GH=At(),jI=Ts(),eC=g(),tC=f(),rC=Xn();ol.exports=sC;async function sC(e,t){if(!eC.isEmpty(t)&&tC.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=jI(e,"value");if(s)throw s;let n=!0;try{return await rC.prepSearch(e,t,n)}catch(i){throw i}}a(sC,"lmdbGetDataByValue")});var Cr=d((xH,cl)=>{"use strict";var FH=At(),nC=Ts(),iC=g(),aC=f(),oC=Xn();cl.exports=_C;async function _C(e,t){if(!iC.isEmpty(t)&&aC.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=nC(e,"value");if(s)throw s;let n=!1;try{return await oC.prepSearch(e,t,n)}catch(i){throw i}}a(_C,"lmdbSearchByValue")});var El=d((kH,ul)=>{"use strict";var VH=Se(),Zn=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(Zn,"SearchByConditionsObject");var zn=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(zn,"SearchCondition");var jn=class{constructor(t,r){this.attribute=t,this.desc=r}};a(jn,"SortAttribute");ul.exports={SearchByConditionsObject:Zn,SearchCondition:zn,SortAttribute:jn}});var fl=d(($H,Tl)=>{"use strict";var YH=El().SearchByConditionsObject,cC=At(),uC=Ts(),So=pr(),ei=Se(),hl=Xn(),EC=co(),ll=require("lodash"),{getBaseSchemaPath:lC}=k(),dC=require("path"),SC=F(),{handleHDBError:dl,hdb_errors:hC}=q(),{HTTP_STATUS_CODES:TC}=hC,fC=1e8,RC={lazy:!0};Tl.exports=mC;async function mC(e){try{let t=uC(e,"conditions");if(t)throw dl(t,t.message,TC.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=dC.join(lC(),e.schema.toString()),s=await SC.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=ll.sortBy(e.conditions,o=>{if(o.estimated_count===void 0){let _=o.search_type;_===ei.SEARCH_TYPES.EQUALS?o.estimated_count=So.count(s,o.search_attribute,o.search_value):_===ei.SEARCH_TYPES.CONTAINS||_===ei.SEARCH_TYPES.ENDS_WITH?o.estimated_count=1/0:o.estimated_count=fC}return o.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[o]=await Sl(s,e,i[0],n.hash_attribute),_=s.dbis[n.hash_attribute],c=i.slice(1).map(hl.filterByType),u=c.length,E=[],l=So.setGetWholeRowAttributes(s,e.get_attributes),h=e.offset>-1?e.offset:0,S=e.limit>-1?e.limit:1/0;e:for(let A of o){let N=_.get(A,RC);for(let b=0;b<u;b++)if(!c[b](N))continue e;if(h>0){h--;continue}if(S<=0)break;S--,E.push(EC.parseRow(N,l))}return E}else{let o=[],_=[];for(let c of i){let[u]=await Sl(s,e,c,n.hash_attribute);_.push(u)}if(o=ll.union(..._),e.limit>0||e.offset>0){let c=Number.isInteger(e.limit)?e.limit:o.length;o=o.splice(e.offset,c)}return So.batchSearchByHash(s,n.hash_attribute,e.get_attributes,o)}}catch(t){throw dl(t)}}a(mC,"lmdbSearchByConditions");async function Sl(e,t,r,s){let n=new cC(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===ei.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,hl.searchByType(e,n,i,s)}a(Sl,"executeConditionSearch")});var Rs=d((KH,Rl)=>{"use strict";var AC=f().OPERATIONS_ENUM,ti=class{constructor(t,r,s,n=void 0){this.operation=AC.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(ti,"DeleteObject");Rl.exports=ti});var ho=d((WH,ml)=>{"use strict";var ri=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(ri,"DropAttributeObject");ml.exports=ri});var fo=d((JH,Al)=>{"use strict";var NC=At(),OC=Rs(),QH=ho(),ot=f(),gC=g(),To=F(),pC=Xt(),IC=Cr(),CC=ls(),{getBaseSchemaPath:bC}=k(),LC=require("path");Al.exports=wC;async function wC(e,t=!0){let r;e.schema===ot.SYSTEM_SCHEMA_NAME?r=pC[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await UC(e),n=LC.join(bC(),e.schema.toString()),i=await To.openEnvironment(n,e.table);return t===!0&&await yC(e,i,r.hash_attribute),To.dropDBI(i,e.attribute),s}a(wC,"lmdbDropAttribute");async function yC(e,t,r){let s=To.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(yC,"removeAttributeFromAllObjects");async function UC(e){let t=new NC(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ot.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ot.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ot.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=(await IC(t)).filter(o=>o[ot.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(gC.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[ot.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new OC(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return CC(i)}a(UC,"dropAttributeFromSystem")});var pl=d((XH,gl)=>{"use strict";var DC=fo(),MC=ho(),Nl=g(),Ol=p(),PC=He().LMDB_ERRORS_ENUM;gl.exports=BC;async function BC(e){if(Nl.isEmpty(global.hdb_schema[e.schema])||Nl.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 MC(e.schema,e.table,r);try{await DC(n,!1)}catch(i){i.message!==PC.DBI_DOES_NOT_EXIST&&Ol.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw Ol.error(`Error dropping attribute ${r}`),s}}a(BC,"lmdbDropAllAttributes")});var Ro=d((zH,Ml)=>{"use strict";var wl=At(),yl=Rs(),Ul=Cr(),Dl=ls(),ZH=pl(),Ce=f(),Il=g(),Cl=F(),{getBaseSchemaPath:HC,getTransactionAuditStorePath:vC}=k(),bl=require("path"),Ll=p();Ml.exports=GC;async function GC(e){try{if(Il.isEmpty(global.hdb_schema[e.schema])||Il.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await qC(e),await FC(e);let t=bl.join(HC(),e.schema.toString());try{await Cl.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Ll.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=bl.join(vC(),e.schema.toString());await Cl.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Ll.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(GC,"lmdbDropTable");async function qC(e){let t=new wl(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 Ul(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 yl(Ce.SYSTEM_SCHEMA_NAME,Ce.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Dl(n)}a(qC,"deleteAttributesFromSystem");async function FC(e){let t=new wl(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 Ul(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 yl(Ce.SYSTEM_SCHEMA_NAME,Ce.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Dl(n)}catch(i){throw i}}a(FC,"dropTableFromSystem")});var Bl=d((ev,Pl)=>{"use strict";var xC=require("fs-extra"),VC=At(),kC=fs(),YC=Rs(),$C=Ro(),KC=ls(),WC=lo(),QC=Cr(),Ot=f(),jH=g(),JC=require("path"),{getBaseSchemaPath:XC}=k(),{handleHDBError:ZC,hdb_errors:zC}=q(),{HDB_ERROR_MSGS:jC,HTTP_STATUS_CODES:eb}=zC;Pl.exports=tb;async function tb(e){let t;try{t=await rb(e.schema);let r=new VC(Ot.SYSTEM_SCHEMA_NAME,Ot.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ot.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Ot.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=await QC(r);for(let o=0;o<s.length;o++){let _={schema:t,table:s[o].name};try{await $C(_)}catch(c){if(c.message!=="invalid environment")throw c}}let n=new YC(Ot.SYSTEM_SCHEMA_NAME,Ot.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await KC(n);let i=JC.join(XC(),t.toString());await xC.remove(i)}catch(r){throw r}}a(tb,"lmdbDropSchema");async function rb(e){let t=new kC(Ot.SYSTEM_SCHEMA_NAME,Ot.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Ot.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=await WC(t)}catch(n){throw n}for(let n in r)r[n].name===e&&(s=e);if(!s)throw ZC(new Error,jC.SCHEMA_NOT_FOUND(e),eb.NOT_FOUND,void 0,void 0,!0);return s}a(rb,"validateDropSchema")});var mo=d((tv,Hl)=>{"use strict";var si=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(si,"CreateTableObject");Hl.exports=si});var Gl=d((sv,vl)=>{"use strict";var sb=require("path"),nb=require("fs-extra"),ni=F(),{getTransactionAuditStorePath:ib}=k(),Ao=Se(),rv=mo();vl.exports=ab;async function ab(e){let t;try{let r=sb.join(ib(),e.schema.toString());await nb.mkdirp(r),t=await ni.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{ni.createDBI(t,Ao.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),ni.createDBI(t,Ao.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),ni.createDBI(t,Ao.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(ab,"createTransactionsAuditEnvironment")});var Vl=d((nv,xl)=>{"use strict";var No=f(),ql=F(),ob=fr(),_b=require("path"),{getSystemSchemaPath:cb,getBaseSchemaPath:ub}=k(),Eb=Xt(),lb=Un(),Oo=yn(),db=p(),Sb=Gl(),po=Eb.hdb_table,Fl=[];for(let e=0;e<po.attributes.length;e++)Fl.push(po.attributes[e].attribute);xl.exports=hb;async function hb(e,t){let r=_b.join(ub(),t.schema.toString()),s=new Oo(t.schema,t.table,No.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Oo(t.schema,t.table,No.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Oo(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await ql.createEnvironment(r,t.table),e!==void 0){let o=await ql.openEnvironment(cb(),No.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await ob.insertRecords(o,po.hash_attribute,Fl,[e]),await go(s),await go(n),await go(i)}await Sb(t)}catch(o){throw o}}a(hb,"lmdbCreateTable");async function go(e){try{await lb(e)}catch(t){db.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(go,"createAttribute")});var Yl=d((iv,kl)=>{"use strict";var Tb=Dn(),fb=Hn(),Rb=qn(),br=f(),mb=fr().updateRecords,Ab=F(),Nb=require("path"),{getBaseSchemaPath:Ob}=k(),gb=Es(),pb=p();kl.exports=Ib;async function Ib(e){try{let{schema_table:t,attributes:r}=Tb(e);fb(e,r,t.hash_attribute),e.schema!==br.SYSTEM_SCHEMA_NAME&&(r.includes(br.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(br.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(br.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(br.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Rb(e.hdb_auth_header,t,r),n=Nb.join(Ob(),e.schema.toString()),i=await Ab.openEnvironment(n,e.table),o=await mb(i,t.hash_attribute,r,e.records,e[br.CLUSTERING_FLAG]!==!0);try{await gb(e,o)}catch(_){pb.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(Ib,"lmdbUpdateRecords")});var Kl=d((av,$l)=>{"use strict";var Cb=f().OPERATIONS_ENUM,ii=class{constructor(t,r,s,n=void 0){this.operation=Cb.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(ii,"UpsertObject");$l.exports=ii});var Ql=d((_v,Wl)=>{"use strict";var ov=Kl(),bb=Dn(),Lb=Hn(),wb=qn(),Lr=f(),yb=fr().upsertRecords,Ub=F(),Db=require("path"),{getBaseSchemaPath:Mb}=k(),Pb=Es(),Bb=p(),{handleHDBError:Hb,hdb_errors:vb}=q();Wl.exports=Gb;async function Gb(e){let t;try{t=bb(e)}catch(c){throw Hb(c,c.message,vb.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;Lb(e,s,r.hash_attribute),e.schema!==Lr.SYSTEM_SCHEMA_NAME&&(s.includes(Lr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Lr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Lr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Lr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await wb(e.hdb_auth_header,r,s),i=Db.join(Mb(),e.schema.toString()),o=await Ub.openEnvironment(i,e.table),_=await yb(o,r.hash_attribute,s,e.records,e[Lr.CLUSTERING_FLAG]!==!0);try{await Pb(e,_)}catch(c){Bb.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(Gb,"lmdbUpsertRecords")});var ed=d((cv,jl)=>{"use strict";var qb=At(),Jl=g(),Xl=p(),Fb=Cr(),Zl=f(),xb=oo().deleteRecords,Vb=F(),kb=require("path"),{getBaseSchemaPath:Yb}=k(),{promisify:$b}=require("util"),Kb=$b(setTimeout),zl=1e4,Wb=10;jl.exports=Qb;async function Qb(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(Jl.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 qb(e.schema,e.table,Zl.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await Fb(n,Zl.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw Xl.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return Jl.isEmptyOrZeroLength(s)?(Xl.trace("No records found to delete"),{message:"No records found to delete"}):await Jb(e,s,t)}a(Qb,"lmdbDeleteRecordsBefore");async function Jb(e,t,r){let s=kb.join(Yb(),e.schema.toString()),n=await Vb.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,_=t.length;o<_;o+=zl){let c=t.slice(o,o+zl),u=[];for(let E=0,l=c.length;E<l;E++)u.push(c[E][r]);try{let E=await xb(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 Kb(Wb)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(Jb,"chunkDeletes")});var rd=d((uv,td)=>{"use strict";var ai=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(ai,"DeleteBeforeObject");td.exports=ai});var nd=d((Ev,sd)=>{"use strict";var oi=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(oi,"DeleteAuditLogsBeforeResults");sd.exports=oi});var od=d((dv,ad)=>{"use strict";var Io=F(),{getTransactionAuditStorePath:Xb}=k(),lv=rd(),Zb=require("path"),ms=Se(),zb=g(),id=nd(),jb=require("util").promisify,eL=jb(setTimeout),tL=1e4,rL=100;ad.exports=sL;async function sL(e){let t=Zb.join(Xb(),e.schema),r=await Io.openEnvironment(t,e.table,!0),s=Io.listDBIs(r);Io.initializeDBIs(r,ms.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new id;do n=await nL(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await eL(rL);while(n.transactions_deleted>0);return i}a(sL,"deleteAuditLogsBefore");async function nL(e,t){let r=new id;try{let s=e.dbis[ms.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[ms.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];zb.isEmpty(_)||(n=e.dbis[ms.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(_,i));for(let c=0;c<o.hash_values.length;c++)n=e.dbis[ms.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[c],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>tL)break}return await n,r}catch(s){throw s}}a(nL,"deleteTransactions")});var Sd=d((Sv,dd)=>{"use strict";var Co=F(),wr=Se(),_d=Wt(),bo=f(),cd=g(),{getTransactionAuditStorePath:iL}=k(),aL=require("path"),oL=pr(),_i=Ar(),_L=p();dd.exports=cL;async function cL(e){let t=aL.join(iL(),e.schema),r=await Co.openEnvironment(t,e.table,!0),s=Co.listDBIs(r);Co.initializeDBIs(r,wr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case bo.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return ud(r,e.search_values);case bo.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,EL(r,e.search_values,n);case bo.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return uL(r,e.search_values);default:return ud(r)}}a(cL,"readAuditLog");function ud(e,t=[0,_d.getMicroTime()]){cd.isEmpty(t[0])&&(t[0]=0),cd.isEmpty(t[1])&&(t[1]=_d.getMicroTime());let r=[];try{let s=e.dbis[wr.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 _i,i);r.push(o)}return r}catch(s){throw s}}a(ud,"searchTransactionsByTimestamp");function uL(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[wr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,ld(e,i))}return Object.fromEntries(r)}a(uL,"searchTransactionsByUsername");function EL(e,t,r){let s=new Map;for(let _=0,c=t.length;_<c;_++){let u=t[_],E=oL.equals(e,wr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,wr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let l=0,h=E[0].length;l<h;l++){let S=E[0][l],A=Number(S);s.has(A)?s.get(A).push(u.toString()):s.set(A,[u.toString()])}}let n=Array.from(s.keys()),i=ld(e,n),o=new Map;for(let _=0;_<i.length;_++){let c=i[_],u=c.timestamp,E=s.get(u);Ed(c,"records",r,E,o),Ed(c,"original_records",r,E,o)}return Object.fromEntries(o)}a(EL,"searchTransactionsByHashValues");function Ed(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 _i(e.operation,e.user_name,i,void 0);l[t]=[_],u.push(l)}}else{let u=new _i(e.operation,e.user_name,i,void 0);u[t]=[_],n.set(c,[u])}}}a(Ed,"loopRecords");function ld(e,t){let r=[];try{let s=e.dbis[wr.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 _i,i);r.push(o)}}catch(i){_L.warn(i)}return r}catch(s){throw s}}a(ld,"batchSearchTransactions")});var Td=d((hv,hd)=>{"use strict";var lL=require("path"),{getBaseSchemaPath:dL}=k(),SL=F();hd.exports={writeTransaction:hL};async function hL(e,t,r){let s=lL.join(dL(),e);return(await SL.openEnvironment(s,t)).transaction(r)}a(hL,"writeTransaction")});var Rd=d((Tv,fd)=>{"use strict";var TL=require("path"),{getBaseSchemaPath:fL}=k(),RL=F();fd.exports={flush:mL};async function mL(e,t){let r=TL.join(fL(),e.toString());return(await RL.openEnvironment(r,t.toString())).flushed}a(mL,"flush")});var Ad=d((fv,md)=>{"use strict";var j=p(),{handleHDBError:AL}=q(),NL=Pa(),OL=Un(),gL=no(),pL=UE(),IL=ls(),CL=lo(),bL=el(),LL=_l(),wL=Cr(),yL=fl(),UL=Bl(),DL=Vl(),ML=Yl(),PL=Ql(),BL=ed(),HL=od(),vL=Ro(),GL=fo(),qL=Sd(),FL=Td(),xL=Rd(),ci=class extends NL{async searchByConditions(t){try{return yL(t)}catch(r){throw j.error(r),r}}async getDataByHash(t){try{return await CL(t)}catch(r){throw j.error(r),r}}async searchByHash(t){try{return await bL(t)}catch(r){throw j.error(r),r}}async getDataByValue(t,r){try{return await LL(t,r)}catch(s){throw j.error(s),s}}async searchByValue(t){try{return await wL(t)}catch(r){throw j.error(r),r}}async createSchema(t){try{return await pL(t)}catch(r){throw j.error(r),r}}async dropSchema(t){try{return await UL(t)}catch(r){throw j.error(r),r}}async createTable(t,r){try{return await DL(t,r)}catch(s){throw j.error(s),s}}async dropTable(t){try{return await vL(t)}catch(r){throw j.error(r),r}}async createAttribute(t){try{return await OL(t)}catch(r){throw j.error(r),r}}async createRecords(t){try{return await gL(t)}catch(r){throw j.error(r),r}}async updateRecords(t){try{return await ML(t)}catch(r){throw j.error(r),r}}async upsertRecords(t){try{return await PL(t)}catch(r){throw AL(r,null,null,j.ERR,r)}}async deleteRecords(t){try{return await IL(t)}catch(r){throw j.error(r),r}}async deleteRecordsBefore(t){try{return await BL(t)}catch(r){throw j.error(r),r}}async dropAttribute(t){try{return await GL(t)}catch(r){throw j.error(r),r}}async deleteAuditLogsBefore(t){try{return await HL(t)}catch(r){throw j.error(r),r}}async readAuditLog(t){try{return await qL(t)}catch(r){throw j.error(r),r}}writeTransaction(t,r,s){return FL.writeTransaction(t,r,s)}flush(t,r){return xL.flush(t,r)}};a(ci,"LMDBBridge");md.exports=ci});var jt=d((Rv,Od)=>{"use strict";var VL=Ad(),kL=Pa(),YL=Q();YL.initSync();var Nd;function $L(){return Nd instanceof kL?Nd:new VL}a($L,"getBridge");Od.exports=$L()});var Bd=d((Av,Pd)=>{"use strict";var Lo=require("recursive-iterator"),KL=require("alasql"),wo=require("clone"),gd=g(),{handleHDBError:pd,hdb_errors:WL}=q(),{HDB_ERROR_MSGS:Id,HTTP_STATUS_CODES:Cd}=WL,QL=["DISTINCT_ARRAY"],bd=Symbol("validateTables"),yo=Symbol("validateTable"),mv=Symbol("getAllColumns"),Ld=Symbol("validateAllColumns"),ui=Symbol("findColumn"),wd=Symbol("validateOrderBy"),As=Symbol("validateSegment"),Uo=Symbol("validateColumn"),yd=Symbol("setColumnsForTable"),Ud=Symbol("checkColumnsForAsterisk"),Dd=Symbol("validateGroupBy"),Md=Symbol("hasColumns"),Ei=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[bd](),this[Ud](),this[Ld]()}[bd](){if(this[Md]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[yo](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[yo](t.table)})}}[Md](){let t=!1,r=new Lo(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[yo](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw pd(new Error,Id.SCHEMA_NOT_FOUND(t.databaseid),Cd.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw pd(new Error,Id.TABLE_NOT_FOUND(t.databaseid,t.tableid),Cd.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=wo(s);n.table=wo(t),this.attributes.push(n)})}[ui](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)}[Ud](){let t=new Lo(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[yd](r.tableid)}[yd](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new KL.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Ld](){this[As](this.statement.columns,!1),this[As](this.statement.joins,!1),this[As](this.statement.where,!1),this[Dd](this.statement.group,!1),this[As](this.statement.order,!0)}[As](t,r){if(!t)return;let s=new Lo(t),n=[];for(let{node:i,path:o}of s)!gd.isEmpty(i)&&!gd.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[wd](i):n.push(this[Uo](i)));return n}[Dd](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&QL.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=wo(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[ui](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[ui](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`}[wd](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[Uo](t)}[Uo](t){let r=this[ui](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(Ei,"SelectValidator");Pd.exports=Ei});var qd=d((Nv,Gd)=>{"use strict";var Hd=require("lodash"),Ns=require("mathjs"),JL=require("jsonata"),vd=g();Gd.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Hd.uniqWith(e,Hd.isEqual):e,searchJSON:XL,mad:Os.bind(null,Ns.mad),mean:Os.bind(null,Ns.mean),mode:Os.bind(null,Ns.mode),prod:Os.bind(null,Ns.prod),median:Os.bind(null,Ns.median)};function Os(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(Os,"aggregateFunction");function XL(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(vd.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),vd.isEmpty(this.__ala__.res[r])){let s=JL(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(XL,"searchJSON")});var xd=d((Ov,Fd)=>{"use strict";var Z=require("moment"),Do="YYYY-MM-DDTHH:mm:ss.SSSZZ";Z.suppressDeprecationWarnings=!0;Fd.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(Do),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(Do),offset_utc:(e,t)=>Z(e).utc().utcOffset(t).format(Do)}});var $d=d((gv,Yd)=>{"use strict";var ZL=require("@turf/area"),zL=require("@turf/length"),jL=require("@turf/circle"),ew=require("@turf/difference"),tw=require("@turf/distance"),rw=require("@turf/boolean-contains"),sw=require("@turf/boolean-equal"),nw=require("@turf/boolean-disjoint"),iw=require("@turf/helpers"),Vd=f(),D=g();Yd.exports={geoArea:aw,geoLength:ow,geoCircle:_w,geoDifference:cw,geoDistance:kd,geoNear:uw,geoContains:Ew,geoEqual:lw,geoCrosses:dw,geoConvert:Sw};var Mo="geo1 is required",Po="geo2 is required";function aw(e){if(D.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=D.autoCast(e)),ZL.default(e)}a(aw,"geoArea");function ow(e,t){if(D.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=D.autoCast(e)),zL.default(e,{units:t||"kilometers"})}a(ow,"geoLength");function _w(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)),jL.default(e,t,{units:r||"kilometers"})}a(_w,"geoCircle");function cw(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)),ew(e,t)}a(cw,"geoDifference");function kd(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)),tw.default(e,t,{units:r||"kilometers"})}a(kd,"geoDistance");function uw(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 kd(e,t,s)<=r}a(uw,"geoNear");function Ew(e,t){if(D.isEmpty(e))throw new Error(Mo);if(D.isEmpty(e))throw new Error(Po);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),rw.default(e,t)}a(Ew,"geoContains");function lw(e,t){if(D.isEmpty(e))throw new Error(Mo);if(D.isEmpty(e))throw new Error(Po);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),sw.default(e,t)}a(lw,"geoEqual");function dw(e,t){if(D.isEmpty(e))throw new Error(Mo);if(D.isEmpty(e))throw new Error(Po);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),!nw.default(e,t)}a(dw,"geoCrosses");function Sw(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(Vd.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Vd.GEO_CONVERSION_ENUM).join(",")}`);return iw[t](e,r)}a(Sw,"geoConvert")});var Wd=d((pv,Kd)=>{var er=qd(),Pe=xd(),_t=$d();Kd.exports=e=>{e.aggr.mad=e.aggr.MAD=er.mad,e.aggr.mean=e.aggr.MEAN=er.mean,e.aggr.mode=e.aggr.MODE=er.mode,e.aggr.prod=e.aggr.PROD=er.prod,e.aggr.median=e.aggr.MEDIAN=er.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=er.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=er.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Pe.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Pe.current_time,e.fn.extract=e.fn.EXTRACT=Pe.extract,e.fn.date=e.fn.DATE=Pe.date,e.fn.date_format=e.fn.DATE_FORMAT=Pe.date_format,e.fn.date_add=e.fn.DATE_ADD=Pe.date_add,e.fn.date_sub=e.fn.DATE_SUB=Pe.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Pe.date_diff,e.fn.now=e.fn.NOW=Pe.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Pe.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Pe.get_server_time,e.fn.getdate=e.fn.GETDATE=Pe.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Pe.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=_t.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=_t.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=_t.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=_t.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=_t.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=_t.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=_t.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=_t.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=_t.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=_t.geoNear}});var Xd=d((Iv,Jd)=>{"use strict";var gs=require("lodash"),oe=require("alasql");oe.options.cache=!1;var hw=Wd(),Qd=require("clone"),li=require("recursive-iterator"),L=p(),y=g(),yr=jt(),Tw=f(),{hdb_errors:fw}=q(),Rw="IS NULL",ps="There was a problem performing this search. Please check the logs and try again.";hw(oe);var di=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(ps)}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(ps)}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(ps)}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(ps)}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(ps)}}_getColumns(){let t=new li(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(Qd(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=gs.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 li(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 oe.yy.LogicValue({value:s}):r.right instanceof oe.yy.StringValue&&!y.isEmpty(s)&&y.autoCasterIsNumberCheck(s.toString())&&(r.right=new oe.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 oe.yy.LogicValue({value:i}):s instanceof oe.yy.StringValue&&y.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new oe.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 li(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(Tw.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&&gs.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 oe.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(Qd(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(Rw)>-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=gs.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 yr.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 h=await yr.getDataByValue(l);for(let S in h)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,h[S][n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,h[S][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(S)))}))}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,h=E.length;l<h;l++){let S=E[l];_.search_attribute=S.attribute,_.search_value=S.search_value;let A=await yr.getDataByValue(_,S.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 yr.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 oe.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 oe.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new oe.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 oe.yy.FuncValue:new oe.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(S=>{S.joinmode&&S.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(S.table);let A=S.joinmode+" JOIN ? AS "+(S.as?S.as:S.table.tableid);S.on&&(A+=" ON "+S.on.toString()),i.push(A),t.push(Object.values(this.data[`${S.table.databaseid_orig}_${S.table.as?S.table.as_orig:S.table.tableid_orig}`].__merged_data))});let o=[],_={};n.forEach(S=>{let A=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__hash_name,N=S.as?S.as_orig:S.tableid_orig;o.push({key:`'${N}.${A}'`,schema:S.databaseid_orig,table:S.as?S.as_orig:S.tableid_orig,keys:new Set}),r.push(`${S.as?S.as:S.tableid}.\`${A}\` AS "${N}.${A}"`),_[S.as?S.as_orig:S.tableid_orig]=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.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(S=>{S.is_func?r.push(S.initial_select_column.toString()):S.initial_select_column.tableid?r.push(`${S.initial_select_column.tableid}.${S.initial_select_column.columnid} AS ${S.expression.columnid}`):r.push(`${S.initial_select_column.columnid} AS ${S.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 h=[];try{let S=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${c} ${u} ${E} ${l}`,A=this._convertColumnsToIndexes(S,n);h=await oe.promise(A,t),t=null}catch(S){throw L.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),L.error(S),new Error("There was a problem processing the data.")}if(h&&h.length>0){for(let S=0,A=h.length;S<A;S++){let N=h[S];o.forEach(b=>{N[b.key]!==null&&N[b.key]!==void 0&&b.keys.add(N[b.key])})}o.forEach(S=>{let A=Object.keys(this.data[`${S.schema}_${S.table}`].__merged_data),N=gs.difference(A,[...S.keys].map(b=>b.toString()));for(let b=0,Ae=N.length;b<Ae;b++){let v=N[b];delete this.data[`${S.schema}_${S.table}`].__merged_data[v]}})}return{existing_attributes:_,joined_length:h?h.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new li(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=gs.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 yr.getDataByHash(_),u=n.columns.length;for(let E=0,l=o.length;E<l;E++){let h=o[E],S=c[h];for(let A=0;A<u;A++){let N=n.columns[A],b=S[N]===void 0?null:S[N];this.data[s].__merged_data[h].push(b)}}}}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 oe.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(fw.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 yr.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(di,"SQLSearch");Jd.exports=di});var Is=d((Cv,zd)=>{"use strict";var mw=Bd();zd.exports={searchByConditions:gw,searchByHash:pw,searchByValue:Iw,search:Cw};var Bo=jt(),Zd=require("util"),Aw=Zd.callbackify(Bo.searchByHash),Nw=Zd.callbackify(Bo.searchByValue),Ow=Xd();async function gw(e){return Bo.searchByConditions(e)}a(gw,"searchByConditions");function pw(e,t){try{Aw(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(pw,"searchByHash");function Iw(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),Nw(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(Iw,"searchByValue");function Cw(e,t){try{let r=new mw(e);r.validate(),new Ow(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(Cw,"search")});var bs=d((bv,rS)=>{"use strict";var Cs=require("crypto"),eS="aes-256-cbc",bw=32,Lw=16,Ho=64,tS=32,ww=Ho+tS,jd=new Map;rS.exports={encrypt:yw,decrypt:Uw,createNatsTableStreamName:Dw};function yw(e){let t=Cs.randomBytes(bw),r=Cs.randomBytes(Lw),s=Cs.createCipheriv(eS,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(yw,"encrypt");function Uw(e){let t=e.substr(0,Ho),r=e.substr(Ho,tS),s=e.substr(ww,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Cs.createDecipheriv(eS,Buffer.from(t,"hex"),n),_=o.update(i);return _=Buffer.concat([_,o.final()]),_.toString()}a(Uw,"decrypt");function Dw(e,t){let r=`${e}.${t}`,s=jd.get(r);return s||(s=Cs.createHash("md5").update(`${e}.${t}`).digest("hex"),jd.set(r,s)),s}a(Dw,"createNatsTableStreamName")});var fi=d((Lv,cS)=>{"use strict";var nS=Is(),Bt=p(),iS=bn(),Mw=require("lodash"),Pw=require("path"),Bw=bs(),vo=g(),{promisify:aS}=require("util"),x=f(),{handleHDBError:Si,hdb_errors:Hw}=q(),{HDB_ERROR_MSGS:hi,HTTP_STATUS_CODES:oS}=Hw,vw=Q();vw.initSync();var sS=F(),Gw=k(),Ls=aS(nS.searchByValue),qw=aS(nS.searchByHash),Ur="name",_S="hash_attribute",Go="schema",Fw="schema_table",xw="attribute";cS.exports={describeAll:Vw,describeTable:Ti,describeSchema:Yw};async function Vw(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:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:Ur,search_value:x.WILDCARD_SEARCH_VALUE,get_attributes:[Ur]},i=await Ls(n);if(vo.isEmptyOrZeroLength(i))return{};let o={},_={};for(let h in i)o[i[h].name]=!0,!t&&!s&&(_[i[h].name]=r[i[h].name].describe);let c={schema:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:x.ID_ATTRIBUTE_STRING,search_value:x.WILDCARD_SEARCH_VALUE,get_attributes:[_S,x.ID_ATTRIBUTE_STRING,Ur,Go]},u=await Ls(c),E=[];for(let h of u)try{let S;if(t||s)S=await Ti({schema:h.schema,table:h.name});else if(r&&r[h.schema].describe&&r[h.schema].tables[h.name].describe){let A=r[h.schema].tables[h.name].attribute_permissions;S=await Ti({schema:h.schema,table:h.name},A)}S&&E.push(S)}catch(S){Bt.error(S)}let l={};for(let h in E)t||s?(l[E[h].schema]==null&&(l[E[h].schema]={}),l[E[h].schema][E[h].name]=E[h],o[E[h].schema]&&delete o[E[h].schema]):_[E[h].schema]&&(l[E[h].schema]==null&&(l[E[h].schema]={}),l[E[h].schema][E[h].name]=E[h],o[E[h].schema]&&delete o[E[h].schema]);for(let h in o)t||s?l[h]={}:_[h]&&(l[h]={});return l}catch(t){return Bt.error("Got an error in describeAll"),Bt.error(t),Si(new Error,hi.DESCRIBE_ALL_ERR)}}a(Vw,"describeAll");async function Ti(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=iS.describe_table(e);if(o)throw o;if(r===x.SYSTEM_SCHEMA_NAME)return global.hdb_schema[x.SYSTEM_SCHEMA_NAME][s];let _={schema:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:x.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Ur,search_value:s,hash_values:[],get_attributes:[x.WILDCARD_SEARCH_VALUE]},c=await Ls(_);if(!c||c.length===0)throw Si(new Error,hi.TABLE_NOT_FOUND(e.schema,e.table),oS.NOT_FOUND);for await(let u of c)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw Si(new Error,hi.INVALID_TABLE_ERR(i));let E={schema:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:x.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:Fw,search_value:r+"."+s,get_attributes:[xw]},l=await Ls(E);l=Mw.uniqBy(l,h=>h.attribute),n&&n.length>0&&(l=kw(n)),i.attributes=l,i.clustering_stream_name=Bw.createNatsTableStreamName(u.schema,u.name);try{let h=Pw.join(Gw.getBaseSchemaPath(),i.schema.toString()),S=await sS.openEnvironment(h,i.name),A=sS.statDBI(S,i.hash_attribute);i.record_count=A.entryCount}catch(h){Bt.warn(`unable to stat table dbi due to ${h}`)}}catch(E){Bt.error(`There was an error getting attributes for table '${u.name}'`),Bt.error(E)}return i}a(Ti,"descTable");function kw(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(kw,"getAttrsByPerms");async function Yw(e){let t=iS.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:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:x.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Go,search_value:s,hash_values:[],get_attributes:[_S,x.ID_ATTRIBUTE_STRING,Ur,Go]},i=await Ls(n);if(i&&i.length<1){let o={schema:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:x.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[Ur]},_=await qw(o);if(_&&_.length<1)throw Si(new Error,hi.SCHEMA_NOT_FOUND(e.schema),oS.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 Ti({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(Yw,"describeSchema")});var Ri=d((Uv,SS)=>{var wv=require("async"),Dr=Xt(),yv=p(),{callbackify:lS,promisify:$w}=require("util");SS.exports={setSchemaDataToGlobal:uS,getTableSchema:Qw,getSystemSchema:Xw,setSchemaDataToGlobalAsync:$w(uS)};var dS=fi(),Kw=lS(dS.describeAll),Ww=lS(dS.describeTable);function uS(e){Kw(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Dr),global.hdb_schema=r,e(null,null)})}a(uS,"setSchemaDataToGlobal");function ES(e,t){return e==="system"?Dr[t]:global.hdb_schema[e][t]}a(ES,"returnSchema");function Qw(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?Jw(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,ES(e,t))}):r(null,ES(e,t))}a(Qw,"getTableSchema");function Jw(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=Dr:global.hdb_schema={system:Dr},r();return}Ww(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:Dr}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(Jw,"setTableDataToGlobal");function Xw(){return Dr}a(Xw,"getSystemSchema")});var Oi=d((Dv,fS)=>{"use strict";var Ai=Ma(),xe=g(),Zw=require("util"),Ni=jt(),zw=Ri(),qo=p(),{handleHDBError:Ht,hdb_errors:jw}=q(),{HTTP_STATUS_CODES:tr}=jw,ey=Zw.promisify(zw.getTableSchema),ty="updated",hS="inserted",TS="upserted";fS.exports={insert:sy,update:ny,upsert:iy,validation:ry,flush:ay};async function ry(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 ey(e.schema,e.table),r=Ai(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 qo.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 qo.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(ry,"validation");async function sy(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Ai(e);if(t)throw Ht(new Error,t.message,tr.BAD_REQUEST);let r=xe.checkSchemaTableExist(e.schema,e.table);if(r)throw Ht(new Error,r,tr.BAD_REQUEST);try{let s=await Ni.createRecords(e);return mi(hS,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}a(sy,"insertData");async function ny(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Ai(e);if(t)throw Ht(new Error,t.message,tr.BAD_REQUEST);let r=xe.checkSchemaTableExist(e.schema,e.table);if(r)throw Ht(new Error,r,tr.BAD_REQUEST);try{let s=await Ni.updateRecords(e);return xe.isEmpty(s.existing_rows)?mi(ty,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):mi(s.update_action,[],e,s.hashes,void 0,s.txn_time)}catch(s){throw s}}a(ny,"updateData");async function iy(e){if(e.operation!=="upsert")throw Ht(new Error,"invalid operation, must be upsert",tr.INTERNAL_SERVER_ERROR);let t=Ai(e);if(t)throw Ht(new Error,t.message,tr.BAD_REQUEST);let r=xe.checkSchemaTableExist(e.schema,e.table);if(r)throw Ht(new Error,r,tr.BAD_REQUEST);try{let s=await Ni.upsertRecords(e);return mi(TS,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,qo.ERR,n)}}a(iy,"upsertData");function mi(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===hS?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===TS?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(mi,"returnObject");function ay(e){return Ni.flush(e.schema,e.table)}a(ay,"flush")});var mS=d((Mv,RS)=>{var oy=We(),_y={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};RS.exports=function(e){return oy.validateObject(e,_y)}});var gS=d((Pv,OS)=>{var cy=We(),Fo=require("joi"),{hdb_schema_table:AS}=Kt(),NS={schema:AS,table:AS},uy={date:Fo.date().iso().required()},Ey={timestamp:Fo.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};OS.exports=function(e,t){let r=t==="timestamp"?{...NS,...Ey}:{...NS,...uy},s=Fo.object(r);return cy.validateBySchema(e,s)}});var bS=d((Bv,CS)=>{var ly=We(),pS=require("joi"),{hdb_schema_table:IS}=Kt(),dy=pS.object({schema:IS,table:IS,hash_values:pS.array().required()});CS.exports=function(e){return ly.validateBySchema(e,dy)}});var wS=d((Hv,LS)=>{"use strict";var gi=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(gi,"InsertObject");var pi=class{constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}};a(pi,"NoSQLSeachObject");var Ii=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(Ii,"DeleteResponseObject");LS.exports={InsertObject:gi,NoSQLSeachObject:pi,DeleteResponseObject:Ii}});var ko=d((vv,PS)=>{"use strict";var US=gS(),Sy=bS(),Ci=g(),yS=require("moment"),DS=p(),{promisify:hy,callbackify:Ty}=require("util"),rr=f(),fy=Ri(),xo=hy(fy.getTableSchema),Vo=jt(),{DeleteResponseObject:Ry}=wS(),{handleHDBError:vt,hdb_errors:my}=q(),{HDB_ERROR_MSGS:bi,HTTP_STATUS_CODES:Gt}=my,Ay="records successfully deleted",Ny=Ty(MS);PS.exports={delete:Ny,deleteRecord:MS,deleteFilesBefore:Oy,deleteAuditLogsBefore:gy};async function Oy(e){let t=US(e,"date");if(t)throw vt(t,t.message,Gt.BAD_REQUEST,void 0,void 0,!0);if(!yS(e.date,yS.ISO_8601).isValid())throw vt(new Error,bi.INVALID_DATE,Gt.BAD_REQUEST,rr.LOG_LEVELS.ERROR,bi.INVALID_DATE,!0);let s=Ci.checkSchemaTableExist(e.schema,e.table);if(s)throw vt(new Error,s,Gt.NOT_FOUND,rr.LOG_LEVELS.ERROR,s,!0);try{let n=await Vo.deleteRecordsBefore(e);if(await xo(e.schema,e.table),DS.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}a(Oy,"deleteFilesBefore");async function gy(e){let t=US(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,bi.INVALID_VALUE("Timestamp"),Gt.BAD_REQUEST,rr.LOG_LEVELS.ERROR,bi.INVALID_VALUE("Timestamp"),!0);let r=Ci.checkSchemaTableExist(e.schema,e.table);if(r)throw vt(new Error,r,Gt.NOT_FOUND,rr.LOG_LEVELS.ERROR,r,!0);try{let s=await Vo.deleteAuditLogsBefore(e);return await xo(e.schema,e.table),DS.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}a(gy,"deleteAuditLogsBefore");async function MS(e){let t=Sy(e);if(t)throw vt(t,t.message,Gt.BAD_REQUEST,void 0,void 0,!0);let r=Ci.checkSchemaTableExist(e.schema,e.table);if(r)throw vt(new Error,r,Gt.NOT_FOUND,rr.LOG_LEVELS.ERROR,r,!0);try{await xo(e.schema,e.table);let s=await Vo.deleteRecords(e);return Ci.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${Ay}`),s}catch(s){if(s.message===rr.SEARCH_NOT_FOUND_MESSAGE){let n=new Ry;return n.message=rr.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(MS,"deleteRecord")});var Li=d((Gv,vS)=>{var py=require("crypto"),BS=9;function Iy(e){let t=by(BS),r=HS(e+t);return t+r}a(Iy,"createHash");function Cy(e,t){let r=e.substr(0,BS),s=r+HS(t+r);return e===s}a(Cy,"validateHash");function by(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(by,"generateSalt");function HS(e){return py.createHash("md5").update(e).digest("hex")}a(HS,"md5");vS.exports={hash:Iy,validate:Cy}});var qS=d((qv,GS)=>{var Yo=We(),fe={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 Ly(e){return fe.password.presence=!0,fe.username.presence=!0,fe.role.presence=!0,fe.active.presence=!0,Yo.validateObject(e,fe)}a(Ly,"addUserValidation");function wy(e){return fe.password.presence=!1,fe.username.presence=!0,fe.role.presence=!1,fe.active.presence=!1,Yo.validateObject(e,fe)}a(wy,"alterUserValidation");function yy(e){return fe.password.presence=!1,fe.username.presence=!0,fe.role.presence=!1,fe.active.presence=!1,Yo.validateObject(e,fe)}a(yy,"dropUserValidation");GS.exports={addUserValidation:Ly,alterUserValidation:wy,dropUserValidation:yy}});var Re=d((xv,xS)=>{"use strict";var{platform:Fv}=require("os"),Uy="nats-server.zip",$o="nats-server",Dy=process.platform==="win32"?`${$o}.exe`:$o,Ko="HDB",My=/^[^\s.,*>]+$/,FS="__request__",Py=a(e=>`${e}.${FS}`,"REQUEST_SUBJECT"),By={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Hy={HUB:"hub.pid",LEAF:"leaf.pid"},vy={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Gy={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Ko,deliver_subject:"__HDB__.WORKQUEUE"},qy={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Ko,deliver_subject:"HDB.SCHEMAQUEUE"},Fy={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Ko,deliver_subject:"HDB.USERQUEUE"},xy={SUCCESS:"success",ERROR:"error"},Vy={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},ky={TXN:"txn",MSGID:"msgid"};xS.exports={NATS_SERVER_ZIP:Uy,NATS_SERVER_NAME:$o,NATS_BINARY_NAME:Dy,PID_FILES:Hy,NATS_CONFIG_FILES:By,SERVER_SUFFIX:vy,WORK_QUEUE_CONSUMER_NAMES:Gy,SCHEMA_QUEUE_CONSUMER_NAMES:qy,USER_QUEUE_CONSUMER_NAMES:Fy,NATS_TERM_CONSTRAINTS_RX:My,REQUEST_SUFFIX:FS,UPDATE_REMOTE_RESPONSE_STATUSES:xy,CLUSTER_STATUS_STATUSES:Vy,REQUEST_SUBJECT:Py,SUBJECT_PREFIXES:ky}});var kS=d((Vv,VS)=>{"use strict";var qt=f(),ws=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(ws,"BaseLicense");var wi=class extends ws{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(wi,"ExtendedLicense");VS.exports={BaseLicense:ws,ExtendedLicense:wi}});var Zo=d((kv,JS)=>{"use strict";var Pr=require("fs-extra"),YS=Li(),$S=require("crypto"),Yy=require("moment"),$y=require("uuid").v4,me=p(),Qo=require("path"),Ky=g(),Be=f(),Wy=kS().ExtendedLicense,Mr="invalid license key format",Qy="061183",Jy="mofi25",Xy="aes-256-cbc",Zy=16,zy=32,KS=Q();KS.initSync();var Wo;JS.exports={validateLicense:WS,generateFingerPrint:eU,licenseSearch:QS,getLicense:sU};function Jo(){return Qo.join(KS.getHdbBasePath(),Be.LICENSE_KEY_DIR_NAME,Be.LICENSE_FILE_NAME)}a(Jo,"getLicenseDirPath");function jy(){let e=Jo();return Qo.join(e,Be.LICENSE_FILE_NAME)}a(jy,"getLicenseFilePath");function Xo(){let e=Jo();return Qo.join(e,Be.REG_KEY_FILE_NAME)}a(Xo,"getFingerPrintFilePath");async function eU(){let e=Xo();try{return await Pr.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await tU();throw me.error(`Error writing fingerprint file to ${e}`),me.error(t),new Error("There was an error generating the fingerprint")}}a(eU,"generateFingerPrint");async function tU(){let e=$y(),t=YS.hash(e),r=Xo();try{await Pr.mkdirp(Jo()),await Pr.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw me.error(`Error writing fingerprint file to ${r}`),me.error(s),new Error("There was an error generating the fingerprint")}return t}a(tU,"writeFingerprint");function WS(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Be.STORAGE_TYPES_ENUM.LMDB,api_call:Be.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Be.RAM_ALLOCATION_ENUM.DEFAULT,version:Be.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return me.error("empty license key passed to validate."),r;let s=Xo(),n=!1;try{n=Pr.statSync(s)}catch(i){me.error(i)}if(n){let i;try{i=Pr.readFileSync(s,"utf8")}catch{me.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(Jy),_=o[1];_=Buffer.concat([Buffer.from(_)],Zy);let c=Buffer.concat([Buffer.from(i)],zy),u=$S.createDecipheriv(Xy,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 S=rU(o[0],i);if(S)E=S;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Mr),me.error(Mr),new Error(Mr)}let l;if(isNaN(E))try{l=JSON.parse(E),r.api_call=l.api_call,r.version=l.version,r.storage_type=l.storage_type,r.exp_date=l.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),l.ram_allocation&&(r.ram_allocation=l.ram_allocation)}catch{throw console.error(Mr),me.error(Mr),new Error(Mr)}else r.exp_date=E;r.exp_date<Yy().valueOf()&&(r.valid_date=!1),YS.validate(o[1],`${Qy}${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(WS,"validateLicense");function rU(e,t){try{let r=$S.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(rU,"checkOldLicense");function QS(){let e=new Wy;e.api_call=0;let t=[];try{t=Pr.readFileSync(jy(),"utf-8").split(Be.NEW_LINE)}catch(r){r.code==="ENOENT"?me.info("no license file found"):me.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(Ky.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=WS(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.api_call+=i.api_call,e.ram_allocation=i.ram_allocation,e.storage_type=i.storage_type,e.enterprise=!0)}catch(n){me.error("There was an error parsing the license string."),me.error(n),e.api_call=Be.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Be.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Be.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Be.LICENSE_VALUES.API_CALL_DEFAULT),Wo=e,e}a(QS,"licenseSearch");async function sU(){return Wo||await QS(),Wo}a(sU,"getLicense")});var Us=d((Yv,ch)=>{"use strict";var jS="username is required",eh="nothing to update, must supply active, role or password to update",th="password cannot be an empty string",rh="If role is specified, it cannot be empty.",sh="active must be true or false";ch.exports={addUser:EU,alterUser:lU,dropUser:SU,userInfo:hU,listUsers:Ui,listUsersExternal:TU,setUsersToGlobal:ys,findAndValidateUser:mU,getClusterUser:AU,USERNAME_REQUIRED:jS,ALTERUSER_NOTHING_TO_UPDATE:eh,EMPTY_PASSWORD:th,EMPTY_ROLE:rh,ACTIVE_BOOLEAN:sh};var nh=Oi(),nU=ko(),jo=Li(),ih=qS(),ah=Is(),e_=us(),re=g(),oh=require("validate.js"),w=p(),{promisify:t_}=require("util"),r_=bs(),sr=f(),XS=Re(),iU=zr(),s_=Q(),aU=Zo(),oU=Xt(),{handleHDBError:ct,hdb_errors:_U}=q(),{HTTP_STATUS_CODES:ut,AUTHENTICATION_ERROR_MSGS:zo,HDB_ERROR_MSGS:Br}=_U,{UserEventMsg:n_}=mr(),ZS=require("lodash"),_h={username:!0,active:!0,role:!0,password:!0},zS=new Map,yi=t_(ah.searchByValue),cU=t_(ah.searchByHash),uU=t_(nU.delete);async function EU(e){let t=oh.cleanAttributes(e,_h),r=ih.addUserValidation(t);if(r)throw ct(new Error,r.message,ut.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await yi(s)}catch(u){throw w.error("There was an error searching for a role in add user"),w.error(u),u}if(!n||n.length<1)throw ct(new Error,Br.ROLE_NAME_NOT_FOUND(t.role),ut.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw ct(new Error,Br.DUP_ROLES_FOUND(t.role),ut.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=r_.encrypt(t.password)),t.password=jo.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await nh.insert(i)}catch(u){throw w.error("There was an error searching for a user."),w.error(u),u}w.debug(o);try{await ys()}catch(u){throw w.error("Got an error setting users to global"),w.error(u),u}if(o.skipped_hashes.length===1)throw ct(new Error,Br.USER_ALREADY_EXISTS(t.username),ut.CONFLICT,void 0,void 0,!0);let _=Object.assign({},t);_.role=n[0];let c={user:null};return c.user=_,re.sendTransactionToSocketCluster(sr.INTERNAL_SC_CHANNELS.ADD_USER,c,s_.get(sr.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),e_.signalUserChange(new n_(process.pid)),`${_.username} successfully added`}a(EU,"addUser");async function lU(e){let t=oh.cleanAttributes(e,_h);if(re.isEmptyOrZeroLength(t.username))throw new Error(jS);if(re.isEmptyOrZeroLength(t.password)&&re.isEmptyOrZeroLength(t.role)&&re.isEmptyOrZeroLength(t.active))throw new Error(eh);if(!re.isEmpty(t.password)&&re.isEmptyOrZeroLength(t.password.trim()))throw new Error(th);if(!re.isEmpty(t.active)&&!re.isBoolean(t.active))throw new Error(sh);let r=dU(t.username);if(!re.isEmpty(t.password)&&!re.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=r_.encrypt(t.password)),t.password=jo.hash(t.password)),t.role==="")throw new Error(rh);if(t.role){let o={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},_;try{_=await yi(o)}catch(c){throw w.error("Got an error searching for a role."),w.error(c),c}if(!_||_.length===0){let c=Br.ALTER_USER_ROLE_NOT_FOUND(t.role);throw w.error(c),ct(new Error,c,ut.NOT_FOUND,void 0,void 0,!0)}if(_.length>1){let c=Br.ALTER_USER_DUP_ROLES(t.role);throw w.error(c),ct(new Error,c,ut.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 nh.update(s)}catch(o){throw w.error("Error during update."),w.error(o),o}try{await ys()}catch(o){throw w.error("Got an error setting users to global"),w.error(o),o}let i={user:null};return i.user=t,re.sendTransactionToSocketCluster(sr.INTERNAL_SC_CHANNELS.ALTER_USER,i,s_.get(sr.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),e_.signalUserChange(new n_(process.pid)),n}a(lU,"alterUser");function dU(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(dU,"isClusterUser");async function SU(e){try{let t=ih.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(re.isEmpty(global.hdb_users.get(e.username)))throw ct(new Error,Br.USER_NOT_EXIST(e.username),ut.NOT_FOUND,void 0,void 0,!0);let s;try{s=await uU(r)}catch(i){throw w.error("Got an error deleting a user."),w.error(i),i}w.debug(s);try{await ys()}catch(i){throw w.error("Got an error setting users to global."),w.error(i),i}let n={user:null};return n.user=e,re.sendTransactionToSocketCluster(sr.INTERNAL_SC_CHANNELS.DROP_USER,n,s_.get(sr.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),e_.signalUserChange(new n_(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(SU,"dropUser");async function hU(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 cU(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(hU,"userInfo");async function TU(){let e;try{e=await Ui()}catch(t){throw w.error("Got an error listing users."),w.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(TU,"listUsersExternal");async function Ui(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=ZS.cloneDeep(await yi(e))}catch(r){throw w.error("Got an error searching for roles."),w.error(r),r}if(!re.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=ZS.cloneDeep(await yi(s))}catch(o){throw w.error("Got an error searching for users."),w.error(o),o}let i=new Map;for(let o in n){let _=n[o];_.role=r[n[o].role],fU(_.role),i.set(_.username,_)}return(await aU.getLicense()).enterprise?i:RU(i)}}catch(e){throw w.error("got an error listing users"),w.error(e),re.errorizeMessage(e)}return null}a(Ui,"listUsers");function fU(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(oU)){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(fU,"appendSystemTablesToRole");function RU(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(RU,"nonEnterpriseFilter");async function ys(){try{let e=await Ui();global.hdb_users=e}catch(e){throw w.error(e),e}}a(ys,"setUsersToGlobal");async function mU(e,t,r=!0){global.hdb_users||await ys();let s=global.hdb_users.get(e);if(!s)throw ct(new Error,zo.GENERIC_AUTH_FAIL,ut.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw ct(new Error,zo.USER_INACTIVE,ut.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(zS.get(t)===s.password)return n;if(jo.validate(s.password,t))zS.set(t,s.password);else throw ct(new Error,zo.GENERIC_AUTH_FAIL,ut.UNAUTHORIZED,void 0,void 0,!0)}return n}a(mU,"findAndValidateUser");async function AU(){let e=await Ui(),t=iU.getConfigFromFile(sr.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!re.isEmpty(r))return r.decrypt_hash=r_.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+XS.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+XS.SERVER_SUFFIX.ADMIN,r}a(AU,"getClusterUser")});var Eh=d(($v,uh)=>{"use strict";var NU=f().OPERATIONS_ENUM,Di=class{constructor(t,r,s,n=void 0){this.operation=NU.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Di,"UpdateObject");uh.exports=Di});var dh=d((Kv,lh)=>{"use strict";var OU={OPERATION:"operation",REFRESH:"refresh"},Mi=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(Mi,"JWTTokens");var Pi=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(Pi,"JWTRSAKeys");lh.exports={JWTTokens:Mi,TOKEN_TYPE_ENUM:OU,JWTRSAKeys:Pi}});var Rh=d((Wv,fh)=>{"use strict";var Ms=require("jsonwebtoken"),i_=require("fs-extra"),a_=g(),Ve=f(),{handleHDBError:be,hdb_errors:gU}=q(),{HTTP_STATUS_CODES:Le,AUTHENTICATION_ERROR_MSGS:we}=gU,Ds=p(),Sh=Li(),c_=Us(),pU=Oi().update,IU=Eh(),CU=us(),{UserEventMsg:bU}=mr(),Ft=Q();Ft.initSync();var o_=require("path"),{JWTTokens:LU,JWTRSAKeys:wU,TOKEN_TYPE_ENUM:Bi}=dh(),yU=Ft.get(Ve.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Ft.get(Ve.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",UU=Ft.get(Ve.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Ft.get(Ve.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Hi="RS256",__;fh.exports={createTokens:DU,validateOperationToken:PU,refreshOperationToken:MU,validateRefreshToken:Th};async function DU(e){if(a_.isEmpty(e)||typeof e!="object")throw be(new Error,we.INVALID_AUTH_OBJECT,Le.BAD_REQUEST,void 0,void 0,!0);if(a_.isEmpty(e.username))throw be(new Error,we.USERNAME_REQUIRED,Le.BAD_REQUEST,void 0,void 0,!0);if(a_.isEmpty(e.password))throw be(new Error,we.PASSWORD_REQUIRED,Le.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await c_.findAndValidateUser(e.username,e.password),!t)throw be(new Error,we.INVALID_CREDENTIALS,Le.UNAUTHORIZED,void 0,void 0,!0)}catch(h){throw Ds.error(h),be(new Error,we.INVALID_CREDENTIALS,Le.UNAUTHORIZED,void 0,void 0,!0)}let r=await vi(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await hh(i,r.private_key,r.passphrase),_=await Ms.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:UU,algorithm:Hi,subject:Bi.REFRESH}),c=Sh.hash(_),u=new IU(Ve.SYSTEM_SCHEMA_NAME,Ve.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:c}]),E,l;try{E=await pU(u)}catch(h){Ds.error(h),l=h}if(l!==void 0||E.skipped_hashes.length>0)throw be(new Error,we.REFRESH_TOKEN_SAVE_FAILED,Le.INTERNAL_SERVER_ERROR);return CU.signalUserChange(new bU(process.pid)),new LU(o,_)}a(DU,"createTokens");async function hh(e,t,r){return await Ms.sign(e,{key:t,passphrase:r},{expiresIn:yU,algorithm:Hi,subject:Bi.OPERATION})}a(hh,"signOperationToken");async function vi(){if(__===void 0)try{let e=o_.join(Ft.getHdbBasePath(),Ve.LICENSE_KEY_DIR_NAME,Ve.JWT_ENUM.JWT_PASSPHRASE_NAME),t=o_.join(Ft.getHdbBasePath(),Ve.LICENSE_KEY_DIR_NAME,Ve.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=o_.join(Ft.getHdbBasePath(),Ve.LICENSE_KEY_DIR_NAME,Ve.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await i_.readFile(e)).toString(),n=(await i_.readFile(t)).toString(),i=(await i_.readFile(r)).toString();__=new wU(i,n,s)}catch(e){throw Ds.error(e),be(new Error,we.NO_ENCRYPTION_KEYS,Le.INTERNAL_SERVER_ERROR)}return __}a(vi,"getJWTRSAKeys");async function MU(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 Th(e.refresh_token);let t=await vi(),r=await Ms.decode(e.refresh_token);return{operation_token:await hh({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(MU,"refreshOperationToken");async function PU(e){try{let t=await vi(),r=await Ms.verify(e,t.public_key,{algorithms:Hi,subject:Bi.OPERATION});return await c_.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Ds.warn(t),t.name&&t.name==="TokenExpiredError"?be(new Error,we.TOKEN_EXPIRED,Le.FORBIDDEN):be(new Error,we.INVALID_TOKEN,Le.UNAUTHORIZED)}}a(PU,"validateOperationToken");async function Th(e){let t;try{let r=await vi(),s=await Ms.verify(e,r.public_key,{algorithms:Hi,subject:Bi.REFRESH});t=await c_.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Ds.warn(r),r.name&&r.name==="TokenExpiredError"?be(new Error,we.TOKEN_EXPIRED,Le.FORBIDDEN):be(new Error,we.INVALID_TOKEN,Le.UNAUTHORIZED)}if(!Sh.validate(t.refresh_token,e))throw be(new Error,we.INVALID_TOKEN,Le.UNAUTHORIZED);return t}a(Th,"validateRefreshToken")});var Oh=d((Jv,Nh)=>{"use strict";var BU=mS(),Hr=require("passport"),HU=require("passport-local").Strategy,vU=require("passport-http").BasicStrategy,GU=require("util"),qU=Us(),Ah=GU.callbackify(qU.findAndValidateUser),Qv=He(),FU=f(),mh=Rh();Hr.use(new HU(function(e,t,r){Ah(e,t,r)}));Hr.use(new vU(function(e,t,r){Ah(e,t,r)}));Hr.serializeUser(function(e,t){t(null,e)});Hr.deserializeUser(function(e,t){t(null,e)});function xU(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":Hr.authenticate("basic",{session:!1},(o,_)=>{i(o,_)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===FU.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?mh.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):mh.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Hr.authenticate("local",{session:!1},function(o,_){i(o,_)})(e,t,r);break}}a(xU,"authorize");function VU(e,t){let r=BU(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(VU,"checkPermissions");Nh.exports={authorize:xU,checkPermissions:VU}});var Ps=d((Xv,gh)=>{"use strict";var Gi=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(Gi,"Node");var qi=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(qi,"NodeSubscription");gh.exports={Node:Gi,NodeSubscription:qi}});var Ih=d((Zv,ph)=>{"use strict";var kU=f().OPERATIONS_ENUM,Fi=class{constructor(t,r,s,n=void 0){this.operation=kU.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Fi,"UpsertObject");ph.exports=Fi});var Bs=d((zv,Ch)=>{"use strict";var xi=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(xi,"RemotePayloadObject");var Vi=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(Vi,"RemotePayloadSubscription");Ch.exports={RemotePayloadObject:xi,RemotePayloadSubscription:Vi}});var Lh=d((jv,bh)=>{"use strict";var ki=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(ki,"TableSizeObject");bh.exports=ki});var Dh=d((eG,Uh)=>{"use strict";var YU=Lh(),wh=require("path"),yh=k(),$U=Se(),vr=F(),KU=p();Uh.exports=WU;async function WU(e){let t=new YU;try{let r=wh.join(yh.getBaseSchemaPath(),e.schema.toString()),s=await vr.openEnvironment(r,e.name),n=vr.statDBI(s,e.hash_attribute),i=wh.join(yh.getTransactionAuditStorePath(),e.schema.toString()),o=await vr.openEnvironment(i,e.name,!0),_=vr.statDBI(o,$U.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),c=await vr.environmentDataSize(r,e.name),u=await vr.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){KU.warn(`unable to stat table dbi due to ${r}`)}return t}a(WU,"lmdbGetTableSize")});var Ph=d((tG,Mh)=>{"use strict";var QU=f(),Yi=class{constructor(t){this.operator=QU.OPERATIONS_ENUM.SYSTEM_INFORMATION,this.attributes=t}};a(Yi,"SystemInformationOperation");Mh.exports=Yi});var Hh=d((rG,Bh)=>{"use strict";var $i=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($i,"SystemInformationObject");Bh.exports=$i});var Gh=d((nG,vh)=>{"use strict";var _e=require("systeminformation"),Gr=p(),JU=f(),XU=Dh(),ZU=fi(),zU=Q();zU.initSync();var sG=Ph(),jU=Hh(),Ki;vh.exports={getHDBProcessInfo:d_,getNetworkInfo:h_,getDiskInfo:S_,getMemoryInfo:l_,getCPUInfo:E_,getTimeInfo:u_,getSystemInformation:T_,systemInformation:eD,getTableSize:f_};function u_(){return _e.time()}a(u_,"getTimeInfo");async function E_(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:_,socket:c,cache:u,...E}=await _e.cpu();E.cpu_speed=await _e.cpuCurrentSpeed();let{raw_currentload:l,raw_currentload_idle:h,raw_currentload_irq:S,raw_currentload_nice:A,raw_currentload_system:N,raw_currentload_user:b,cpus:Ae,...v}=await _e.currentLoad();return v.cpus=[],Ae.forEach(W=>{let{raw_load:$e,raw_load_idle:Ks,raw_load_irq:$_,raw_load_nice:K_,raw_load_system:W_,raw_load_user:Ws,...Ct}=W;v.cpus.push(Ct)}),E.current_load=v,E}catch(e){return Gr.error(`error in getCPUInfo: ${e}`),{}}}a(E_,"getCPUInfo");async function l_(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await _e.mem();return n}catch(e){return Gr.error(`error in getMemoryInfo: ${e}`),{}}}a(l_,"getMemoryInfo");async function d_(){let e={core:[],clustering:[]};try{return(await _e.processes()).list.forEach(r=>{r.params.includes(JU.HDB_PROC_NAME)?e.core.push(r):r.params.includes("socketcluster")&&e.clustering.push(r)}),e}catch(t){return Gr.error(`error in getHDBProcessInfo: ${t}`),e}}a(d_,"getHDBProcessInfo");async function S_(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await _e.disksIO();e.io=i;let{rx_sec:o,tx_sec:_,wx_sec:c,...u}=await _e.fsStats();return e.read_write=u,e.size=await _e.fsSize(),e}catch(t){return Gr.error(`error in getDiskInfo: ${t}`),e}}a(S_,"getDiskInfo");async function h_(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await _e.networkInterfaceDefault(),e.latency=await _e.inetChecksite("google.com"),(await _e.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:_,dnsSuffix:c,ieee8021xAuth:u,ieee8021xState:E,carrier_changes:l,...h}=s;e.interfaces.push(h)}),(await _e.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,..._}=s;e.stats.push(_)}),e.connections=await _e.networkConnections(),e}catch(t){return Gr.error(`error in getNetworkInfo: ${t}`),e}}a(h_,"getNetworkInfo");async function T_(){if(Ki!==void 0)return Ki;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,..._}=await _e.osInfo();e=_;let c=await _e.versions("node, npm");return e.node_version=c.node,e.npm_version=c.npm,Ki=e,Ki}catch(t){return Gr.error(`error in getSystemInformation: ${t}`),e}}a(T_,"getSystemInformation");async function f_(){let e=[],t=await ZU.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await XU(s));return e}a(f_,"getTableSize");async function eD(e){let t=new jU;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await T_(),t.time=u_(),t.cpu=await E_(),t.memory=await l_(),t.disk=await S_(),t.network=await h_(),t.harperdb_processes=await d_(),t.table_size=await f_(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await T_();break;case"time":t.time=u_();break;case"cpu":t.cpu=await E_();break;case"memory":t.memory=await l_();break;case"disk":t.disk=await S_();break;case"network":t.network=await h_();break;case"harperdb_processes":t.harperdb_processes=await d_();break;case"table_size":t.table_size=await f_();break;default:break}return t}a(eD,"systemInformation")});var R_=d((iG,tD)=>{tD.exports={name:"harperdb",version:"4.0.4",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{node:">=14.0.0","preferred-node":"18.13.0","go-lang":"1.19.3","nats-server":"2.9.8"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"See License in ./license/Community+Edition+and+Evaluation+End+User+License+Agreement.pdf",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ data_layer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ data_layer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license --storage_type=lmdb && npm run cover:upgrade && npm run cover:nats && npm run cover:cfserver && npm run cover:lmdbbridge && npm run cover:lmdbutility && npm run cover:hdbserver && npm run cover:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license --storage_type=lmdb","cover:main":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","cover:lmdbbridge":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/data_layer/harperBridge/lmdbBridge/**/*.js' --parallel --config '../unitTests/.mocharc.json'","cover:lmdbutility":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --config '../unitTests/.mocharc.json'","cover:hdbserver":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --config '../unitTests/.mocharc.json'","cover:cfserver":"npm run submodules && cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","cover:nats":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","cover:upgrade":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/data_layer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@fastify/accepts-serializer":"5.1.0","@fastify/autoload":"5.4.0","@fastify/compress":"6.1.1","@fastify/cors":"8.1.0","@fastify/static":"6.5.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4",async:"3.2.3","aws-sdk":"2.1096.0",chalk:"4.1.2","cli-progress":"3.10.0",clone:"2.1.2",esbuild:"^0.14.49","fast-glob":"3.2.11",fastify:"4.8.1","fastify-plugin":"4.2.1","fill-range":"7.0.1","fs-extra":"10.0.1","human-readable-ids":"1.0.4",inquirer:"8.2.2","is-number":"7.0.0",joi:"17.6.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"8.5.1",lmdb:"2.7.6",lodash:"4.17.21",mathjs:"10.4.0",microtime:"3.1.1",minimist:"1.2.6",mkcert:"1.5.0",moment:"2.29.4",msgpackr:"1.8.2",nats:"2.9.2",needle:"3.1.0","node-ipc":"9.1.4","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.3.0",papaparse:"5.3.2",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.3.1",pm2:"5.2.0",prompt:"1.2.2","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.3.5","stream-chain":"2.2.5","stream-json":"1.7.4",systeminformation:"5.12.4","tar-fs":"2.1.1","truncate-utf8-bytes":"1.0.2",ulidx:"0.3.0",uuid:"9.0.0","validate.js":"0.11.1",yaml:"1.10.2"},devDependencies:{axios:"0.27.2",chai:"4.3.4","chai-integer":"0.1.0",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1","hook-std":"2.0.0","intercept-stdout":"0.1.2",mocha:"8.3.2","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",newman:"5.2.3","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.21.0","newman-reporter-teamcity":"0.1.11","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.3.2",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.2.3"}}}});var Fh=d((_G,qh)=>{"use strict";var aG=require("fs-extra"),oG=p();qh.exports={version:rD,printVersion:nD,nodeVersion:sD};var xt=R_();function rD(){if(xt)return xt.version}a(rD,"version");function sD(){if(xt&&xt.engines&&xt.engines["preferred-node"])return xt.engines["preferred-node"]}a(sD,"nodeVersion");function nD(){xt&&console.log(`HarperDB Version ${xt.version}`)}a(nD,"printVersion")});var qr=d((EG,Yh)=>{"use strict";var iD=Oi(),m_=g(),A_=require("util"),nr=f(),xh=Q();xh.initSync();var aD=Oh(),Vh=Is(),{Node:cG,NodeSubscription:uG}=Ps(),oD=fs(),_D=Ih(),{RemotePayloadObject:cD,RemotePayloadSubscription:uD}=Bs(),{handleHDBError:ED,hdb_errors:lD}=q(),{HTTP_STATUS_CODES:dD,HDB_ERROR_MSGS:SD}=lD,hD=At(),TD=Gh(),fD=Fh(),RD=A_.promisify(aD.authorize),mD=A_.promisify(Vh.searchByHash),AD=A_.promisify(Vh.searchByValue);Yh.exports={authHeaderToUser:ND,isEmpty:OD,getNodeRecord:gD,upsertNodeRecord:pD,buildNodePayloads:ID,checkClusteringEnabled:CD,getAllNodeRecords:bD,getSystemInfo:LD,reverseSubscription:kh};async function ND(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await RD(t,null),e}a(ND,"authHeaderToUser");function OD(e){return e==null}a(OD,"isEmpty");async function gD(e){let t=new oD(nr.SYSTEM_SCHEMA_NAME,nr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return mD(t)}a(gD,"getNodeRecord");async function pD(e){let t=new _D(nr.SYSTEM_SCHEMA_NAME,nr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return iD.upsert(t)}a(pD,"upsertNodeRecord");function kh(e){if(m_.isEmpty(e.subscribe)||m_.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(kh,"reverseSubscription");function ID(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let _=e[i],{schema:c,table:u}=_,E=m_.getTableHashAttribute(c,u),{subscribe:l,publish:h}=kh(_),S=new uD(c,u,E,h,l,_.start_time);n.push(S)}return new cD(r,t,n,s)}a(ID,"buildNodePayloads");function CD(){if(!xh.get(nr.CONFIG_PARAMS.CLUSTERING_ENABLED))throw ED(new Error,SD.CLUSTERING_NOT_ENABLED,dD.BAD_REQUEST,void 0,void 0,!0)}a(CD,"checkClusteringEnabled");async function bD(){let e=new hD(nr.SYSTEM_SCHEMA_NAME,nr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return AD(e)}a(bD,"getAllNodeRecords");async function LD(){let e=await TD.getSystemInformation();return{hdb_version:fD.version(),node_version:e.node_version,platform:e.platform}}a(LD,"getSystemInfo")});var Kh=d((lG,$h)=>{"use strict";var wD=jt();$h.exports={writeTransaction:yD};function yD(e,t,r){return wD.writeTransaction(e,t,r)}a(yD,"writeTransaction")});var Vt=d((gG,lT)=>{"use strict";var Et=Q();Et.initSync();var UD=require("fs-extra"),DD=require("semver"),Fs=require("path"),{monotonicFactory:MD}=require("ulidx"),PD=MD(),Qh=require("util"),Jh=require("child_process"),BD=Qh.promisify(Jh.exec),HD=Jh.spawn,V=Re(),$=f(),C_=g(),gt=p(),Wi=bs(),vD=Kh(),Hs=zr(),{encode:g_,decode:Xh}=require("msgpackr"),{isEmpty:ir}=C_,Zh=Us(),dG=fs(),GD=Is(),SG=Qh.promisify(GD.searchByHash),{connect:qD,StorageType:zh,RetentionPolicy:jh,AckPolicy:eT,DeliverPolicy:p_,NatsConnection:hG,JetStreamManager:TG,JetStreamClient:fG,StringCodec:RG,JSONCodec:FD,createInbox:b_,StreamSource:mG,headers:xD,toJsMsg:VD,nuid:AG,JetStreamOptions:NG,ErrorCode:Wh,nanos:OG}=require("nats"),{PACKAGE_ROOT:kD}=f(),YD=R_(),tT=FD(),$D="clustering",KD=YD.engines[V.NATS_SERVER_NAME],WD=Fs.join(kD,"dependencies"),I_=Fs.join(WD,`${process.platform}-${process.arch}`,V.NATS_BINARY_NAME),N_,O_,vs,Gs,qs,tt;lT.exports={runCommand:rT,checkNATSServerInstalled:QD,createConnection:L_,getConnection:Qi,getJetStreamManager:Fr,getJetStream:sT,getNATSReferences:ke,getServerList:XD,createLocalStream:w_,listStreams:nT,deleteLocalStream:ZD,getServerConfig:xs,listRemoteStreams:zD,viewStream:jD,publishToStream:eM,createWorkQueueStream:tM,addSourceToWorkStream:iT,request:rM,removeSourceFromWorkStream:oT,reloadNATS:y_,reloadNATSHub:sM,reloadNATSLeaf:nM,extractServerName:aT,requestErrorHandler:iM,updateWorkStream:aM,createLocalTableStream:cT,createTableStreams:oM,purgeTableStream:uT,purgeSchemaTableStreams:_M,getStreamInfo:cM,updateNodeNameLocalStreams:uM,closeConnection:JD};async function rT(e,t=void 0){let{stdout:r,stderr:s}=await BD(e,{cwd:t});if(s)throw new Error(s.replace(`
1
+ "use strict";var Df=Object.defineProperty;var a=(e,t)=>Df(e,"name",{value:t,configurable:!0});var S=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var f=S((zP,sc)=>{"use strict";var de=require("path"),Mf=require("fs");function Pf(){let e=__dirname;for(;!Mf.existsSync(de.join(e,"package.json"));){let t=de.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(Pf,"getHDBPackageRoot");var Ye=Pf(),Y_="js",Kr=Y_,Bf="harperdb-config.yaml",Hf="defaultConfig.yaml",vf="hdb",K_=`hdbServer.${Kr}`,W_=`customFunctionsServer.${Kr}`,Q_=`hdbIpcServer.${Kr}`,Gf=`restartHdb.${Kr}`,ma="HarperDB",Ws="Custom Functions",Qs="Clustering Hub",Xs="Clustering Leaf",Aa="Clustering Ingest Service",Na="Clustering Reply Service",qf="foreground.pid",Ra={HDB:ma,IPC:"IPC",CLUSTERING_HUB:Qs,CLUSTERING_LEAF:Xs,CLUSTERING_INGEST_SERVICE:Aa,CLUSTERING_REPLY_SERVICE:Na,CUSTOM_FUNCTIONS:Ws,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"},Ff={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"},xf={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},Vf={harperdb:ma,ipc:"IPC","clustering hub":Qs,"clustering leaf":Xs,"clustering ingest service":Aa,"clustering reply service":Na,"custom functions":Ws,custom_functions:Ws,"pm2-logrotate":Ra.PM2_LOGROTATE,logrotate:Ra.PM2_LOGROTATE,clustering:"clustering","clustering config":"clustering config"},kf={CLUSTERING_HUB_PROC_DESCRIPTOR:Qs,CLUSTERING_LEAF_PROC_DESCRIPTOR:Xs,CLUSTERING_INGEST_PROC_DESCRIPTOR:Aa,CLUSTERING_REPLY_SERVICE_DESCRIPTOR:Na},Ks={HDB:de.join(Ye,"server/harperdb"),IPC:de.join(Ye,"server/ipc"),CUSTOM_FUNCTIONS:de.join(Ye,"server/customFunctions"),CLUSTERING_HUB:de.join(Ye,"server/nats"),CLUSTERING_LEAF:de.join(Ye,"server/nats")},$f={HDB:de.join(Ks.HDB,K_),IPC:de.join(Ks.IPC,Q_),CUSTOM_FUNCTIONS:de.join(Ks.CUSTOM_FUNCTIONS,W_)},Yf={HDB:de.join(Ye,"launchServiceScripts/launchHarperDB.js"),CUSTOM_FUNCTIONS:de.join(Ye,"launchServiceScripts/launchCustomFunctions.js"),NATS_INGEST_SERVICE:de.join(Ye,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:de.join(Ye,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:de.resolve(Ye,"launchServiceScripts/launchUpdateNodes4-0-0.js")},Kf={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},X_="support@harperdb.io",Wf="customer-success@harperdb.io",J_=1,Qf=4141,Z_="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",Xf="https://www.harperdb.io/product",Jf=`For support, please submit a request at ${Z_} or contact ${X_}`,z_=`For license support, please contact ${Wf}`,Zf="None of the specified records were found.",zf="hash attribute not found",jf=`Your current license only supports ${J_} role. ${z_}`,eR="Your current license only supports 3 connections to a node.",tR="127.0.0.1",rR=1,sR=/^\.$/,nR=/^\.\.$/,iR="U+002E",aR=/\//g,oR="U+002F",_R=/U\+002F/g,cR=/^U\+002E$/,uR=/^U\+002EU\+002E$/,ER="d",lR=999999,dR="*",SR="--max-old-space-size=",hR="system",TR="__hdb_hash",fR=".harperdb",RR=".hdb",mR="keys",AR="hdb_boot_properties.file",NR=".updateConfig.json",OR="SIGTSTP",gR=24,pR=6e4,IR=448,CR="blob",bR="trash",LR="schema",wR="transactions",yR=".count",UR="id",DR="install_log.log",MR="run_log.log",PR="PROCESS_NAME",BR={SETTINGS_PATH_KEY:"settings_path"},j_=require("lodash"),HR={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"},vR={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},GR={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},qR={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"},FR={JOB_TABLE_HASH_ATTRIBUTE:"id",NODE_TABLE_HASH_ATTRIBUTE:"name",ATTRIBUTE_TABLE_HASH_ATTRIBUTE:"id",LICENSE_TABLE_HASH_ATTRIBUTE:"license_key",ROLE_TABLE_HASH_ATTRIBUTE:"id",SCHEMA_TABLE_HASH_ATTRIBUTE:"name",TABLE_TABLE_HASH_ATTRIBUTE:"id",USER_TABLE_HASH_ATTRIBUTE:"username",INFO_TABLE_ATTRIBUTE:"info_id"},ye="hdb_internal:",xR={CREATE_SCHEMA:ye+"create_schema",CREATE_TABLE:ye+"create_table",CREATE_ATTRIBUTE:ye+"create_attribute",ADD_USER:ye+"add_user",ALTER_USER:ye+"alter_user",DROP_USER:ye+"drop_user",HDB_NODES:ye+"hdb_nodes",HDB_USERS:ye+"hdb_users",HDB_WORKERS:ye+"hdb_workers",CATCHUP:ye+"catchup",SCHEMA_CATCHUP:ye+"schema_catchup",WORKER_ROOM:ye+"cluster_workers"},VR={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"},kR="060493.ks",$R=".license",YR={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"},KR={CSV:".csv",JSON:".json"},WR={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key"},QR={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},gt={};gt[R.CREATE_SCHEMA]=R.CREATE_SCHEMA;gt[R.CREATE_TABLE]=R.CREATE_TABLE;gt[R.CREATE_ATTRIBUTE]=R.CREATE_ATTRIBUTE;gt[R.INSERT]=R.INSERT;gt[R.UPDATE]=R.UPDATE;gt[R.UPSERT]=R.UPSERT;gt[R.DELETE]=R.DELETE;var H=Object.create(null);H[R.DESCRIBE_ALL]=R.DESCRIBE_ALL;H[R.DESCRIBE_TABLE]=R.DESCRIBE_TABLE;H[R.DESCRIBE_SCHEMA]=R.DESCRIBE_SCHEMA;H[R.READ_LOG]=R.READ_LOG;H[R.ADD_NODE]=R.ADD_NODE;H[R.LIST_USERS]=R.LIST_USERS;H[R.LIST_ROLES]=R.LIST_ROLES;H[R.USER_INFO]=R.USER_INFO;H[R.SQL]=R.SQL;H[R.GET_JOB]=R.GET_JOB;H[R.SEARCH_JOBS_BY_START_DATE]=R.SEARCH_JOBS_BY_START_DATE;H[R.DELETE_FILES_BEFORE]=R.DELETE_FILES_BEFORE;H[R.EXPORT_LOCAL]=R.EXPORT_LOCAL;H[R.EXPORT_TO_S3]=R.EXPORT_TO_S3;H[R.CLUSTER_STATUS]=R.CLUSTER_STATUS;H[R.REMOVE_NODE]=R.REMOVE_NODE;H[R.RESTART]=R.RESTART;H[R.CUSTOM_FUNCTIONS_STATUS]=R.CUSTOM_FUNCTIONS_STATUS;H[R.GET_CUSTOM_FUNCTIONS]=R.GET_CUSTOM_FUNCTIONS;H[R.GET_CUSTOM_FUNCTION]=R.GET_CUSTOM_FUNCTION;H[R.SET_CUSTOM_FUNCTION]=R.SET_CUSTOM_FUNCTION;H[R.DROP_CUSTOM_FUNCTION]=R.DROP_CUSTOM_FUNCTION;H[R.ADD_CUSTOM_FUNCTION_PROJECT]=R.ADD_CUSTOM_FUNCTION_PROJECT;H[R.DROP_CUSTOM_FUNCTION_PROJECT]=R.DROP_CUSTOM_FUNCTION_PROJECT;H[R.PACKAGE_CUSTOM_FUNCTION_PROJECT]=R.PACKAGE_CUSTOM_FUNCTION_PROJECT;H[R.DEPLOY_CUSTOM_FUNCTION_PROJECT]=R.DEPLOY_CUSTOM_FUNCTION_PROJECT;var XR={RUN:"run",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade"},JR={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},ec={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"},ZR=j_.invert(ec),h={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"},zR={hdb_root_key:h.ROOTPATH,hdb_root:h.ROOTPATH,server_port_key:h.OPERATIONSAPI_NETWORK_PORT,server_port:h.OPERATIONSAPI_NETWORK_PORT,cert_key:h.OPERATIONSAPI_TLS_CERTIFICATE,certificate:h.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:h.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:h.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:h.OPERATIONSAPI_NETWORK_HTTPS,https_on:h.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:h.OPERATIONSAPI_NETWORK_CORS,cors_on:h.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:h.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:h.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:h.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:h.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:h.LOGGING_LEVEL,log_level:h.LOGGING_LEVEL,log_path_key:h.LOGGING_ROOT,log_path:h.LOGGING_ROOT,log_daily_rotate:h.LOGGING_ROTATION_ROTATE,log_rotate:h.LOGGING_ROTATION_ROTATE,log_rotate_max_size:h.LOGGING_ROTATION_MAXSIZE,log_rotate_retain:h.LOGGING_ROTATION_RETAIN,log_rotate_compress:h.LOGGING_ROTATION_COMPRESS,log_rotate_date_format:h.LOGGING_ROTATION_DATEFORMAT,log_rotate_rotate_module:h.LOGGING_ROTATION_ROTATEMODULE,log_rotate_worker_interval:h.LOGGING_ROTATION_WORKERINTERVAL,log_rotate_rotate_interval:h.LOGGING_ROTATION_ROTATEINTERVAL,log_rotate_timezone:h.LOGGING_ROTATION_TIMEZONE,props_env_key:h.OPERATIONSAPI_NODEENV,node_env:h.OPERATIONSAPI_NODEENV,clustering_node_name_key:h.CLUSTERING_NODENAME,node_name:h.CLUSTERING_NODENAME,clustering_enabled_key:h.CLUSTERING_ENABLED,clustering:h.CLUSTERING_ENABLED,max_http_threads:h.HTTP_THREADS,max_hdb_processes:h.HTTP_THREADS,server_timeout_key:h.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:h.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:h.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:h.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:h.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:h.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:h.LOGGING_AUDITLOG,disable_transaction_log:h.LOGGING_AUDITLOG,operation_token_timeout_key:h.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:h.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:h.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:h.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,ipc_server_port:h.IPC_NETWORK_PORT,custom_functions_enabled_key:h.CUSTOMFUNCTIONS_ENABLED,custom_functions:h.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:h.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:h.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:h.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:h.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:h.HTTP_THREADS,log_to_file:h.LOGGING_FILE,log_to_stdstreams:h.LOGGING_STDSTREAMS,run_in_foreground:h.OPERATIONSAPI_FOREGROUND,local_studio_on:h.LOCALSTUDIO_ENABLED,clustering_port:h.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:h.CLUSTERING_USER,clustering_enabled:h.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:h.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:h.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:h.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:h.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:h.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:h.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:h.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_nodename:h.CLUSTERING_NODENAME,clustering_tls_certificate:h.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:h.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:h.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:h.CLUSTERING_TLS_INSECURE,customfunctions_enabled:h.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:h.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:h.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:h.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:h.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:h.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:h.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:h.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:h.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:h.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:h.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:h.CUSTOMFUNCTIONS_NODEENV,http_threads:h.HTTP_THREADS,customfunctions_processes:h.HTTP_THREADS,customfunctions_root:h.CUSTOMFUNCTIONS_ROOT,ipc_network_port:h.IPC_NETWORK_PORT,localstudio_enabled:h.LOCALSTUDIO_ENABLED,logging_file:h.LOGGING_FILE,logging_level:h.LOGGING_LEVEL,logging_root:h.LOGGING_ROOT,logging_rotation_compress:h.LOGGING_ROTATION_COMPRESS,logging_rotation_dateformat:h.LOGGING_ROTATION_DATEFORMAT,logging_rotation_maxsize:h.LOGGING_ROTATION_MAXSIZE,logging_rotation_retain:h.LOGGING_ROTATION_RETAIN,logging_rotation_rotate:h.LOGGING_ROTATION_ROTATE,logging_rotation_rotateinterval:h.LOGGING_ROTATION_ROTATEINTERVAL,logging_rotation_rotatemodule:h.LOGGING_ROTATION_ROTATEMODULE,logging_rotation_timezone:h.LOGGING_ROTATION_TIMEZONE,logging_rotation_workerinterval:h.LOGGING_ROTATION_WORKERINTERVAL,logging_stdstreams:h.LOGGING_STDSTREAMS,logging_auditlog:h.LOGGING_AUDITLOG,operationsapi_authentication_operationtokentimeout:h.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:h.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:h.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:h.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:h.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:h.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:h.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:h.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:h.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:h.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:h.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:h.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:h.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:h.OPERATIONSAPI_NODEENV,operationsapi_root:h.ROOTPATH,rootpath:h.ROOTPATH,storage_writeasync:h.STORAGE_WRITEASYNC,storage_overlappingsync:h.STORAGE_OVERLAPPINGSYNC},jR={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"},em={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"},tm={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},rm={FILE_SYSTEM:"fs",LMDB:"lmdb"},sm={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},nm={DEVELOPMENT:8192,DEFAULT:512},im={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"},am={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"},om={ENOENT:"ENOENT",EACCES:"EACCES"},tc={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},_m="__clustering__",cm=Object.values(tc),um=15984864e5,rc={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Em=j_.invert(rc),lm={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"},dm=111,Sm=`\r
2
+ `,hm={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Tm=["*","%"],fm="unauthorized_access",Rm="func_val",mm={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Am={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},Nm="hdb_ipc_server",Om="hdb_ipc_client_",gm={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"},pm={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},Im={STOPPED:"stopped",ONLINE:"online"},Cm="3.x.x";sc.exports={LOCAL_HARPERDB_OPERATIONS:H,HDB_SUPPORT_ADDRESS:X_,HDB_SUPPORT_URL:Z_,HDB_PRICING_URL:Xf,SUPPORT_HELP_MSG:Jf,LICENSE_HELP_MSG:z_,HDB_PROC_NAME:K_,HDB_PROC_DESCRIPTOR:ma,CLUSTERING_LEAF_PROC_DESCRIPTOR:Xs,CLUSTERING_HUB_PROC_DESCRIPTOR:Qs,SYSTEM_SCHEMA_NAME:hR,HASH_FOLDER_NAME:TR,HDB_HOME_DIR_NAME:fR,UPDATE_FILE_NAME:NR,LICENSE_KEY_DIR_NAME:mR,BOOT_PROPS_FILE_NAME:AR,JOB_TYPE_ENUM:jR,JOB_STATUS_ENUM:YR,SYSTEM_TABLE_NAMES:qR,SYSTEM_TABLE_HASH_ATTRIBUTES:FR,OPERATIONS_ENUM:R,VALID_S3_FILE_TYPES:KR,S3_BUCKET_AUTH_KEYS:WR,VALID_SQL_OPS_ENUM:QR,GEO_CONVERSION_ENUM:JR,HDB_SETTINGS_NAMES:ec,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:ZR,SERVICE_ACTIONS_ENUM:XR,CLUSTER_MESSAGE_TYPE_ENUM:em,CLUSTER_CONNECTION_DIRECTION_ENUM:tm,CLUSTER_EVENTS_DEFS_ENUM:im,PERIOD_REGEX:sR,DOUBLE_PERIOD_REGEX:nR,UNICODE_PERIOD:iR,FORWARD_SLASH_REGEX:aR,UNICODE_FORWARD_SLASH:oR,ESCAPED_FORWARD_SLASH_REGEX:_R,ESCAPED_PERIOD_REGEX:cR,ESCAPED_DOUBLE_PERIOD_REGEX:uR,REG_KEY_FILE_NAME:kR,RESTART_TIMEOUT_MS:pR,HDB_FILE_PERMISSIONS:IR,SCHEMA_DIR_NAME:LR,TRANSACTIONS_DIR_NAME:wR,LIMIT_COUNT_NAME:yR,ID_ATTRIBUTE_STRING:UR,INSERT_MODULE_ENUM:vR,UPGRADE_JSON_FIELD_NAMES_ENUM:GR,RESTART_CODE:OR,RESTART_CODE_NUM:gR,CLUSTER_OPERATIONS:gt,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:VR,HDB_INTERNAL_SC_CHANNEL_PREFIX:ye,INTERNAL_SC_CHANNELS:xR,CLUSTERING_MESSAGE_TYPES:lm,HDB_FILE_SUFFIX:RR,BLOB_FOLDER_NAME:CR,HDB_TRASH_DIR:bR,ORIGINATOR_SET_VALUE:dm,LICENSE_VALUES:sm,RAM_ALLOCATION_ENUM:nm,STORAGE_TYPES_ENUM:rm,TIME_STAMP_NAMES_ENUM:tc,TIME_STAMP_NAMES:cm,PERMS_UPDATE_RELEASE_TIMESTAMP:um,SEARCH_NOT_FOUND_MESSAGE:Zf,SEARCH_ATTRIBUTE_NOT_FOUND:zf,LICENSE_ROLE_DENIED_RESPONSE:jf,LICENSE_MAX_CONNS_REACHED:eR,BASIC_LICENSE_MAX_NON_CU_ROLES:J_,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:Qf,VALUE_SEARCH_COMPARATORS:rc,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:Em,LICENSE_FILE_NAME:$R,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:am,NEW_LINE:Sm,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:rR,MOMENT_DAYS_TAG:ER,API_TURNOVER_SEC:lR,LOOPBACK:tR,CODE_EXTENSION:Kr,WILDCARD_SEARCH_VALUE:dR,NODE_ERROR_CODES:om,JAVASCRIPT_EXTENSION:Y_,PERMS_CRUD_ENUM:hm,UNAUTHORIZED_PERMISSION_NAME:fm,SEARCH_WILDCARDS:Tm,FUNC_VAL:Rm,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:mm,JWT_ENUM:Am,CLUSTERING_FLAG:_m,RUN_LOG:MR,INSTALL_LOG:DR,IPC_SERVER_MODULE:Q_,HDB_IPC_SERVER:Nm,IPC_EVENT_TYPES:gm,HDB_IPC_CLIENT_PREFIX:Om,CUSTOM_FUNCTION_PROC_NAME:W_,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Ws,SERVICES:pm,MEM_SETTING_KEY:SR,HDB_RESTART_SCRIPT:Gf,PROCESS_DESCRIPTORS:Ra,SERVICE_SERVERS:$f,SERVICE_SERVERS_CWD:Ks,PROCESS_DESCRIPTORS_VALIDATE:Vf,LAUNCH_SERVICE_SCRIPTS:Yf,LOG_LEVELS:xf,PROCESS_NAME_ENV_PROP:PR,PROCESS_LOG_NAMES:Ff,PM2_PROCESS_STATUSES:Im,CONFIG_PARAM_MAP:zR,CONFIG_PARAMS:h,HDB_CONFIG_FILE:Bf,HDB_DEFAULT_CONFIG_FILE:Hf,ROLE_TYPES_ENUM:Kf,BOOT_PROP_PARAMS:BR,INSTALL_PROMPTS:HR,HDB_ROOT_DIR_NAME:vf,CLUSTERING_PROCESSES:kf,FOREGROUND_PID_FILE:qf,PACKAGE_ROOT:Ye,PRE_4_0_0_VERSION:Cm}});var oc=S((jP,ac)=>{"use strict";var nc=require("minimist");ac.exports=bm;function bm(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=ic(process.env),s=ic(nc(process.argv))):(r=process.env,s=nc(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let _=e[i];s[_]!==void 0?n[_]=s[_].toString().trim():r[_]!==void 0&&(n[_]=r[_].toString().trim())}return n}a(bm,"assignCMDENVVariables");function ic(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(ic,"objKeysToLowerCase")});var p=S((eB,Sc)=>{"use strict";var qt=require("fs-extra"),Ft=require("path"),cc=require("yaml"),uc=require("properties-reader"),z=f(),Lm=oc(),wm=require("os"),{PACKAGE_ROOT:pa}=f(),Oe={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Js=Ft.join(pa,"logs"),pt=process.env.pm_id===void 0,ym=Ft.join(pa,"config/yaml/",z.HDB_DEFAULT_CONFIG_FILE),Ia=process.env.PROCESS_NAME===void 0?z.PROCESS_DESCRIPTORS.INSTALL:process.env.PROCESS_NAME,_r,tt,Et,Ne,Oa,cr;cr===void 0&&Ec();Sc.exports={createLogFile:Um,notify:Pm,fatal:Bm,error:ga,warn:Hm,info:Dm,debug:Mm,trace:dc,setLogLevel:Gm,log_level:Ne};function Ec(){try{if(cr===void 0){let e=vm();cr=uc(e),{level:Ne,config_log_path:Oa,to_file:tt,to_stream:Et}=qm(cr.get("settings_path"))}}catch(e){if(cr=void 0,e.code===z.NODE_ERROR_CODES.ENOENT){let t=Lm(Object.keys(z.CONFIG_PARAM_MAP),!0);for(let i in t){let o=z.CONFIG_PARAM_MAP[i];o&&o.toLowerCase();let _=t[i];if(o===z.CONFIG_PARAMS.LOGGING_LEVEL){Ne=_;continue}if(o===z.CONFIG_PARAMS.LOGGING_STDSTREAMS){Et=_;continue}o===z.CONFIG_PARAMS.LOGGING_FILE&&(tt=o)}let{default_level:r,default_to_file:s,default_to_stream:n}=Fm();tt=tt===void 0?s:tt,tt=_c(tt),Et=Et===void 0?n:Et,Et=_c(Et),Ne=Ne===void 0?r:Ne,Oa=Js;return}throw ga("Error initializing log settings"),ga(e),e}}a(Ec,"initLogSettings");function Um(e,t){if(!pt){dc("createLogFile should only be used if the process is not being managed by pm2");return}cr===void 0&&Ec(),Ia=t;let r;e===z.PROCESS_LOG_NAMES.INSTALL?r=Js:r=Oa,tt&&(_r=Ft.join(r,e),qt.ensureFileSync(_r))}a(Um,"createLogFile");function xt(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": "${Ia}", "level": "${e}", "timestamp": "${r}", "message": "${s}"}
3
+ `}a(xt,"createLogRecord");function lc(e){_r===void 0&&(Ia=z.PROCESS_DESCRIPTORS.INSTALL,qt.ensureDirSync(Js),_r=Ft.join(Js,z.PROCESS_LOG_NAMES.INSTALL),qt.ensureFileSync(_r)),qt.appendFileSync(_r,e)}a(lc,"writeToLogFile");function Zs(e){tt&&lc(e),Et&&process.stdout.write(e)}a(Zs,"nonPm2LogStdOut");function Ca(e){tt&&lc(e),Et&&process.stderr.write(e)}a(Ca,"nonPm2LogStdErr");function Dm(...e){if(Oe[Ne]<=Oe.info){let t=xt("info",e);if(pt){Zs(t);return}process.stdout.write(t)}}a(Dm,"info");function dc(...e){if(Oe[Ne]<=Oe.trace){let t=xt("trace",e);if(pt){Zs(t);return}process.stdout.write(t)}}a(dc,"trace");function ga(...e){if(Oe[Ne]<=Oe.error){let t=xt("error",e);if(pt){Ca(t);return}process.stderr.write(t)}}a(ga,"error");function Mm(...e){if(Oe[Ne]<=Oe.debug){let t=xt("debug",e);if(pt){Zs(t);return}process.stdout.write(t)}}a(Mm,"debug");function Pm(...e){if(Oe[Ne]<=Oe.notify){let t=xt("notify",e);if(pt){Zs(t);return}process.stdout.write(t)}}a(Pm,"notify");function Bm(...e){if(Oe[Ne]<=Oe.fatal){let t=xt("fatal",e);if(pt){Ca(t);return}process.stderr.write(t)}}a(Bm,"fatal");function Hm(...e){if(Oe[Ne]<=Oe.warn){let t=xt("warn",e);if(pt){Ca(t);return}process.stderr.write(t)}}a(Hm,"warn");function vm(){let e;try{e=wm.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Ft.join(e,z.HDB_HOME_DIR_NAME,z.BOOT_PROPS_FILE_NAME);return qt.existsSync(t)||(t=Ft.join(pa,"utility/hdb_boot_properties.file")),t}a(vm,"getPropsFilePath");function Gm(e){Ne=e}a(Gm,"setLogLevel");function _c(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(_c,"autoCastBoolean");function qm(e){try{if(e.includes("config/settings.js")){let o=uc(e);return{level:o.get(z.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Ft.dirname(o.get(z.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(z.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(z.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=cc.parseDocument(qt.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===z.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(qm,"getLogConfig");function Fm(){try{let e=cc.parseDocument(qt.readFileSync(ym,"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(Fm,"getDefaultConfig")});var Tc=S((tB,hc)=>{"use strict";var xm=require("util"),Vm=require("path"),km=require("child_process"),$m=xm.promisify(km.execFile),Ym=1e3*1e3*10;hc.exports={findPs:Km};async function Km(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await $m("ps",["wwxo",`pid,${r}`],{maxBuffer:Ym});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:Vm.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(Km,"findPs")});var Se=S((rB,Rc)=>{"use strict";var Wm="__dbis__",Qm="__environment_name__",Xm="__dbi_defintion__",Jm={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"},Zm=["__createdtime__","__updatedtime__"],zm="\uFFFF",fc={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},jm=Object.values(fc);Rc.exports={INTERNAL_DBIS_NAME:Wm,DBI_DEFINITION_NAME:Xm,SEARCH_TYPES:Jm,TIMESTAMP_NAMES:Zm,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Qm,TRANSACTIONS_DBI_NAMES_ENUM:fc,TRANSACTIONS_DBIS:jm,OVERFLOW_MARKER:zm}});var Be=S((sB,bc)=>{"use strict";var mc=f(),Ac=Se(),Nc={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},Oc=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),gc={500:Oc("There was an error processing your request."),400:"Invalid request"},eA=gc[Nc.INTERNAL_SERVER_ERROR],tA={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.`},rA={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},sA={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"},nA={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 ${Ac.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Ac.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"},iA={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${mc.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 ${mc.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"},aA={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."},oA={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`},_A={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"},cA={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},uA={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`},Ic={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.`},Cc={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}`},EA={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."},lA={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},dA={...pc,...sA,...tA,...aA,...oA,..._A,...cA,...uA,...iA,...Ic,...Cc,...EA,...lA,...rA};bc.exports={CHECK_LOGS_WRAPPER:Oc,HDB_ERROR_MSGS:dA,DEFAULT_ERROR_MSGS:gc,DEFAULT_ERROR_RESP:eA,HTTP_STATUS_CODES:Nc,LMDB_ERRORS_ENUM:nA,AUTHENTICATION_ERROR_MSGS:pc,VALIDATION_ERROR_MSGS:Ic,IPC_ERRORS:Cc}});var q=S((nB,yc)=>{"use strict";var ur=Be(),SA=p(),hA=f(),Wr=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Lc),this.http_resp_code=s||ur.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(ur.DEFAULT_ERROR_MSGS[s]?ur.DEFAULT_ERROR_MSGS[s]:ur.DEFAULT_ERROR_MSGS[ur.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&&SA[n](i)}};a(Wr,"HdbError");function Lc(e,t,r,s=hA.LOG_LEVELS.ERROR,n=null,i=!1){if(wc(e))return e;let o=new Wr(e,t,r,s,n);return i&&delete o.stack,o}a(Lc,"handleHDBError");function wc(e){return e.__proto__.constructor.name===Wr.name}a(wc,"isHDBError");yc.exports={isHDBError:wc,handleHDBError:Lc,hdb_errors:ur}});var g=S((aB,Yc)=>{"use strict";var Vt=require("path"),TA=require("fs-extra"),te=p(),Uc=require("fs-extra"),fA=require("truncate-utf8-bytes"),Qr=require("os"),RA=require("net"),mA=require("recursive-iterator"),ne=f(),Hc=Tc(),Dc=require("papaparse"),zs=require("moment"),{inspect:AA}=require("util"),Mc=require("is-number"),iB=require("lodash"),{hdb_errors:js}=q(),vc=require("util").promisify(setTimeout),NA=100,OA=5,gA="",pA=4,Pc=255,Bc={true:!0,false:!1,undefined:null,null:null,NaN:NaN};Yc.exports={isEmpty:Ue,isEmptyOrZeroLength:rt,arrayHasEmptyValues:bA,arrayHasEmptyOrZeroLengthValues:LA,buildFolderPath:wA,isBoolean:Gc,errorizeMessage:IA,stripFileExtension:UA,autoCast:DA,autoCastJSONDeep:ba,removeDir:PA,compareVersions:BA,isCompatibleDataVersion:HA,escapeRawValue:Fc,unescapeValue:vA,stringifyProps:GA,valueConverter:qA,timeoutPromise:xA,isClusterOperation:kA,getClusterUser:KA,sendTransactionToSocketCluster:$A,checkGlobalSchemaTable:YA,getHomeDir:xc,getPropsFilePath:FA,promisifyPapaParse:WA,removeBOM:Vc,createEventPromise:QA,checkProcessRunning:XA,checkSchemaTableExist:JA,checkSchemaExists:kc,checkTableExists:$c,getStartOfTomorrowInSeconds:ZA,getLimitKey:zA,isObject:yA,isNotEmptyAndHasValue:CA,autoCasterIsNumberCheck:qc,backtickASTSchemaItems:jA,isPortTaken:VA,stopProcess:eN,createForkArgs:tN,autoCastBoolean:rN,async_set_timeout:vc,getTableHashAttribute:sN,doesSchemaExist:nN,doesTableExist:iN,stringifyObj:aN,ms_to_time:oN,changeExtension:_N,PACKAGE_ROOT:ne.PACKAGE_ROOT};function IA(e){return e instanceof Error?e:new Error(e)}a(IA,"errorizeMessage");function Ue(e){return e==null}a(Ue,"isEmpty");function CA(e){return!Ue(e)&&(e||e===0||e===""||Gc(e))}a(CA,"isNotEmptyAndHasValue");function rt(e){return Ue(e)||e.length===0||e.size===0}a(rt,"isEmptyOrZeroLength");function bA(e){if(Ue(e))return!0;for(let t=0;t<e.length;t++)if(Ue(e[t]))return!0;return!1}a(bA,"arrayHasEmptyValues");function LA(e){if(rt(e))return!0;for(let t=0;t<e.length;t++)if(rt(e[t]))return!0;return!1}a(LA,"arrayHasEmptyOrZeroLengthValues");function wA(...e){try{return e.join(Vt.sep)}catch{console.error(e)}}a(wA,"buildFolderPath");function Gc(e){return Ue(e)?!1:e===!0||e===!1}a(Gc,"isBoolean");function yA(e){return Ue(e)?!1:typeof e=="object"}a(yA,"isObject");function UA(e){return rt(e)?gA:e.slice(0,-pA)}a(UA,"stripFileExtension");function DA(e){return Ue(e)||e===""||typeof e!="string"?e:Bc[e]!==void 0?Bc[e]:qc(e)===!0?Number(e):e}a(DA,"autoCast");function MA(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(MA,"autoCastJSON");function ba(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=ba(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=ba(r);s!==r&&(e[t]=s)}return e}else return MA(e)}a(ba,"autoCastJSONDeep");function qc(e){if(e.startsWith("0.")&&Mc(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Mc(e))}a(qc,"autoCasterIsNumberCheck");async function PA(e){if(rt(e))throw new Error(`Directory path: ${e} does not exist`);try{await Uc.emptyDir(e),await Uc.remove(e)}catch(t){throw te.error(`Error removing files in ${e} -- ${t}`),t}}a(PA,"removeDir");function BA(e,t){if(rt(e)){te.info("Invalid current version sent as parameter.");return}if(rt(t)){te.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(BA,"compareVersions");function HA(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(HA,"isCompatibleDataVersion");function Fc(e){if(Ue(e))return e;let t=String(e);return t==="."?ne.UNICODE_PERIOD:t===".."?ne.UNICODE_PERIOD+ne.UNICODE_PERIOD:t.replace(ne.FORWARD_SLASH_REGEX,ne.UNICODE_FORWARD_SLASH)}a(Fc,"escapeRawValue");function vA(e){if(Ue(e))return e;let t=String(e);return t===ne.UNICODE_PERIOD?".":t===ne.UNICODE_PERIOD+ne.UNICODE_PERIOD?"..":String(e).replace(ne.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(vA,"unescapeValue");function GA(e,t){if(Ue(e))return te.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+Qr.EOL}!rt(s)&&s[0]===";"?r+=" "+s+n+Qr.EOL:rt(s)||(r+=s+"="+n+Qr.EOL)}catch{te.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(GA,"stringifyProps");function qA(e){let t;try{t=typeof e=="object"?JSON.stringify(e):e}catch(n){te.error(n),t=e}let r=String(Fc(t)),s=Buffer.byteLength(r)>Pc?fA(r,Pc)+"/blob":r;return{value:t,value_stripped:r,value_path:s}}a(qA,"valueConverter");function xc(){let e;try{e=Qr.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(xc,"getHomeDir");function FA(){let e=Vt.join(xc(),ne.HDB_HOME_DIR_NAME,ne.BOOT_PROPS_FILE_NAME);return TA.existsSync(e)||(e=Vt.join(__dirname,"../","hdb_boot_properties.file")),e}a(FA,"getPropsFilePath");function xA(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(xA,"timeoutPromise");async function VA(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=RA.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(VA,"isPortTaken");function kA(e){try{return ne.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){te.error(`Error checking operation against cluster ops ${t}`)}return!1}a(kA,"isClusterOperation");function $A(e,t,r){if(global.hdb_socket_client!==void 0){te.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]=ne.ORIGINATOR_SET_VALUE),global.hdb_socket_client.publish(e,i)}}a($A,"sendTransactionToSocketCluster");function YA(e,t){if(!global.hdb_schema[e])return js.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return js.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(YA,"checkGlobalSchemaTable");function KA(e,t){if(Ue(t)){te.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Ue(e)||rt(e)){te.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){te.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){te.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(KA,"getClusterUser");function WA(){Dc.parsePromise=function(e,t){return new Promise(function(r,s){Dc.parse(e,{header:!0,transformHeader:Vc,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(WA,"promisifyPapaParse");function Vc(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Vc,"removeBOM");function QA(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;te.info(`Got cluster status event response: ${AA(n)}`);try{i.cancel()}catch{te.error("Error trying to cancel timeout.")}s(n)})})}a(QA,"createEventPromise");async function XA(e){let t=!0,r=0;do await vc(NA*r++),(await Hc.findPs(e)).length>0&&(t=!1);while(t&&r<OA);if(t)throw new Error(`process ${e} was not started`)}a(XA,"checkProcessRunning");function JA(e,t){let r=kc(e);if(r)return r;let s=$c(e,t);if(s)return s}a(JA,"checkSchemaTableExist");function kc(e){if(!global.hdb_schema[e])return js.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(kc,"checkSchemaExists");function $c(e,t){if(!global.hdb_schema[e][t])return js.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a($c,"checkTableExists");function ZA(){let e=zs().utc().add(1,ne.MOMENT_DAYS_TAG).startOf(ne.MOMENT_DAYS_TAG).unix(),t=zs().utc().unix();return e-t}a(ZA,"getStartOfTomorrowInSeconds");function zA(){return zs().utc().format("DD-MM-YYYY")}a(zA,"getLimitKey");function jA(e){try{let t=new mA(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){te.error("Got an error back ticking items."),te.error(t)}}a(jA,"backtickASTSchemaItems");async function eN(e){let t=Qr.userInfo();(await Hc.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),te.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(eN,"stopProcess");function tN(e){return[e]}a(tN,"createForkArgs");function rN(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(rN,"autoCastBoolean");function sN(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(sN,"getTableHashAttribute");function nN(e){return global?.hdb_schema?.[e]!==void 0}a(nN,"doesSchemaExist");function iN(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(iN,"doesTableExist");function aN(e){try{return JSON.stringify(e)}catch{return e}}a(aN,"stringifyObj");function oN(e){let t=zs.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(oN,"ms_to_time");function _N(e,t){let r=Vt.basename(e,Vt.extname(e));return Vt.join(Vt.dirname(e),r+t)}a(_N,"changeExtension")});var kt=S((oB,Qc)=>{"use strict";var Wc=g(),Kc=f(),tn=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,La=require("joi"),en={schema_format:{pattern:tn,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},cN=La.alternatives(La.string().min(1).max(en.schema_length.maximum).pattern(tn).messages({"string.pattern.base":"{:#label} "+en.schema_format.message}),La.number()).required();function uN(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>en.schema_length.maximum?`'${e}' maximum of 250 characters`:tn.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(uN,"checkValidTable");function EN(e,t){return Wc.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(EN,"validateSchemaExists");function lN(e,t){let r=t.state.ancestors[0].schema;return Wc.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(lN,"validateTableExists");function dN(e,t){return e.toLowerCase()===Kc.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${Kc.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(dN,"validateSchemaName");Qc.exports={common_validators:en,schema_regex:tn,hdb_schema_table:cN,validateSchemaExists:EN,validateTableExists:lN,validateSchemaName:dN,checkValidTable:uN}});var Ke=S((_B,Xc)=>{"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("', '")}'`};Xc.exports={validateObject:SN,validateObjectAsync:hN,validateBySchema:TN};function SN(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(SN,"validateObject");async function hN(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(hN,"validateObjectAsync");function TN(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(TN,"validateBySchema")});var ya=S((cB,Zc)=>{var{hdb_schema_table:Jc}=kt(),fN=Ke(),wa=require("joi"),RN={undefined:"undefined",null:"null"},mN=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||RN[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"),AN=wa.object({schema:Jc,table:Jc,records:wa.array().items(wa.object().custom(mN)).required()});Zc.exports=function(e){return fN.validateBySchema(e,AN)}});var Ua=S((uB,zc)=>{"use strict";var rn=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(rn,"BridgeMethods");zc.exports=rn});var $t=S((dB,ru)=>{"use strict";var jc=Be().LMDB_ERRORS_ENUM,EB=require("lmdb"),NN=Se(),lB=require("buffer").Buffer,ON=require("microtime"),{OVERFLOW_MARKER:eu,MAX_SEARCH_KEY_LENGTH:sn}=NN,tu=["number","string","symbol","boolean","bigint"];function gN(e){if(!e)throw new Error(jc.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(jc.INVALID_ENVIRONMENT)}a(gN,"validateEnv");function pN(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(pN,"stringifyData");function IN(e){return e instanceof Date?e.valueOf():e}a(IN,"convertKeyValueToWrite");function CN(e){if(e==null)return;if(tu.includes(typeof e))return e.length>sn?[e.slice(0,sn)+eu]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];tu.includes(typeof n)&&(n.length>sn?t.push(n.slice(0,sn)+eu):t.push(n))}}return t}a(CN,"getIndexedValues");function bN(){let e=ON.now().toString(),t=e.length-3;return Number(e.slice(0,t)+"."+e.slice(t))}a(bN,"getMicroTime");ru.exports={validateEnv:gN,stringifyData:pN,convertKeyValueToWrite:IN,getMicroTime:bN,getIndexedValues:CN}});var nu=S((SB,su)=>{"use strict";var nn=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(nn,"DBIDefinition");su.exports=nn});var au=S((hB,iu)=>{"use strict";var an=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(an,"OpenDBIObject");iu.exports=an});var _u=S((TB,ou)=>{"use strict";var on=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(on,"OpenEnvironmentObject");ou.exports=on});var Eu=S((fB,uu)=>{"use strict";var LN=require("fs-extra"),U=require("joi"),wN=require("os"),{boolean:ie,string:lt,number:st,array:Da}=U.types(),cu=require("path"),yN=p(),_n=g(),UN=Ke(),DN="log",MN="custom_functions",PN="Invalid logging.rotation.maxSize unit. Available units are G, M or K",BN="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",HN="rootPath config parameter is undefined",vN="clustering.enabled config parameter is undefined",It=st.min(0).required(),cn=Da.items({host:lt.required(),port:It}).empty(null),Xr;uu.exports={configValidator:GN,routesValidator:$N,route_constraints:cn};function GN(e){if(Xr=e.rootPath,_n.isEmpty(Xr))throw HN;let t=ie.required(),r=U.valid("production","development").required(),s=st.min(1).max(1e3).empty(null).default(VN),n=lt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(kN),i=U.custom(FN).messages({"any.custom":"{:#label} {:#error}"}),o=lt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),_=e.clustering?.enabled;if(_n.isEmpty(_))throw vN;let c;return _===!0?c=U.object({enabled:t,hubServer:U.object({cluster:U.object({name:U.required().empty(null),network:U.object({port:It,routes:cn}).required()}).required(),leafNodes:U.object({network:U.object({port:It}).required()}).required(),network:U.object({port:It}).required()}).required(),leafServer:U.object({network:U.object({port:It,routes:cn}).required()}).required(),nodeName:o,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ie.required()}),user:U.string().required()}).required():c=U.object({enabled:t,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ie.required()})}).required(),U.object({clustering:c,customFunctions:U.object({enabled:t,network:U.object({cors:ie.required(),corsAccessList:Da.required(),headersTimeout:st.min(1).required(),https:ie.required(),keepAliveTimeout:st.min(1).required(),port:It,timeout:st.min(1).required()}),nodeEnv:r,root:n,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),ipc:U.object({network:U.object({port:It})}).required(),localStudio:U.object({enabled:t}).required(),logging:U.object({file:ie.required(),level:U.valid("notify","fatal","error","warn","info","debug","trace"),rotation:U.object({compress:ie.required(),dateFormat:lt.required(),maxSize:lt.custom(xN).required(),retain:st.min(0).required(),rotate:ie.required(),rotateInterval:lt.required(),rotateModule:ie.required(),timezone:lt.required(),workerInterval:st.min(1).required()}).required(),root:n,stdStreams:ie.required(),auditLog:ie.required()}).required(),operationsApi:U.object({authentication:U.object({operationTokenTimeout:U.required(),refreshTokenTimeout:U.required()}).required(),foreground:ie.required(),network:U.object({cors:ie.required(),corsAccessList:Da.required(),headersTimeout:st.min(1).required(),https:ie.required(),keepAliveTimeout:st.min(1).required(),port:It,timeout:st.min(1).required()}).required(),nodeEnv:r,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:lt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:U.object({threads:s}).required(),storage:U.object({writeAsync:ie.required(),overlappingSync:ie.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(GN,"configValidator");function qN(e){return LN.existsSync(e)?null:`Specified path ${e} does not exist.`}a(qN,"doesPathExist");function FN(e,t){if(e===null)return;U.assert(e,lt.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);return r?t.message(r):e}a(FN,"validatePemFile");function xN(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(PN);let s=e.slice(0,-1);if(isNaN(parseInt(s)))return t.message(BN)}a(xN,"validateRotationMaxSize");function VN(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(VN,"setDefaultThreads");function kN(e,t){if(!_n.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(_n.isEmpty(Xr))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return cu.join(Xr,MN);case"logging.root":return cu.join(Xr,DN);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(kN,"setDefaultRoot");function $N(e){let t=U.object({routes:cn});return UN.validateBySchema({routes:e},t)}a($N,"routesValidator")});var Jr=S((RB,Ru)=>{"use strict";var $=f(),He=g(),he=p(),{configValidator:YN,routesValidator:lu}=Eu(),We=require("fs-extra"),KN=require("yaml"),Er=require("path"),WN=require("is-number"),ln=require("properties-reader"),QN=require("lodash"),{handleHDBError:XN}=q(),{HTTP_STATUS_CODES:JN,HDB_ERROR_MSGS:un}=Be(),{PACKAGE_ROOT:ZN}=f(),zN="Unable to get config value because config is uninitialized",jN="Config successfully initialized",eO="Error backing up config file",tO="Empty parameter sent to getConfigValue",du=Er.join(ZN,"config","yaml",$.HDB_DEFAULT_CONFIG_FILE),rO="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",En,pe;Ru.exports={createConfigFile:sO,getDefaultConfig:nO,getConfigValue:Su,initConfig:hu,flattenConfig:Yt,updateConfigValue:Tu,updateConfigObject:iO,getConfiguration:aO,setConfiguration:oO,readConfigFile:Ba,getClusteringRoutes:_O,initOldConfig:fu,getConfigFromFile:cO};function sO(e){let t=lr(du);En=Yt(t.toJSON());for(let i in e){let o=$.CONFIG_PARAM_MAP[i.toLowerCase()];if(o!==void 0){let _=o.split("_"),c=Ma(o,e[i]);try{t.setIn([..._],c)}catch(u){he.error(u)}}}Pa(t);let r=t.toJSON();pe=Yt(r);let s=t.getIn(["rootPath"]),n=Er.join(s,$.HDB_CONFIG_FILE);We.createFileSync(n),We.writeFileSync(n,String(t)),he.trace(`Config file written to ${n}`)}a(sO,"createConfigFile");function nO(e){if(En===void 0){let r=lr(du);En=Yt(r.toJSON())}let t=$.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return En[t.toLowerCase()]}a(nO,"getDefaultConfig");function Su(e){if(He.isEmpty(e)){he.error(tO);return}if(pe===void 0){he.trace(zN);return}let t=$.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return pe[t.toLowerCase()]}a(Su,"getConfigValue");function hu(e=!1){if(pe===void 0||e){let t=He.getPropsFilePath();try{We.accessSync(t,We.constants.F_OK|We.constants.R_OK)}catch(o){throw he.error(o),new Error(`HarperDB properties file at path ${t} does not exist`)}let s=ln(t).get($.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),n;if(s.includes("config/settings.js"))try{fu(s);return}catch(o){if(o.code!==$.NODE_ERROR_CODES.ENOENT)throw o}try{n=lr(s)}catch(o){if(o.code===$.NODE_ERROR_CODES.ENOENT){he.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 he.error(o),new Error(`Error reading HarperDB config file at ${s}`)}Pa(n);let i=n.toJSON();pe=Yt(i),he.trace(jN)}}a(hu,"initConfig");function Pa(e){let t=e.toJSON(),r=YN(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(Pa,"validateConfig");function iO(e,t){pe===void 0&&(pe={});let r=$.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){he.trace(`Unable to update config object because config param '${e}' does not exist`);return}pe[r.toLowerCase()]=t}a(iO,"updateConfigObject");function Tu(e,t,r=void 0,s=!1,n=!1){pe===void 0&&hu();let i=Su($.CONFIG_PARAM_MAP.hdb_root),o=Er.join(i,$.HDB_CONFIG_FILE),_=lr(o);if(r===void 0){let E=$.CONFIG_PARAM_MAP[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let l=E.split("_"),T=Ma(E,t);_.setIn([...l],T)}else for(let E in r){let l=$.CONFIG_PARAM_MAP[E.toLowerCase()];if(l!==void 0){let T=l.split("_"),d=Ma(l,r[E]);try{_.setIn([...T],d)}catch(A){he.error(A)}}}Pa(_);let c=_.getIn(["rootPath"]),u=Er.join(c,$.HDB_CONFIG_FILE);if(s===!0)try{let E=Er.join(c,"backup",`${$.HDB_CONFIG_FILE}.bak`);We.copySync(o,E),he.trace(`Config file: ${o} backed up to: ${E}`)}catch(E){he.error(eO),he.error(E)}We.writeFileSync(u,String(_)),n&&(pe=Yt(_.toJSON())),he.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Tu,"updateConfigValue");function Yt(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=Yt(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(Yt,"flattenConfig");function Ma(e,t){if(e===$.CONFIG_PARAMS.CLUSTERING_NODENAME||e===$.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(WN(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||He.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return He.autoCast(t)}a(Ma,"castConfigValue");function aO(){let e=He.getPropsFilePath(),r=ln(e).get($.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return lr(r).toJSON()}a(aO,"getConfiguration");async function oO(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Tu(void 0,void 0,n,!0),rO}catch(i){throw typeof i=="string"||i instanceof String?XN(i,i,JN.BAD_REQUEST,void 0,void 0,!0):i}}a(oO,"setConfiguration");function Ba(){let e=He.getPropsFilePath();try{We.accessSync(e,We.constants.F_OK|We.constants.R_OK)}catch(n){throw he.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=ln(e).get($.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return lr(r).toJSON()}a(Ba,"readConfigFile");function lr(e){return KN.parseDocument(We.readFileSync(e,"utf8"),{simpleKeys:!0})}a(lr,"parseYamlDoc");function _O(){let e=Ba(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=He.isEmptyOrZeroLength(t)?[]:t;let r=lu(t);if(r)throw un.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=He.isEmptyOrZeroLength(s)?[]:s;let n=lu(s);if(n)throw un.CONFIG_VALIDATION(n.message);if(!He.isEmptyOrZeroLength(s)&&!He.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(_=>_.host===o.host&&_.port===o.port));if(!He.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw un.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(_O,"getClusteringRoutes");function fu(e){let t=ln(e);pe={};for(let r in $.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(He.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=$.CONFIG_PARAM_MAP[r].toLowerCase();n===$.CONFIG_PARAMS.LOGGING_ROOT?pe[n]=Er.dirname(s):pe[n]=s}return pe}a(fu,"initOldConfig");function cO(e){let t=Ba();return QN.get(t,e.replaceAll("_","."))}a(cO,"getConfigFromFile")});var Q=S((mB,Au)=>{"use strict";var Ha=require("fs-extra"),nt=require("path"),uO=require("os"),EO=require("properties-reader"),Zr=p(),dr=g(),I=f(),dn=Jr(),lO="Error initializing environment manager",Sn="BOOT_PROPS_FILE_PATH",mu=!1,dO={[I.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[I.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},dt={};Au.exports={BOOT_PROPS_FILE_PATH:Sn,getHdbBasePath:SO,setHdbBasePath:hO,get:TO,initSync:RO,setProperty:P,initTestEnvironment:mO};function SO(){return dt[I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(SO,"getHdbBasePath");function hO(e){dt[I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(hO,"setHdbBasePath");function TO(e){let t=dn.getConfigValue(e);return t===void 0?dt[e]:t}a(TO,"get");function P(e,t){dO[e]&&(dt[e]=t),dn.updateConfigObject(e,t)}a(P,"setProperty");function fO(){let e;try{e=dr.getPropsFilePath(),Ha.accessSync(e,Ha.constants.F_OK|Ha.constants.R_OK),mu=!0;let t=EO(e);return dt[I.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(I.HDB_SETTINGS_NAMES.INSTALL_USER),dt[I.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(I.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),dt[Sn]=e,!0}catch{return Zr.trace(`Environment manager found no properties file at ${e}`),!1}}a(fO,"doesPropFileExist");function RO(e=!1){try{(mu||fO())&&(dn.initConfig(e),dt[I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=dn.getConfigValue(I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Zr.error(lO),Zr.error(t),console.error(t),process.exit(1)}}a(RO,"initSync");function mO(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=nt.join(__dirname,"../../","unitTests");dt[Sn]=nt.join(c,"hdb_boot_properties.file"),P(I.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,nt.join(c,"settings.test")),P(I.HDB_SETTINGS_NAMES.INSTALL_USER,uO.userInfo().username),P(I.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,nt.join(c,"envDir","utility","keys","privateKey.pem")),P(I.HDB_SETTINGS_NAMES.CERT_KEY,nt.join(c,"envDir","utility","keys","certificate.pem")),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,nt.join(c,"envDir","utility","keys","privateKey.pem")),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,nt.join(c,"envDir","utility","keys","certificate.pem")),P(I.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),P(I.HDB_SETTINGS_NAMES.LOG_PATH_KEY,nt.join(c,"envDir","log")),P(I.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),P(I.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),P(I.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),P(I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,nt.join(c,"envDir")),P(I.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,dr.isEmpty(n)?!0:n),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,dr.isEmpty(n)?!0:n),P(I.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),P(I.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,dr.isEmpty(i)?!1:i),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,dr.isEmpty(i)?!1:i),P(I.HDB_SETTINGS_NAMES.IPC_SERVER_PORT,9383),P(I.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),P(I.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),P(I.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),P(I.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),P(I.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,nt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),P(I.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,dr.isEmpty(_)?!1:_),o&&(P("CORS_ACCESSLIST",o),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(P(I.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(P(I.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(P(I.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Sn}. Please check your boot props and settings files`;Zr.fatal(r),Zr.error(t)}}a(mO,"initTestEnvironment")});var F=S((NB,Du)=>{"use strict";var va=require("lmdb"),ve=require("fs-extra"),Qe=require("path"),Tn=$t(),Nu=p(),ae=Be().LMDB_ERRORS_ENUM,fn=nu(),Ga=au(),Ou=_u(),Ct=Se(),AB=f(),zr=Q();zr.initSync();var gu=zr.get("STORAGE_WRITEASYNC")===!0||zr.get("STORAGE_WRITEASYNC")==="true"||zr.get("STORAGE_WRITEASYNC")==="TRUE",pu=zr.get("STORAGE_OVERLAPPINGSYNC"),Iu=1024*1024*1024,Cu=1e4,bu=1e3,Xe=Ct.INTERNAL_DBIS_NAME,Lu=Ct.DBI_DEFINITION_NAME,AO="data.mdb",NO="lock.mdb",jr=".mdb",OO="-lock",hn=class{constructor(t,r,s=!1){this.dbi=Ge(t,r),this.key_type=this.dbi[Ct.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Ct.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new va.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(hn,"TransactionCursor");function qa(e,t){if(e===void 0)throw new Error(ae.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(ae.ENV_NAME_REQUIRED)}a(qa,"pathEnvNameValidation");async function Fa(e,t,r=!0){try{await ve.access(e)}catch(s){throw s.code==="ENOENT"?new Error(ae.INVALID_BASE_PATH):s}try{let s=Qe.join(e,t+jr);return await ve.access(s,ve.constants.R_OK|ve.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await ve.access(Qe.join(e,t,AO),ve.constants.R_OK|ve.constants.F_OK),Qe.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(ae.INVALID_ENVIRONMENT)}else throw new Error(ae.INVALID_ENVIRONMENT);throw s}}a(Fa,"validateEnvironmentPath");function Rn(e,t){if(Tn.validateEnv(e),t===void 0)throw new Error(ae.DBI_NAME_REQUIRED)}a(Rn,"validateEnvDBIName");async function gO(e,t,r=!1,s=!1){qa(e,t),t=t.toString();try{return await Fa(e,t,s),xa(e,t,r)}catch(n){if(n.message===ae.INVALID_ENVIRONMENT){let i=Qe.join(e,t);await ve.mkdirp(s?i:e);let o=new Ou(s?i:i+jr,Iu,Cu,bu,!1,gu,pu),_=va.open(o);_.dbis=Object.create(null);let c=new Ga(!1);_.openDB(Xe,c),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=Va(e,t,r);return _[Ct.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=_,_}throw n}}a(gO,"createEnvironment");async function pO(e,t,r,s=!0){let n=await xa(e,t);if(r===void 0)throw new Error(ae.DESTINATION_PATH_REQUIRED);try{await ve.access(Qe.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(ae.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(pO,"copyEnvironment");async function xa(e,t,r=!1){qa(e,t),t=t.toString();let s=Va(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 Fa(e,t),i=Qe.join(e,t+jr),o=n!=i,_=new Ou(n,Iu,Cu,bu,o,gu,pu),c=va.open(_);c.dbis=Object.create(null);let u=yu(c);for(let E=0;E<u.length;E++)Ge(c,u[E]);return c[Ct.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=c,c}a(xa,"openEnvironment");async function IO(e,t,r=!1){qa(e,t),t=t.toString();let s=Qe.join(e,t+jr),n=await Fa(e,t);if(global.lmdb_map!==void 0){let i=Va(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await wu(o),delete global.lmdb_map[i]}}await ve.remove(n),await ve.remove(n===s?n+OO:Qe.join(Qe.dirname(n),NO))}a(IO,"deleteEnvironment");async function wu(e){Tn.validateEnv(e);let t=e[Ct.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(wu,"closeEnvironment");function Va(e,t,r=!1){let n=`${Qe.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Va,"getCachedEnvironmentName");function CO(e){Tn.validateEnv(e);let t=Object.create(null),r=Ge(e,Xe);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Xe)try{t[s]=Object.assign(new fn,n)}catch{Nu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(CO,"listDBIDefinitions");function yu(e){Tn.validateEnv(e);let t=[],r=Ge(e,Xe);for(let{key:s}of r.getRange({start:!1}))s!==Xe&&t.push(s);return t}a(yu,"listDBIs");function bO(e,t){let s=Ge(e,Xe).getEntry(t),n=new fn;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{Nu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(bO,"getDBIDefinition");function Uu(e,t,r,s=!1){if(Rn(e,t),t=t.toString(),t===Xe)throw new Error(ae.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ge(e,t)}catch(n){if(n.message===ae.DBI_DOES_NOT_EXIST){let i=new Ga(r,s===!0),o=e.openDB(t,i),_=new fn(r===!0,s);return o[Lu]=_,Ge(e,Xe).putSync(t,_),e.dbis[t]=o,o}throw n}}a(Uu,"createDBI");function Ge(e,t){if(Rn(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Xe?r=bO(e,t):r=new fn,r===void 0)throw new Error(ae.DBI_DOES_NOT_EXIST);let s;try{let n=new Ga(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(ae.DBI_DOES_NOT_EXIST):n}return s[Lu]=r,e.dbis[t]=s,s}a(Ge,"openDBI");function LO(e,t){Rn(e,t),t=t.toString();let r=Ge(e,t),s=r.getStats();return r[Ct.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(LO,"statDBI");async function wO(e,t){try{let r=Qe.join(e,t+jr);return(await ve.stat(r)).size}catch{throw new Error(ae.INVALID_ENVIRONMENT)}}a(wO,"environmentDataSize");function yO(e,t){if(Rn(e,t),t=t.toString(),t===Xe)throw new Error(ae.CANNOT_DROP_INTERNAL_DBIS_NAME);Ge(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ge(e,Xe).removeSync(t)}a(yO,"dropDBI");function UO(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{Ge(e,n)}catch(i){if(i.message===ae.DBI_DOES_NOT_EXIST)Uu(e,n,n!==t,n===t);else throw i}}}a(UO,"initializeDBIs");Du.exports={openDBI:Ge,openEnvironment:xa,createEnvironment:gO,listDBIs:yu,listDBIDefinitions:CO,createDBI:Uu,dropDBI:yO,statDBI:LO,deleteEnvironment:IO,initializeDBIs:UO,TransactionCursor:hn,environmentDataSize:wO,copyEnvironment:pO,closeEnvironment:wu}});var Pu=S((OB,Mu)=>{"use strict";var mn=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(mn,"InsertRecordsResponseObject");Mu.exports=mn});var Hu=S((gB,Bu)=>{"use strict";var An=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(An,"UpdateRecordsResponseObject");Bu.exports=An});var Gu=S((pB,vu)=>{"use strict";var Nn=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(Nn,"UpsertRecordsResponseObject");vu.exports=Nn});var Sr=S((LB,Fu)=>{"use strict";var DO=F(),MO=Pu(),PO=Hu(),BO=Gu(),ts=$t(),es=Be().LMDB_ERRORS_ENUM,HO=Se(),bt=f(),vO=g(),GO=require("uuid"),IB=require("lmdb"),{handleHDBError:qO,hdb_errors:FO}=q(),{OVERFLOW_MARKER:CB,MAX_SEARCH_KEY_LENGTH:bB}=HO,ka=bt.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Kt=bt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function xO(e,t,r,s,n=!0){Wa(e,t,r,s),$a(e,t,r);let i=new MO,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c];qu(u,!0,n);let E=VO(e,t,r,u),l=u[t];o.push(E),_.push(l)}return Ya(o,_,s,i)}a(xO,"insertRecords");function VO(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let _=s[o];if(typeof _=="function"){let u=_([[{}]]);Array.isArray(u)&&(_=u[0][bt.FUNC_VAL],s[o]=_)}let c=ts.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[Kt])})}a(VO,"insertRecord");function kO(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(kO,"removeSkippedRecords");function qu(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[Kt]))&&(e[Kt]=s),t===!0?(r===!0||!Number.isInteger(e[ka]))&&(e[ka]=s):delete e[ka]}a(qu,"setTimestamps");function $a(e,t,r){r.indexOf(bt.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(bt.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(bt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(bt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),DO.initializeDBIs(e,t,r)}a($a,"initializeTransaction");async function $O(e,t,r,s,n=!0){Wa(e,t,r,s),$a(e,t,r);let i=new PO,o=[],_=[],c=[];for(let u=0;u<s.length;u++){let E=s[u],l=E[t],T;try{T=Ka(e,t,E,l,i,!0,n)}catch{i.skipped_hashes.push(l),o.push(u);continue}_.push(T),c.push(l)}return Ya(_,c,s,i,o)}a($O,"updateRecords");async function YO(e,t,r,s,n=!0){try{Wa(e,t,r,s)}catch(c){throw qO(c,c.message,FO.HTTP_STATUS_CODES.BAD_REQUEST)}$a(e,t,r);let i=new BO,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c],E;vO.isEmpty(u[t])?(E=GO.v4(),u[t]=E):E=u[t];let l=Ka(e,t,u,E,i,!1,n);o.push(l),_.push(E)}return Ya(o,_,s,i)}a(YO,"upsertRecords");async function Ya(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=ts.getMicroTime(),kO(r,n),s}a(Ya,"finalizeWrite");function Ka(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(qu(r,!E,o),Number.isInteger(r[Kt])&&u[Kt]>r[Kt])return!1;E&&n.original_records.push(u);let l,T=a(()=>{for(let A in r){if(!r.hasOwnProperty(A)||A===t)continue;let N=r[A],b=e.dbis[A];if(b===void 0)continue;let Ae=u[A];if(typeof N=="function"){let W=N([[u]]);Array.isArray(W)&&(N=W[0][bt.FUNC_VAL],r[A]=N)}if(N===Ae)continue;let v=ts.getIndexedValues(Ae);if(v)for(let W=0,$e=v.length;W<$e;W++)b.remove(v[W],s);if(v=ts.getIndexedValues(N),v)for(let W=0,$e=v.length;W<$e;W++)b.put(v[W],s)}let d=Object.assign({},u,r);_.put(s,d,d[Kt])},"do_put");return c?l=_.ifVersion(s,c.version,T):l=_.ifNoExists(s,T),l.then(d=>d?!0:Ka(e,t,r,s,n,i,o))}a(Ka,"updateUpsertRecord");function KO(e,t,r){if(ts.validateEnv(e),t===void 0)throw new Error(es.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(es.WRITE_ATTRIBUTES_REQUIRED):new Error(es.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(KO,"validateBasic");function Wa(e,t,r,s){if(KO(e,t,r),!Array.isArray(s))throw s===void 0?new Error(es.RECORDS_REQUIRED):new Error(es.RECORDS_MUST_BE_ARRAY)}a(Wa,"validateWrite");Fu.exports={insertRecords:xO,updateRecords:$O,upsertRecords:YO}});var k=S((wB,Vu)=>{"use strict";var Qa=f(),hr=Q(),Xa=require("path");hr.initSync();var On,gn,pn;function xu(){if(On!==void 0)return On;if(hr.getHdbBasePath()!==void 0)return On=Xa.join(hr.getHdbBasePath(),Qa.SCHEMA_DIR_NAME),On}a(xu,"getBaseSchemaPath");function WO(){if(gn!==void 0)return gn;if(hr.getHdbBasePath()!==void 0)return gn=Xa.join(xu(),Qa.SYSTEM_SCHEMA_NAME),gn}a(WO,"getSystemSchemaPath");function QO(){if(pn!==void 0)return pn;if(hr.getHdbBasePath()!==void 0)return pn=Xa.join(hr.getHdbBasePath(),Qa.TRANSACTIONS_DIR_NAME),pn}a(QO,"getTransactionAuditStorePath");Vu.exports={getBaseSchemaPath:xu,getSystemSchemaPath:WO,getTransactionAuditStorePath:QO}});var Wt=S((yB,XO)=>{XO.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 In=S((UB,ku)=>{var{common_validators:Lt}=kt(),rs=Ke(),Je="is required",G={schema:{presence:!0,format:Lt.schema_format,length:Lt.schema_length},table:{presence:!0,format:Lt.schema_format,length:Lt.schema_length},attribute:{presence:!0,format:Lt.schema_format,length:Lt.schema_length},hash_attribute:{presence:!0,format:Lt.schema_format,length:Lt.schema_length}};function ss(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(ss,"makeAttributesStrings");function JO(e){return e=ss(e),G.schema.presence={message:Je},G.table.presence=!1,G.attribute.presence=!1,G.hash_attribute.presence=!1,rs.validateObject(e,G)}a(JO,"schema_object");function ZO(e){return e=ss(e),G.schema.presence={message:Je},G.table.presence={message:Je},G.attribute.presence=!1,G.hash_attribute.presence=!1,rs.validateObject(e,G)}a(ZO,"table_object");function zO(e){return e=ss(e),G.schema.presence={message:Je},G.table.presence={message:Je},G.attribute.presence=!1,G.hash_attribute.presence={message:Je},rs.validateObject(e,G)}a(zO,"create_table_object");function jO(e){return e=ss(e),G.schema.presence={message:Je},G.table.presence={message:Je},G.attribute.presence={message:Je},G.hash_attribute.presence=!1,rs.validateObject(e,G)}a(jO,"attribute_object");function eg(e){return e=ss(e),G.schema.presence={message:Je},G.table.presence={message:Je},G.attribute.presence=!1,G.hash_attribute.presence=!1,rs.validateObject(e,G)}a(eg,"describe_table");function tg(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(tg,"validateTableResidence");ku.exports={schema_object:JO,create_table_object:zO,table_object:ZO,attribute_object:jO,describe_table:eg,validateTableResidence:tg}});var Yu=S((DB,$u)=>{"use strict";var rg=require("uuid"),Cn=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||rg.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(Cn,"CreateAttributeObject");$u.exports=Cn});var Ln=S((MB,Ku)=>{"use strict";var sg=Yu(),bn=class extends sg{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(bn,"LMDBCreateAttributeObject");Ku.exports=bn});var Qu=S((PB,Wu)=>{"use strict";Wu.exports=ig;var ng="inserted";function ig(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===ng?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(ig,"returnObject")});var wn=S((BB,Ju)=>{"use strict";var ag=f(),Ja=F(),og=Sr(),{getSystemSchemaPath:_g,getBaseSchemaPath:cg}=k(),ug=require("path"),Eg=Wt(),lg=In(),dg=Ln(),Sg=Qu(),{handleHDBError:hg,hdb_errors:Tg}=q(),fg=g(),Za=Eg.hdb_attribute,Xu=[];for(let e=0;e<Za.attributes.length;e++)Xu.push(Za.attributes[e].attribute);var Rg="inserted";Ju.exports=mg;async function mg(e){let t=lg.attribute_object(e);if(t)throw hg(new Error,t.message,Tg.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=fg.isEmpty(e.dup_sort)||e.dup_sort=="true";let r=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(r=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(r)&&r.length>0){for(let n of r)if(n.attribute===e.attribute)throw new Error(`attribute '${n.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new dg(e.schema,e.table,e.attribute,e.id);try{let n=await Ja.openEnvironment(ug.join(cg(),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}`);Ja.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await Ja.openEnvironment(_g(),ag.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:o,skipped_hashes:_}=await og.insertRecords(i,Za.hash_attribute,Xu,[s]);return Sg(Rg,o,{records:[s]},_)}catch(n){throw n}}a(mg,"lmdbCreateAttribute")});var yn=S((vB,zu)=>{"use strict";var St=g(),Zu=p(),HB=ya();zu.exports=Ag;function Ag(e){if(St.isEmpty(e))throw new Error("invalid update parameters defined.");if(St.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(St.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(St.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&&St.isEmptyOrZeroLength(o[r]))throw Zu.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(!St.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Zu.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`);!St.isEmpty(o[r])&&o[r]!==""&&s.has(St.autoCast(o[r]))&&(o.skip=!0),s.add(St.autoCast(o[r]));for(let _ in o)n[_]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(Ag,"insertUpdateValidate")});var Dn=S((GB,ju)=>{"use strict";var Ng=f().OPERATIONS_ENUM,Un=class{constructor(t,r,s,n,i=void 0){this.operation=Ng.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(Un,"InsertObject");ju.exports=Un});var Pn=S((FB,eE)=>{"use strict";var qB=Dn(),Mn=f(),ja=g(),za=p(),Og=require("uuid"),{handleHDBError:ns,hdb_errors:gg}=q(),{HDB_ERROR_MSGS:is,HTTP_STATUS_CODES:as}=gg;eE.exports=pg;function pg(e,t,r){for(let n=0;n<t.length;n++)Ig(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Cg(i,r,e.operation)}}a(pg,"processRows");function Ig(e){if(Buffer.byteLength(String(e))>Mn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ns(new Error,is.ATTR_NAME_LENGTH_ERR(e),as.BAD_REQUEST,void 0,void 0,!0);if(ja.isEmptyOrZeroLength(e)||ja.isEmpty(e.trim()))throw ns(new Error,is.ATTR_NAME_NULLISH_ERR,as.BAD_REQUEST,void 0,void 0,!0)}a(Ig,"validateAttribute");function Cg(e,t,r){if(!e.hasOwnProperty(t)||ja.isEmptyOrZeroLength(e[t])){if(r===Mn.OPERATIONS_ENUM.INSERT||r===Mn.OPERATIONS_ENUM.UPSERT){e[t]=Og.v4();return}throw za.error("Update transaction aborted due to record with no hash value:",e),ns(new Error,is.RECORD_MISSING_HASH_ERR,as.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Mn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw za.error(e),ns(new Error,is.HASH_VAL_LENGTH_ERR,as.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw za.error(e),ns(new Error,is.INVALID_FORWARD_SLASH_IN_HASH_ERR,as.BAD_REQUEST,void 0,void 0,!0)}a(Cg,"validateHash")});var rE=S((xB,tE)=>{"use strict";var Bn=class{constructor(t,r){this.type=t,this.message=r}};a(Bn,"IPCEventObject");tE.exports=Bn});var Tr=S((VB,sE)=>{"use strict";var bg=p(),eo=g(),Lg=f(),{IPC_ERRORS:os}=Be();sE.exports={sendIpcEvent:wg,validateEvent:yg,SchemaEventMsg:Ug,UserEventMsg:Dg};function wg(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):bg.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}a(wg,"sendIpcEvent");function yg(e){if(typeof e!="object")return os.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||eo.isEmpty(e.type))return os.MISSING_TYPE;if(!e.hasOwnProperty("message")||eo.isEmpty(e.message))return os.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||eo.isEmpty(e.message.originator))return os.MISSING_ORIGIN;if(Lg.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return os.INVALID_EVENT(e.type)}a(yg,"validateEvent");function Ug(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(Ug,"SchemaEventMsg");function Dg(e){this.originator=e}a(Dg,"UserEventMsg")});var _s=S(($B,oE)=>{"use strict";var nE=f(),kB=g(),Hn=p(),iE=rE(),{sendIpcEvent:aE}=Tr();function Mg(e){try{Hn.trace("signalSchemaChange called with message:",e);let t=new iE(nE.IPC_EVENT_TYPES.SCHEMA,e);aE(t)}catch(t){Hn.error(t)}}a(Mg,"signalSchemaChange");function Pg(e){try{Hn.trace("signalUserChange called with message:",e);let t=new iE(nE.IPC_EVENT_TYPES.USER,e);aE(t)}catch(t){Hn.error(t)}}a(Pg,"signalUserChange");oE.exports={signalSchemaChange:Mg,signalUserChange:Pg}});var vn=S((YB,cE)=>{"use strict";var _E=g(),Bg=f(),Hg=p(),vg=wn(),Gg=Ln(),qg=_s(),{SchemaEventMsg:Fg}=Tr(),xg="already exists in";cE.exports=Vg;async function Vg(e,t,r){try{if(_E.isEmptyOrZeroLength(r))return r;let s=[];_E.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 kg(e,t.schema,t.name,i)})),n}catch(s){throw s}}a(Vg,"lmdbCheckForNewAttributes");async function kg(e,t,r,s){let n=new Gg(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await $g(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(xg))Hg.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(kg,"createNewAttribute");async function $g(e){let t;try{return t=await vg(e),qg.signalSchemaChange(new Fg(process.pid,Bg.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}a($g,"createAttribute")});var fr=S((KB,uE)=>{"use strict";var Gn=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(Gn,"LMDBTransactionObject");uE.exports=Gn});var lE=S((WB,EE)=>{"use strict";var Yg=fr(),Kg=f().OPERATIONS_ENUM,qn=class extends Yg{constructor(t,r,s,n,i=void 0){super(Kg.INSERT,r,s,n,i),this.records=t}};a(qn,"LMDBInsertTransactionObject");EE.exports=qn});var SE=S((QB,dE)=>{"use strict";var Wg=fr(),Qg=f().OPERATIONS_ENUM,Fn=class extends Wg{constructor(t,r,s,n,i,o=void 0){super(Qg.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(Fn,"LMDBUpdateTransactionObject");dE.exports=Fn});var TE=S((XB,hE)=>{"use strict";var Xg=fr(),Jg=f().OPERATIONS_ENUM,xn=class extends Xg{constructor(t,r,s,n,i,o=void 0){super(Jg.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(xn,"LMDBUpsertTransactionObject");hE.exports=xn});var RE=S((JB,fE)=>{"use strict";var Zg=fr(),zg=f().OPERATIONS_ENUM,Vn=class extends Zg{constructor(t,r,s,n,i=void 0){super(zg.DELETE,s,n,t,i),this.original_records=r}};a(Vn,"LMDBDeleteTransactionObject");fE.exports=Vn});var cs=S((ZB,OE)=>{"use strict";var jg=require("path"),mE=F(),ep=lE(),tp=SE(),rp=TE(),sp=RE(),Rr=Se(),AE=g(),{CONFIG_PARAMS:np}=f(),NE=Q();NE.initSync();var kn=f().OPERATIONS_ENUM,{getTransactionAuditStorePath:ip}=k();OE.exports=ap;async function ap(e,t){if(NE.get(np.LOGGING_AUDITLOG)===!1)return;let r=jg.join(ip(),e.schema.toString()),s=await mE.openEnvironment(r,e.table,!0),n=op(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){mE.initializeDBIs(s,Rr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Rr.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[Rr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Rr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),AE.isEmpty(n.user_name)||s.dbis[Rr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Rr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}catch(i){throw i}}}a(ap,"writeTransaction");function op(e,t){let r=AE.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===kn.INSERT)return new ep(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===kn.UPDATE)return new tp(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===kn.UPSERT)return new rp(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===kn.DELETE)return new sp(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(op,"createTransactionObject")});var to=S((jB,gE)=>{"use strict";var _p=yn(),zB=Dn(),mr=f(),cp=Pn(),up=Sr().insertRecords,Ep=F(),lp=require("path"),dp=p(),Sp=vn(),{getBaseSchemaPath:hp}=k(),Tp=cs();gE.exports=fp;async function fp(e){try{let{schema_table:t,attributes:r}=_p(e);cp(e,r,t.hash_attribute),e.schema!==mr.SYSTEM_SCHEMA_NAME&&(r.includes(mr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(mr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(mr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(mr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Sp(e.hdb_auth_header,t,r),n=lp.join(hp(),e.schema.toString()),i=await Ep.openEnvironment(n,e.table),o=await up(i,t.hash_attribute,r,e.records,e[mr.CLUSTERING_FLAG]!==!0);try{await Tp(e,o)}catch(_){dp.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(fp,"lmdbCreateRecords")});var CE=S((eH,IE)=>{"use strict";var pE=f(),Rp=to(),mp=Dn(),Ap=require("fs-extra"),Np=require("path"),{getBaseSchemaPath:Op}=k();IE.exports=gp;async function gp(e){let t=[{name:e.schema,createddate:Date.now()}],r=new mp(pE.SYSTEM_SCHEMA_NAME,pE.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Rp(r),await Ap.mkdirp(Np.join(Op(),e.schema.toString()))}a(gp,"lmdbCreateSchema")});var LE=S((tH,bE)=>{"use strict";var $n=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a($n,"DeleteRecordsResponseObject");bE.exports=$n});var no=S((iH,UE)=>{"use strict";var wE=F(),ro=$t(),so=Be().LMDB_ERRORS_ENUM,pp=Se(),yE=p(),rH=g(),Ip=require("lmdb"),Cp=LE(),{OVERFLOW_MARKER:sH,MAX_SEARCH_KEY_LENGTH:nH}=pp;async function bp(e,t,r){if(ro.validateEnv(e),t===void 0)throw new Error(so.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(so.IDS_REQUIRED):new Error(so.IDS_MUST_BE_ARRAY);try{let s=wE.listDBIs(e);wE.initializeDBIs(e,t,s);let n=new Cp,i,o=[],_=[];for(let l=0,T=r.length;l<T;l++)try{i=r[l];let d=e.dbis[t].get(i);if(!d){n.skipped.push(i);continue}let A=e.dbis[t].ifVersion(i,Ip.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let N=0;N<s.length;N++){let b=s[N];if(!d.hasOwnProperty(b)||b===t)continue;let Ae=e.dbis[b],v=d[b];if(v!=null)try{let W=ro.getIndexedValues(v);if(W)for(let $e=0,$s=W.length;$e<$s;$e++)Ae.remove(W[$e],i)}catch{yE.warn(`cannot delete from attribute: ${b}, ${v}:${i}`)}}});o.push(A),_.push(i),n.original_records.push(d)}catch(d){yE.warn(d),n.skipped.push(i)}let c=[],u=await Promise.all(o);for(let l=0,T=u.length;l<T;l++)u[l]===!0?n.deleted.push(_[l]):(n.skipped.push(_[l]),c.push(l));let E=0;for(let l=0;l<c.length;l++){let T=c[l];n.original_records.splice(T-E,1),E++}return n.txn_time=ro.getMicroTime(),n}catch(s){throw s}}a(bp,"deleteRecords");UE.exports={deleteRecords:bp}});var us=S((aH,ME)=>{"use strict";var Ar=g(),Lp=no(),wp=F(),yp=require("path"),{getBaseSchemaPath:Up}=k(),Dp=cs(),Mp=p();ME.exports=Pp;async function Pp(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ar.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ar.isEmptyOrZeroLength(e.hash_values)&&!Ar.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let _=0;_<e.records.length;_++){let c=e.records[_][s];Ar.isEmpty(c)||e.hash_values.push(c)}}if(Ar.isEmptyOrZeroLength(e.hash_values))return DE([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ar.isEmptyOrZeroLength(e.records)){e.records=[];for(let _=0;_<e.hash_values.length;_++)e.records[_]={[s]:e.hash_values[_]}}let n=yp.join(Up(),e.schema.toString()),i=await wp.openEnvironment(n,e.table),o=await Lp.deleteRecords(i,s,e.hash_values);try{t===!0&&await Dp(e,o)}catch(_){Mp.error(`unable to write transaction due to ${_.message}`)}return DE(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(Pp,"lmdbDeleteRecords");function DE(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(DE,"createDeleteResponse")});var ao=S((_H,PE)=>{"use strict";var Bp=f(),oH=$t();function io(e,t){let r=Object.create(null);if(t.length===1&&Bp.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(io,"parseRow");function Hp(e,t,r,s){let n=io(r,e);s.push(n)}a(Hp,"searchAll");function vp(e,t,r,s){let n=io(r,e);s[t]=n}a(vp,"searchAllToMap");function Gp(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(Gp,"iterateDBI");function Qt(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(Qt,"pushResults");function qp(e,t,r,s,n,i){t.toString().endsWith(e)&&Qt(t,r,s,n,i)}a(qp,"endsWith");function Fp(e,t,r,s,n,i){t.toString().includes(e)&&Qt(t,r,s,n,i)}a(Fp,"contains");function xp(e,t,r,s,n,i){t>e&&Qt(t,r,s,n,i)}a(xp,"greaterThanCompare");function Vp(e,t,r,s,n,i){t>=e&&Qt(t,r,s,n,i)}a(Vp,"greaterThanEqualCompare");function kp(e,t,r,s,n,i){t<e&&Qt(t,r,s,n,i)}a(kp,"lessThanCompare");function $p(e,t,r,s,n,i){t<=e&&Qt(t,r,s,n,i)}a($p,"lessThanEqualCompare");PE.exports={parseRow:io,searchAll:Hp,searchAllToMap:vp,iterateDBI:Gp,endsWith:qp,contains:Fp,greaterThanCompare:xp,greaterThanEqualCompare:Vp,lessThanCompare:kp,lessThanEqualCompare:$p,pushResults:Qt}});var Nr=S((EH,FE)=>{"use strict";var qe=F(),Yp=p(),De=$t(),wt=Se(),X=Be().LMDB_ERRORS_ENUM,cH=g(),Kp=f(),Ze=ao(),uH=require("lmdb"),{OVERFLOW_MARKER:BE,MAX_SEARCH_KEY_LENGTH:Wp}=wt,Es={lazy:!0};function HE(e,t,r,s,n=!1,i=void 0,o=void 0){let _=Object.create(null),c=qe.openDBI(e,r);c[wt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let u=oo(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(HE,"iterateFullIndex");function ls(e,t,r,s,n,i=!1,o=void 0,_=void 0,c=!1,u=!1){let E=[[],[]],l=qe.openDBI(e,r),T=oo(e,t,r);l[wt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let d=i===!0?s:n,A=i===!0?n:s,N=i===!0?!c:!u,b=i===!0?u:c;for(let{key:Ae,value:v}of l.getRange({start:A,end:d,reverse:i,limit:o,offset:_,inclusiveEnd:N,exclusiveStart:b}))Ze.pushResults(T(Ae,v),v,E,t,r);return E}a(ls,"iterateRangeBetween");function oo(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith(BE)){if(!s)if(t)s=qe.openDBI(e,t);else{let _=qe.listDBIs(e);for(let c=0,u=_.length;c<u&&(s=qe.openDBI(e,_[c]),!s[wt.DBI_DEFINITION_NAME].is_hash_attribute);c++);}n=s.get(i,Es)[r]}return n}}a(oo,"getOverflowCheck");function Qp(e,t,r,s=!1,n=void 0,i=void 0){if(De.validateEnv(e),t===void 0)throw new Error(X.HASH_ATTRIBUTE_REQUIRED);Yn(r),r=ds(e,r);let o=[],_=qe.openDBI(e,t);for(let{key:c,value:u}of _.getRange({start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))Ze.searchAll(r,c,u,o);return o}a(Qp,"searchAll");function Xp(e,t,r,s=!1,n=void 0,i=void 0){if(De.validateEnv(e),t===void 0)throw new Error(X.HASH_ATTRIBUTE_REQUIRED);return Yn(r),r=ds(e,r),HE(e,t,t,Ze.searchAllToMap.bind(null,r),s,n,i)}a(Xp,"searchAllToMap");function Jp(e,t,r=!1,s=void 0,n=void 0){if(De.validateEnv(e),t===void 0)throw new Error(X.ATTRIBUTE_REQUIRED);return HE(e,void 0,t,Ze.iterateDBI,r,s,n)}a(Jp,"iterateDBI");function Zp(e,t){if(De.validateEnv(e),t===void 0)throw new Error(X.HASH_ATTRIBUTE_REQUIRED);return qe.statDBI(e,t).entryCount}a(Zp,"countAll");function zp(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=qe.openDBI(e,r);s=De.convertKeyValueToWrite(s);let c=[[],[]];if(_[wt.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=_.get(s,Es);u!==void 0&&Ze.pushResults(s,u,c,t,r)}else for(let u of _.getValues(s,{reverse:n,limit:i,offset:o}))Ze.pushResults(s,u,c,t,r);return c}a(zp,"equals");function jp(e,t,r){return yt(e,t,r),qe.openDBI(e,t).getValuesCount(r)}a(jp,"count");function eI(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=[[],[]],c=qe.openDBI(e,r);c[wt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r),s=De.convertKeyValueToWrite(s);let u=!0;if(typeof s=="number"&&(u=!1),n===!0){let E;for(let l of c.getKeys({start:s}))if(!l.startsWith(s)){E=l;break}E!==void 0&&(Number.isInteger(o)?o++:i++);for(let{key:l,value:T}of c.getRange({start:E,end:void 0,reverse:n,limit:i,offset:o}))if(l!==E){if(l.toString().startsWith(s))Ze.pushResults(l,T,_,t,r);else if(u===!0)break}}else for(let{key:E,value:l}of c.getRange({start:s,reverse:n,limit:i,offset:o}))if(E.toString().startsWith(s))Ze.pushResults(E,l,_,t,r);else if(u===!0)break;return _}a(eI,"startsWith");function tI(e,t,r,s,n=!1,i=void 0,o=void 0){return vE(e,t,r,s,n,i,o,!0)}a(tI,"endsWith");function vE(e,t,r,s,n=!1,i=void 0,o=void 0,_=!1){yt(e,r,s);let c=[[],[]],u=qe.openDBI(e,r);u[wt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let E=oo(e,t,r);o=Number.isInteger(o)?o:0;for(let T of u.getKeys({end:n?!1:void 0,reverse:n})){if(i===0)break;let d=T.toString();if(d.endsWith(BE))for(let A of u.getValues(T)){let N=E(T,A);(_?N.endsWith(s):N.includes(s))&&l(N,A)}else if(_?d.endsWith(s):d.includes(s))if(u[wt.DBI_DEFINITION_NAME].is_hash_attribute)l(T,T);else for(let A of u.getValues(T))l(T,A)}function l(T,d){if(o>0){o--;return}i!==0&&(Ze.pushResults(T,d,c,t,r),i--)}return a(l,"found_match"),c}a(vE,"contains");function rI(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),ls(e,t,r,s,c,n,i,o,!0,!1)}a(rI,"greaterThan");function sI(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),ls(e,t,r,s,c,n,i,o,!1,!1)}a(sI,"greaterThanEqual");function nI(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),ls(e,t,r,c,s,n,i,o,!1,!0)}a(nI,"lessThan");function iI(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),ls(e,t,r,c,s,n,i,o,!1,!1)}a(iI,"lessThanEqual");function aI(e,t,r,s,n,i=!1,o=void 0,_=void 0){if(De.validateEnv(e),r===void 0)throw new Error(X.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(X.START_VALUE_REQUIRED);if(n===void 0)throw new Error(X.END_VALUE_REQUIRED);if(s=De.convertKeyValueToWrite(s),n=De.convertKeyValueToWrite(n),s>n)throw new Error(X.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return ls(e,t,r,s,n,i,o,_)}a(aI,"between");function oI(e,t,r,s){if(De.validateEnv(e),t===void 0)throw new Error(X.HASH_ATTRIBUTE_REQUIRED);if(Yn(r),r=ds(e,r),s===void 0)throw new Error(X.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?Es:void 0);return i&&(n=Ze.parseRow(i,r)),n}a(oI,"searchByHash");function _I(e,t,r){if(De.validateEnv(e),t===void 0)throw new Error(X.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(X.ID_REQUIRED);let s=!0;return e.dbis[t].get(r,Es)===void 0&&(s=!1),s}a(_I,"checkHashExists");function cI(e,t,r,s,n=[]){qE(e,t,r,s,n);let i=GE(e,t,r,s,n);return Object.values(i)}a(cI,"batchSearchByHash");function uI(e,t,r,s,n=[]){return qE(e,t,r,s,n),GE(e,t,r,s,n)}a(uI,"batchSearchByHashToMap");function GE(e,t,r,s,n=[]){r=ds(e,r);let i=Object.create(null),o=r.length<3?Es:void 0;for(let _=0;_<s.length;_++){let c=s[_];try{let u=e.dbis[t].get(c,o);if(u){let E=Ze.parseRow(u,r);i[c]=E}else n.push(c)}catch(u){throw Yp.warn(u),u}}return i}a(GE,"batchHashSearch");function qE(e,t,r,s,n){if(De.validateEnv(e),t===void 0)throw new Error(X.HASH_ATTRIBUTE_REQUIRED);if(Yn(r),!Array.isArray(s))throw s===void 0?new Error(X.IDS_REQUIRED):new Error(X.IDS_MUST_BE_ARRAY);Array.isArray(n)||(n=[])}a(qE,"initializeBatchSearchByHash");function Yn(e){if(!Array.isArray(e))throw e===void 0?new Error(X.FETCH_ATTRIBUTES_REQUIRED):new Error(X.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Yn,"validateFetchAttributes");function yt(e,t,r){if(De.validateEnv(e),t===void 0)throw new Error(X.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(X.SEARCH_VALUE_REQUIRED);if(r?.length>Wp)throw new Error(X.SEARCH_VALUE_TOO_LARGE)}a(yt,"validateComparisonFunctions");function ds(e,t){return t.length===1&&Kp.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=qe.listDBIs(e)),t}a(ds,"setGetWholeRowAttributes");FE.exports={searchAll:Qp,searchAllToMap:Xp,count:jp,countAll:Zp,equals:zp,startsWith:eI,endsWith:tI,contains:vE,searchByHash:oI,setGetWholeRowAttributes:ds,batchSearchByHash:cI,batchSearchByHashToMap:uI,checkHashExists:_I,iterateDBI:Jp,greaterThan:rI,greaterThanEqual:sI,lessThan:nI,lessThanEqual:iI,between:aI}});var Ss=S((dH,$E)=>{var xE=require("lodash"),VE=Ke(),B=require("joi"),EI=g(),{hdb_schema_table:ze,checkValidTable:kE}=kt(),{handleHDBError:lI,hdb_errors:dI}=q(),{HTTP_STATUS_CODES:SI}=dI,lH=B.object({schema:ze,table:ze,hash_values:B.array().min(1).items(B.alternatives(B.string(),B.number())).required(),get_attributes:B.array().min(1).items(ze).required()}),hI=B.object({schema:ze,table:ze,search_attribute:ze,search_value:B.any().required(),get_attributes:B.array().min(1).items(ze).required(),desc:B.bool(),limit:B.number().integer().min(1),offset:B.number().integer().min(0)}),TI=B.object({schema:ze,table:ze,operator:B.string().valid("and","or").default("and").lowercase(),offset:B.number().integer().min(0),limit:B.number().integer().min(1),get_attributes:B.array().min(1).items(ze).required(),conditions:B.array().min(1).items(B.object({search_attribute:ze,search_type:B.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:B.when("search_type",{switch:[{is:"equals",then:B.any()},{is:"between",then:B.array().items(B.alternatives([B.string(),B.number()])).length(2)}],otherwise:B.alternatives(B.string(),B.number())}).required()})).required()});$E.exports=function(e,t){let r=null;switch(t){case"value":r=VE.validateBySchema(e,hI);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(kE("schema",e.schema)),i(kE("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=VE.validateBySchema(e,TI);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=EI.checkGlobalSchemaTable(e.schema,e.table);if(n)return lI(new Error,n,SI.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=xE.filter(_,u=>u!=="*"&&u.attribute!=="*"&&!xE.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 _o=S((SH,YE)=>{"use strict";var fI=F(),RI=Ss(),mI=require("path"),{getBaseSchemaPath:AI}=k();YE.exports=NI;function NI(e){let t=RI(e,"hashes");if(t)throw t;let r=mI.join(AI(),e.schema.toString());return fI.openEnvironment(r,e.table)}a(NI,"initialize")});var co=S((hH,KE)=>{"use strict";var OI=Nr(),gI=_o();KE.exports=pI;async function pI(e){try{let t=await gI(e),r=global.hdb_schema[e.schema][e.table];return OI.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(pI,"lmdbGetDataByHash")});var hs=S((TH,WE)=>{"use strict";var Kn=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(Kn,"SearchByHashObject");WE.exports=Kn});var XE=S((RH,QE)=>{"use strict";var fH=hs(),II=Nr(),CI=_o();QE.exports=bI;async function bI(e){try{let t=await CI(e),r=global.hdb_schema[e.schema][e.table];return II.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(bI,"lmdbSearchByHash")});var ht=S((mH,JE)=>{"use strict";var Wn=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(Wn,"SearchObject");JE.exports=Wn});var Qn=S((AH,tl)=>{"use strict";var Te=Nr(),LI=F(),wI=require("path"),yI=g(),O=Se(),Xt=f(),{getBaseSchemaPath:UI}=k(),DI=Wt(),ZE=Be().LMDB_ERRORS_ENUM,{compareKeys:Or}=require("ordered-binary"),Tt=Xt.SEARCH_WILDCARDS;async function MI(e,t,r){let s;e.schema===Xt.SYSTEM_SCHEMA_NAME?s=DI[e.table]:s=global.hdb_schema[e.schema][e.table];let n=el(e,s.hash_attribute,r,t);return zE(e,n,s.hash_attribute,r)}a(MI,"prepSearch");async function zE(e,t,r,s){let n=wI.join(UI(),e.schema.toString()),i=await LI.openEnvironment(n,e.table),o=jE(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(HI(e,r)===!1)return s===!0?BI(o):o[1];let c=o[0];return s===!0?Te.batchSearchByHashToMap(i,r,e.get_attributes,c):Te.batchSearchByHash(i,r,e.get_attributes,c)}a(zE,"executeSearch");function jE(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=Te.equals(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.CONTAINS:n=Te.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=Te.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=Te.startsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Te.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Te.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case O.SEARCH_TYPES.SEARCH_ALL:return Te.searchAll(e,s,t.get_attributes,o,_,c);case O.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Te.searchAllToMap(e,s,t.get_attributes,o,_,c);case O.SEARCH_TYPES.BETWEEN:n=Te.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=Te.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=Te.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=Te.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=Te.lessThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;default:return Object.create(null)}return n}a(jE,"searchByType");function PI(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 Or(i,s[0])>=0&&Or(i,s[1])<=0};case O.SEARCH_TYPES.GREATER_THAN:case O.SEARCH_TYPES._GREATER_THAN:return n=>Or(n[r],s)>0;case O.SEARCH_TYPES.GREATER_THAN_EQUAL:case O.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>Or(n[r],s)>=0;case O.SEARCH_TYPES.LESS_THAN:case O.SEARCH_TYPES._LESS_THAN:return n=>Or(n[r],s)<0;case O.SEARCH_TYPES.LESS_THAN_EQUAL:case O.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>Or(n[r],s)<=0;default:return Object.create(null)}}a(PI,"filterByType");function BI(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(BI,"createMapFromArrays");function HI(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(HI,"checkToFetchMore");function el(e,t,r,s){if(yI.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),Tt.indexOf(n)>-1)return r===!0?O.SEARCH_TYPES.SEARCH_ALL_TO_MAP:O.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Tt[0])<0&&n.indexOf(Tt[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(Tt.indexOf(i)>=0&&Tt.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),O.SEARCH_TYPES.CONTAINS;if(Tt.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),O.SEARCH_TYPES.ENDS_WITH;if(Tt.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),O.SEARCH_TYPES.STARTS_WITH;if(n.includes(Tt[0])||n.includes(Tt[1]))return O.SEARCH_TYPES.EQUALS;throw new Error(ZE.UNKNOWN_SEARCH_TYPE)}else switch(s){case Xt.VALUE_SEARCH_COMPARATORS.BETWEEN:return O.SEARCH_TYPES.BETWEEN;case Xt.VALUE_SEARCH_COMPARATORS.GREATER:return O.SEARCH_TYPES.GREATER_THAN;case Xt.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return O.SEARCH_TYPES.GREATER_THAN_EQUAL;case Xt.VALUE_SEARCH_COMPARATORS.LESS:return O.SEARCH_TYPES.LESS_THAN;case Xt.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return O.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(ZE.UNKNOWN_SEARCH_TYPE)}}a(el,"createSearchTypeFromSearchObject");tl.exports={executeSearch:zE,createSearchTypeFromSearchObject:el,prepSearch:MI,searchByType:jE,filterByType:PI}});var sl=S((OH,rl)=>{"use strict";var NH=ht(),vI=Ss(),GI=g(),qI=f(),FI=Qn();rl.exports=xI;async function xI(e,t){if(!GI.isEmpty(t)&&qI.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=vI(e,"value");if(s)throw s;let n=!0;try{return await FI.prepSearch(e,t,n)}catch(i){throw i}}a(xI,"lmdbGetDataByValue")});var gr=S((pH,nl)=>{"use strict";var gH=ht(),VI=Ss(),kI=g(),$I=f(),YI=Qn();nl.exports=KI;async function KI(e,t){if(!kI.isEmpty(t)&&$I.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=VI(e,"value");if(s)throw s;let n=!1;try{return await YI.prepSearch(e,t,n)}catch(i){throw i}}a(KI,"lmdbSearchByValue")});var al=S((CH,il)=>{"use strict";var IH=Se(),Xn=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(Xn,"SearchByConditionsObject");var Jn=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(Jn,"SearchCondition");var Zn=class{constructor(t,r){this.attribute=t,this.desc=r}};a(Zn,"SortAttribute");il.exports={SearchByConditionsObject:Xn,SearchCondition:Jn,SortAttribute:Zn}});var ll=S((LH,El)=>{"use strict";var bH=al().SearchByConditionsObject,WI=ht(),QI=Ss(),uo=Nr(),zn=Se(),ul=Qn(),XI=ao(),ol=require("lodash"),{getBaseSchemaPath:JI}=k(),ZI=require("path"),zI=F(),{handleHDBError:_l,hdb_errors:jI}=q(),{HTTP_STATUS_CODES:eC}=jI,tC=1e8,rC={lazy:!0};El.exports=sC;async function sC(e){try{let t=QI(e,"conditions");if(t)throw _l(t,t.message,eC.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=ZI.join(JI(),e.schema.toString()),s=await zI.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=ol.sortBy(e.conditions,o=>{if(o.estimated_count===void 0){let _=o.search_type;_===zn.SEARCH_TYPES.EQUALS?o.estimated_count=uo.count(s,o.search_attribute,o.search_value):_===zn.SEARCH_TYPES.CONTAINS||_===zn.SEARCH_TYPES.ENDS_WITH?o.estimated_count=1/0:o.estimated_count=tC}return o.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[o]=await cl(s,e,i[0],n.hash_attribute),_=s.dbis[n.hash_attribute],c=i.slice(1).map(ul.filterByType),u=c.length,E=[],l=uo.setGetWholeRowAttributes(s,e.get_attributes),T=e.offset>-1?e.offset:0,d=e.limit>-1?e.limit:1/0;e:for(let A of o){let N=_.get(A,rC);for(let b=0;b<u;b++)if(!c[b](N))continue e;if(T>0){T--;continue}if(d<=0)break;d--,E.push(XI.parseRow(N,l))}return E}else{let o=[],_=[];for(let c of i){let[u]=await cl(s,e,c,n.hash_attribute);_.push(u)}if(o=ol.union(..._),e.limit>0||e.offset>0){let c=Number.isInteger(e.limit)?e.limit:o.length;o=o.splice(e.offset,c)}return uo.batchSearchByHash(s,n.hash_attribute,e.get_attributes,o)}}catch(t){throw _l(t)}}a(sC,"lmdbSearchByConditions");async function cl(e,t,r,s){let n=new WI(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===zn.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,ul.searchByType(e,n,i,s)}a(cl,"executeConditionSearch")});var Ts=S((wH,dl)=>{"use strict";var nC=f().OPERATIONS_ENUM,jn=class{constructor(t,r,s,n=void 0){this.operation=nC.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(jn,"DeleteObject");dl.exports=jn});var Eo=S((yH,Sl)=>{"use strict";var ei=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(ei,"DropAttributeObject");Sl.exports=ei});var So=S((DH,hl)=>{"use strict";var iC=ht(),aC=Ts(),UH=Eo(),it=f(),oC=g(),lo=F(),_C=Wt(),cC=gr(),uC=us(),{getBaseSchemaPath:EC}=k(),lC=require("path");hl.exports=dC;async function dC(e,t=!0){let r;e.schema===it.SYSTEM_SCHEMA_NAME?r=_C[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await hC(e),n=lC.join(EC(),e.schema.toString()),i=await lo.openEnvironment(n,e.table);return t===!0&&await SC(e,i,r.hash_attribute),lo.dropDBI(i,e.attribute),s}a(dC,"lmdbDropAttribute");async function SC(e,t,r){let s=lo.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(SC,"removeAttributeFromAllObjects");async function hC(e){let t=new iC(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=(await cC(t)).filter(o=>o[it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(oC.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new aC(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return uC(i)}a(hC,"dropAttributeFromSystem")});var ml=S((MH,Rl)=>{"use strict";var TC=So(),fC=Eo(),Tl=g(),fl=p(),RC=Be().LMDB_ERRORS_ENUM;Rl.exports=mC;async function mC(e){if(Tl.isEmpty(global.hdb_schema[e.schema])||Tl.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 fC(e.schema,e.table,r);try{await TC(n,!1)}catch(i){i.message!==RC.DBI_DOES_NOT_EXIST&&fl.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw fl.error(`Error dropping attribute ${r}`),s}}a(mC,"lmdbDropAllAttributes")});var ho=S((BH,Ll)=>{"use strict";var pl=ht(),Il=Ts(),Cl=gr(),bl=us(),PH=ml(),Ie=f(),Al=g(),Nl=F(),{getBaseSchemaPath:AC,getTransactionAuditStorePath:NC}=k(),Ol=require("path"),gl=p();Ll.exports=OC;async function OC(e){try{if(Al.isEmpty(global.hdb_schema[e.schema])||Al.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await gC(e),await pC(e);let t=Ol.join(AC(),e.schema.toString());try{await Nl.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")gl.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Ol.join(NC(),e.schema.toString());await Nl.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")gl.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(OC,"lmdbDropTable");async function gC(e){let t=new pl(Ie.SYSTEM_SCHEMA_NAME,Ie.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ie.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ie.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=await Cl(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 Il(Ie.SYSTEM_SCHEMA_NAME,Ie.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await bl(n)}a(gC,"deleteAttributesFromSystem");async function pC(e){let t=new pl(Ie.SYSTEM_SCHEMA_NAME,Ie.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ie.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ie.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ie.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ie.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=await Cl(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 Il(Ie.SYSTEM_SCHEMA_NAME,Ie.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await bl(n)}catch(i){throw i}}a(pC,"dropTableFromSystem")});var yl=S((vH,wl)=>{"use strict";var IC=require("fs-extra"),CC=ht(),bC=hs(),LC=Ts(),wC=ho(),yC=us(),UC=co(),DC=gr(),ft=f(),HH=g(),MC=require("path"),{getBaseSchemaPath:PC}=k(),{handleHDBError:BC,hdb_errors:HC}=q(),{HDB_ERROR_MSGS:vC,HTTP_STATUS_CODES:GC}=HC;wl.exports=qC;async function qC(e){let t;try{t=await FC(e.schema);let r=new CC(ft.SYSTEM_SCHEMA_NAME,ft.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=await DC(r);for(let o=0;o<s.length;o++){let _={schema:t,table:s[o].name};try{await wC(_)}catch(c){if(c.message!=="invalid environment")throw c}}let n=new LC(ft.SYSTEM_SCHEMA_NAME,ft.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await yC(n);let i=MC.join(PC(),t.toString());await IC.remove(i)}catch(r){throw r}}a(qC,"lmdbDropSchema");async function FC(e){let t=new bC(ft.SYSTEM_SCHEMA_NAME,ft.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=await UC(t)}catch(n){throw n}for(let n in r)r[n].name===e&&(s=e);if(!s)throw BC(new Error,vC.SCHEMA_NOT_FOUND(e),GC.NOT_FOUND,void 0,void 0,!0);return s}a(FC,"validateDropSchema")});var To=S((GH,Ul)=>{"use strict";var ti=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(ti,"CreateTableObject");Ul.exports=ti});var Ml=S((FH,Dl)=>{"use strict";var xC=require("path"),VC=require("fs-extra"),ri=F(),{getTransactionAuditStorePath:kC}=k(),fo=Se(),qH=To();Dl.exports=$C;async function $C(e){let t;try{let r=xC.join(kC(),e.schema.toString());await VC.mkdirp(r),t=await ri.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{ri.createDBI(t,fo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),ri.createDBI(t,fo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),ri.createDBI(t,fo.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($C,"createTransactionsAuditEnvironment")});var vl=S((xH,Hl)=>{"use strict";var Ro=f(),Pl=F(),YC=Sr(),KC=require("path"),{getSystemSchemaPath:WC,getBaseSchemaPath:QC}=k(),XC=Wt(),JC=wn(),mo=Ln(),ZC=p(),zC=Ml(),No=XC.hdb_table,Bl=[];for(let e=0;e<No.attributes.length;e++)Bl.push(No.attributes[e].attribute);Hl.exports=jC;async function jC(e,t){let r=KC.join(QC(),t.schema.toString()),s=new mo(t.schema,t.table,Ro.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new mo(t.schema,t.table,Ro.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new mo(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Pl.createEnvironment(r,t.table),e!==void 0){let o=await Pl.openEnvironment(WC(),Ro.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await YC.insertRecords(o,No.hash_attribute,Bl,[e]),await Ao(s),await Ao(n),await Ao(i)}await zC(t)}catch(o){throw o}}a(jC,"lmdbCreateTable");async function Ao(e){try{await JC(e)}catch(t){ZC.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Ao,"createAttribute")});var ql=S((VH,Gl)=>{"use strict";var eb=yn(),tb=Pn(),rb=vn(),pr=f(),sb=Sr().updateRecords,nb=F(),ib=require("path"),{getBaseSchemaPath:ab}=k(),ob=cs(),_b=p();Gl.exports=cb;async function cb(e){try{let{schema_table:t,attributes:r}=eb(e);tb(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 rb(e.hdb_auth_header,t,r),n=ib.join(ab(),e.schema.toString()),i=await nb.openEnvironment(n,e.table),o=await sb(i,t.hash_attribute,r,e.records,e[pr.CLUSTERING_FLAG]!==!0);try{await ob(e,o)}catch(_){_b.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(cb,"lmdbUpdateRecords")});var xl=S((kH,Fl)=>{"use strict";var ub=f().OPERATIONS_ENUM,si=class{constructor(t,r,s,n=void 0){this.operation=ub.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(si,"UpsertObject");Fl.exports=si});var kl=S((YH,Vl)=>{"use strict";var $H=xl(),Eb=yn(),lb=Pn(),db=vn(),Ir=f(),Sb=Sr().upsertRecords,hb=F(),Tb=require("path"),{getBaseSchemaPath:fb}=k(),Rb=cs(),mb=p(),{handleHDBError:Ab,hdb_errors:Nb}=q();Vl.exports=Ob;async function Ob(e){let t;try{t=Eb(e)}catch(c){throw Ab(c,c.message,Nb.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;lb(e,s,r.hash_attribute),e.schema!==Ir.SYSTEM_SCHEMA_NAME&&(s.includes(Ir.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ir.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ir.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ir.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await db(e.hdb_auth_header,r,s),i=Tb.join(fb(),e.schema.toString()),o=await hb.openEnvironment(i,e.table),_=await Sb(o,r.hash_attribute,s,e.records,e[Ir.CLUSTERING_FLAG]!==!0);try{await Rb(e,_)}catch(c){mb.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(Ob,"lmdbUpsertRecords")});var Xl=S((KH,Ql)=>{"use strict";var gb=ht(),$l=g(),Yl=p(),pb=gr(),Kl=f(),Ib=no().deleteRecords,Cb=F(),bb=require("path"),{getBaseSchemaPath:Lb}=k(),{promisify:wb}=require("util"),yb=wb(setTimeout),Wl=1e4,Ub=10;Ql.exports=Db;async function Db(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if($l.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 gb(e.schema,e.table,Kl.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await pb(n,Kl.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw Yl.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return $l.isEmptyOrZeroLength(s)?(Yl.trace("No records found to delete"),{message:"No records found to delete"}):await Mb(e,s,t)}a(Db,"lmdbDeleteRecordsBefore");async function Mb(e,t,r){let s=bb.join(Lb(),e.schema.toString()),n=await Cb.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,_=t.length;o<_;o+=Wl){let c=t.slice(o,o+Wl),u=[];for(let E=0,l=c.length;E<l;E++)u.push(c[E][r]);try{let E=await Ib(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 yb(Ub)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(Mb,"chunkDeletes")});var Zl=S((WH,Jl)=>{"use strict";var ni=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(ni,"DeleteBeforeObject");Jl.exports=ni});var jl=S((QH,zl)=>{"use strict";var ii=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(ii,"DeleteAuditLogsBeforeResults");zl.exports=ii});var rd=S((JH,td)=>{"use strict";var Oo=F(),{getTransactionAuditStorePath:Pb}=k(),XH=Zl(),Bb=require("path"),fs=Se(),Hb=g(),ed=jl(),vb=require("util").promisify,Gb=vb(setTimeout),qb=1e4,Fb=100;td.exports=xb;async function xb(e){let t=Bb.join(Pb(),e.schema),r=await Oo.openEnvironment(t,e.table,!0),s=Oo.listDBIs(r);Oo.initializeDBIs(r,fs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new ed;do n=await Vb(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 Gb(Fb);while(n.transactions_deleted>0);return i}a(xb,"deleteAuditLogsBefore");async function Vb(e,t){let r=new ed;try{let s=e.dbis[fs.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[fs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Hb.isEmpty(_)||(n=e.dbis[fs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(_,i));for(let c=0;c<o.hash_values.length;c++)n=e.dbis[fs.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[c],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>qb)break}return await n,r}catch(s){throw s}}a(Vb,"deleteTransactions")});var cd=S((ZH,_d)=>{"use strict";var go=F(),Cr=Se(),sd=$t(),po=f(),nd=g(),{getTransactionAuditStorePath:kb}=k(),$b=require("path"),Yb=Nr(),ai=fr(),Kb=p();_d.exports=Wb;async function Wb(e){let t=$b.join(kb(),e.schema),r=await go.openEnvironment(t,e.table,!0),s=go.listDBIs(r);go.initializeDBIs(r,Cr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case po.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return id(r,e.search_values);case po.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,Xb(r,e.search_values,n);case po.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Qb(r,e.search_values);default:return id(r)}}a(Wb,"readAuditLog");function id(e,t=[0,sd.getMicroTime()]){nd.isEmpty(t[0])&&(t[0]=0),nd.isEmpty(t[1])&&(t[1]=sd.getMicroTime());let r=[];try{let s=e.dbis[Cr.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 ai,i);r.push(o)}return r}catch(s){throw s}}a(id,"searchTransactionsByTimestamp");function Qb(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[Cr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,od(e,i))}return Object.fromEntries(r)}a(Qb,"searchTransactionsByUsername");function Xb(e,t,r){let s=new Map;for(let _=0,c=t.length;_<c;_++){let u=t[_],E=Yb.equals(e,Cr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Cr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let l=0,T=E[0].length;l<T;l++){let d=E[0][l],A=Number(d);s.has(A)?s.get(A).push(u.toString()):s.set(A,[u.toString()])}}let n=Array.from(s.keys()),i=od(e,n),o=new Map;for(let _=0;_<i.length;_++){let c=i[_],u=c.timestamp,E=s.get(u);ad(c,"records",r,E,o),ad(c,"original_records",r,E,o)}return Object.fromEntries(o)}a(Xb,"searchTransactionsByHashValues");function ad(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 ai(e.operation,e.user_name,i,void 0);l[t]=[_],u.push(l)}}else{let u=new ai(e.operation,e.user_name,i,void 0);u[t]=[_],n.set(c,[u])}}}a(ad,"loopRecords");function od(e,t){let r=[];try{let s=e.dbis[Cr.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 ai,i);r.push(o)}}catch(i){Kb.warn(i)}return r}catch(s){throw s}}a(od,"batchSearchTransactions")});var Ed=S((zH,ud)=>{"use strict";var Jb=require("path"),{getBaseSchemaPath:Zb}=k(),zb=F();ud.exports={writeTransaction:jb};async function jb(e,t,r){let s=Jb.join(Zb(),e);return(await zb.openEnvironment(s,t)).transaction(r)}a(jb,"writeTransaction")});var dd=S((jH,ld)=>{"use strict";var eL=require("path"),{getBaseSchemaPath:tL}=k(),rL=F();ld.exports={flush:sL};async function sL(e,t){let r=eL.join(tL(),e.toString());return(await rL.openEnvironment(r,t.toString())).flushed}a(sL,"flush")});var hd=S((ev,Sd)=>{"use strict";var j=p(),{handleHDBError:nL}=q(),iL=Ua(),aL=wn(),oL=to(),_L=CE(),cL=us(),uL=co(),EL=XE(),lL=sl(),dL=gr(),SL=ll(),hL=yl(),TL=vl(),fL=ql(),RL=kl(),mL=Xl(),AL=rd(),NL=ho(),OL=So(),gL=cd(),pL=Ed(),IL=dd(),oi=class extends iL{async searchByConditions(t){try{return SL(t)}catch(r){throw j.error(r),r}}async getDataByHash(t){try{return await uL(t)}catch(r){throw j.error(r),r}}async searchByHash(t){try{return await EL(t)}catch(r){throw j.error(r),r}}async getDataByValue(t,r){try{return await lL(t,r)}catch(s){throw j.error(s),s}}async searchByValue(t){try{return await dL(t)}catch(r){throw j.error(r),r}}async createSchema(t){try{return await _L(t)}catch(r){throw j.error(r),r}}async dropSchema(t){try{return await hL(t)}catch(r){throw j.error(r),r}}async createTable(t,r){try{return await TL(t,r)}catch(s){throw j.error(s),s}}async dropTable(t){try{return await NL(t)}catch(r){throw j.error(r),r}}async createAttribute(t){try{return await aL(t)}catch(r){throw j.error(r),r}}async createRecords(t){try{return await oL(t)}catch(r){throw j.error(r),r}}async updateRecords(t){try{return await fL(t)}catch(r){throw j.error(r),r}}async upsertRecords(t){try{return await RL(t)}catch(r){throw nL(r,null,null,j.ERR,r)}}async deleteRecords(t){try{return await cL(t)}catch(r){throw j.error(r),r}}async deleteRecordsBefore(t){try{return await mL(t)}catch(r){throw j.error(r),r}}async dropAttribute(t){try{return await OL(t)}catch(r){throw j.error(r),r}}async deleteAuditLogsBefore(t){try{return await AL(t)}catch(r){throw j.error(r),r}}async readAuditLog(t){try{return await gL(t)}catch(r){throw j.error(r),r}}writeTransaction(t,r,s){return pL.writeTransaction(t,r,s)}flush(t,r){return IL.flush(t,r)}};a(oi,"LMDBBridge");Sd.exports=oi});var Jt=S((tv,fd)=>{"use strict";var CL=hd(),bL=Ua(),LL=Q();LL.initSync();var Td;function wL(){return Td instanceof bL?Td:new CL}a(wL,"getBridge");fd.exports=wL()});var yd=S((sv,wd)=>{"use strict";var Io=require("recursive-iterator"),yL=require("alasql"),Co=require("clone"),Rd=g(),{handleHDBError:md,hdb_errors:UL}=q(),{HDB_ERROR_MSGS:Ad,HTTP_STATUS_CODES:Nd}=UL,DL=["DISTINCT_ARRAY"],Od=Symbol("validateTables"),bo=Symbol("validateTable"),rv=Symbol("getAllColumns"),gd=Symbol("validateAllColumns"),_i=Symbol("findColumn"),pd=Symbol("validateOrderBy"),Rs=Symbol("validateSegment"),Lo=Symbol("validateColumn"),Id=Symbol("setColumnsForTable"),Cd=Symbol("checkColumnsForAsterisk"),bd=Symbol("validateGroupBy"),Ld=Symbol("hasColumns"),ci=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Od](),this[Cd](),this[gd]()}[Od](){if(this[Ld]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[bo](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[bo](t.table)})}}[Ld](){let t=!1,r=new Io(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[bo](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw md(new Error,Ad.SCHEMA_NOT_FOUND(t.databaseid),Nd.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw md(new Error,Ad.TABLE_NOT_FOUND(t.databaseid,t.tableid),Nd.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=Co(s);n.table=Co(t),this.attributes.push(n)})}[_i](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)}[Cd](){let t=new Io(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Id](r.tableid)}[Id](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new yL.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[gd](){this[Rs](this.statement.columns,!1),this[Rs](this.statement.joins,!1),this[Rs](this.statement.where,!1),this[bd](this.statement.group,!1),this[Rs](this.statement.order,!0)}[Rs](t,r){if(!t)return;let s=new Io(t),n=[];for(let{node:i,path:o}of s)!Rd.isEmpty(i)&&!Rd.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[pd](i):n.push(this[Lo](i)));return n}[bd](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&DL.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Co(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[_i](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[_i](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`}[pd](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[Lo](t)}[Lo](t){let r=this[_i](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(ci,"SelectValidator");wd.exports=ci});var Pd=S((nv,Md)=>{"use strict";var Ud=require("lodash"),ms=require("mathjs"),ML=require("jsonata"),Dd=g();Md.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Ud.uniqWith(e,Ud.isEqual):e,searchJSON:PL,mad:As.bind(null,ms.mad),mean:As.bind(null,ms.mean),mode:As.bind(null,ms.mode),prod:As.bind(null,ms.prod),median:As.bind(null,ms.median)};function As(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(As,"aggregateFunction");function PL(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(Dd.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Dd.isEmpty(this.__ala__.res[r])){let s=ML(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(PL,"searchJSON")});var Hd=S((iv,Bd)=>{"use strict";var Z=require("moment"),wo="YYYY-MM-DDTHH:mm:ss.SSSZZ";Z.suppressDeprecationWarnings=!0;Bd.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(wo),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(wo),offset_utc:(e,t)=>Z(e).utc().utcOffset(t).format(wo)}});var Fd=S((av,qd)=>{"use strict";var BL=require("@turf/area"),HL=require("@turf/length"),vL=require("@turf/circle"),GL=require("@turf/difference"),qL=require("@turf/distance"),FL=require("@turf/boolean-contains"),xL=require("@turf/boolean-equal"),VL=require("@turf/boolean-disjoint"),kL=require("@turf/helpers"),vd=f(),D=g();qd.exports={geoArea:$L,geoLength:YL,geoCircle:KL,geoDifference:WL,geoDistance:Gd,geoNear:QL,geoContains:XL,geoEqual:JL,geoCrosses:ZL,geoConvert:zL};var yo="geo1 is required",Uo="geo2 is required";function $L(e){if(D.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=D.autoCast(e)),BL.default(e)}a($L,"geoArea");function YL(e,t){if(D.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=D.autoCast(e)),HL.default(e,{units:t||"kilometers"})}a(YL,"geoLength");function KL(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)),vL.default(e,t,{units:r||"kilometers"})}a(KL,"geoCircle");function WL(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)),GL(e,t)}a(WL,"geoDifference");function Gd(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)),qL.default(e,t,{units:r||"kilometers"})}a(Gd,"geoDistance");function QL(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 Gd(e,t,s)<=r}a(QL,"geoNear");function XL(e,t){if(D.isEmpty(e))throw new Error(yo);if(D.isEmpty(e))throw new Error(Uo);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),FL.default(e,t)}a(XL,"geoContains");function JL(e,t){if(D.isEmpty(e))throw new Error(yo);if(D.isEmpty(e))throw new Error(Uo);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),xL.default(e,t)}a(JL,"geoEqual");function ZL(e,t){if(D.isEmpty(e))throw new Error(yo);if(D.isEmpty(e))throw new Error(Uo);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),!VL.default(e,t)}a(ZL,"geoCrosses");function zL(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(vd.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(vd.GEO_CONVERSION_ENUM).join(",")}`);return kL[t](e,r)}a(zL,"geoConvert")});var Vd=S((ov,xd)=>{var Zt=Pd(),Me=Hd(),at=Fd();xd.exports=e=>{e.aggr.mad=e.aggr.MAD=Zt.mad,e.aggr.mean=e.aggr.MEAN=Zt.mean,e.aggr.mode=e.aggr.MODE=Zt.mode,e.aggr.prod=e.aggr.PROD=Zt.prod,e.aggr.median=e.aggr.MEDIAN=Zt.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Zt.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Zt.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Me.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Me.current_time,e.fn.extract=e.fn.EXTRACT=Me.extract,e.fn.date=e.fn.DATE=Me.date,e.fn.date_format=e.fn.DATE_FORMAT=Me.date_format,e.fn.date_add=e.fn.DATE_ADD=Me.date_add,e.fn.date_sub=e.fn.DATE_SUB=Me.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Me.date_diff,e.fn.now=e.fn.NOW=Me.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Me.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Me.get_server_time,e.fn.getdate=e.fn.GETDATE=Me.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Me.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=at.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=at.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=at.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=at.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=at.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=at.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=at.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=at.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=at.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=at.geoNear}});var Yd=S((_v,$d)=>{"use strict";var Ns=require("lodash"),oe=require("alasql");oe.options.cache=!1;var jL=Vd(),kd=require("clone"),ui=require("recursive-iterator"),L=p(),y=g(),br=Jt(),ew=f(),{hdb_errors:tw}=q(),rw="IS NULL",Os="There was a problem performing this search. Please check the logs and try again.";jL(oe);var Ei=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(Os)}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(Os)}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(Os)}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(Os)}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(Os)}}_getColumns(){let t=new ui(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(kd(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Ns.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 ui(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 oe.yy.LogicValue({value:s}):r.right instanceof oe.yy.StringValue&&!y.isEmpty(s)&&y.autoCasterIsNumberCheck(s.toString())&&(r.right=new oe.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 oe.yy.LogicValue({value:i}):s instanceof oe.yy.StringValue&&y.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new oe.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 ui(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(ew.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&&Ns.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 oe.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(kd(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(rw)>-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=Ns.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 br.getDataByHash(_);for(let l of _.hash_values)l in E&&!this.data[i].__merged_data[l]&&(this.data[i].__merged_data[l]=[...s[i]],this._setMergedHashAttribute(i,l))}catch(E){L.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),L.error(E)}else try{_.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async E=>{let l=Object.assign({},_);l.search_value=E;let T=await br.getDataByValue(l);for(let d in T)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,T[d][n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,T[d][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(d)))}))}catch(E){L.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),L.error(E)}else if(!y.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!y.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let E=this.comparator_search_values[u].comparators;for(let l=0,T=E.length;l<T;l++){let d=E[l];_.search_attribute=d.attribute,_.search_value=d.search_value;let A=await br.getDataByValue(_,d.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 br.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 oe.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 oe.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new oe.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 oe.yy.FuncValue:new oe.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(d=>{d.joinmode&&d.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(d.table);let A=d.joinmode+" JOIN ? AS "+(d.as?d.as:d.table.tableid);d.on&&(A+=" ON "+d.on.toString()),i.push(A),t.push(Object.values(this.data[`${d.table.databaseid_orig}_${d.table.as?d.table.as_orig:d.table.tableid_orig}`].__merged_data))});let o=[],_={};n.forEach(d=>{let A=this.data[`${d.databaseid_orig}_${d.as?d.as_orig:d.tableid_orig}`].__hash_name,N=d.as?d.as_orig:d.tableid_orig;o.push({key:`'${N}.${A}'`,schema:d.databaseid_orig,table:d.as?d.as_orig:d.tableid_orig,keys:new Set}),r.push(`${d.as?d.as:d.tableid}.\`${A}\` AS "${N}.${A}"`),_[d.as?d.as_orig:d.tableid_orig]=this.data[`${d.databaseid_orig}_${d.as?d.as_orig:d.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(d=>{d.is_func?r.push(d.initial_select_column.toString()):d.initial_select_column.tableid?r.push(`${d.initial_select_column.tableid}.${d.initial_select_column.columnid} AS ${d.expression.columnid}`):r.push(`${d.initial_select_column.columnid} AS ${d.expression.columnid}`)}));let E="",l="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(E=this.statement.limit?"LIMIT "+this.statement.limit:"",l=this.statement.offset?"OFFSET "+this.statement.offset:"");let T=[];try{let d=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${c} ${u} ${E} ${l}`,A=this._convertColumnsToIndexes(d,n);T=await oe.promise(A,t),t=null}catch(d){throw L.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),L.error(d),new Error("There was a problem processing the data.")}if(T&&T.length>0){for(let d=0,A=T.length;d<A;d++){let N=T[d];o.forEach(b=>{N[b.key]!==null&&N[b.key]!==void 0&&b.keys.add(N[b.key])})}o.forEach(d=>{let A=Object.keys(this.data[`${d.schema}_${d.table}`].__merged_data),N=Ns.difference(A,[...d.keys].map(b=>b.toString()));for(let b=0,Ae=N.length;b<Ae;b++){let v=N[b];delete this.data[`${d.schema}_${d.table}`].__merged_data[v]}})}return{existing_attributes:_,joined_length:T?T.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new ui(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=Ns.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 br.getDataByHash(_),u=n.columns.length;for(let E=0,l=o.length;E<l;E++){let T=o[E],d=c[T];for(let A=0;A<u;A++){let N=n.columns[A],b=d[N]===void 0?null:d[N];this.data[s].__merged_data[T].push(b)}}}}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 oe.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(tw.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 br.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(Ei,"SQLSearch");$d.exports=Ei});var gs=S((cv,Wd)=>{"use strict";var sw=yd();Wd.exports={searchByConditions:ow,searchByHash:_w,searchByValue:cw,search:uw};var Do=Jt(),Kd=require("util"),nw=Kd.callbackify(Do.searchByHash),iw=Kd.callbackify(Do.searchByValue),aw=Yd();async function ow(e){return Do.searchByConditions(e)}a(ow,"searchByConditions");function _w(e,t){try{nw(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(_w,"searchByHash");function cw(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),iw(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(cw,"searchByValue");function uw(e,t){try{let r=new sw(e);r.validate(),new aw(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(uw,"search")});var Is=S((uv,Zd)=>{"use strict";var ps=require("crypto"),Xd="aes-256-cbc",Ew=32,lw=16,Mo=64,Jd=32,dw=Mo+Jd,Qd=new Map;Zd.exports={encrypt:Sw,decrypt:hw,createNatsTableStreamName:Tw};function Sw(e){let t=ps.randomBytes(Ew),r=ps.randomBytes(lw),s=ps.createCipheriv(Xd,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(Sw,"encrypt");function hw(e){let t=e.substr(0,Mo),r=e.substr(Mo,Jd),s=e.substr(dw,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=ps.createDecipheriv(Xd,Buffer.from(t,"hex"),n),_=o.update(i);return _=Buffer.concat([_,o.final()]),_.toString()}a(hw,"decrypt");function Tw(e,t){let r=`${e}.${t}`,s=Qd.get(r);return s||(s=ps.createHash("md5").update(`${e}.${t}`).digest("hex"),Qd.set(r,s)),s}a(Tw,"createNatsTableStreamName")});var hi=S((Ev,nS)=>{"use strict";var jd=gs(),Ut=p(),eS=In(),fw=require("lodash"),Rw=require("path"),mw=Is(),Po=g(),{promisify:tS}=require("util"),x=f(),{handleHDBError:li,hdb_errors:Aw}=q(),{HDB_ERROR_MSGS:di,HTTP_STATUS_CODES:rS}=Aw,Nw=Q();Nw.initSync();var zd=F(),Ow=k(),Cs=tS(jd.searchByValue),gw=tS(jd.searchByHash),Lr="name",sS="hash_attribute",Bo="schema",pw="schema_table",Iw="attribute";nS.exports={describeAll:Cw,describeTable:Si,describeSchema:Lw};async function Cw(e){try{let t=Po.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:Lr,search_value:x.WILDCARD_SEARCH_VALUE,get_attributes:[Lr]},i=await Cs(n);if(Po.isEmptyOrZeroLength(i))return{};let o={},_={};for(let T in i)o[i[T].name]=!0,!t&&!s&&(_[i[T].name]=r[i[T].name].describe);let c={schema:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:x.ID_ATTRIBUTE_STRING,search_value:x.WILDCARD_SEARCH_VALUE,get_attributes:[sS,x.ID_ATTRIBUTE_STRING,Lr,Bo]},u=await Cs(c),E=[];for(let T of u)try{let d;if(t||s)d=await Si({schema:T.schema,table:T.name});else if(r&&r[T.schema].describe&&r[T.schema].tables[T.name].describe){let A=r[T.schema].tables[T.name].attribute_permissions;d=await Si({schema:T.schema,table:T.name},A)}d&&E.push(d)}catch(d){Ut.error(d)}let l={};for(let T in E)t||s?(l[E[T].schema]==null&&(l[E[T].schema]={}),l[E[T].schema][E[T].name]=E[T],o[E[T].schema]&&delete o[E[T].schema]):_[E[T].schema]&&(l[E[T].schema]==null&&(l[E[T].schema]={}),l[E[T].schema][E[T].name]=E[T],o[E[T].schema]&&delete o[E[T].schema]);for(let T in o)t||s?l[T]={}:_[T]&&(l[T]={});return l}catch(t){return Ut.error("Got an error in describeAll"),Ut.error(t),li(new Error,di.DESCRIBE_ALL_ERR)}}a(Cw,"describeAll");async function Si(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=eS.describe_table(e);if(o)throw o;if(r===x.SYSTEM_SCHEMA_NAME)return global.hdb_schema[x.SYSTEM_SCHEMA_NAME][s];let _={schema:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:x.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Lr,search_value:s,hash_values:[],get_attributes:[x.WILDCARD_SEARCH_VALUE]},c=await Cs(_);if(!c||c.length===0)throw li(new Error,di.TABLE_NOT_FOUND(e.schema,e.table),rS.NOT_FOUND);for await(let u of c)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw li(new Error,di.INVALID_TABLE_ERR(i));let E={schema:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:x.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:pw,search_value:r+"."+s,get_attributes:[Iw]},l=await Cs(E);l=fw.uniqBy(l,T=>T.attribute),n&&n.length>0&&(l=bw(n)),i.attributes=l,i.clustering_stream_name=mw.createNatsTableStreamName(u.schema,u.name);try{let T=Rw.join(Ow.getBaseSchemaPath(),i.schema.toString()),d=await zd.openEnvironment(T,i.name),A=zd.statDBI(d,i.hash_attribute);i.record_count=A.entryCount}catch(T){Ut.warn(`unable to stat table dbi due to ${T}`)}}catch(E){Ut.error(`There was an error getting attributes for table '${u.name}'`),Ut.error(E)}return i}a(Si,"descTable");function bw(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(bw,"getAttrsByPerms");async function Lw(e){let t=eS.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:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:x.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Bo,search_value:s,hash_values:[],get_attributes:[sS,x.ID_ATTRIBUTE_STRING,Lr,Bo]},i=await Cs(n);if(i&&i.length<1){let o={schema:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:x.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[Lr]},_=await gw(o);if(_&&_.length<1)throw li(new Error,di.SCHEMA_NOT_FOUND(e.schema),rS.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]),Po.isEmpty(c)||c.describe){let u=await Si({schema:e.schema,table:_.name},c?c.attribute_permissions:null);u&&(o[u.name]=u)}}catch(c){Ut.error(`Error describing schema table '${e.schema}.${_}'`),Ut.error(c)}})),o}}a(Lw,"describeSchema")});var Ti=S((Sv,cS)=>{var lv=require("async"),wr=Wt(),dv=p(),{callbackify:oS,promisify:ww}=require("util");cS.exports={setSchemaDataToGlobal:iS,getTableSchema:Dw,getSystemSchema:Pw,setSchemaDataToGlobalAsync:ww(iS)};var _S=hi(),yw=oS(_S.describeAll),Uw=oS(_S.describeTable);function iS(e){yw(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=wr),global.hdb_schema=r,e(null,null)})}a(iS,"setSchemaDataToGlobal");function aS(e,t){return e==="system"?wr[t]:global.hdb_schema[e][t]}a(aS,"returnSchema");function Dw(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?Mw(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,aS(e,t))}):r(null,aS(e,t))}a(Dw,"getTableSchema");function Mw(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=wr:global.hdb_schema={system:wr},r();return}Uw(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:wr}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(Mw,"setTableDataToGlobal");function Pw(){return wr}a(Pw,"getSystemSchema")});var Ai=S((hv,lS)=>{"use strict";var Ri=ya(),Fe=g(),Bw=require("util"),mi=Jt(),Hw=Ti(),Ho=p(),{handleHDBError:Dt,hdb_errors:vw}=q(),{HTTP_STATUS_CODES:zt}=vw,Gw=Bw.promisify(Hw.getTableSchema),qw="updated",uS="inserted",ES="upserted";lS.exports={insert:xw,update:Vw,upsert:kw,validation:Fw,flush:$w};async function Fw(e){if(Fe.isEmpty(e))throw new Error("invalid update parameters defined.");if(Fe.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Fe.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Gw(e.schema,e.table),r=Ri(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(_=>{if(o&&Fe.isEmptyOrZeroLength(_[s]))throw Ho.error("a valid hash attribute must be provided with update record:",_),new Error("a valid hash attribute must be provided with update record");if(!Fe.isEmptyOrZeroLength(_[s])&&(_[s]==="null"||_[s]==="undefined"))throw Ho.error(`a valid hash value must be provided with ${e.operation} record:`,_),new Error(`"${_[s]}" is not a valid hash attribute value`);!Fe.isEmpty(_[s])&&_[s]!==""&&n.has(Fe.autoCast(_[s]))&&(_.skip=!0),n.add(Fe.autoCast(_[s]));for(let c in _)i[c]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(Fw,"validation");async function xw(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Ri(e);if(t)throw Dt(new Error,t.message,zt.BAD_REQUEST);let r=Fe.checkSchemaTableExist(e.schema,e.table);if(r)throw Dt(new Error,r,zt.BAD_REQUEST);try{let s=await mi.createRecords(e);return fi(uS,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}a(xw,"insertData");async function Vw(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Ri(e);if(t)throw Dt(new Error,t.message,zt.BAD_REQUEST);let r=Fe.checkSchemaTableExist(e.schema,e.table);if(r)throw Dt(new Error,r,zt.BAD_REQUEST);try{let s=await mi.updateRecords(e);return Fe.isEmpty(s.existing_rows)?fi(qw,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):fi(s.update_action,[],e,s.hashes,void 0,s.txn_time)}catch(s){throw s}}a(Vw,"updateData");async function kw(e){if(e.operation!=="upsert")throw Dt(new Error,"invalid operation, must be upsert",zt.INTERNAL_SERVER_ERROR);let t=Ri(e);if(t)throw Dt(new Error,t.message,zt.BAD_REQUEST);let r=Fe.checkSchemaTableExist(e.schema,e.table);if(r)throw Dt(new Error,r,zt.BAD_REQUEST);try{let s=await mi.upsertRecords(e);return fi(ES,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw Dt(s,null,null,Ho.ERR,n)}}a(kw,"upsertData");function fi(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===uS?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===ES?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(fi,"returnObject");function $w(e){return mi.flush(e.schema,e.table)}a($w,"flush")});var SS=S((Tv,dS)=>{var Yw=Ke(),Kw={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};dS.exports=function(e){return Yw.validateObject(e,Kw)}});var RS=S((fv,fS)=>{var Ww=Ke(),vo=require("joi"),{hdb_schema_table:hS}=kt(),TS={schema:hS,table:hS},Qw={date:vo.date().iso().required()},Xw={timestamp:vo.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};fS.exports=function(e,t){let r=t==="timestamp"?{...TS,...Xw}:{...TS,...Qw},s=vo.object(r);return Ww.validateBySchema(e,s)}});var OS=S((Rv,NS)=>{var Jw=Ke(),mS=require("joi"),{hdb_schema_table:AS}=kt(),Zw=mS.object({schema:AS,table:AS,hash_values:mS.array().required()});NS.exports=function(e){return Jw.validateBySchema(e,Zw)}});var pS=S((mv,gS)=>{"use strict";var Ni=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(Ni,"InsertObject");var Oi=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(Oi,"NoSQLSeachObject");var gi=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(gi,"DeleteResponseObject");gS.exports={InsertObject:Ni,NoSQLSeachObject:Oi,DeleteResponseObject:gi}});var Fo=S((Av,wS)=>{"use strict";var CS=RS(),zw=OS(),pi=g(),IS=require("moment"),bS=p(),{promisify:jw,callbackify:ey}=require("util"),jt=f(),ty=Ti(),Go=jw(ty.getTableSchema),qo=Jt(),{DeleteResponseObject:ry}=pS(),{handleHDBError:Mt,hdb_errors:sy}=q(),{HDB_ERROR_MSGS:Ii,HTTP_STATUS_CODES:Pt}=sy,ny="records successfully deleted",iy=ey(LS);wS.exports={delete:iy,deleteRecord:LS,deleteFilesBefore:ay,deleteAuditLogsBefore:oy};async function ay(e){let t=CS(e,"date");if(t)throw Mt(t,t.message,Pt.BAD_REQUEST,void 0,void 0,!0);if(!IS(e.date,IS.ISO_8601).isValid())throw Mt(new Error,Ii.INVALID_DATE,Pt.BAD_REQUEST,jt.LOG_LEVELS.ERROR,Ii.INVALID_DATE,!0);let s=pi.checkSchemaTableExist(e.schema,e.table);if(s)throw Mt(new Error,s,Pt.NOT_FOUND,jt.LOG_LEVELS.ERROR,s,!0);try{let n=await qo.deleteRecordsBefore(e);if(await Go(e.schema,e.table),bS.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}a(ay,"deleteFilesBefore");async function oy(e){let t=CS(e,"timestamp");if(t)throw Mt(t,t.message,Pt.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Mt(new Error,Ii.INVALID_VALUE("Timestamp"),Pt.BAD_REQUEST,jt.LOG_LEVELS.ERROR,Ii.INVALID_VALUE("Timestamp"),!0);let r=pi.checkSchemaTableExist(e.schema,e.table);if(r)throw Mt(new Error,r,Pt.NOT_FOUND,jt.LOG_LEVELS.ERROR,r,!0);try{let s=await qo.deleteAuditLogsBefore(e);return await Go(e.schema,e.table),bS.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}a(oy,"deleteAuditLogsBefore");async function LS(e){let t=zw(e);if(t)throw Mt(t,t.message,Pt.BAD_REQUEST,void 0,void 0,!0);let r=pi.checkSchemaTableExist(e.schema,e.table);if(r)throw Mt(new Error,r,Pt.NOT_FOUND,jt.LOG_LEVELS.ERROR,r,!0);try{await Go(e.schema,e.table);let s=await qo.deleteRecords(e);return pi.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${ny}`),s}catch(s){if(s.message===jt.SEARCH_NOT_FOUND_MESSAGE){let n=new ry;return n.message=jt.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(LS,"deleteRecord")});var Ci=S((Nv,DS)=>{var _y=require("crypto"),yS=9;function cy(e){let t=Ey(yS),r=US(e+t);return t+r}a(cy,"createHash");function uy(e,t){let r=e.substr(0,yS),s=r+US(t+r);return e===s}a(uy,"validateHash");function Ey(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(Ey,"generateSalt");function US(e){return _y.createHash("md5").update(e).digest("hex")}a(US,"md5");DS.exports={hash:cy,validate:uy}});var PS=S((Ov,MS)=>{var xo=Ke(),fe={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 ly(e){return fe.password.presence=!0,fe.username.presence=!0,fe.role.presence=!0,fe.active.presence=!0,xo.validateObject(e,fe)}a(ly,"addUserValidation");function dy(e){return fe.password.presence=!1,fe.username.presence=!0,fe.role.presence=!1,fe.active.presence=!1,xo.validateObject(e,fe)}a(dy,"alterUserValidation");function Sy(e){return fe.password.presence=!1,fe.username.presence=!0,fe.role.presence=!1,fe.active.presence=!1,xo.validateObject(e,fe)}a(Sy,"dropUserValidation");MS.exports={addUserValidation:ly,alterUserValidation:dy,dropUserValidation:Sy}});var Re=S((pv,HS)=>{"use strict";var{platform:gv}=require("os"),hy="nats-server.zip",Vo="nats-server",Ty=process.platform==="win32"?`${Vo}.exe`:Vo,ko="HDB",fy=/^[^\s.,*>]+$/,BS="__request__",Ry=a(e=>`${e}.${BS}`,"REQUEST_SUBJECT"),my={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Ay={HUB:"hub.pid",LEAF:"leaf.pid"},Ny={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Oy={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:ko,deliver_subject:"__HDB__.WORKQUEUE"},gy={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:ko,deliver_subject:"HDB.SCHEMAQUEUE"},py={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:ko,deliver_subject:"HDB.USERQUEUE"},Iy={SUCCESS:"success",ERROR:"error"},Cy={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},by={TXN:"txn",MSGID:"msgid"};HS.exports={NATS_SERVER_ZIP:hy,NATS_SERVER_NAME:Vo,NATS_BINARY_NAME:Ty,PID_FILES:Ay,NATS_CONFIG_FILES:my,SERVER_SUFFIX:Ny,WORK_QUEUE_CONSUMER_NAMES:Oy,SCHEMA_QUEUE_CONSUMER_NAMES:gy,USER_QUEUE_CONSUMER_NAMES:py,NATS_TERM_CONSTRAINTS_RX:fy,REQUEST_SUFFIX:BS,UPDATE_REMOTE_RESPONSE_STATUSES:Iy,CLUSTER_STATUS_STATUSES:Cy,REQUEST_SUBJECT:Ry,SUBJECT_PREFIXES:by}});var GS=S((Iv,vS)=>{"use strict";var Bt=f(),bs=class{constructor(t=0,r=Bt.STORAGE_TYPES_ENUM.LMDB,s=Bt.LICENSE_VALUES.API_CALL_DEFAULT,n=Bt.RAM_ALLOCATION_ENUM.DEFAULT,i=Bt.LICENSE_VALUES.VERSION_DEFAULT,o){this.exp_date=t,this.storage_type=r,this.api_call=s,this.ram_allocation=n,this.version=i,this.fingerprint=o}};a(bs,"BaseLicense");var bi=class extends bs{constructor(t=0,r=Bt.STORAGE_TYPES_ENUM.LMDB,s=Bt.LICENSE_VALUES.API_CALL_DEFAULT,n=Bt.RAM_ALLOCATION_ENUM.DEFAULT,i=Bt.LICENSE_VALUES.VERSION_DEFAULT,o,_=!1){super(t,r,s,n,i,o),this.enterprise=_}};a(bi,"ExtendedLicense");vS.exports={BaseLicense:bs,ExtendedLicense:bi}});var Qo=S((Cv,$S)=>{"use strict";var Ur=require("fs-extra"),qS=Ci(),FS=require("crypto"),Ly=require("moment"),wy=require("uuid").v4,me=p(),Yo=require("path"),yy=g(),Pe=f(),Uy=GS().ExtendedLicense,yr="invalid license key format",Dy="061183",My="mofi25",Py="aes-256-cbc",By=16,Hy=32,xS=Q();xS.initSync();var $o;$S.exports={validateLicense:VS,generateFingerPrint:Gy,licenseSearch:kS,getLicense:xy};function Ko(){return Yo.join(xS.getHdbBasePath(),Pe.LICENSE_KEY_DIR_NAME,Pe.LICENSE_FILE_NAME)}a(Ko,"getLicenseDirPath");function vy(){let e=Ko();return Yo.join(e,Pe.LICENSE_FILE_NAME)}a(vy,"getLicenseFilePath");function Wo(){let e=Ko();return Yo.join(e,Pe.REG_KEY_FILE_NAME)}a(Wo,"getFingerPrintFilePath");async function Gy(){let e=Wo();try{return await Ur.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await qy();throw me.error(`Error writing fingerprint file to ${e}`),me.error(t),new Error("There was an error generating the fingerprint")}}a(Gy,"generateFingerPrint");async function qy(){let e=wy(),t=qS.hash(e),r=Wo();try{await Ur.mkdirp(Ko()),await Ur.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(qy,"writeFingerprint");function VS(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Pe.STORAGE_TYPES_ENUM.LMDB,api_call:Pe.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Pe.RAM_ALLOCATION_ENUM.DEFAULT,version:Pe.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return me.error("empty license key passed to validate."),r;let s=Wo(),n=!1;try{n=Ur.statSync(s)}catch(i){me.error(i)}if(n){let i;try{i=Ur.readFileSync(s,"utf8")}catch{me.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(My),_=o[1];_=Buffer.concat([Buffer.from(_)],By);let c=Buffer.concat([Buffer.from(i)],Hy),u=FS.createDecipheriv(Py,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 d=Fy(o[0],i);if(d)E=d;else throw r.valid_license=!1,r.valid_machine=!1,console.error(yr),me.error(yr),new Error(yr)}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(yr),me.error(yr),new Error(yr)}else r.exp_date=E;r.exp_date<Ly().valueOf()&&(r.valid_date=!1),qS.validate(o[1],`${Dy}${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(VS,"validateLicense");function Fy(e,t){try{let r=FS.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(Fy,"checkOldLicense");function kS(){let e=new Uy;e.api_call=0;let t=[];try{t=Ur.readFileSync(vy(),"utf-8").split(Pe.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(yy.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=VS(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=Pe.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Pe.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Pe.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Pe.LICENSE_VALUES.API_CALL_DEFAULT),$o=e,e}a(kS,"licenseSearch");async function xy(){return $o||await kS(),$o}a(xy,"getLicense")});var ws=S((bv,nh)=>{"use strict";var QS="username is required",XS="nothing to update, must supply active, role or password to update",JS="password cannot be an empty string",ZS="If role is specified, it cannot be empty.",zS="active must be true or false";nh.exports={addUser:Xy,alterUser:Jy,dropUser:zy,userInfo:jy,listUsers:wi,listUsersExternal:eU,setUsersToGlobal:Ls,findAndValidateUser:sU,getClusterUser:nU,USERNAME_REQUIRED:QS,ALTERUSER_NOTHING_TO_UPDATE:XS,EMPTY_PASSWORD:JS,EMPTY_ROLE:ZS,ACTIVE_BOOLEAN:zS};var jS=Ai(),Vy=Fo(),Jo=Ci(),eh=PS(),th=gs(),Zo=_s(),re=g(),rh=require("validate.js"),w=p(),{promisify:zo}=require("util"),jo=Is(),er=f(),YS=Re(),ky=Jr(),e_=Q(),$y=Qo(),Yy=Wt(),{handleHDBError:ot,hdb_errors:Ky}=q(),{HTTP_STATUS_CODES:_t,AUTHENTICATION_ERROR_MSGS:Xo,HDB_ERROR_MSGS:Dr}=Ky,{UserEventMsg:t_}=Tr(),KS=require("lodash"),sh={username:!0,active:!0,role:!0,password:!0},WS=new Map,Li=zo(th.searchByValue),Wy=zo(th.searchByHash),Qy=zo(Vy.delete);async function Xy(e){let t=rh.cleanAttributes(e,sh),r=eh.addUserValidation(t);if(r)throw ot(new Error,r.message,_t.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 Li(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 ot(new Error,Dr.ROLE_NAME_NOT_FOUND(t.role),_t.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw ot(new Error,Dr.DUP_ROLES_FOUND(t.role),_t.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=jo.encrypt(t.password)),t.password=Jo.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await jS.insert(i)}catch(u){throw w.error("There was an error searching for a user."),w.error(u),u}w.debug(o);try{await Ls()}catch(u){throw w.error("Got an error setting users to global"),w.error(u),u}if(o.skipped_hashes.length===1)throw ot(new Error,Dr.USER_ALREADY_EXISTS(t.username),_t.CONFLICT,void 0,void 0,!0);let _=Object.assign({},t);_.role=n[0];let c={user:null};return c.user=_,re.sendTransactionToSocketCluster(er.INTERNAL_SC_CHANNELS.ADD_USER,c,e_.get(er.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),Zo.signalUserChange(new t_(process.pid)),`${_.username} successfully added`}a(Xy,"addUser");async function Jy(e){let t=rh.cleanAttributes(e,sh);if(re.isEmptyOrZeroLength(t.username))throw new Error(QS);if(re.isEmptyOrZeroLength(t.password)&&re.isEmptyOrZeroLength(t.role)&&re.isEmptyOrZeroLength(t.active))throw new Error(XS);if(!re.isEmpty(t.password)&&re.isEmptyOrZeroLength(t.password.trim()))throw new Error(JS);if(!re.isEmpty(t.active)&&!re.isBoolean(t.active))throw new Error(zS);let r=Zy(t.username);if(!re.isEmpty(t.password)&&!re.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=jo.encrypt(t.password)),t.password=Jo.hash(t.password)),t.role==="")throw new Error(ZS);if(t.role){let o={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},_;try{_=await Li(o)}catch(c){throw w.error("Got an error searching for a role."),w.error(c),c}if(!_||_.length===0){let c=Dr.ALTER_USER_ROLE_NOT_FOUND(t.role);throw w.error(c),ot(new Error,c,_t.NOT_FOUND,void 0,void 0,!0)}if(_.length>1){let c=Dr.ALTER_USER_DUP_ROLES(t.role);throw w.error(c),ot(new Error,c,_t.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 jS.update(s)}catch(o){throw w.error("Error during update."),w.error(o),o}try{await Ls()}catch(o){throw w.error("Got an error setting users to global"),w.error(o),o}let i={user:null};return i.user=t,re.sendTransactionToSocketCluster(er.INTERNAL_SC_CHANNELS.ALTER_USER,i,e_.get(er.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),Zo.signalUserChange(new t_(process.pid)),n}a(Jy,"alterUser");function Zy(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(Zy,"isClusterUser");async function zy(e){try{let t=eh.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(re.isEmpty(global.hdb_users.get(e.username)))throw ot(new Error,Dr.USER_NOT_EXIST(e.username),_t.NOT_FOUND,void 0,void 0,!0);let s;try{s=await Qy(r)}catch(i){throw w.error("Got an error deleting a user."),w.error(i),i}w.debug(s);try{await Ls()}catch(i){throw w.error("Got an error setting users to global."),w.error(i),i}let n={user:null};return n.user=e,re.sendTransactionToSocketCluster(er.INTERNAL_SC_CHANNELS.DROP_USER,n,e_.get(er.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),Zo.signalUserChange(new t_(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(zy,"dropUser");async function jy(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 Wy(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(jy,"userInfo");async function eU(){let e;try{e=await wi()}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(eU,"listUsersExternal");async function wi(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=KS.cloneDeep(await Li(e))}catch(r){throw w.error("Got an error searching for roles."),w.error(r),r}if(!re.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=KS.cloneDeep(await Li(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],tU(_.role),i.set(_.username,_)}return(await $y.getLicense()).enterprise?i:rU(i)}}catch(e){throw w.error("got an error listing users"),w.error(e),re.errorizeMessage(e)}return null}a(wi,"listUsers");function tU(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(Yy)){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(tU,"appendSystemTablesToRole");function rU(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(rU,"nonEnterpriseFilter");async function Ls(){try{let e=await wi();global.hdb_users=e}catch(e){throw w.error(e),e}}a(Ls,"setUsersToGlobal");async function sU(e,t,r=!0){global.hdb_users||await Ls();let s=global.hdb_users.get(e);if(!s)throw ot(new Error,Xo.GENERIC_AUTH_FAIL,_t.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw ot(new Error,Xo.USER_INACTIVE,_t.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(WS.get(t)===s.password)return n;if(Jo.validate(s.password,t))WS.set(t,s.password);else throw ot(new Error,Xo.GENERIC_AUTH_FAIL,_t.UNAUTHORIZED,void 0,void 0,!0)}return n}a(sU,"findAndValidateUser");async function nU(){let e=await wi(),t=ky.getConfigFromFile(er.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!re.isEmpty(r))return r.decrypt_hash=jo.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+YS.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+YS.SERVER_SUFFIX.ADMIN,r}a(nU,"getClusterUser")});var ah=S((Lv,ih)=>{"use strict";var iU=f().OPERATIONS_ENUM,yi=class{constructor(t,r,s,n=void 0){this.operation=iU.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(yi,"UpdateObject");ih.exports=yi});var _h=S((wv,oh)=>{"use strict";var aU={OPERATION:"operation",REFRESH:"refresh"},Ui=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(Ui,"JWTTokens");var Di=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(Di,"JWTRSAKeys");oh.exports={JWTTokens:Ui,TOKEN_TYPE_ENUM:aU,JWTRSAKeys:Di}});var dh=S((yv,lh)=>{"use strict";var Us=require("jsonwebtoken"),r_=require("fs-extra"),s_=g(),xe=f(),{handleHDBError:Ce,hdb_errors:oU}=q(),{HTTP_STATUS_CODES:be,AUTHENTICATION_ERROR_MSGS:Le}=oU,ys=p(),ch=Ci(),a_=ws(),_U=Ai().update,cU=ah(),uU=_s(),{UserEventMsg:EU}=Tr(),Ht=Q();Ht.initSync();var n_=require("path"),{JWTTokens:lU,JWTRSAKeys:dU,TOKEN_TYPE_ENUM:Mi}=_h(),SU=Ht.get(xe.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Ht.get(xe.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",hU=Ht.get(xe.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Ht.get(xe.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Pi="RS256",i_;lh.exports={createTokens:TU,validateOperationToken:RU,refreshOperationToken:fU,validateRefreshToken:Eh};async function TU(e){if(s_.isEmpty(e)||typeof e!="object")throw Ce(new Error,Le.INVALID_AUTH_OBJECT,be.BAD_REQUEST,void 0,void 0,!0);if(s_.isEmpty(e.username))throw Ce(new Error,Le.USERNAME_REQUIRED,be.BAD_REQUEST,void 0,void 0,!0);if(s_.isEmpty(e.password))throw Ce(new Error,Le.PASSWORD_REQUIRED,be.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await a_.findAndValidateUser(e.username,e.password),!t)throw Ce(new Error,Le.INVALID_CREDENTIALS,be.UNAUTHORIZED,void 0,void 0,!0)}catch(T){throw ys.error(T),Ce(new Error,Le.INVALID_CREDENTIALS,be.UNAUTHORIZED,void 0,void 0,!0)}let r=await Bi(),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 uh(i,r.private_key,r.passphrase),_=await Us.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:hU,algorithm:Pi,subject:Mi.REFRESH}),c=ch.hash(_),u=new cU(xe.SYSTEM_SCHEMA_NAME,xe.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:c}]),E,l;try{E=await _U(u)}catch(T){ys.error(T),l=T}if(l!==void 0||E.skipped_hashes.length>0)throw Ce(new Error,Le.REFRESH_TOKEN_SAVE_FAILED,be.INTERNAL_SERVER_ERROR);return uU.signalUserChange(new EU(process.pid)),new lU(o,_)}a(TU,"createTokens");async function uh(e,t,r){return await Us.sign(e,{key:t,passphrase:r},{expiresIn:SU,algorithm:Pi,subject:Mi.OPERATION})}a(uh,"signOperationToken");async function Bi(){if(i_===void 0)try{let e=n_.join(Ht.getHdbBasePath(),xe.LICENSE_KEY_DIR_NAME,xe.JWT_ENUM.JWT_PASSPHRASE_NAME),t=n_.join(Ht.getHdbBasePath(),xe.LICENSE_KEY_DIR_NAME,xe.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=n_.join(Ht.getHdbBasePath(),xe.LICENSE_KEY_DIR_NAME,xe.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await r_.readFile(e)).toString(),n=(await r_.readFile(t)).toString(),i=(await r_.readFile(r)).toString();i_=new dU(i,n,s)}catch(e){throw ys.error(e),Ce(new Error,Le.NO_ENCRYPTION_KEYS,be.INTERNAL_SERVER_ERROR)}return i_}a(Bi,"getJWTRSAKeys");async function fU(e){if(!e)throw Ce(new Error,Le.INVALID_BODY,be.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Ce(new Error,Le.REFRESH_TOKEN_REQUIRED,be.BAD_REQUEST,void 0,void 0,!0);await Eh(e.refresh_token);let t=await Bi(),r=await Us.decode(e.refresh_token);return{operation_token:await uh({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(fU,"refreshOperationToken");async function RU(e){try{let t=await Bi(),r=await Us.verify(e,t.public_key,{algorithms:Pi,subject:Mi.OPERATION});return await a_.findAndValidateUser(r.username,void 0,!1)}catch(t){throw ys.warn(t),t.name&&t.name==="TokenExpiredError"?Ce(new Error,Le.TOKEN_EXPIRED,be.FORBIDDEN):Ce(new Error,Le.INVALID_TOKEN,be.UNAUTHORIZED)}}a(RU,"validateOperationToken");async function Eh(e){let t;try{let r=await Bi(),s=await Us.verify(e,r.public_key,{algorithms:Pi,subject:Mi.REFRESH});t=await a_.findAndValidateUser(s.username,void 0,!1)}catch(r){throw ys.warn(r),r.name&&r.name==="TokenExpiredError"?Ce(new Error,Le.TOKEN_EXPIRED,be.FORBIDDEN):Ce(new Error,Le.INVALID_TOKEN,be.UNAUTHORIZED)}if(!ch.validate(t.refresh_token,e))throw Ce(new Error,Le.INVALID_TOKEN,be.UNAUTHORIZED);return t}a(Eh,"validateRefreshToken")});var fh=S((Dv,Th)=>{"use strict";var mU=SS(),Mr=require("passport"),AU=require("passport-local").Strategy,NU=require("passport-http").BasicStrategy,OU=require("util"),gU=ws(),hh=OU.callbackify(gU.findAndValidateUser),Uv=Be(),pU=f(),Sh=dh();Mr.use(new AU(function(e,t,r){hh(e,t,r)}));Mr.use(new NU(function(e,t,r){hh(e,t,r)}));Mr.serializeUser(function(e,t){t(null,e)});Mr.deserializeUser(function(e,t){t(null,e)});function IU(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":Mr.authenticate("basic",{session:!1},(o,_)=>{i(o,_)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===pU.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Sh.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):Sh.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Mr.authenticate("local",{session:!1},function(o,_){i(o,_)})(e,t,r);break}}a(IU,"authorize");function CU(e,t){let r=mU(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(CU,"checkPermissions");Th.exports={authorize:IU,checkPermissions:CU}});var Ds=S((Mv,Rh)=>{"use strict";var Hi=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(Hi,"Node");var vi=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(vi,"NodeSubscription");Rh.exports={Node:Hi,NodeSubscription:vi}});var Ah=S((Pv,mh)=>{"use strict";var bU=f().OPERATIONS_ENUM,Gi=class{constructor(t,r,s,n=void 0){this.operation=bU.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Gi,"UpsertObject");mh.exports=Gi});var Ms=S((Bv,Nh)=>{"use strict";var qi=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(qi,"RemotePayloadObject");var Fi=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(Fi,"RemotePayloadSubscription");Nh.exports={RemotePayloadObject:qi,RemotePayloadSubscription:Fi}});var gh=S((Hv,Oh)=>{"use strict";var xi=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(xi,"TableSizeObject");Oh.exports=xi});var bh=S((vv,Ch)=>{"use strict";var LU=gh(),ph=require("path"),Ih=k(),wU=Se(),Pr=F(),yU=p();Ch.exports=UU;async function UU(e){let t=new LU;try{let r=ph.join(Ih.getBaseSchemaPath(),e.schema.toString()),s=await Pr.openEnvironment(r,e.name),n=Pr.statDBI(s,e.hash_attribute),i=ph.join(Ih.getTransactionAuditStorePath(),e.schema.toString()),o=await Pr.openEnvironment(i,e.name,!0),_=Pr.statDBI(o,wU.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),c=await Pr.environmentDataSize(r,e.name),u=await Pr.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){yU.warn(`unable to stat table dbi due to ${r}`)}return t}a(UU,"lmdbGetTableSize")});var wh=S((Gv,Lh)=>{"use strict";var DU=f(),Vi=class{constructor(t){this.operator=DU.OPERATIONS_ENUM.SYSTEM_INFORMATION,this.attributes=t}};a(Vi,"SystemInformationOperation");Lh.exports=Vi});var Uh=S((qv,yh)=>{"use strict";var ki=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(ki,"SystemInformationObject");yh.exports=ki});var Mh=S((xv,Dh)=>{"use strict";var _e=require("systeminformation"),Br=p(),MU=f(),PU=bh(),BU=hi(),HU=Q();HU.initSync();var Fv=wh(),vU=Uh(),$i;Dh.exports={getHDBProcessInfo:u_,getNetworkInfo:l_,getDiskInfo:E_,getMemoryInfo:c_,getCPUInfo:__,getTimeInfo:o_,getSystemInformation:d_,systemInformation:GU,getTableSize:S_};function o_(){return _e.time()}a(o_,"getTimeInfo");async function __(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:_,socket:c,cache:u,...E}=await _e.cpu();E.cpu_speed=await _e.cpuCurrentSpeed();let{raw_currentload:l,raw_currentload_idle:T,raw_currentload_irq:d,raw_currentload_nice:A,raw_currentload_system:N,raw_currentload_user:b,cpus:Ae,...v}=await _e.currentLoad();return v.cpus=[],Ae.forEach(W=>{let{raw_load:$e,raw_load_idle:$s,raw_load_irq:V_,raw_load_nice:k_,raw_load_system:$_,raw_load_user:Ys,...Ot}=W;v.cpus.push(Ot)}),E.current_load=v,E}catch(e){return Br.error(`error in getCPUInfo: ${e}`),{}}}a(__,"getCPUInfo");async function c_(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await _e.mem();return n}catch(e){return Br.error(`error in getMemoryInfo: ${e}`),{}}}a(c_,"getMemoryInfo");async function u_(){let e={core:[],clustering:[]};try{return(await _e.processes()).list.forEach(r=>{r.params.includes(MU.HDB_PROC_NAME)?e.core.push(r):r.params.includes("socketcluster")&&e.clustering.push(r)}),e}catch(t){return Br.error(`error in getHDBProcessInfo: ${t}`),e}}a(u_,"getHDBProcessInfo");async function E_(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await _e.disksIO();e.io=i;let{rx_sec:o,tx_sec:_,wx_sec:c,...u}=await _e.fsStats();return e.read_write=u,e.size=await _e.fsSize(),e}catch(t){return Br.error(`error in getDiskInfo: ${t}`),e}}a(E_,"getDiskInfo");async function l_(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await _e.networkInterfaceDefault(),e.latency=await _e.inetChecksite("google.com"),(await _e.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:_,dnsSuffix:c,ieee8021xAuth:u,ieee8021xState:E,carrier_changes:l,...T}=s;e.interfaces.push(T)}),(await _e.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,..._}=s;e.stats.push(_)}),e.connections=await _e.networkConnections(),e}catch(t){return Br.error(`error in getNetworkInfo: ${t}`),e}}a(l_,"getNetworkInfo");async function d_(){if($i!==void 0)return $i;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,..._}=await _e.osInfo();e=_;let c=await _e.versions("node, npm");return e.node_version=c.node,e.npm_version=c.npm,$i=e,$i}catch(t){return Br.error(`error in getSystemInformation: ${t}`),e}}a(d_,"getSystemInformation");async function S_(){let e=[],t=await BU.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await PU(s));return e}a(S_,"getTableSize");async function GU(e){let t=new vU;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await d_(),t.time=o_(),t.cpu=await __(),t.memory=await c_(),t.disk=await E_(),t.network=await l_(),t.harperdb_processes=await u_(),t.table_size=await S_(),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=o_();break;case"cpu":t.cpu=await __();break;case"memory":t.memory=await c_();break;case"disk":t.disk=await E_();break;case"network":t.network=await l_();break;case"harperdb_processes":t.harperdb_processes=await u_();break;case"table_size":t.table_size=await S_();break;default:break}return t}a(GU,"systemInformation")});var h_=S((Vv,qU)=>{qU.exports={name:"harperdb",version:"4.0.5",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{node:">=14.0.0","preferred-node":"18.13.0","go-lang":"1.19.3","nats-server":"2.9.8"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"See License in ./license/Community+Edition+and+Evaluation+End+User+License+Agreement.pdf",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ data_layer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ data_layer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license --storage_type=lmdb && npm run cover:upgrade && npm run cover:nats && npm run cover:cfserver && npm run cover:lmdbbridge && npm run cover:lmdbutility && npm run cover:hdbserver && npm run cover:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license --storage_type=lmdb","cover:main":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","cover:lmdbbridge":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/data_layer/harperBridge/lmdbBridge/**/*.js' --parallel --config '../unitTests/.mocharc.json'","cover:lmdbutility":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --config '../unitTests/.mocharc.json'","cover:hdbserver":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --config '../unitTests/.mocharc.json'","cover:cfserver":"npm run submodules && cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","cover:nats":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","cover:upgrade":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/data_layer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@fastify/accepts-serializer":"5.1.0","@fastify/autoload":"5.4.0","@fastify/compress":"6.1.1","@fastify/cors":"8.1.0","@fastify/static":"6.5.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4",async:"3.2.3","aws-sdk":"2.1096.0",chalk:"4.1.2","cli-progress":"3.10.0",clone:"2.1.2",esbuild:"^0.14.49","fast-glob":"3.2.11",fastify:"4.8.1","fastify-plugin":"4.2.1","fill-range":"7.0.1","fs-extra":"10.0.1","human-readable-ids":"1.0.4",inquirer:"8.2.2","is-number":"7.0.0",joi:"17.6.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"8.5.1",lmdb:"2.7.6",lodash:"4.17.21",mathjs:"10.4.0",microtime:"3.1.1",minimist:"1.2.6",mkcert:"1.5.0",moment:"2.29.4",msgpackr:"1.8.2",nats:"2.9.2",needle:"3.1.0","node-ipc":"9.1.4","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.3.0",papaparse:"5.3.2",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.3.1",pm2:"5.2.0",prompt:"1.2.2","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.3.5","stream-chain":"2.2.5","stream-json":"1.7.4",systeminformation:"5.12.4","tar-fs":"2.1.1","truncate-utf8-bytes":"1.0.2",ulidx:"0.3.0",uuid:"9.0.0","validate.js":"0.11.1",yaml:"1.10.2"},devDependencies:{axios:"0.27.2",chai:"4.3.4","chai-integer":"0.1.0",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1","hook-std":"2.0.0","intercept-stdout":"0.1.2",mocha:"8.3.2","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",newman:"5.2.3","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.21.0","newman-reporter-teamcity":"0.1.11","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.3.2",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.2.3"}}}});var Bh=S((Yv,Ph)=>{"use strict";var kv=require("fs-extra"),$v=p();Ph.exports={version:FU,printVersion:VU,nodeVersion:xU};var vt=h_();function FU(){if(vt)return vt.version}a(FU,"version");function xU(){if(vt&&vt.engines&&vt.engines["preferred-node"])return vt.engines["preferred-node"]}a(xU,"nodeVersion");function VU(){vt&&console.log(`HarperDB Version ${vt.version}`)}a(VU,"printVersion")});var Hr=S((Qv,qh)=>{"use strict";var kU=Ai(),T_=g(),f_=require("util"),tr=f(),Hh=Q();Hh.initSync();var $U=fh(),vh=gs(),{Node:Kv,NodeSubscription:Wv}=Ds(),YU=hs(),KU=Ah(),{RemotePayloadObject:WU,RemotePayloadSubscription:QU}=Ms(),{handleHDBError:XU,hdb_errors:JU}=q(),{HTTP_STATUS_CODES:ZU,HDB_ERROR_MSGS:zU}=JU,jU=ht(),eD=Mh(),tD=Bh(),rD=f_.promisify($U.authorize),sD=f_.promisify(vh.searchByHash),nD=f_.promisify(vh.searchByValue);qh.exports={authHeaderToUser:iD,isEmpty:aD,getNodeRecord:oD,upsertNodeRecord:_D,buildNodePayloads:cD,checkClusteringEnabled:uD,getAllNodeRecords:ED,getSystemInfo:lD,reverseSubscription:Gh};async function iD(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await rD(t,null),e}a(iD,"authHeaderToUser");function aD(e){return e==null}a(aD,"isEmpty");async function oD(e){let t=new YU(tr.SYSTEM_SCHEMA_NAME,tr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return sD(t)}a(oD,"getNodeRecord");async function _D(e){let t=new KU(tr.SYSTEM_SCHEMA_NAME,tr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return kU.upsert(t)}a(_D,"upsertNodeRecord");function Gh(e){if(T_.isEmpty(e.subscribe)||T_.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(Gh,"reverseSubscription");function cD(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let _=e[i],{schema:c,table:u}=_,E=T_.getTableHashAttribute(c,u),{subscribe:l,publish:T}=Gh(_),d=new QU(c,u,E,T,l,_.start_time);n.push(d)}return new WU(r,t,n,s)}a(cD,"buildNodePayloads");function uD(){if(!Hh.get(tr.CONFIG_PARAMS.CLUSTERING_ENABLED))throw XU(new Error,zU.CLUSTERING_NOT_ENABLED,ZU.BAD_REQUEST,void 0,void 0,!0)}a(uD,"checkClusteringEnabled");async function ED(){let e=new jU(tr.SYSTEM_SCHEMA_NAME,tr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return nD(e)}a(ED,"getAllNodeRecords");async function lD(){let e=await eD.getSystemInformation();return{hdb_version:tD.version(),node_version:e.node_version,platform:e.platform}}a(lD,"getSystemInfo")});var xh=S((Xv,Fh)=>{"use strict";var dD=Jt();Fh.exports={writeTransaction:SD};function SD(e,t,r){return dD.writeTransaction(e,t,r)}a(SD,"writeTransaction")});var Gt=S((aG,oT)=>{"use strict";var Rt=Q();Rt.initSync();var hD=require("fs-extra"),TD=require("semver"),Gs=require("path"),{monotonicFactory:fD}=require("ulidx"),RD=fD(),kh=require("util"),$h=require("child_process"),mD=kh.promisify($h.exec),AD=$h.spawn,V=Re(),K=f(),g_=g(),mt=p(),Yi=Is(),ND=xh(),Ps=Jr(),{encode:A_,decode:Yh}=require("msgpackr"),{isEmpty:rr}=g_,Kh=ws(),Jv=hs(),OD=gs(),Zv=kh.promisify(OD.searchByHash),{connect:gD,StorageType:Wh,RetentionPolicy:Qh,AckPolicy:Xh,DeliverPolicy:N_,NatsConnection:zv,JetStreamManager:jv,JetStreamClient:eG,StringCodec:tG,JSONCodec:pD,createInbox:p_,StreamSource:rG,headers:ID,toJsMsg:CD,nuid:sG,JetStreamOptions:nG,ErrorCode:Vh,nanos:iG}=require("nats"),{PACKAGE_ROOT:bD}=f(),LD=h_(),Jh=pD(),wD="clustering",yD=LD.engines[V.NATS_SERVER_NAME],UD=Gs.join(bD,"dependencies"),O_=Gs.join(UD,`${process.platform}-${process.arch}`,V.NATS_BINARY_NAME),R_,m_,Bs,Hs,vs,je;oT.exports={runCommand:Zh,checkNATSServerInstalled:DD,createConnection:I_,getConnection:Ki,getJetStreamManager:vr,getJetStream:zh,getNATSReferences:Ve,getServerList:PD,createLocalStream:C_,listStreams:jh,deleteLocalStream:BD,getServerConfig:qs,listRemoteStreams:HD,viewStream:vD,publishToStream:GD,createWorkQueueStream:qD,addSourceToWorkStream:eT,request:FD,removeSourceFromWorkStream:rT,reloadNATS:b_,reloadNATSHub:xD,reloadNATSLeaf:VD,extractServerName:tT,requestErrorHandler:kD,updateWorkStream:$D,createLocalTableStream:nT,createTableStreams:YD,purgeTableStream:iT,purgeSchemaTableStreams:KD,getStreamInfo:WD,updateNodeNameLocalStreams:QD,closeConnection:MD};async function Zh(e,t=void 0){let{stdout:r,stderr:s}=await mD(e,{cwd:t});if(s)throw new Error(s.replace(`
6
6
  `,""));return r.replace(`
7
- `,"")}a(rT,"runCommand");async function QD(){try{await UD.access(I_)}catch{return!1}let e=await rT(`${I_} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return DD.eq(t,KD)}a(QD,"checkNATSServerInstalled");async function L_(e,t,r,s=!0,n="127.0.0.1"){return qD({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:Et.get($.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Et.get($.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Et.get($.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),insecure:Et.get($.CONFIG_PARAMS.CLUSTERING_TLS_INSECURE)}})}a(L_,"createConnection");async function JD(){tt&&(await tt.close(),tt=void 0)}a(JD,"closeConnection");async function Qi(){if(!tt){let e=await Zh.getClusterUser();if(ir(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=Et.get($.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);tt=await L_(t,e.username,e.decrypt_hash)}return tt}a(Qi,"getConnection");async function Fr(){if(Gs)return Gs;ir(tt)&&await Qi();let{domain:e}=xs($.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ir(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Gs=await tt.jetstreamManager({domain:e}),Gs}a(Fr,"getJetStreamManager");async function sT(){if(qs)return qs;ir(tt)&&await Qi();let{domain:e}=xs($.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ir(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return qs=tt.jetstream({domain:e}),qs}a(sT,"getJetStream");async function ke(){let e=tt||await Qi(),t=Gs||await Fr(),r=qs||await sT();return{connection:e,jsm:t,js:r}}a(ke,"getNATSReferences");async function XD(){let e=Et.get($.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),{sys_name:t,decrypt_hash:r}=await Zh.getClusterUser(),s=await L_(e,t,r),n=b_(),i=s.subscribe(n),o=[],_=(async()=>{for await(let c of i)o.push(tT.decode(c.data))})();return await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:n}),await s.flush(),await C_.async_set_timeout(50),await i.drain(),await s.close(),await _,o}a(XD,"getServerList");async function w_(e,t){let{jsm:r}=await ke();await r.streams.add({name:e,storage:zh.File,retention:jh.Limits,subjects:t})}a(w_,"createLocalStream");async function nT(){let{jsm:e}=await ke(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(nT,"listStreams");async function ZD(e){let{jsm:t}=await ke();await t.streams.delete(e)}a(ZD,"deleteLocalStream");async function zD(e){let{connection:t}=await ke(),r=[],s=b_(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(tT.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(zD,"listRemoteStreams");async function jD(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await ke(),i=PD(),o=[],_={ack_policy:eT.None,durable_name:i,deliver_subject:i,deliver_policy:p_.All};t&&(_.deliver_policy=p_.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=VD(E),h=Xh(l.data),S={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:h,originators:[]},A=[];if(l.headers){let N=l.headers.get("originators");N&&(A=N.split(","),S.originators=A)}o.push(S),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(jD,"viewStream");async function eM(e,t,r=[],s=[]){gt.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,r,"originators:",s);let{connection:n,js:i}=await ke(),o=await Ji(),_=`${e}.${o}`,c=xD();s.push(o),c.append("originators",s.join());for(let u=0,E=r.length;u<E;u++)try{gt.trace(`publishToStream publishing to subject: ${_}, data:`,r[u]),await i.publish(_,g_(r[u]),{headers:c})}catch(l){if(l.code&&l.code.toString()==="503")gt.trace(`publishToStream creating stream: ${t}`),await w_(t,[_]),await i.publish(_,g_(r[u]),{headers:c});else throw l}}a(eM,"publishToStream");function xs(e){e=e.toLowerCase();let t=Fs.join(Et.get($.CONFIG_PARAMS.ROOTPATH),$D);if(e===$.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ir(O_)&&(O_={port:Hs.getConfigFromFile($.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Hs.getConfigFromFile($.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.HUB,config_file:V.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Fs.join(t,V.PID_FILES.HUB),hdb_nats_path:t}),O_;if(e===$.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ir(N_)&&(N_={port:Hs.getConfigFromFile($.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Hs.getConfigFromFile($.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,config_file:V.NATS_CONFIG_FILES.LEAF_SERVER,domain:Hs.getConfigFromFile($.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,pid_file_path:Fs.join(t,V.PID_FILES.LEAF),hdb_nats_path:t}),N_;gt.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(xs,"getServerConfig");async function tM(e){let{jsm:t}=await ke(),r=await Ji();try{await t.streams.add({name:e.stream_name,storage:zh.File,retention:jh.Workqueue,subjects:[`${V.SUBJECT_PREFIXES.MSGID}.${r}`,`${V.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:eT.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:p_.All,max_ack_pending:1e4,deliver_group:e.deliver_group,filter_subject:`${V.SUBJECT_PREFIXES.TXN}.>`});else throw s}}a(tM,"createWorkQueueStream");async function iT(e,t,r){let{jsm:s}=await ke(),n=await s.streams.info(t),i=aT(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:_,table:c}=r,u=Wi.createNatsTableStreamName(_,c),E=i===e,l,h,S=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let N=0,b=n.config.sources.length;N<b;N++)if(l=n.config.sources[N],h=N,E&&l.name===u||!E&&l.name===u&&l.external&&l.external.api===`$JS.${e}.API`){S=!0;break}if(S===!0){if(l.opt_start_time===o)return;await _T(_,c,l,t),n.config.sources.splice(h,1),await s.streams.update(t,n.config)}let A={name:u,opt_start_time:o,filter_subject:`${V.SUBJECT_PREFIXES.TXN}.>`};E||(A.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(A),await s.streams.update(t,n.config)}a(iT,"addSourceToWorkStream");function aT(e){return e.split(".")[1]}a(aT,"extractServerName");async function oT(e,t,r){let{schema:s,table:n}=r,i=Wi.createNatsTableStreamName(s,n),{jsm:o}=await ke(),_=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 _T(s,n,u,t)}a(oT,"removeSourceFromWorkStream");async function _T(e,t,r,s){let n=await Fr(),i;try{i=ET(e,t,r.external.api.split(".")[1]),await n.streams.purge(s,{filter:i})}catch{gt.error("Error purging source subject",i,"from work stream",s)}}a(_T,"purgeSourceFromWorkStream");async function rM(e,t,r=2e3,s=b_()){if(!C_.isObject(t))throw new Error("data param must be an object");let n=g_(t),{connection:i}=await ke(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let _=await i.request(e,n,o);return Xh(_.data)}a(rM,"request");function y_(e){return new Promise(async(t,r)=>{let s=HD(I_,["--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(y_,"reloadNATS");async function sM(){let{pid_file_path:e}=xs($.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await y_(e)}a(sM,"reloadNATSHub");async function nM(){let{pid_file_path:e}=xs($.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await y_(e)}a(nM,"reloadNATSLeaf");function iM(e,t,r){let s;switch(e.code){case Wh.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case Wh.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(iM,"requestErrorHandler");async function aM(e,t){let r=t+V.SERVER_SUFFIX.LEAF;await vD.writeTransaction($.SYSTEM_SCHEMA_NAME,$.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await iT(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await oT(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(aM,"updateWorkStream");async function cT(e,t){let r=Wi.createNatsTableStreamName(e,t),s=await Ji(),n=ET(e,t,s);await w_(r,[n])}a(cT,"createLocalTableStream");async function oM(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await cT(s,n)}}a(oM,"createTableStreams");async function uT(e,t){if(Et.get($.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Wi.createNatsTableStreamName(e,t),{jsm:s}=await ke();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")gt.warn(r);else throw r}}a(uT,"purgeTableStream");async function _M(e,t){if(Et.get($.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await uT(e,t[r])}a(_M,"purgeSchemaTableStreams");async function cM(e){return(await Fr()).streams.info(e)}a(cM,"getStreamInfo");function ET(e,t,r){return`${V.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(ET,"createSubjectName");async function Ji(){if(vs)return vs;if(vs=(await Fr())?.nc?.info?.server_name,vs===void 0)throw new Error("Unable to get jetstream manager server name");return vs}a(Ji,"getJsmServerName");async function uM(){let e=await Fr(),t=await Ji(),r=await nT();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===V.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let c=`${V.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;gt.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c}else if(n.name===V.WORK_QUEUE_CONSUMER_NAMES.stream_name){let c=`${V.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;gt.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c,await e.consumers.update(V.WORK_QUEUE_CONSUMER_NAMES.stream_name,V.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${V.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let c=i.split(".");c[c.length-1]=t;let u=c.join(".");gt.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}await e.streams.update(n.name,n)}}}a(uM,"updateNodeNameLocalStreams")});var mT=d((pG,RT)=>{"use strict";var D_=qr(),EM=Vt(),hT=Q(),Xi=f(),ar=Re(),lM=g(),U_=p(),{RemotePayloadObject:dM}=Bs(),{ErrorCode:dT}=require("nats"),ST=hT.get(Xi.CONFIG_PARAMS.CLUSTERING_ENABLED),TT=hT.get(Xi.CONFIG_PARAMS.CLUSTERING_NODENAME);RT.exports={clusterStatus:SM,buildNodeStatus:fT};async function SM(){let e={node_name:TT,is_enabled:ST,connections:[]};if(!ST)return e;let t=await D_.getAllNodeRecords();if(lM.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(fT(t[s],e.connections));return await Promise.allSettled(r),e}a(SM,"clusterStatus");async function fT(e,t){let r=e.name,s=new dM(Xi.OPERATIONS_ENUM.CLUSTER_STATUS,TT,void 0,await D_.getSystemInfo()),n,i,o=ar.CLUSTER_STATUS_STATUSES.OPEN;try{let c=Date.now();n=await EM.request(ar.REQUEST_SUBJECT(r),s),i=Date.now()-c,n.status===ar.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ar.CLUSTER_STATUS_STATUSES.CLOSED,U_.error(`Error getting node status from ${r} `,n))}catch(c){U_.warn(`Error getting node status from ${r}`,c),c.code===dT.NoResponders?o=ar.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:c.code===dT.Timeout?o=ar.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ar.CLUSTER_STATUS_STATUSES.CLOSED}let _=new hM(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let c={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==Xi.PRE_4_0_0_VERSION&&await D_.upsertNodeRecord(c)}catch(c){U_.error("Cluster status encountered an error updating system info for node:",r,c)}t.push(_)}a(fT,"buildNodeStatus");function hM(e,t,r,s,n,i,o,_){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=_}a(hM,"NodeStatusObject")});var gT=d((bG,OT)=>{"use strict";var M_=require("joi"),{string:Zi,boolean:AT,date:TM}=M_.types(),fM=We(),{validateSchemaExists:IG,validateTableExists:CG,validateSchemaName:RM}=Kt(),mM=f(),AM=Re(),NM=Q(),OM=Zi.invalid(NM.get(mM.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(AM.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null).required(),NT={operation:Zi.valid("add_node","update_node"),node_name:OM,subscriptions:M_.array().items({table:Zi.required(),schema:Zi.custom(RM).required(),subscribe:AT.required(),publish:AT.required().custom(pM),start_time:TM.iso()}).min(1).required()};function gM(e){return fM.validateBySchema(e,M_.object(NT))}a(gM,"addUpdateNodeValidator");function pM(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(pM,"checkForFalsy");OT.exports={addUpdateNodeValidator:gM,validation_schema:NT}});var CT=d((LG,IT)=>{"use strict";var B_=fi(),{hdb_errors:P_}=q();IT.exports={checkSchemaExists:pT,checkSchemaTableExists:IM,schema_describe:B_};async function pT(e){if(!global.hdb_schema[e])try{let t=await B_.describeSchema({schema:e});global.hdb_schema[e]=t}catch{return P_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}}a(pT,"checkSchemaExists");async function IM(e,t){let r=await pT(e);if(r)return r;if(!global.hdb_schema[e][t])try{let s=await B_.describeTable({schema:e,table:t});if(!s||Object.keys(s).length===0)return P_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t);global.hdb_schema[e][t]=s}catch{return P_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}}a(IM,"checkSchemaTableExists")});var DT=d((yG,UT)=>{"use strict";var xr=bn(),or=CT(),bT=p(),CM=require("uuid").v4,wG=require("clone"),kr=us(),_r=f(),bM=require("util"),cr=jt(),{handleHDBError:ce,hdb_errors:LM}=q(),{HDB_ERROR_MSGS:Vr,HTTP_STATUS_CODES:ue}=LM,{SchemaEventMsg:Yr}=mr(),LT=Vt();UT.exports={createSchema:wM,createSchemaStructure:wT,createTable:yM,createTableStructure:yT,createAttribute:BM,dropSchema:UM,dropTable:DM,dropAttribute:MM};async function wM(e){try{let t=await wT(e);return kr.signalSchemaChange(new Yr(process.pid,e.operation,e.schema)),t}catch(t){throw t}}a(wM,"createSchema");async function wT(e){let t=xr.schema_object(e);if(t)throw ce(t,t.message,ue.BAD_REQUEST,void 0,void 0,!0);if(!await or.checkSchemaExists(e.schema))throw ce(new Error,Vr.SCHEMA_EXISTS_ERR(e.schema),ue.BAD_REQUEST,_r.LOG_LEVELS.ERROR,Vr.SCHEMA_EXISTS_ERR(e.schema),!0);try{return await cr.createSchema(e),`schema '${e.schema}' successfully created`}catch(r){throw r}}a(wT,"createSchemaStructure");async function yM(e){try{let t=await yT(e);return kr.signalSchemaChange(new Yr(process.pid,e.operation,e.schema,e.table)),t}catch(t){throw t}}a(yM,"createTable");async function yT(e){let t=xr.create_table_object(e);if(t)throw ce(t,t.message,ue.BAD_REQUEST,void 0,void 0,!0);xr.validateTableResidence(e.residence);let r=await or.checkSchemaExists(e.schema);if(r)throw ce(new Error,r,ue.NOT_FOUND,_r.LOG_LEVELS.ERROR,r,!0);if(!await or.checkSchemaTableExists(e.schema,e.table))throw ce(new Error,Vr.TABLE_EXISTS_ERR(e.schema,e.table),ue.BAD_REQUEST,_r.LOG_LEVELS.ERROR,Vr.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:CM(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await cr.createTable(n,e);else throw ce(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",ue.BAD_REQUEST);else await cr.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(i){throw i}}a(yT,"createTableStructure");async function UM(e){let t=xr.schema_object(e);if(t)throw ce(t,t.message,ue.BAD_REQUEST,void 0,void 0,!0);let r=await or.checkSchemaExists(e.schema);if(r)throw ce(new Error,r,ue.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),kr.signalSchemaChange(new Yr(process.pid,e.operation,e.schema)),delete global.hdb_schema[e.schema],await LT.purgeSchemaTableStreams(e.schema,n),`successfully deleted schema '${e.schema}'`}a(UM,"dropSchema");async function DM(e){let t=xr.table_object(e);if(t)throw ce(t,t.message,ue.BAD_REQUEST,void 0,void 0,!0);let r=await or.checkSchemaTableExists(e.schema,e.table);if(r)throw ce(new Error,r,ue.NOT_FOUND,_r.LOG_LEVELS.ERROR,r,!0);return await cr.dropTable(e),kr.signalSchemaChange(new Yr(process.pid,e.operation,e.schema,e.table)),await LT.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(DM,"dropTable");async function MM(e){let t=xr.attribute_object(e);if(t)throw ce(t,t.message,ue.BAD_REQUEST,void 0,void 0,!0);let r=await or.checkSchemaTableExists(e.schema,e.table);if(r)throw ce(new Error,r,ue.NOT_FOUND,_r.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw ce(new Error,"You cannot drop a hash attribute",ue.BAD_REQUEST,void 0,void 0,!0);if(_r.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw ce(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,ue.BAD_REQUEST,void 0,void 0,!0);try{return await cr.dropAttribute(e),PM(e),kr.signalSchemaChange(new Yr(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw bT.error(`Got an error deleting attribute ${bM.inspect(e)}.`),s}}a(MM,"dropAttribute");function PM(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(PM,"dropAttributeFromGlobal");async function BM(e){if(!global.hdb_schema[e.schema])throw ce(new Error,Vr.SCHEMA_NOT_FOUND(e.schema),ue.NOT_FOUND,void 0,void 0,!0);if(!global.hdb_schema[e.schema][e.table])throw ce(new Error,Vr.TABLE_NOT_FOUND(e.schema,e.table),ue.NOT_FOUND,void 0,void 0,!0);try{return await cr.createAttribute(e),kr.signalSchemaChange(new Yr(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}catch(t){throw bT.error(t),t}}a(BM,"createAttribute")});var qT=d((UG,GT)=>{"use strict";var H_=Vt(),MT=g(),PT=Re(),HM=f(),zi=p(),BT=DT(),vM=mo(),{RemotePayloadObject:GM}=Bs(),{handleHDBError:HT,hdb_errors:qM}=q(),{HTTP_STATUS_CODES:vT}=qM,{NodeSubscription:FM}=Ps();GT.exports=xM;async function xM(e,t){let r;try{r=await H_.request(`${t}.${PT.REQUEST_SUFFIX}`,new GM(HM.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),zi.trace("Response from remote describe all request:",r)}catch(o){zi.error(`addNode received error from describe all request to remote node: ${o}`);let _=H_.requestErrorHandler(o,"add_node",t);throw HT(new Error,_,vT.INTERNAL_SERVER_ERROR,"error",_)}if(r.status===PT.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw HT(new Error,o,vT.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:_,table:c}=o,u=MT.doesSchemaExist(_),E=s[_]!==void 0,l=MT.doesTableExist(_,c),h=s?.[_]?.[c]!==void 0;if(!u&&!E||!l&&!h){n.push(o);continue}if(!u&&E&&(zi.trace(`addNode creating schema: ${_}`),await BT.createSchema({operation:"create_schema",schema:_})),!l&&h){zi.trace(`addNode creating table: ${c} in schema: ${_}`);let A=new vM(_,c,s[_][c].hash_attribute);await BT.createTable(A)}await H_.createLocalTableStream(_,c);let S=new FM(_,c,o.publish,o.subscribe);S.start_time=o.start_time,i.push(S)}return{added:i,skipped:n}}a(xM,"reviewSubscriptions")});var kT=d((DG,VT)=>{"use strict";var{handleHDBError:ji,hdb_errors:VM}=q(),{HTTP_STATUS_CODES:ea}=VM,{addUpdateNodeValidator:kM}=gT(),Vs=p(),xT=f(),FT=Re(),YM=g(),v_=Vt(),ks=qr(),$M=Q(),KM=qT(),{Node:WM,NodeSubscription:QM}=Ps(),JM="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",XM="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",ZM=$M.get(xT.CONFIG_PARAMS.CLUSTERING_NODENAME);VT.exports=zM;async function zM(e,t=!1){Vs.trace("addNode called with:",e),ks.checkClusteringEnabled();let r=kM(e);if(r)throw ji(r,r.message,ea.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let l=await ks.getNodeRecord(s);if(!YM.isEmptyOrZeroLength(l))throw ji(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,ea.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await KM(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=JM,o;let _=ks.buildNodePayloads(n,ZM,xT.OPERATIONS_ENUM.ADD_NODE,await ks.getSystemInfo());Vs.trace("addNode sending remote payload:",_);let c;try{c=await v_.request(`${s}.${FT.REQUEST_SUFFIX}`,_)}catch(l){Vs.error(`addNode received error from request: ${l}`);let h=v_.requestErrorHandler(l,"add_node",s);throw ji(new Error,h,ea.INTERNAL_SERVER_ERROR,"error",h)}if(c.status===FT.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${s}: ${c.message}`;throw ji(new Error,l,ea.INTERNAL_SERVER_ERROR,"error",l)}Vs.trace(c);let u=[];for(let l=0,h=n.length;l<h;l++){let S=n[l];Vs.trace("Add node updating work stream for node:",s,"subscriptions:",S),await v_.updateWorkStream(S,s),n[l].start_time===void 0&&delete n[l].start_time,u.push(new QM(S.schema,S.table,S.publish,S.subscribe))}let E=new WM(s,u,c.system_info);return await ks.upsertNodeRecord(E),i.length>0?o.message=XM:o.message=`Successfully added '${s}' to manifest`,o}a(zM,"addNode")});var $T=d((MG,YT)=>{"use strict";var jM=Re(),ta=class{constructor(t,r,s,n,i,o,_,c,u,E,l,h,S){this.port=t,this.server_name=r+jM.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:h},HDB:{users:S}},this.system_account="SYS"}};a(ta,"HubConfigObject");YT.exports=ta});var QT=d((PG,WT)=>{"use strict";var KT=Re(),ra=class{constructor(t,r,s,n,i,o,_,c,u,E,l,h){this.port=t,this.server_name=r+KT.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+KT.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:E,ca_file:l,insecure:h},this.leafnodes={remotes:[{tls:{ca_file:l,insecure:h},urls:i,account:"SYS"},{tls:{ca_file:l,insecure:h},urls:o,account:"HDB"}]},this.accounts={SYS:{users:_},HDB:{users:c,jetstream:"enabled"}},this.system_account="SYS"}};a(ra,"LeafConfigObject");WT.exports=ra});var XT=d((BG,JT)=>{"use strict";var sa=class{constructor(t,r){this.user=t,this.password=r}};a(sa,"HdbUserObject");JT.exports=sa});var zT=d((HG,ZT)=>{"use strict";var eP=Re(),na=class{constructor(t,r){this.user=t+eP.SERVER_SUFFIX.ADMIN,this.password=r}};a(na,"SysUserObject");ZT.exports=na});var rf=d((vG,tf)=>{"use strict";var $r=require("path"),_a=require("fs-extra"),tP=$T(),rP=QT(),sP=XT(),nP=zT(),G_=Us(),Wr=g(),Ye=zr(),oa=f(),ia=Re(),{CONFIG_PARAMS:se}=oa,ca=p(),ua=Q(),jT=bs(),q_=Vt(),Kr="clustering",iP=1e4,ef=5;tf.exports={generateNatsConfig:aP,removeNatsConfig:oP};async function aP(e=!1,t=void 0){ua.initSync();let r=ua.get(se.ROOTPATH),s=$r.join(r,Kr,ia.PID_FILES.HUB),n=$r.join(r,Kr,ia.PID_FILES.LEAF),i=$r.join(r,Kr,"leaf"),o=$r.join(r,Kr,ia.NATS_CONFIG_FILES.HUB_SERVER),_=$r.join(r,Kr,ia.NATS_CONFIG_FILES.LEAF_SERVER),c=Ye.getConfigFromFile(se.CLUSTERING_TLS_CERTIFICATE),u=Ye.getConfigFromFile(se.CLUSTERING_TLS_PRIVATEKEY),E=Ye.getConfigFromFile(se.CLUSTERING_TLS_CERT_AUTH),l=Ye.getConfigFromFile(se.CLUSTERING_TLS_INSECURE),h=Ye.getConfigFromFile(se.CLUSTERING_NODENAME),S=Ye.getConfigFromFile(se.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await q_.checkNATSServerInstalled()||Ea("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let A=await G_.listUsers(),N=Ye.getConfigFromFile(se.CLUSTERING_USER),b=await G_.getClusterUser();(Wr.isEmpty(b)||b.active!==!0)&&Ea(`invalid cluster user '${N}'`),e||(await aa(se.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await aa(se.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await aa(se.CLUSTERING_HUBSERVER_NETWORK_PORT),await aa(se.CLUSTERING_LEAFSERVER_NETWORK_PORT));let Ae=[],v=[];for(let[Ws,Ct]of A.entries())Ct.role.role===oa.ROLE_TYPES_ENUM.CLUSTER_USER&&Ct.active&&(Ae.push(new nP(Ct.username,jT.decrypt(Ct.hash))),v.push(new sP(Ct.username,jT.decrypt(Ct.hash))));let W=[],{hub_routes:$e}=Ye.getClusteringRoutes();if(!Wr.isEmptyOrZeroLength($e))for(let Ws of $e)W.push(`tls://${b.sys_name_encoded}:${b.uri_encoded_d_hash}@${Ws.host}:${Ws.port}`);let Ks=new tP(Ye.getConfigFromFile(se.CLUSTERING_HUBSERVER_NETWORK_PORT),h,s,c,u,E,l,S,Ye.getConfigFromFile(se.CLUSTERING_HUBSERVER_CLUSTER_NAME),Ye.getConfigFromFile(se.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),W,Ae,v);t=Wr.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===oa.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await _a.writeJson(o,Ks),ca.trace(`Hub server config written to ${o}`));let $_=`tls://${b.sys_name_encoded}:${b.uri_encoded_d_hash}@0.0.0.0:${S}`,K_=`tls://${b.uri_encoded_name}:${b.uri_encoded_d_hash}@0.0.0.0:${S}`,W_=new rP(Ye.getConfigFromFile(se.CLUSTERING_LEAFSERVER_NETWORK_PORT),h,n,i,[$_],[K_],Ae,v,c,u,E,l);(t===void 0||t===oa.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await _a.writeJson(_,W_),ca.trace(`Leaf server config written to ${_}`))}a(aP,"generateNatsConfig");async function aa(e){let t=ua.get(e);Wr.isEmpty(t)&&Ea(`port undefined for '${e}'`),await Wr.isPortTaken(t)&&Ea(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`)}a(aa,"isPortAvailable");function Ea(e){let t=`Error generating clustering config: ${e}`;ca.error(t),console.error(t),process.exit(1)}a(Ea,"generateNatsConfigError");async function oP(e){let{port:t,config_file:r}=q_.getServerConfig(e),{username:s,decrypt_hash:n}=await G_.getClusterUser(),i=0,o=500;for(;i<ef;){try{let u=await q_.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){ca.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=ef)throw new Error(`removeNatsConfig timed out waiting to connect to ${e}`);await Wr.async_set_timeout(o*i)}let _="0".repeat(iP),c=$r.join(ua.get(se.ROOTPATH),Kr,r);await _a.writeFile(c,_),await _a.remove(c)}a(oP,"removeNatsConfig")});var x_=d((GG,uf)=>{"use strict";var K=Q(),sf=Zo(),m=f(),F_=Re(),ee=require("path"),{PACKAGE_ROOT:la}=f(),X="/dev/null",Qr=ee.join(la,"launchServiceScripts"),nf=ee.join(la,"utility/scripts"),_P=ee.join(nf,m.HDB_RESTART_SCRIPT),af=ee.resolve(la,"dependencies",`${process.platform}-${process.arch}`,F_.NATS_BINARY_NAME),Ee,le;function lt(){(Ee===void 0||le===void 0)&&(K.initSync(),Ee=K.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),le=K.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY))}a(lt,"initLogConfig");function of(){lt();let e=ee.join(le,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 Ee||(t.out_file=X,t.error_file=X),{...t,script:m.SERVICE_SERVERS.IPC}}a(of,"generateIPCServerConfig");function _f(){lt(),K.initSync(),Ee=K.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),le=K.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=ee.join(le,m.PROCESS_LOG_NAMES.HDB),t=sf.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:K.get(m.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Qr};return Ee||(s.out_file=X,s.error_file=X),s}a(_f,"generateHDBServerConfig");function cf(){lt(),K.initSync(),Ee=K.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),le=K.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=ee.join(le,m.PROCESS_LOG_NAMES.CUSTOM_FUNCTIONS),t=sf.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:K.get(m.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Qr};return Ee||(s.out_file=X,s.error_file=X),s}a(cf,"generateCFServerConfig");function cP(){lt(),K.initSync(),Ee=K.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),le=K.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=K.get(m.CONFIG_PARAMS.ROOTPATH),t=ee.join(e,"clustering",F_.NATS_CONFIG_FILES.HUB_SERVER),r=ee.join(le,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 Ee||(s.out_file=X,s.error_file=X),s}a(cP,"generateNatsHubServerConfig");function uP(){lt(),K.initSync(),Ee=K.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),le=K.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=K.get(m.CONFIG_PARAMS.ROOTPATH),t=ee.join(e,"clustering",F_.NATS_CONFIG_FILES.LEAF_SERVER),r=ee.join(le,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 Ee||(s.out_file=X,s.error_file=X),s}a(uP,"generateNatsLeafServerConfig");function EP(){lt(),K.initSync();let e=ee.join(le,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:Qr};return Ee||(t.out_file=X,t.error_file=X),t}a(EP,"generateNatsIngestServiceConfig");function lP(){lt(),K.initSync();let e=ee.join(le,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:Qr};return Ee||(t.out_file=X,t.error_file=X),t}a(lP,"generateNatsReplyServiceConfig");function dP(){lt(),K.initSync();let e=ee.join(le,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:Qr,autorestart:!1};return Ee||(t.out_file=X,t.error_file=X),t}a(dP,"generateClusteringUpgradeV4ServiceConfig");function SP(){lt();let e=ee.join(le,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:nf};return Ee||(t.out_file=X,t.error_file=X),{...t,script:_P}}a(SP,"generateRestart");function hP(e){lt();let t=ee.join(le,m.PROCESS_LOG_NAMES.JOBS),r=ee.join(la,"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:Qr,autorestart:!1};return Ee||(s.out_file=X,s.error_file=X),{...s,script:ee.join(r,"jobProcess.js")}}a(hP,"generateJobConfig");function TP(){return{apps:[of(),_f(),cf()]}}a(TP,"generateAllServiceConfigs");uf.exports={generateAllServiceConfigs:TP,generateIPCServerConfig:of,generateHDBServerConfig:_f,generateCFServerConfig:cf,generateRestart:SP,generateNatsHubServerConfig:cP,generateNatsLeafServerConfig:uP,generateNatsIngestServiceConfig:EP,generateNatsReplyServiceConfig:lP,generateClusteringUpgradeV4ServiceConfig:dP,generateJobConfig:hP}});var Of=d((qG,Nf)=>{"use strict";var C=f(),da=g(),Ys=rf(),Sa=Vt(),fP=Re(),M=require("pm2"),RP=require("fs-extra"),pt=x_(),ye=Q(),It=p(),mP=x_(),AP=qr(),NP=require("util"),lf=NP.promisify(require("child_process").exec),df=require("path");Nf.exports={start:ur,stop:Ta,reload:hf,restart:Tf,list:k_,describe:fa,connect:dt,kill:Rf,startAllServices:UP,startService:ha,getUniqueServicesList:Y_,restartAllServices:DP,stopAllServices:MP,isServiceRegistered:mf,reloadStopStart:V_,restartHdb:ff,deleteProcess:wP,configureLogRotate:HP,startClustering:Af,isHdbRestartRunning:yP,isClusteringRunning:GP,stopClustering:vP,reloadClustering:qP};var{PACKAGE_ROOT:OP}=f(),gP="2.7.0",Sf=df.join(OP,"node_modules/pm2/bin/pm2"),pP="Log rotate installed.",IP="Error installing log rotate.",CP="Log rotate updated.",bP="Error updating log rotate.",LP="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 dt(){return new Promise((e,t)=>{M.connect((r,s)=>{r&&t(r),e(s)})})}a(dt,"connect");function ur(e){return new Promise(async(t,r)=>{try{await dt()}catch(s){r(s)}M.start(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(ur,"start");function Ta(e){return new Promise(async(t,r)=>{try{await dt()}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(Ta,"stop");function hf(e){return new Promise(async(t,r)=>{try{await dt()}catch(s){r(s)}M.reload(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(hf,"reload");function Tf(e){return new Promise(async(t,r)=>{try{await dt()}catch(s){r(s)}M.restart(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(Tf,"restart");function wP(e){return new Promise(async(t,r)=>{try{await dt()}catch(s){r(s)}M.delete(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(wP,"deleteProcess");async function ff(){await ur(mP.generateRestart())}a(ff,"restartHdb");async function yP(){let e=await k_();for(let t in e)if(e[t].name===C.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(yP,"isHdbRestartRunning");function k_(){return new Promise(async(e,t)=>{try{await dt()}catch(r){t(r)}M.list((r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(k_,"list");function fa(e){return new Promise(async(t,r)=>{try{await dt()}catch(s){r(s)}M.describe(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(fa,"describe");function Rf(){return new Promise(async(e,t)=>{try{await dt()}catch(r){t(r)}M.killDaemon((r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(Rf,"kill");async function UP(){try{await Af(),await ur(pt.generateAllServiceConfigs())}catch(e){throw M.disconnect(),e}}a(UP,"startAllServices");async function ha(e){try{let t;switch(e=e.toLowerCase(),e){case C.PROCESS_DESCRIPTORS.IPC.toLowerCase():t=pt.generateIPCServerConfig();break;case C.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=pt.generateHDBServerConfig();break;case C.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase():t=pt.generateCFServerConfig();break;case C.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=pt.generateNatsIngestServiceConfig();break;case C.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=pt.generateNatsReplyServiceConfig();break;case C.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=pt.generateNatsHubServerConfig(),await ur(t),await Ys.removeNatsConfig(e);return;case C.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=pt.generateNatsLeafServerConfig(),await ur(t),await Ys.removeNatsConfig(e);return;case C.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 ur(t)}catch(t){throw M.disconnect(),t}}a(ha,"startService");async function Y_(){try{let e=await k_(),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(Y_,"getUniqueServicesList");async function DP(e=[]){try{let t=!1,r=await Y_();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===C.PROCESS_DESCRIPTORS.HDB?t=!0:await V_(o):await Tf(o))}t&&await V_(C.PROCESS_DESCRIPTORS.HDB)}catch(t){throw M.disconnect(),t}}a(DP,"restartAllServices");async function MP(){try{let e=await Y_();for(let t=0,r=Object.values(e).length;t<r;t++){let s=Object.values(e)[t];await Ta(s.name)}if(await Rf(),ye.get(C.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND)===!0){let t=(await RP.readFile(df.join(ye.get(C.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),C.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(MP,"stopAllServices");async function mf(e){return!da.isEmptyOrZeroLength(await fa(e))}a(mf,"isServiceRegistered");async function V_(e){let t=e===C.PROCESS_DESCRIPTORS.HDB?ye.get(C.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):ye.get(C.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await fa(e),s=da.isEmptyOrZeroLength(r)?0:r.length;t!==s?e===C.PROCESS_DESCRIPTORS.HDB?It.error(LP):(await Ta(e),await ha(e)):e===C.PROCESS_DESCRIPTORS.HDB?await ff():await hf(e)}a(V_,"reloadStopStart");function PP(){return new Promise(async(e,t)=>{try{await dt()}catch(r){t(r)}M.stop(C.PROCESS_DESCRIPTORS.PM2_LOGROTATE,(r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(PP,"stopLogrotate");async function BP(){let{stdout:e,stderr:t}=await lf(`${process.platform==="win32"?"node":""} ${Sf} install pm2-logrotate@${gP}`);if(It.debug(`loadLogRotate stdout: ${e}`),t)throw It.error(IP),t;It.info(pP)}a(BP,"installLogRotate");async function Ef(){let e={max_size:ye.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_MAX_SIZE),retain:ye.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_RETAIN),compress:ye.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_COMPRESS),dateFormat:ye.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_DATE_FORMAT),rotateModule:ye.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_MODULE),workerInterval:ye.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_WORKER_INTERVAL),rotateInterval:ye.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_INTERVAL),TZ:ye.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_TIMEZONE)},t="";for(let n in e)t+=`${process.platform==="win32"?"node":""} ${Sf} set pm2-logrotate:${n} ${e[n]}`,n!=="TZ"&&(t+=" && ");let{stdout:r,stderr:s}=await lf(t);if(It.debug(`updateLogRotateConfig stdout: ${r}`),s)throw It.error(bP),s;It.info(CP)}a(Ef,"updateLogRotateConfig");async function HP(){ye.initSync();let e=da.autoCastBoolean(ye.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE)),t=await fa(C.PROCESS_DESCRIPTORS.PM2_LOGROTATE),r,s=!1;if(da.isEmptyOrZeroLength(t)||(s=!0,r=t[0].pm2_env.status),e&&!s){await BP(),await Ef();return}if(e&&s){await ur(C.PROCESS_DESCRIPTORS.PM2_LOGROTATE),await Ef();return}!e&&r===C.PM2_PROCESS_STATUSES.ONLINE&&await PP()}a(HP,"configureLogRotate");async function Af(){for(let t in C.CLUSTERING_PROCESSES){let r=C.CLUSTERING_PROCESSES[t];await ha(r)}await Sa.createWorkQueueStream(fP.WORK_QUEUE_CONSUMER_NAMES),await Sa.updateNodeNameLocalStreams();let e=await AP.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===C.PRE_4_0_0_VERSION){It.info("Starting clustering upgrade 4.0.0 process"),await ha(C.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0);break}}a(Af,"startClustering");async function vP(){for(let e in C.CLUSTERING_PROCESSES){let t=C.CLUSTERING_PROCESSES[e];await Ta(t)}}a(vP,"stopClustering");async function GP(){for(let e in C.CLUSTERING_PROCESSES){let t=C.CLUSTERING_PROCESSES[e];if(await mf(t)===!1)return!1}return!0}a(GP,"isClusteringRunning");async function qP(){await Ys.generateNatsConfig(!0),await Sa.reloadNATSHub(),await Sa.reloadNATSLeaf(),await Ys.removeNatsConfig(C.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ys.removeNatsConfig(C.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(qP,"reloadClustering")});var bf=d((FG,Cf)=>{"use strict";var If=require("joi"),{string:gf}=If.types(),FP=We(),pf=f(),xP=Q(),VP=Re();Cf.exports=kP;function kP(e){let t=gf.invalid(xP.get(pf.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(VP.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=If.object({operation:gf.valid(pf.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return FP.validateBySchema(e,r)}a(kP,"removeNodeValidator")});var Pf=d((xG,Mf)=>{"use strict";var{handleHDBError:Lf,hdb_errors:YP}=q(),{HTTP_STATUS_CODES:wf}=YP,$P=bf(),$s=p(),yf=qr(),KP=g(),Ra=f(),Uf=Re(),Df=Vt(),WP=Q(),{RemotePayloadObject:QP}=Bs(),{NodeSubscription:JP}=Ps(),XP=Rs(),ZP=ko(),zP=WP.get(Ra.CONFIG_PARAMS.CLUSTERING_NODENAME);Mf.exports=jP;async function jP(e){$s.trace("removeNode called with:",e),yf.checkClusteringEnabled();let t=$P(e);if(t)throw Lf(t,t.message,wf.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await yf.getNodeRecord(r);if(KP.isEmptyOrZeroLength(s))throw Lf(new Error,`Node '${r}' was not found.`,wf.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new QP(Ra.OPERATIONS_ENUM.REMOVE_NODE,zP,[]),i,o=!1;try{i=await Df.request(`${r}.${Uf.REQUEST_SUFFIX}`,n),$s.trace("Remove node reply from remote node:",r,i)}catch(c){$s.error("removeNode received error from request:",c),o=!0}for(let c=0,u=s.subscriptions.length;c<u;c++){let E=s.subscriptions[c];$s.trace(`Remove node removing subscription: ${E.schema}.${E.table} for node: ${r}`);let l=new JP(E.schema,E.table,!1,!1);await Df.updateWorkStream(l,r)}let _=new XP(Ra.SYSTEM_SCHEMA_NAME,Ra.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await ZP.deleteRecord(_),i?.status===Uf.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?($s.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(jP,"removeNode")});var Hf=d((VG,Bf)=>{"use strict";var ma=f(),eB=g(),tB=qr(),rt=p(),rB=mT(),sB=kT(),nB=Of(),iB=Ri(),aB=Pf(),oB=require("semver/functions/gte"),_B=3e4,cB=7;Bf.exports=uB;async function uB(){try{rt.notify("Starting update nodes. This process will attempt to update any node connections the need to be reestablished after a 4.0.0 upgrade"),await iB.setSchemaDataToGlobalAsync();let e=await tB.getAllNodeRecords(),t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];n.system_info.hdb_version===ma.PRE_4_0_0_VERSION&&t.push(EB(n))}await Promise.allSettled(t),rt.notify("Shutting down 4.0.0 clustering upgrade process"),await nB.deleteProcess(ma.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0)}catch(e){throw rt.error(e),e}}a(uB,"updateAllNodes");async function EB(e){try{let{name:t,subscriptions:r}=e;rt.notify("Running 4.0.0 update on node:",t);let s=!1,n=0;for(;n<cB;){let i=[];if(await rB.buildNodeStatus(e,i),rt.trace("Received status:",i[0].status,"from node:",t),i[0].status==="open"&&oB(i[0].system_info.hdb_version,"4.0.0")){rt.notify("Received open status from node:",t,"calling add node");let o={operation:ma.OPERATIONS_ENUM.ADD_NODE,node_name:t,subscriptions:r};await sB(o,!0),rt.notify("Successfully added node",t),s=!0;break}n=(Date.now()-e.__updatedtime__)/(1e3*60*60*24),rt.trace("Update node has been running for",n,"days. Calling node status again for node:",t),await eB.async_set_timeout(_B)}s||(rt.error("4.0.0 node update was unable to update connection to node:",t),rt.error("Removing following node record from hdb_nodes",e),await aB({operation:ma.OPERATIONS_ENUM.REMOVE_NODE,node_name:t}))}catch(t){throw rt.error(t),t}}a(EB,"updateNode")});var lB=Hf();(async()=>{try{await lB()}catch(e){console.error("Error launching 4.0.0 node update"),console.error(e),process.exit(1)}})();
7
+ `,"")}a(Zh,"runCommand");async function DD(){try{await hD.access(O_)}catch{return!1}let e=await Zh(`${O_} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return TD.eq(t,yD)}a(DD,"checkNATSServerInstalled");async function I_(e,t,r,s=!0,n="127.0.0.1"){return gD({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:Rt.get(K.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Rt.get(K.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Rt.get(K.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}a(I_,"createConnection");async function MD(){je&&(await je.close(),je=void 0)}a(MD,"closeConnection");async function Ki(){if(!je){let e=await Kh.getClusterUser();if(rr(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=Rt.get(K.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);je=await I_(t,e.username,e.decrypt_hash)}return je}a(Ki,"getConnection");async function vr(){if(Hs)return Hs;rr(je)&&await Ki();let{domain:e}=qs(K.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(rr(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Hs=await je.jetstreamManager({domain:e}),Hs}a(vr,"getJetStreamManager");async function zh(){if(vs)return vs;rr(je)&&await Ki();let{domain:e}=qs(K.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(rr(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return vs=je.jetstream({domain:e}),vs}a(zh,"getJetStream");async function Ve(){let e=je||await Ki(),t=Hs||await vr(),r=vs||await zh();return{connection:e,jsm:t,js:r}}a(Ve,"getNATSReferences");async function PD(){let e=Rt.get(K.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),{sys_name:t,decrypt_hash:r}=await Kh.getClusterUser(),s=await I_(e,t,r),n=p_(),i=s.subscribe(n),o=[],_=(async()=>{for await(let c of i)o.push(Jh.decode(c.data))})();return await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:n}),await s.flush(),await g_.async_set_timeout(50),await i.drain(),await s.close(),await _,o}a(PD,"getServerList");async function C_(e,t){let{jsm:r}=await Ve();await r.streams.add({name:e,storage:Wh.File,retention:Qh.Limits,subjects:t})}a(C_,"createLocalStream");async function jh(){let{jsm:e}=await Ve(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(jh,"listStreams");async function BD(e){let{jsm:t}=await Ve();await t.streams.delete(e)}a(BD,"deleteLocalStream");async function HD(e){let{connection:t}=await Ve(),r=[],s=p_(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(Jh.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(HD,"listRemoteStreams");async function vD(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await Ve(),i=RD(),o=[],_={ack_policy:Xh.None,durable_name:i,deliver_subject:i,deliver_policy:N_.All};t&&(_.deliver_policy=N_.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=CD(E),T=Yh(l.data),d={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:T,originators:[]},A=[];if(l.headers){let N=l.headers.get("originators");N&&(A=N.split(","),d.originators=A)}o.push(d),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(vD,"viewStream");async function GD(e,t,r=[],s=[]){mt.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,r,"originators:",s);let{connection:n,js:i}=await Ve(),o=await Wi(),_=`${e}.${o}`,c=ID();s.push(o),c.append("originators",s.join());for(let u=0,E=r.length;u<E;u++)try{mt.trace(`publishToStream publishing to subject: ${_}, data:`,r[u]),await i.publish(_,A_(r[u]),{headers:c})}catch(l){if(l.code&&l.code.toString()==="503")mt.trace(`publishToStream creating stream: ${t}`),await C_(t,[_]),await i.publish(_,A_(r[u]),{headers:c});else throw l}}a(GD,"publishToStream");function qs(e){e=e.toLowerCase();let t=Gs.join(Rt.get(K.CONFIG_PARAMS.ROOTPATH),wD);if(e===K.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return rr(m_)&&(m_={port:Ps.getConfigFromFile(K.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Ps.getConfigFromFile(K.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.HUB,config_file:V.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Gs.join(t,V.PID_FILES.HUB),hdb_nats_path:t}),m_;if(e===K.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return rr(R_)&&(R_={port:Ps.getConfigFromFile(K.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Ps.getConfigFromFile(K.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,config_file:V.NATS_CONFIG_FILES.LEAF_SERVER,domain:Ps.getConfigFromFile(K.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,pid_file_path:Gs.join(t,V.PID_FILES.LEAF),hdb_nats_path:t}),R_;mt.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(qs,"getServerConfig");async function qD(e){let{jsm:t}=await Ve(),r=await Wi();try{await t.streams.add({name:e.stream_name,storage:Wh.File,retention:Qh.Workqueue,subjects:[`${V.SUBJECT_PREFIXES.MSGID}.${r}`,`${V.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:Xh.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:N_.All,max_ack_pending:1e4,deliver_group:e.deliver_group,filter_subject:`${V.SUBJECT_PREFIXES.TXN}.>`});else throw s}}a(qD,"createWorkQueueStream");async function eT(e,t,r){let{jsm:s}=await Ve(),n=await s.streams.info(t),i=tT(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:_,table:c}=r,u=Yi.createNatsTableStreamName(_,c),E=i===e,l,T,d=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let N=0,b=n.config.sources.length;N<b;N++)if(l=n.config.sources[N],T=N,E&&l.name===u||!E&&l.name===u&&l.external&&l.external.api===`$JS.${e}.API`){d=!0;break}if(d===!0){if(l.opt_start_time===o)return;await sT(_,c,l,t),n.config.sources.splice(T,1),await s.streams.update(t,n.config)}let A={name:u,opt_start_time:o,filter_subject:`${V.SUBJECT_PREFIXES.TXN}.>`};E||(A.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(A),await s.streams.update(t,n.config)}a(eT,"addSourceToWorkStream");function tT(e){return e.split(".")[1]}a(tT,"extractServerName");async function rT(e,t,r){let{schema:s,table:n}=r,i=Yi.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 sT(s,n,u,t)}a(rT,"removeSourceFromWorkStream");async function sT(e,t,r,s){let n=await vr(),i;try{i=aT(e,t,r.external.api.split(".")[1]),await n.streams.purge(s,{filter:i})}catch{mt.error("Error purging source subject",i,"from work stream",s)}}a(sT,"purgeSourceFromWorkStream");async function FD(e,t,r=2e3,s=p_()){if(!g_.isObject(t))throw new Error("data param must be an object");let n=A_(t),{connection:i}=await Ve(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let _=await i.request(e,n,o);return Yh(_.data)}a(FD,"request");function b_(e){return new Promise(async(t,r)=>{let s=AD(O_,["--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(b_,"reloadNATS");async function xD(){let{pid_file_path:e}=qs(K.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await b_(e)}a(xD,"reloadNATSHub");async function VD(){let{pid_file_path:e}=qs(K.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await b_(e)}a(VD,"reloadNATSLeaf");function kD(e,t,r){let s;switch(e.code){case Vh.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case Vh.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(kD,"requestErrorHandler");async function $D(e,t){let r=t+V.SERVER_SUFFIX.LEAF;await ND.writeTransaction(K.SYSTEM_SCHEMA_NAME,K.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await eT(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await rT(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a($D,"updateWorkStream");async function nT(e,t){let r=Yi.createNatsTableStreamName(e,t),s=await Wi(),n=aT(e,t,s);await C_(r,[n])}a(nT,"createLocalTableStream");async function YD(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await nT(s,n)}}a(YD,"createTableStreams");async function iT(e,t){if(Rt.get(K.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Yi.createNatsTableStreamName(e,t),{jsm:s}=await Ve();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")mt.warn(r);else throw r}}a(iT,"purgeTableStream");async function KD(e,t){if(Rt.get(K.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await iT(e,t[r])}a(KD,"purgeSchemaTableStreams");async function WD(e){return(await vr()).streams.info(e)}a(WD,"getStreamInfo");function aT(e,t,r){return`${V.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(aT,"createSubjectName");async function Wi(){if(Bs)return Bs;if(Bs=(await vr())?.nc?.info?.server_name,Bs===void 0)throw new Error("Unable to get jetstream manager server name");return Bs}a(Wi,"getJsmServerName");async function QD(){let e=await vr(),t=await Wi(),r=await jh();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===V.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let c=`${V.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;mt.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c}else if(n.name===V.WORK_QUEUE_CONSUMER_NAMES.stream_name){let c=`${V.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;mt.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c,await e.consumers.update(V.WORK_QUEUE_CONSUMER_NAMES.stream_name,V.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${V.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let c=i.split(".");c[c.length-1]=t;let u=c.join(".");mt.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}await e.streams.update(n.name,n)}}}a(QD,"updateNodeNameLocalStreams")});var ST=S((oG,dT)=>{"use strict";var w_=Hr(),XD=Gt(),uT=Q(),Qi=f(),sr=Re(),JD=g(),L_=p(),{RemotePayloadObject:ZD}=Ms(),{ErrorCode:_T}=require("nats"),cT=uT.get(Qi.CONFIG_PARAMS.CLUSTERING_ENABLED),ET=uT.get(Qi.CONFIG_PARAMS.CLUSTERING_NODENAME);dT.exports={clusterStatus:zD,buildNodeStatus:lT};async function zD(){let e={node_name:ET,is_enabled:cT,connections:[]};if(!cT)return e;let t=await w_.getAllNodeRecords();if(JD.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(lT(t[s],e.connections));return await Promise.allSettled(r),e}a(zD,"clusterStatus");async function lT(e,t){let r=e.name,s=new ZD(Qi.OPERATIONS_ENUM.CLUSTER_STATUS,ET,void 0,await w_.getSystemInfo()),n,i,o=sr.CLUSTER_STATUS_STATUSES.OPEN;try{let c=Date.now();n=await XD.request(sr.REQUEST_SUBJECT(r),s),i=Date.now()-c,n.status===sr.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=sr.CLUSTER_STATUS_STATUSES.CLOSED,L_.error(`Error getting node status from ${r} `,n))}catch(c){L_.warn(`Error getting node status from ${r}`,c),c.code===_T.NoResponders?o=sr.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:c.code===_T.Timeout?o=sr.CLUSTER_STATUS_STATUSES.TIMEOUT:o=sr.CLUSTER_STATUS_STATUSES.CLOSED}let _=new jD(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let c={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==Qi.PRE_4_0_0_VERSION&&await w_.upsertNodeRecord(c)}catch(c){L_.error("Cluster status encountered an error updating system info for node:",r,c)}t.push(_)}a(lT,"buildNodeStatus");function jD(e,t,r,s,n,i,o,_){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=_}a(jD,"NodeStatusObject")});var RT=S((uG,fT)=>{"use strict";var y_=require("joi"),{string:Xi,boolean:hT,date:eM}=y_.types(),tM=Ke(),{validateSchemaExists:_G,validateTableExists:cG,validateSchemaName:rM}=kt(),sM=f(),nM=Re(),iM=Q(),aM=Xi.invalid(iM.get(sM.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(nM.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null).required(),TT={operation:Xi.valid("add_node","update_node"),node_name:aM,subscriptions:y_.array().items({table:Xi.required(),schema:Xi.custom(rM).required(),subscribe:hT.required(),publish:hT.required().custom(_M),start_time:eM.iso()}).min(1).required()};function oM(e){return tM.validateBySchema(e,y_.object(TT))}a(oM,"addUpdateNodeValidator");function _M(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(_M,"checkForFalsy");fT.exports={addUpdateNodeValidator:oM,validation_schema:TT}});var NT=S((EG,AT)=>{"use strict";var D_=hi(),{hdb_errors:U_}=q();AT.exports={checkSchemaExists:mT,checkSchemaTableExists:cM,schema_describe:D_};async function mT(e){if(!global.hdb_schema[e])try{let t=await D_.describeSchema({schema:e});global.hdb_schema[e]=t}catch{return U_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}}a(mT,"checkSchemaExists");async function cM(e,t){let r=await mT(e);if(r)return r;if(!global.hdb_schema[e][t])try{let s=await D_.describeTable({schema:e,table:t});if(!s||Object.keys(s).length===0)return U_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t);global.hdb_schema[e][t]=s}catch{return U_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}}a(cM,"checkSchemaTableExists")});var bT=S((dG,CT)=>{"use strict";var Gr=In(),nr=NT(),OT=p(),uM=require("uuid").v4,lG=require("clone"),Fr=_s(),ir=f(),EM=require("util"),ar=Jt(),{handleHDBError:ce,hdb_errors:lM}=q(),{HDB_ERROR_MSGS:qr,HTTP_STATUS_CODES:ue}=lM,{SchemaEventMsg:xr}=Tr(),gT=Gt();CT.exports={createSchema:dM,createSchemaStructure:pT,createTable:SM,createTableStructure:IT,createAttribute:mM,dropSchema:hM,dropTable:TM,dropAttribute:fM};async function dM(e){try{let t=await pT(e);return Fr.signalSchemaChange(new xr(process.pid,e.operation,e.schema)),t}catch(t){throw t}}a(dM,"createSchema");async function pT(e){let t=Gr.schema_object(e);if(t)throw ce(t,t.message,ue.BAD_REQUEST,void 0,void 0,!0);if(!await nr.checkSchemaExists(e.schema))throw ce(new Error,qr.SCHEMA_EXISTS_ERR(e.schema),ue.BAD_REQUEST,ir.LOG_LEVELS.ERROR,qr.SCHEMA_EXISTS_ERR(e.schema),!0);try{return await ar.createSchema(e),`schema '${e.schema}' successfully created`}catch(r){throw r}}a(pT,"createSchemaStructure");async function SM(e){try{let t=await IT(e);return Fr.signalSchemaChange(new xr(process.pid,e.operation,e.schema,e.table)),t}catch(t){throw t}}a(SM,"createTable");async function IT(e){let t=Gr.create_table_object(e);if(t)throw ce(t,t.message,ue.BAD_REQUEST,void 0,void 0,!0);Gr.validateTableResidence(e.residence);let r=await nr.checkSchemaExists(e.schema);if(r)throw ce(new Error,r,ue.NOT_FOUND,ir.LOG_LEVELS.ERROR,r,!0);if(!await nr.checkSchemaTableExists(e.schema,e.table))throw ce(new Error,qr.TABLE_EXISTS_ERR(e.schema,e.table),ue.BAD_REQUEST,ir.LOG_LEVELS.ERROR,qr.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:uM(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await ar.createTable(n,e);else throw ce(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",ue.BAD_REQUEST);else await ar.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(i){throw i}}a(IT,"createTableStructure");async function hM(e){let t=Gr.schema_object(e);if(t)throw ce(t,t.message,ue.BAD_REQUEST,void 0,void 0,!0);let r=await nr.checkSchemaExists(e.schema);if(r)throw ce(new Error,r,ue.NOT_FOUND,ir.LOG_LEVELS.ERROR,r,!0);let s=await nr.schema_describe.describeSchema({schema:e.schema});global.hdb_schema[e.schema]=s;let n=Object.keys(global.hdb_schema[e.schema]);return await ar.dropSchema(e),Fr.signalSchemaChange(new xr(process.pid,e.operation,e.schema)),delete global.hdb_schema[e.schema],await gT.purgeSchemaTableStreams(e.schema,n),`successfully deleted schema '${e.schema}'`}a(hM,"dropSchema");async function TM(e){let t=Gr.table_object(e);if(t)throw ce(t,t.message,ue.BAD_REQUEST,void 0,void 0,!0);let r=await nr.checkSchemaTableExists(e.schema,e.table);if(r)throw ce(new Error,r,ue.NOT_FOUND,ir.LOG_LEVELS.ERROR,r,!0);return await ar.dropTable(e),Fr.signalSchemaChange(new xr(process.pid,e.operation,e.schema,e.table)),await gT.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(TM,"dropTable");async function fM(e){let t=Gr.attribute_object(e);if(t)throw ce(t,t.message,ue.BAD_REQUEST,void 0,void 0,!0);let r=await nr.checkSchemaTableExists(e.schema,e.table);if(r)throw ce(new Error,r,ue.NOT_FOUND,ir.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw ce(new Error,"You cannot drop a hash attribute",ue.BAD_REQUEST,void 0,void 0,!0);if(ir.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw ce(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,ue.BAD_REQUEST,void 0,void 0,!0);try{return await ar.dropAttribute(e),RM(e),Fr.signalSchemaChange(new xr(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw OT.error(`Got an error deleting attribute ${EM.inspect(e)}.`),s}}a(fM,"dropAttribute");function RM(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(RM,"dropAttributeFromGlobal");async function mM(e){if(!global.hdb_schema[e.schema])throw ce(new Error,qr.SCHEMA_NOT_FOUND(e.schema),ue.NOT_FOUND,void 0,void 0,!0);if(!global.hdb_schema[e.schema][e.table])throw ce(new Error,qr.TABLE_NOT_FOUND(e.schema,e.table),ue.NOT_FOUND,void 0,void 0,!0);try{return await ar.createAttribute(e),Fr.signalSchemaChange(new xr(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}catch(t){throw OT.error(t),t}}a(mM,"createAttribute")});var PT=S((SG,MT)=>{"use strict";var M_=Gt(),LT=g(),wT=Re(),AM=f(),Ji=p(),yT=bT(),NM=To(),{RemotePayloadObject:OM}=Ms(),{handleHDBError:UT,hdb_errors:gM}=q(),{HTTP_STATUS_CODES:DT}=gM,{NodeSubscription:pM}=Ds();MT.exports=IM;async function IM(e,t){let r;try{r=await M_.request(`${t}.${wT.REQUEST_SUFFIX}`,new OM(AM.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Ji.trace("Response from remote describe all request:",r)}catch(o){Ji.error(`addNode received error from describe all request to remote node: ${o}`);let _=M_.requestErrorHandler(o,"add_node",t);throw UT(new Error,_,DT.INTERNAL_SERVER_ERROR,"error",_)}if(r.status===wT.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw UT(new Error,o,DT.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:_,table:c}=o,u=LT.doesSchemaExist(_),E=s[_]!==void 0,l=LT.doesTableExist(_,c),T=s?.[_]?.[c]!==void 0;if(!u&&!E||!l&&!T){n.push(o);continue}if(!u&&E&&(Ji.trace(`addNode creating schema: ${_}`),await yT.createSchema({operation:"create_schema",schema:_})),!l&&T){Ji.trace(`addNode creating table: ${c} in schema: ${_}`);let A=new NM(_,c,s[_][c].hash_attribute);await yT.createTable(A)}await M_.createLocalTableStream(_,c);let d=new pM(_,c,o.publish,o.subscribe);d.start_time=o.start_time,i.push(d)}return{added:i,skipped:n}}a(IM,"reviewSubscriptions")});var GT=S((hG,vT)=>{"use strict";var{handleHDBError:Zi,hdb_errors:CM}=q(),{HTTP_STATUS_CODES:zi}=CM,{addUpdateNodeValidator:bM}=RT(),Fs=p(),HT=f(),BT=Re(),LM=g(),P_=Gt(),xs=Hr(),wM=Q(),yM=PT(),{Node:UM,NodeSubscription:DM}=Ds(),MM="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",PM="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",BM=wM.get(HT.CONFIG_PARAMS.CLUSTERING_NODENAME);vT.exports=HM;async function HM(e,t=!1){Fs.trace("addNode called with:",e),xs.checkClusteringEnabled();let r=bM(e);if(r)throw Zi(r,r.message,zi.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let l=await xs.getNodeRecord(s);if(!LM.isEmptyOrZeroLength(l))throw Zi(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,zi.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await yM(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=MM,o;let _=xs.buildNodePayloads(n,BM,HT.OPERATIONS_ENUM.ADD_NODE,await xs.getSystemInfo());Fs.trace("addNode sending remote payload:",_);let c;try{c=await P_.request(`${s}.${BT.REQUEST_SUFFIX}`,_)}catch(l){Fs.error(`addNode received error from request: ${l}`);let T=P_.requestErrorHandler(l,"add_node",s);throw Zi(new Error,T,zi.INTERNAL_SERVER_ERROR,"error",T)}if(c.status===BT.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${s}: ${c.message}`;throw Zi(new Error,l,zi.INTERNAL_SERVER_ERROR,"error",l)}Fs.trace(c);let u=[];for(let l=0,T=n.length;l<T;l++){let d=n[l];Fs.trace("Add node updating work stream for node:",s,"subscriptions:",d),await P_.updateWorkStream(d,s),n[l].start_time===void 0&&delete n[l].start_time,u.push(new DM(d.schema,d.table,d.publish,d.subscribe))}let E=new UM(s,u,c.system_info);return await xs.upsertNodeRecord(E),i.length>0?o.message=PM:o.message=`Successfully added '${s}' to manifest`,o}a(HM,"addNode")});var FT=S((TG,qT)=>{"use strict";var vM=Re(),ji=class{constructor(t,r,s,n,i,o,_,c,u,E,l,T,d){this.port=t,o===null&&(o=void 0),this.server_name=r+vM.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:_},this.leafnodes={port:c,tls:{cert_file:n,key_file:i,ca_file:o,insecure:_}},this.cluster={name:u,port:E,routes:l,tls:{cert_file:n,key_file:i,ca_file:o,insecure:_}},this.accounts={SYS:{users:T},HDB:{users:d}},this.system_account="SYS"}};a(ji,"HubConfigObject");qT.exports=ji});var kT=S((fG,VT)=>{"use strict";var xT=Re(),ea=class{constructor(t,r,s,n,i,o,_,c,u,E,l){this.port=t,l===null&&(l=void 0),this.server_name=r+xT.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+xT.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:E,ca_file:l,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:l,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:l,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:_},HDB:{users:c,jetstream:"enabled"}},this.system_account="SYS"}};a(ea,"LeafConfigObject");VT.exports=ea});var YT=S((RG,$T)=>{"use strict";var ta=class{constructor(t,r){this.user=t,this.password=r}};a(ta,"HdbUserObject");$T.exports=ta});var WT=S((mG,KT)=>{"use strict";var GM=Re(),ra=class{constructor(t,r){this.user=t+GM.SERVER_SUFFIX.ADMIN,this.password=r}};a(ra,"SysUserObject");KT.exports=ra});var ZT=S((AG,JT)=>{"use strict";var Vr=require("path"),aa=require("fs-extra"),qM=FT(),FM=kT(),xM=YT(),VM=WT(),B_=ws(),$r=g(),ke=Jr(),ia=f(),sa=Re(),{CONFIG_PARAMS:se}=ia,oa=p(),_a=Q(),QT=Is(),H_=Gt(),kr="clustering",kM=1e4,XT=5;JT.exports={generateNatsConfig:$M,removeNatsConfig:YM};async function $M(e=!1,t=void 0){_a.initSync();let r=_a.get(se.ROOTPATH),s=Vr.join(r,kr,sa.PID_FILES.HUB),n=Vr.join(r,kr,sa.PID_FILES.LEAF),i=Vr.join(r,kr,"leaf"),o=Vr.join(r,kr,sa.NATS_CONFIG_FILES.HUB_SERVER),_=Vr.join(r,kr,sa.NATS_CONFIG_FILES.LEAF_SERVER),c=ke.getConfigFromFile(se.CLUSTERING_TLS_CERTIFICATE),u=ke.getConfigFromFile(se.CLUSTERING_TLS_PRIVATEKEY),E=ke.getConfigFromFile(se.CLUSTERING_TLS_CERT_AUTH),l=ke.getConfigFromFile(se.CLUSTERING_TLS_INSECURE),T=ke.getConfigFromFile(se.CLUSTERING_NODENAME),d=ke.getConfigFromFile(se.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await H_.checkNATSServerInstalled()||ca("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let A=await B_.listUsers(),N=ke.getConfigFromFile(se.CLUSTERING_USER),b=await B_.getClusterUser();($r.isEmpty(b)||b.active!==!0)&&ca(`invalid cluster user '${N}'`),e||(await na(se.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await na(se.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await na(se.CLUSTERING_HUBSERVER_NETWORK_PORT),await na(se.CLUSTERING_LEAFSERVER_NETWORK_PORT));let Ae=[],v=[];for(let[Ys,Ot]of A.entries())Ot.role.role===ia.ROLE_TYPES_ENUM.CLUSTER_USER&&Ot.active&&(Ae.push(new VM(Ot.username,QT.decrypt(Ot.hash))),v.push(new xM(Ot.username,QT.decrypt(Ot.hash))));let W=[],{hub_routes:$e}=ke.getClusteringRoutes();if(!$r.isEmptyOrZeroLength($e))for(let Ys of $e)W.push(`tls://${b.sys_name_encoded}:${b.uri_encoded_d_hash}@${Ys.host}:${Ys.port}`);let $s=new qM(ke.getConfigFromFile(se.CLUSTERING_HUBSERVER_NETWORK_PORT),T,s,c,u,E,l,d,ke.getConfigFromFile(se.CLUSTERING_HUBSERVER_CLUSTER_NAME),ke.getConfigFromFile(se.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),W,Ae,v);t=$r.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===ia.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await aa.writeJson(o,$s),oa.trace(`Hub server config written to ${o}`));let V_=`tls://${b.sys_name_encoded}:${b.uri_encoded_d_hash}@0.0.0.0:${d}`,k_=`tls://${b.uri_encoded_name}:${b.uri_encoded_d_hash}@0.0.0.0:${d}`,$_=new FM(ke.getConfigFromFile(se.CLUSTERING_LEAFSERVER_NETWORK_PORT),T,n,i,[V_],[k_],Ae,v,c,u,E,l);(t===void 0||t===ia.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await aa.writeJson(_,$_),oa.trace(`Leaf server config written to ${_}`))}a($M,"generateNatsConfig");async function na(e){let t=_a.get(e);$r.isEmpty(t)&&ca(`port undefined for '${e}'`),await $r.isPortTaken(t)&&ca(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`)}a(na,"isPortAvailable");function ca(e){let t=`Error generating clustering config: ${e}`;oa.error(t),console.error(t),process.exit(1)}a(ca,"generateNatsConfigError");async function YM(e){let{port:t,config_file:r}=H_.getServerConfig(e),{username:s,decrypt_hash:n}=await B_.getClusterUser(),i=0,o=500;for(;i<XT;){try{let u=await H_.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){oa.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=XT)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check the ${e} log for further details.`);await $r.async_set_timeout(o*i)}let _="0".repeat(kM),c=Vr.join(_a.get(se.ROOTPATH),kr,r);await aa.writeFile(c,_),await aa.remove(c)}a(YM,"removeNatsConfig")});var G_=S((NG,nf)=>{"use strict";var Y=Q(),zT=Qo(),m=f(),v_=Re(),ee=require("path"),{PACKAGE_ROOT:ua}=f(),J="/dev/null",Yr=ee.join(ua,"launchServiceScripts"),jT=ee.join(ua,"utility/scripts"),KM=ee.join(jT,m.HDB_RESTART_SCRIPT),ef=ee.resolve(ua,"dependencies",`${process.platform}-${process.arch}`,v_.NATS_BINARY_NAME),Ee,le;function ct(){(Ee===void 0||le===void 0)&&(Y.initSync(),Ee=Y.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),le=Y.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY))}a(ct,"initLogConfig");function tf(){ct();let e=ee.join(le,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 Ee||(t.out_file=J,t.error_file=J),{...t,script:m.SERVICE_SERVERS.IPC}}a(tf,"generateIPCServerConfig");function rf(){ct(),Y.initSync(),Ee=Y.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),le=Y.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=ee.join(le,m.PROCESS_LOG_NAMES.HDB),t=zT.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:Y.get(m.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Yr};return Ee||(s.out_file=J,s.error_file=J),s}a(rf,"generateHDBServerConfig");function sf(){ct(),Y.initSync(),Ee=Y.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),le=Y.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=ee.join(le,m.PROCESS_LOG_NAMES.CUSTOM_FUNCTIONS),t=zT.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:Y.get(m.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Yr};return Ee||(s.out_file=J,s.error_file=J),s}a(sf,"generateCFServerConfig");function WM(){ct(),Y.initSync(),Ee=Y.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),le=Y.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=Y.get(m.CONFIG_PARAMS.ROOTPATH),t=ee.join(e,"clustering",v_.NATS_CONFIG_FILES.HUB_SERVER),r=ee.join(le,m.PROCESS_LOG_NAMES.CLUSTERING_HUB),s={name:m.PROCESS_DESCRIPTORS.CLUSTERING_HUB,script:ef,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 Ee||(s.out_file=J,s.error_file=J),s}a(WM,"generateNatsHubServerConfig");function QM(){ct(),Y.initSync(),Ee=Y.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),le=Y.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=Y.get(m.CONFIG_PARAMS.ROOTPATH),t=ee.join(e,"clustering",v_.NATS_CONFIG_FILES.LEAF_SERVER),r=ee.join(le,m.PROCESS_LOG_NAMES.CLUSTERING_LEAF),s={name:m.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,script:ef,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 Ee||(s.out_file=J,s.error_file=J),s}a(QM,"generateNatsLeafServerConfig");function XM(){ct(),Y.initSync();let e=ee.join(le,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:Yr};return Ee||(t.out_file=J,t.error_file=J),t}a(XM,"generateNatsIngestServiceConfig");function JM(){ct(),Y.initSync();let e=ee.join(le,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:Yr};return Ee||(t.out_file=J,t.error_file=J),t}a(JM,"generateNatsReplyServiceConfig");function ZM(){ct(),Y.initSync();let e=ee.join(le,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:Yr,autorestart:!1};return Ee||(t.out_file=J,t.error_file=J),t}a(ZM,"generateClusteringUpgradeV4ServiceConfig");function zM(){ct();let e=ee.join(le,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:jT};return Ee||(t.out_file=J,t.error_file=J),{...t,script:KM}}a(zM,"generateRestart");function jM(e){ct();let t=ee.join(le,m.PROCESS_LOG_NAMES.JOBS),r=ee.join(ua,"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:Yr,autorestart:!1};return Ee||(s.out_file=J,s.error_file=J),{...s,script:ee.join(r,"jobProcess.js")}}a(jM,"generateJobConfig");function eP(){return{apps:[tf(),rf(),sf()]}}a(eP,"generateAllServiceConfigs");nf.exports={generateAllServiceConfigs:eP,generateIPCServerConfig:tf,generateHDBServerConfig:rf,generateCFServerConfig:sf,generateRestart:zM,generateNatsHubServerConfig:WM,generateNatsLeafServerConfig:QM,generateNatsIngestServiceConfig:XM,generateNatsReplyServiceConfig:JM,generateClusteringUpgradeV4ServiceConfig:ZM,generateJobConfig:jM}});var ff=S((OG,Tf)=>{"use strict";var C=f(),Ea=g(),Vs=ZT(),la=Gt(),tP=Re(),M=require("pm2"),rP=require("fs-extra"),At=G_(),we=Q(),Nt=p(),sP=G_(),nP=Hr(),iP=require("util"),of=iP.promisify(require("child_process").exec),_f=require("path");Tf.exports={start:or,stop:Sa,reload:uf,restart:Ef,list:F_,describe:ha,connect:ut,kill:df,startAllServices:hP,startService:da,getUniqueServicesList:x_,restartAllServices:TP,stopAllServices:fP,isServiceRegistered:Sf,reloadStopStart:q_,restartHdb:lf,deleteProcess:dP,configureLogRotate:AP,startClustering:hf,isHdbRestartRunning:SP,isClusteringRunning:OP,stopClustering:NP,reloadClustering:gP};var{PACKAGE_ROOT:aP}=f(),oP="2.7.0",cf=_f.join(aP,"node_modules/pm2/bin/pm2"),_P="Log rotate installed.",cP="Error installing log rotate.",uP="Log rotate updated.",EP="Error updating log rotate.",lP="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 ut(){return new Promise((e,t)=>{M.connect((r,s)=>{r&&t(r),e(s)})})}a(ut,"connect");function or(e){return new Promise(async(t,r)=>{try{await ut()}catch(s){r(s)}M.start(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(or,"start");function Sa(e){return new Promise(async(t,r)=>{try{await ut()}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(Sa,"stop");function uf(e){return new Promise(async(t,r)=>{try{await ut()}catch(s){r(s)}M.reload(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(uf,"reload");function Ef(e){return new Promise(async(t,r)=>{try{await ut()}catch(s){r(s)}M.restart(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(Ef,"restart");function dP(e){return new Promise(async(t,r)=>{try{await ut()}catch(s){r(s)}M.delete(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(dP,"deleteProcess");async function lf(){await or(sP.generateRestart())}a(lf,"restartHdb");async function SP(){let e=await F_();for(let t in e)if(e[t].name===C.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(SP,"isHdbRestartRunning");function F_(){return new Promise(async(e,t)=>{try{await ut()}catch(r){t(r)}M.list((r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(F_,"list");function ha(e){return new Promise(async(t,r)=>{try{await ut()}catch(s){r(s)}M.describe(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(ha,"describe");function df(){return new Promise(async(e,t)=>{try{await ut()}catch(r){t(r)}M.killDaemon((r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(df,"kill");async function hP(){try{await hf(),await or(At.generateAllServiceConfigs())}catch(e){throw M.disconnect(),e}}a(hP,"startAllServices");async function da(e){try{let t;switch(e=e.toLowerCase(),e){case C.PROCESS_DESCRIPTORS.IPC.toLowerCase():t=At.generateIPCServerConfig();break;case C.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=At.generateHDBServerConfig();break;case C.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase():t=At.generateCFServerConfig();break;case C.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=At.generateNatsIngestServiceConfig();break;case C.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=At.generateNatsReplyServiceConfig();break;case C.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=At.generateNatsHubServerConfig(),await or(t),await Vs.removeNatsConfig(e);return;case C.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=At.generateNatsLeafServerConfig(),await or(t),await Vs.removeNatsConfig(e);return;case C.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=At.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await or(t)}catch(t){throw M.disconnect(),t}}a(da,"startService");async function x_(){try{let e=await F_(),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(x_,"getUniqueServicesList");async function TP(e=[]){try{let t=!1,r=await x_();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===C.PROCESS_DESCRIPTORS.HDB?t=!0:await q_(o):await Ef(o))}t&&await q_(C.PROCESS_DESCRIPTORS.HDB)}catch(t){throw M.disconnect(),t}}a(TP,"restartAllServices");async function fP(){try{let e=await x_();for(let t=0,r=Object.values(e).length;t<r;t++){let s=Object.values(e)[t];await Sa(s.name)}if(await df(),we.get(C.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND)===!0){let t=(await rP.readFile(_f.join(we.get(C.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),C.FOREGROUND_PID_FILE))).toString();try{process.kill(t,"SIGTERM")}catch(r){Nt.warn(`Error terminating foreground process: ${r}`)}}}catch(e){throw M.disconnect(),e}}a(fP,"stopAllServices");async function Sf(e){return!Ea.isEmptyOrZeroLength(await ha(e))}a(Sf,"isServiceRegistered");async function q_(e){let t=e===C.PROCESS_DESCRIPTORS.HDB?we.get(C.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):we.get(C.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await ha(e),s=Ea.isEmptyOrZeroLength(r)?0:r.length;t!==s?e===C.PROCESS_DESCRIPTORS.HDB?Nt.error(lP):(await Sa(e),await da(e)):e===C.PROCESS_DESCRIPTORS.HDB?await lf():await uf(e)}a(q_,"reloadStopStart");function RP(){return new Promise(async(e,t)=>{try{await ut()}catch(r){t(r)}M.stop(C.PROCESS_DESCRIPTORS.PM2_LOGROTATE,(r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(RP,"stopLogrotate");async function mP(){let{stdout:e,stderr:t}=await of(`${process.platform==="win32"?"node":""} ${cf} install pm2-logrotate@${oP}`);if(Nt.debug(`loadLogRotate stdout: ${e}`),t)throw Nt.error(cP),t;Nt.info(_P)}a(mP,"installLogRotate");async function af(){let e={max_size:we.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_MAX_SIZE),retain:we.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_RETAIN),compress:we.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_COMPRESS),dateFormat:we.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_DATE_FORMAT),rotateModule:we.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_MODULE),workerInterval:we.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_WORKER_INTERVAL),rotateInterval:we.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_INTERVAL),TZ:we.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_TIMEZONE)},t="";for(let n in e)t+=`${process.platform==="win32"?"node":""} ${cf} set pm2-logrotate:${n} ${e[n]}`,n!=="TZ"&&(t+=" && ");let{stdout:r,stderr:s}=await of(t);if(Nt.debug(`updateLogRotateConfig stdout: ${r}`),s)throw Nt.error(EP),s;Nt.info(uP)}a(af,"updateLogRotateConfig");async function AP(){we.initSync();let e=Ea.autoCastBoolean(we.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE)),t=await ha(C.PROCESS_DESCRIPTORS.PM2_LOGROTATE),r,s=!1;if(Ea.isEmptyOrZeroLength(t)||(s=!0,r=t[0].pm2_env.status),e&&!s){await mP(),await af();return}if(e&&s){await or(C.PROCESS_DESCRIPTORS.PM2_LOGROTATE),await af();return}!e&&r===C.PM2_PROCESS_STATUSES.ONLINE&&await RP()}a(AP,"configureLogRotate");async function hf(){for(let t in C.CLUSTERING_PROCESSES){let r=C.CLUSTERING_PROCESSES[t];await da(r)}await la.createWorkQueueStream(tP.WORK_QUEUE_CONSUMER_NAMES),await la.updateNodeNameLocalStreams();let e=await nP.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===C.PRE_4_0_0_VERSION){Nt.info("Starting clustering upgrade 4.0.0 process"),await da(C.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0);break}}a(hf,"startClustering");async function NP(){for(let e in C.CLUSTERING_PROCESSES){let t=C.CLUSTERING_PROCESSES[e];await Sa(t)}}a(NP,"stopClustering");async function OP(){for(let e in C.CLUSTERING_PROCESSES){let t=C.CLUSTERING_PROCESSES[e];if(await Sf(t)===!1)return!1}return!0}a(OP,"isClusteringRunning");async function gP(){await Vs.generateNatsConfig(!0),await la.reloadNATSHub(),await la.reloadNATSLeaf(),await Vs.removeNatsConfig(C.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Vs.removeNatsConfig(C.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(gP,"reloadClustering")});var Of=S((gG,Nf)=>{"use strict";var Af=require("joi"),{string:Rf}=Af.types(),pP=Ke(),mf=f(),IP=Q(),CP=Re();Nf.exports=bP;function bP(e){let t=Rf.invalid(IP.get(mf.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(CP.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=Af.object({operation:Rf.valid(mf.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return pP.validateBySchema(e,r)}a(bP,"removeNodeValidator")});var wf=S((pG,Lf)=>{"use strict";var{handleHDBError:gf,hdb_errors:LP}=q(),{HTTP_STATUS_CODES:pf}=LP,wP=Of(),ks=p(),If=Hr(),yP=g(),Ta=f(),Cf=Re(),bf=Gt(),UP=Q(),{RemotePayloadObject:DP}=Ms(),{NodeSubscription:MP}=Ds(),PP=Ts(),BP=Fo(),HP=UP.get(Ta.CONFIG_PARAMS.CLUSTERING_NODENAME);Lf.exports=vP;async function vP(e){ks.trace("removeNode called with:",e),If.checkClusteringEnabled();let t=wP(e);if(t)throw gf(t,t.message,pf.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await If.getNodeRecord(r);if(yP.isEmptyOrZeroLength(s))throw gf(new Error,`Node '${r}' was not found.`,pf.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new DP(Ta.OPERATIONS_ENUM.REMOVE_NODE,HP,[]),i,o=!1;try{i=await bf.request(`${r}.${Cf.REQUEST_SUFFIX}`,n),ks.trace("Remove node reply from remote node:",r,i)}catch(c){ks.error("removeNode received error from request:",c),o=!0}for(let c=0,u=s.subscriptions.length;c<u;c++){let E=s.subscriptions[c];ks.trace(`Remove node removing subscription: ${E.schema}.${E.table} for node: ${r}`);let l=new MP(E.schema,E.table,!1,!1);await bf.updateWorkStream(l,r)}let _=new PP(Ta.SYSTEM_SCHEMA_NAME,Ta.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await BP.deleteRecord(_),i?.status===Cf.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(ks.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(vP,"removeNode")});var Uf=S((IG,yf)=>{"use strict";var fa=f(),GP=g(),qP=Hr(),et=p(),FP=ST(),xP=GT(),VP=ff(),kP=Ti(),$P=wf(),YP=require("semver/functions/gte"),KP=3e4,WP=7;yf.exports=QP;async function QP(){try{et.notify("Starting update nodes. This process will attempt to update any node connections the need to be reestablished after a 4.0.0 upgrade"),await kP.setSchemaDataToGlobalAsync();let e=await qP.getAllNodeRecords(),t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];n.system_info.hdb_version===fa.PRE_4_0_0_VERSION&&t.push(XP(n))}await Promise.allSettled(t),et.notify("Shutting down 4.0.0 clustering upgrade process"),await VP.deleteProcess(fa.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0)}catch(e){throw et.error(e),e}}a(QP,"updateAllNodes");async function XP(e){try{let{name:t,subscriptions:r}=e;et.notify("Running 4.0.0 update on node:",t);let s=!1,n=0;for(;n<WP;){let i=[];if(await FP.buildNodeStatus(e,i),et.trace("Received status:",i[0].status,"from node:",t),i[0].status==="open"&&YP(i[0].system_info.hdb_version,"4.0.0")){et.notify("Received open status from node:",t,"calling add node");let o={operation:fa.OPERATIONS_ENUM.ADD_NODE,node_name:t,subscriptions:r};await xP(o,!0),et.notify("Successfully added node",t),s=!0;break}n=(Date.now()-e.__updatedtime__)/(1e3*60*60*24),et.trace("Update node has been running for",n,"days. Calling node status again for node:",t),await GP.async_set_timeout(KP)}s||(et.error("4.0.0 node update was unable to update connection to node:",t),et.error("Removing following node record from hdb_nodes",e),await $P({operation:fa.OPERATIONS_ENUM.REMOVE_NODE,node_name:t}))}catch(t){throw et.error(t),t}}a(XP,"updateNode")});var JP=Uf();(async()=>{try{await JP()}catch(e){console.error("Error launching 4.0.0 node update"),console.error(e),process.exit(1)}})();