harperdb 4.1.1 → 4.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +20 -19
- package/launchServiceScripts/launchInstallNATSServer.js +3 -3
- package/launchServiceScripts/launchNatsIngestService.js +11 -11
- package/launchServiceScripts/launchNatsReplyService.js +6 -6
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +6 -6
- package/package.json +5 -5
- package/server/jobs/jobProcess.js +11 -11
- package/server/threads/threadHTTPServer.js +13 -13
- package/utility/scripts/restartHdb.js +6 -6
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
"use strict";var bw=Object.defineProperty;var a=(e,t)=>bw(e,"name",{value:t,configurable:!0});var f=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var os=f((wX,ww)=>{ww.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 m=f((CX,Uh)=>{"use strict";var Ut=require("path"),Cw=require("fs");function Lw(){let e=__dirname;for(;!Cw.existsSync(Ut.join(e,"package.json"));){let t=Ut.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(Lw,"getHDBPackageRoot");var Cr=Lw(),mh="js",ba=mh,yw="harperdb-config.yaml",Uw="defaultConfig.yaml",Mw="hdb",Rh=`harperdb.${ba}`,Ah=`customFunctionsServer.${ba}`,Dw=`restartHdb.${ba}`,hu="HarperDB",Ia="Custom Functions",wa="Clustering Hub",Ca="Clustering Leaf",Pw="Clustering Ingest Service",Bw="Clustering Reply Service",vw="foreground.pid",Hw={HDB:hu,CLUSTERING_HUB:wa,CLUSTERING_LEAF:Ca,CLUSTERING_INGEST_SERVICE:Pw,CLUSTERING_REPLY_SERVICE:Bw,CUSTOM_FUNCTIONS:Ia,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},qw={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},Gw={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},Fw={harperdb:hu,"clustering hub":wa,"clustering leaf":Ca,"custom functions":Ia,custom_functions:Ia,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},xw={CLUSTERING_HUB_PROC_DESCRIPTOR:wa,CLUSTERING_LEAF_PROC_DESCRIPTOR:Ca},du={HDB:Ut.join(Cr,"server/harperdb"),CUSTOM_FUNCTIONS:Ut.join(Cr,"server/customFunctions"),CLUSTERING_HUB:Ut.join(Cr,"server/nats"),CLUSTERING_LEAF:Ut.join(Cr,"server/nats")},Vw={HDB:Ut.join(du.HDB,Rh),CUSTOM_FUNCTIONS:Ut.join(du.CUSTOM_FUNCTIONS,Ah)},kw={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Ut.join(Cr,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Ut.join(Cr,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Ut.join(Cr,"launchServiceScripts/launchUpdateNodes4-0-0.js")},$w={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},ph="support@harperdb.io",Yw="customer-success@harperdb.io",gh=1,Kw=4141,Nh="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",Ww="https://www.harperdb.io/product",Qw=`For support, please submit a request at ${Nh} or contact ${ph}`,Oh=`For license support, please contact ${Yw}`,Jw="None of the specified records were found.",Xw="hash attribute not found",Zw=`Your current license only supports ${gh} role. ${Oh}`,zw="Your current license only supports 3 connections to a node.",jw="127.0.0.1",eC=1,tC=/^\.$/,rC=/^\.\.$/,sC="U+002E",nC=/\//g,iC="U+002F",aC=/U\+002F/g,oC=/^U\+002E$/,cC=/^U\+002EU\+002E$/,_C="d",uC=999999,lC="*",EC="--max-old-space-size=",dC="system",hC="__hdb_hash",fC=".harperdb",SC=".hdb",TC="keys",mC="hdb_boot_properties.file",RC=".updateConfig.json",AC="SIGTSTP",pC=24,gC=6e4,NC=448,OC="blob",IC="trash",bC="schema",wC="transactions",CC=".count",LC="id",yC="PROCESS_NAME",Ih={SETTINGS_PATH_KEY:"settings_path"},bh=require("lodash"),UC={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"},MC={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},DC={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},PC={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"},BC={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"},nt="hdb_internal:",vC={CREATE_SCHEMA:nt+"create_schema",CREATE_TABLE:nt+"create_table",CREATE_ATTRIBUTE:nt+"create_attribute",ADD_USER:nt+"add_user",ALTER_USER:nt+"alter_user",DROP_USER:nt+"drop_user",HDB_NODES:nt+"hdb_nodes",HDB_USERS:nt+"hdb_users",HDB_WORKERS:nt+"hdb_workers",CATCHUP:nt+"catchup",SCHEMA_CATCHUP:nt+"schema_catchup",WORKER_ROOM:nt+"cluster_workers"},HC={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"},qC="060493.ks",GC=".license",FC={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},w={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",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",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",PURGE_STREAM:"purge_stream"},xC={CSV:".csv",JSON:".json"},VC={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},kC={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Gn={};Gn[w.INSERT]=w.INSERT;Gn[w.UPDATE]=w.UPDATE;Gn[w.UPSERT]=w.UPSERT;Gn[w.DELETE]=w.DELETE;var J=Object.create(null);J[w.DESCRIBE_ALL]=w.DESCRIBE_ALL;J[w.DESCRIBE_TABLE]=w.DESCRIBE_TABLE;J[w.DESCRIBE_SCHEMA]=w.DESCRIBE_SCHEMA;J[w.READ_LOG]=w.READ_LOG;J[w.ADD_NODE]=w.ADD_NODE;J[w.LIST_USERS]=w.LIST_USERS;J[w.LIST_ROLES]=w.LIST_ROLES;J[w.USER_INFO]=w.USER_INFO;J[w.SQL]=w.SQL;J[w.GET_JOB]=w.GET_JOB;J[w.SEARCH_JOBS_BY_START_DATE]=w.SEARCH_JOBS_BY_START_DATE;J[w.DELETE_FILES_BEFORE]=w.DELETE_FILES_BEFORE;J[w.EXPORT_LOCAL]=w.EXPORT_LOCAL;J[w.EXPORT_TO_S3]=w.EXPORT_TO_S3;J[w.CLUSTER_STATUS]=w.CLUSTER_STATUS;J[w.REMOVE_NODE]=w.REMOVE_NODE;J[w.RESTART]=w.RESTART;J[w.CUSTOM_FUNCTIONS_STATUS]=w.CUSTOM_FUNCTIONS_STATUS;J[w.GET_CUSTOM_FUNCTIONS]=w.GET_CUSTOM_FUNCTIONS;J[w.GET_CUSTOM_FUNCTION]=w.GET_CUSTOM_FUNCTION;J[w.SET_CUSTOM_FUNCTION]=w.SET_CUSTOM_FUNCTION;J[w.DROP_CUSTOM_FUNCTION]=w.DROP_CUSTOM_FUNCTION;J[w.ADD_CUSTOM_FUNCTION_PROJECT]=w.ADD_CUSTOM_FUNCTION_PROJECT;J[w.DROP_CUSTOM_FUNCTION_PROJECT]=w.DROP_CUSTOM_FUNCTION_PROJECT;J[w.PACKAGE_CUSTOM_FUNCTION_PROJECT]=w.PACKAGE_CUSTOM_FUNCTION_PROJECT;J[w.DEPLOY_CUSTOM_FUNCTION_PROJECT]=w.DEPLOY_CUSTOM_FUNCTION_PROJECT;var $C={RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help"},YC={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},wh={HDB_ROOT_KEY:"HDB_ROOT",SERVER_PORT_KEY:"SERVER_PORT",CERT_KEY:"CERTIFICATE",PRIVATE_KEY_KEY:"PRIVATE_KEY",HTTP_SECURE_ENABLED_KEY:"HTTPS_ON",CORS_ENABLED_KEY:"CORS_ON",CORS_WHITELIST_KEY:"CORS_WHITELIST",LOG_LEVEL_KEY:"LOG_LEVEL",LOGGER_KEY:"LOGGER",LOG_PATH_KEY:"LOG_PATH",LOG_ROTATE:"LOG_ROTATE",LOG_ROTATE_MAX_SIZE:"LOG_ROTATE_MAX_SIZE",LOG_ROTATE_RETAIN:"LOG_ROTATE_RETAIN",LOG_ROTATE_COMPRESS:"LOG_ROTATE_COMPRESS",LOG_ROTATE_DATE_FORMAT:"LOG_ROTATE_DATE_FORMAT",LOG_ROTATE_ROTATE_MODULE:"LOG_ROTATE_ROTATE_MODULE",LOG_ROTATE_WORKER_INTERVAL:"LOG_ROTATE_WORKER_INTERVAL",LOG_ROTATE_ROTATE_INTERVAL:"LOG_ROTATE_ROTATE_INTERVAL",LOG_ROTATE_TIMEZONE:"LOG_ROTATE_TIMEZONE",LOG_DAILY_ROTATE_KEY:"LOG_DAILY_ROTATE",LOG_MAX_DAILY_FILES_KEY:"LOG_MAX_DAILY_FILES",PROPS_ENV_KEY:"NODE_ENV",SETTINGS_PATH_KEY:"settings_path",CLUSTERING_PORT_KEY:"CLUSTERING_PORT",CLUSTERING_NODE_NAME_KEY:"NODE_NAME",CLUSTERING_ENABLED_KEY:"CLUSTERING",ALLOW_SELF_SIGNED_SSL_CERTS:"ALLOW_SELF_SIGNED_SSL_CERTS",MAX_HDB_PROCESSES:"MAX_HDB_PROCESSES",INSTALL_USER:"install_user",CLUSTERING_USER_KEY:"CLUSTERING_USER",MAX_CLUSTERING_PROCESSES:"MAX_CLUSTERING_PROCESSES",SERVER_TIMEOUT_KEY:"SERVER_TIMEOUT_MS",SERVER_KEEP_ALIVE_TIMEOUT_KEY:"SERVER_KEEP_ALIVE_TIMEOUT",SERVER_HEADERS_TIMEOUT_KEY:"SERVER_HEADERS_TIMEOUT",DISABLE_TRANSACTION_LOG_KEY:"DISABLE_TRANSACTION_LOG",OPERATION_TOKEN_TIMEOUT_KEY:"OPERATION_TOKEN_TIMEOUT",REFRESH_TOKEN_TIMEOUT_KEY:"REFRESH_TOKEN_TIMEOUT",CUSTOM_FUNCTIONS_ENABLED_KEY:"CUSTOM_FUNCTIONS",CUSTOM_FUNCTIONS_PORT_KEY:"CUSTOM_FUNCTIONS_PORT",CUSTOM_FUNCTIONS_DIRECTORY_KEY:"CUSTOM_FUNCTIONS_DIRECTORY",MAX_CUSTOM_FUNCTION_PROCESSES:"MAX_CUSTOM_FUNCTION_PROCESSES",LOG_TO_FILE:"LOG_TO_FILE",LOG_TO_STDSTREAMS:"LOG_TO_STDSTREAMS",RUN_IN_FOREGROUND:"RUN_IN_FOREGROUND",LOCAL_STUDIO_ON:"LOCAL_STUDIO_ON",STORAGE_WRITE_ASYNC:"STORAGE_WRITE_ASYNC"},KC=bh.invert(wh),S={CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",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",HTTP_SESSION_AFFINITY:"http_sessionAffinity",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",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",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",SCHEMAS:"schemas"},Ch={settings_path:Ih.SETTINGS_PATH_KEY,hdb_root_key:S.ROOTPATH,hdb_root:S.ROOTPATH,server_port_key:S.OPERATIONSAPI_NETWORK_PORT,server_port:S.OPERATIONSAPI_NETWORK_PORT,cert_key:S.OPERATIONSAPI_TLS_CERTIFICATE,certificate:S.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:S.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:S.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:S.OPERATIONSAPI_NETWORK_HTTPS,https_on:S.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:S.OPERATIONSAPI_NETWORK_CORS,cors_on:S.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:S.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:S.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:S.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:S.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:S.LOGGING_LEVEL,log_level:S.LOGGING_LEVEL,log_path_key:S.LOGGING_ROOT,log_path:S.LOGGING_ROOT,props_env_key:S.OPERATIONSAPI_NODEENV,node_env:S.OPERATIONSAPI_NODEENV,clustering_node_name_key:S.CLUSTERING_NODENAME,node_name:S.CLUSTERING_NODENAME,clustering_enabled_key:S.CLUSTERING_ENABLED,clustering:S.CLUSTERING_ENABLED,max_http_threads:S.HTTP_THREADS,max_hdb_processes:S.HTTP_THREADS,server_timeout_key:S.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:S.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:S.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:S.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:S.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:S.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:S.LOGGING_AUDITLOG,disable_transaction_log:S.LOGGING_AUDITLOG,operation_token_timeout_key:S.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:S.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:S.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:S.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_enabled_key:S.CUSTOMFUNCTIONS_ENABLED,custom_functions:S.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:S.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:S.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:S.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:S.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:S.HTTP_THREADS,log_to_file:S.LOGGING_FILE,log_to_stdstreams:S.LOGGING_STDSTREAMS,run_in_foreground:S.OPERATIONSAPI_FOREGROUND,local_studio_on:S.LOCALSTUDIO_ENABLED,clustering_port:S.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:S.CLUSTERING_USER,clustering_enabled:S.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:S.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:S.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:S.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:S.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:S.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:S.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:S.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:S.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:S.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:S.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:S.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:S.CLUSTERING_NODENAME,clustering_tls_certificate:S.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:S.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:S.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:S.CLUSTERING_TLS_INSECURE,clustering_tls_verify:S.CLUSTERING_TLS_VERIFY,clustering_loglevel:S.CLUSTERING_LOGLEVEL,clustering_republishmessages:S.CLUSTERING_REPUBLISHMESSAGES,customfunctions_enabled:S.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:S.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:S.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:S.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:S.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:S.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:S.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:S.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:S.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:S.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:S.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:S.CUSTOMFUNCTIONS_NODEENV,http_threads:S.HTTP_THREADS,http_session_affinity:S.HTTP_SESSION_AFFINITY,customfunctions_processes:S.HTTP_THREADS,customfunctions_root:S.CUSTOMFUNCTIONS_ROOT,localstudio_enabled:S.LOCALSTUDIO_ENABLED,logging_file:S.LOGGING_FILE,logging_level:S.LOGGING_LEVEL,logging_root:S.LOGGING_ROOT,logging_rotation_enabled:S.LOGGING_ROTATION_ENABLED,logging_rotation_compress:S.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:S.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:S.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:S.LOGGING_ROTATION_PATH,logging_stdstreams:S.LOGGING_STDSTREAMS,logging_auditlog:S.LOGGING_AUDITLOG,operationsapi_authentication_operationtokentimeout:S.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:S.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:S.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:S.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:S.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:S.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:S.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:S.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:S.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:S.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:S.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:S.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:S.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:S.OPERATIONSAPI_NODEENV,operationsapi_root:S.ROOTPATH,schemas:S.SCHEMAS,storage_path:S.STORAGE_PATH};for(let e in S){let t=S[e];Ch[t.toLowerCase()]=t}var WC={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},QC={csv_file_load:"csv_file_load",csv_data_load:w.CSV_DATA_LOAD,csv_url_load:w.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"},JC={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"},XC={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},ZC={FILE_SYSTEM:"fs",LMDB:"lmdb"},zC={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},jC={DEVELOPMENT:8192,DEFAULT:512},eL={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"},tL={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"},rL={ENOENT:"ENOENT",EACCES:"EACCES"},Lh={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},sL="__clustering__",nL=Object.values(Lh),iL=15984864e5,yh={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},aL=bh.invert(yh),oL={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"},cL=111,_L=`\r
|
|
2
|
-
`,
|
|
3
|
-
`}a(cr,"createLogRecord");function kn(e){ar
|
|
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:qL.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(VL,"findPs")});var Ue=f((vX,Xh)=>{"use strict";var kL="__dbis__",$L="__environment_name__",YL="__dbi_defintion__",KL={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"},WL=["__createdtime__","__updatedtime__"],QL="\uFFFF",Jh={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},JL=Object.values(Jh);Xh.exports={INTERNAL_DBIS_NAME:kL,DBI_DEFINITION_NAME:YL,SEARCH_TYPES:KL,TIMESTAMP_NAMES:WL,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:$L,TRANSACTIONS_DBI_NAMES_ENUM:Jh,TRANSACTIONS_DBIS:JL,OVERFLOW_MARKER:QL}});var it=f((HX,af)=>{"use strict";var Zh=m(),zh=Ue(),jh={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},ef=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),tf={500:ef("There was an error processing your request."),400:"Invalid request"},XL=tf[jh.INTERNAL_SERVER_ERROR],ZL={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.`},zL={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},jL={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"},ey={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${zh.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${zh.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"},ty={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Zh.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 ${Zh.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"},rf={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"},ry={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."},sy={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`},ny={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"},iy={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},ay={ALTER_USER_DUP_ROLES:e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,ALTER_USER_ROLE_NOT_FOUND:e=>`Update failed. Requested '${e}' role not found.`,DUP_ROLES_FOUND:e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,ROLE_NAME_NOT_FOUND:e=>`${e} role not found`,USER_ALREADY_EXISTS:e=>`User ${e} already exists`,USER_NOT_EXIST:e=>`User ${e} does not exist`},sf={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.`},nf={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:e=>`ITC server received invalid event type: ${e}`},oy={FUNCTION_STATUS:"Error getting custom function status, check the log for more details",GET_FUNCTIONS:"Error getting custom functions, check the log for more details",GET_FUNCTION:"Error getting custom function, check the log for more details",SET_FUNCTION:"Error setting custom function, check the log for more details",NO_PROJECT:"Project does not exist. Create one using 'add_custom_function_project'",PROJECT_EXISTS:"Project already exists",VALIDATION_ERR:"Error validating request, check the log for more details",NO_FILE:"File does not exist",BAD_FILE_NAME:"File name can only contain alphanumeric, dash and underscore characters",BAD_PROJECT_NAME:"Project name can only contain alphanumeric, dash and underscores characters",BAD_PACKAGE:"Packaged project must be base64-encoded tar file of project directory",DROP_FUNCTION:"Error dropping custom function, check the log for more details",ADD_FUNCTION:"Error adding custom function project, check the log for more details",DROP_FUNCTION_PROJECT:"Error dropping custom function project, check the log for more details",BAD_FILE_PATH:"Filepath must be valid, and contain the name of the tarball you wish to write",NOT_ENABLED:"Custom functions is not enabled, to enable set customFunctions enabled to true in hdb/harperdb-config.yaml file."},cy={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},_y={...rf,...jL,...ZL,...ry,...sy,...ny,...iy,...ay,...ty,...sf,...nf,...oy,...cy,...zL};af.exports={CHECK_LOGS_WRAPPER:ef,HDB_ERROR_MSGS:_y,DEFAULT_ERROR_MSGS:tf,DEFAULT_ERROR_RESP:XL,HTTP_STATUS_CODES:jh,LMDB_ERRORS_ENUM:ey,AUTHENTICATION_ERROR_MSGS:rf,VALIDATION_ERROR_MSGS:sf,ITC_ERRORS:nf}});var L=f((GX,_f)=>{"use strict";var Qs=it(),uy=I(),ly=m(),$n=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,of),this.http_resp_code=s||Qs.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Qs.DEFAULT_ERROR_MSGS[s]?Qs.DEFAULT_ERROR_MSGS[s]:Qs.DEFAULT_ERROR_MSGS[Qs.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&uy[n](i)}};a($n,"HdbError");function of(e,t,r,s=ly.LOG_LEVELS.ERROR,n=null,i=!1){if(cf(e))return e;let o=new $n(e,t,r,s,n);return i&&delete o.stack,o}a(of,"handleHDBError");function cf(e){return e.__proto__.constructor.name===$n.name}a(cf,"isHDBError");_f.exports={isHDBError:cf,handleHDBError:of,hdb_errors:Qs}});var b=f((VX,Nf)=>{"use strict";var cs=require("path"),Ey=require("fs-extra"),De=I(),uf=require("fs-extra"),Yn=require("os"),dy=require("net"),hy=require("recursive-iterator"),Me=m(),hf=Qh(),lf=require("papaparse"),Pa=require("moment"),{inspect:fy}=require("util"),Ef=require("is-number"),xX=require("lodash"),{hdb_errors:Ba}=L(),ff=require("util").promisify(setTimeout),Sy=100,Ty=5,my="",Ry=4,df={true:!0,false:!1,undefined:null,null:null,NaN:NaN};Nf.exports={isEmpty:at,isEmptyOrZeroLength:kt,arrayHasEmptyValues:gy,arrayHasEmptyOrZeroLengthValues:Ny,buildFolderPath:Oy,isBoolean:Sf,errorizeMessage:Ay,stripFileExtension:by,autoCast:wy,autoCastJSON:Tf,autoCastJSONDeep:gu,removeDir:Cy,compareVersions:Ly,isCompatibleDataVersion:yy,escapeRawValue:Uy,unescapeValue:My,stringifyProps:Dy,timeoutPromise:By,isClusterOperation:Hy,getClusterUser:Gy,checkGlobalSchemaTable:qy,getHomeDir:Rf,getPropsFilePath:Py,promisifyPapaParse:Fy,removeBOM:Af,createEventPromise:xy,checkProcessRunning:Vy,checkSchemaTableExist:ky,checkSchemaExists:pf,checkTableExists:gf,getStartOfTomorrowInSeconds:$y,getLimitKey:Yy,isObject:Iy,isNotEmptyAndHasValue:py,autoCasterIsNumberCheck:mf,backtickASTSchemaItems:Ky,isPortTaken:vy,stopProcess:Wy,createForkArgs:Qy,autoCastBoolean:Jy,async_set_timeout:ff,getTableHashAttribute:Xy,doesSchemaExist:Zy,doesTableExist:zy,stringifyObj:jy,ms_to_time:eU,changeExtension:tU,PACKAGE_ROOT:Me.PACKAGE_ROOT};function Ay(e){return e instanceof Error?e:new Error(e)}a(Ay,"errorizeMessage");function at(e){return e==null}a(at,"isEmpty");function py(e){return!at(e)&&(e||e===0||e===""||Sf(e))}a(py,"isNotEmptyAndHasValue");function kt(e){return at(e)||e.length===0||e.size===0}a(kt,"isEmptyOrZeroLength");function gy(e){if(at(e))return!0;for(let t=0;t<e.length;t++)if(at(e[t]))return!0;return!1}a(gy,"arrayHasEmptyValues");function Ny(e){if(kt(e))return!0;for(let t=0;t<e.length;t++)if(kt(e[t]))return!0;return!1}a(Ny,"arrayHasEmptyOrZeroLengthValues");function Oy(...e){try{return e.join(cs.sep)}catch{console.error(e)}}a(Oy,"buildFolderPath");function Sf(e){return at(e)?!1:e===!0||e===!1}a(Sf,"isBoolean");function Iy(e){return at(e)?!1:typeof e=="object"}a(Iy,"isObject");function by(e){return kt(e)?my:e.slice(0,-Ry)}a(by,"stripFileExtension");function wy(e){return at(e)||e===""||typeof e!="string"?e:df[e]!==void 0?df[e]:mf(e)===!0?Number(e):e}a(wy,"autoCast");function Tf(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(Tf,"autoCastJSON");function gu(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=gu(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=gu(r);s!==r&&(e[t]=s)}return e}else return Tf(e)}a(gu,"autoCastJSONDeep");function mf(e){if(e.startsWith("0.")&&Ef(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Ef(e))}a(mf,"autoCasterIsNumberCheck");async function Cy(e){if(kt(e))throw new Error(`Directory path: ${e} does not exist`);try{await uf.emptyDir(e),await uf.remove(e)}catch(t){throw De.error(`Error removing files in ${e} -- ${t}`),t}}a(Cy,"removeDir");function Ly(e,t){if(kt(e)){De.info("Invalid current version sent as parameter.");return}if(kt(t)){De.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),_=Math.min(o.length,c.length);for(let u=0;u<_;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(Ly,"compareVersions");function yy(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(yy,"isCompatibleDataVersion");function Uy(e){if(at(e))return e;let t=String(e);return t==="."?Me.UNICODE_PERIOD:t===".."?Me.UNICODE_PERIOD+Me.UNICODE_PERIOD:t.replace(Me.FORWARD_SLASH_REGEX,Me.UNICODE_FORWARD_SLASH)}a(Uy,"escapeRawValue");function My(e){if(at(e))return e;let t=String(e);return t===Me.UNICODE_PERIOD?".":t===Me.UNICODE_PERIOD+Me.UNICODE_PERIOD?"..":String(e).replace(Me.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(My,"unescapeValue");function Dy(e,t){if(at(e))return De.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+Yn.EOL}!kt(s)&&s[0]===";"?r+=" "+s+n+Yn.EOL:kt(s)||(r+=s+"="+n+Yn.EOL)}catch{De.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(Dy,"stringifyProps");function Rf(){let e;try{e=Yn.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Rf,"getHomeDir");function Py(){let e=cs.join(Rf(),Me.HDB_HOME_DIR_NAME,Me.BOOT_PROPS_FILE_NAME);return Ey.existsSync(e)||(e=cs.join(__dirname,"../","hdb_boot_properties.file")),e}a(Py,"getPropsFilePath");function By(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(By,"timeoutPromise");async function vy(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=dy.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(vy,"isPortTaken");function Hy(e){try{return Me.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){De.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Hy,"isClusterOperation");function qy(e,t){if(!global.hdb_schema[e])return Ba.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return Ba.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(qy,"checkGlobalSchemaTable");function Gy(e,t){if(at(t)){De.warn("No CLUSTERING_USER defined, clustering disabled");return}if(at(e)||kt(e)){De.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){De.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){De.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Gy,"getClusterUser");function Fy(){lf.parsePromise=function(e,t){return new Promise(function(r,s){lf.parse(e,{header:!0,transformHeader:Af,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(Fy,"promisifyPapaParse");function Af(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Af,"removeBOM");function xy(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;De.info(`Got cluster status event response: ${fy(n)}`);try{i.cancel()}catch{De.error("Error trying to cancel timeout.")}s(n)})})}a(xy,"createEventPromise");async function Vy(e){let t=!0,r=0;do await ff(Sy*r++),(await hf.findPs(e)).length>0&&(t=!1);while(t&&r<Ty);if(t)throw new Error(`process ${e} was not started`)}a(Vy,"checkProcessRunning");function ky(e,t){let r=pf(e);if(r)return r;let s=gf(e,t);if(s)return s}a(ky,"checkSchemaTableExist");function pf(e){if(!global.hdb_schema[e])return Ba.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(pf,"checkSchemaExists");function gf(e,t){if(!global.hdb_schema[e][t])return Ba.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(gf,"checkTableExists");function $y(){let e=Pa().utc().add(1,Me.MOMENT_DAYS_TAG).startOf(Me.MOMENT_DAYS_TAG).unix(),t=Pa().utc().unix();return e-t}a($y,"getStartOfTomorrowInSeconds");function Yy(){return Pa().utc().format("DD-MM-YYYY")}a(Yy,"getLimitKey");function Ky(e){try{let t=new hy(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){De.error("Got an error back ticking items."),De.error(t)}}a(Ky,"backtickASTSchemaItems");async function Wy(e){let t=Yn.userInfo();(await hf.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),De.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(Wy,"stopProcess");function Qy(e){return[e]}a(Qy,"createForkArgs");function Jy(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Jy,"autoCastBoolean");function Xy(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(Xy,"getTableHashAttribute");function Zy(e){return global?.hdb_schema?.[e]!==void 0}a(Zy,"doesSchemaExist");function zy(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(zy,"doesTableExist");function jy(e){try{return JSON.stringify(e)}catch{return e}}a(jy,"stringifyObj");function eU(e){let t=Pa.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(eU,"ms_to_time");function tU(e,t){let r=cs.basename(e,cs.extname(e));return cs.join(cs.dirname(e),r+t)}a(tU,"changeExtension")});var vf=f((YX,Bf)=>{"use strict";var Nu=require("recursive-iterator"),rU=require("alasql"),Ou=require("clone"),Of=b(),{handleHDBError:If,hdb_errors:sU}=L(),{HDB_ERROR_MSGS:bf,HTTP_STATUS_CODES:wf}=sU,nU=["DISTINCT_ARRAY"],Cf=Symbol("validateTables"),Iu=Symbol("validateTable"),$X=Symbol("getAllColumns"),Lf=Symbol("validateAllColumns"),va=Symbol("findColumn"),yf=Symbol("validateOrderBy"),Kn=Symbol("validateSegment"),bu=Symbol("validateColumn"),Uf=Symbol("setColumnsForTable"),Mf=Symbol("checkColumnsForAsterisk"),Df=Symbol("validateGroupBy"),Pf=Symbol("hasColumns"),Ha=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Cf](),this[Mf](),this[Lf]()}[Cf](){if(this[Pf]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Iu](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Iu](t.table)})}}[Pf](){let t=!1,r=new Nu(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Iu](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw If(new Error,bf.SCHEMA_NOT_FOUND(t.databaseid),wf.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw If(new Error,bf.TABLE_NOT_FOUND(t.databaseid,t.tableid),wf.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=Ou(s);n.table=Ou(t),this.attributes.push(n)})}[va](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)}[Mf](){let t=new Nu(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Uf](r.tableid)}[Uf](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new rU.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Lf](){this[Kn](this.statement.columns,!1),this[Kn](this.statement.joins,!1),this[Kn](this.statement.where,!1),this[Df](this.statement.group,!1),this[Kn](this.statement.order,!0)}[Kn](t,r){if(!t)return;let s=new Nu(t),n=[];for(let{node:i,path:o}of s)!Of.isEmpty(i)&&!Of.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[yf](i):n.push(this[bu](i)));return n}[Df](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&nU.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Ou(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[va](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[va](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[yf](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[bu](t)}[bu](t){let r=this[va](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(Ha,"SelectValidator");Bf.exports=Ha});var wu=f((WX,Hf)=>{"use strict";var qa=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(qa,"BridgeMethods");Hf.exports=qa});var _s=f((ZX,kf)=>{"use strict";var qf=it().LMDB_ERRORS_ENUM,JX=require("lmdb"),iU=Ue(),XX=require("buffer").Buffer,{OVERFLOW_MARKER:Gf,MAX_SEARCH_KEY_LENGTH:Ga}=iU,Ff=["number","string","symbol","boolean","bigint"];function aU(e){if(e=e?.database||e,!e)throw new Error(qf.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(qf.INVALID_ENVIRONMENT)}a(aU,"validateEnv");function oU(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(oU,"stringifyData");function cU(e){return e instanceof Date?e.valueOf():e}a(cU,"convertKeyValueToWrite");function _U(e){if(e==null)return;if(Ff.includes(typeof e))return e.length>Ga?[e.slice(0,Ga)+Gf]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];Ff.includes(typeof n)&&(n.length>Ga?t.push(n.slice(0,Ga)+Gf):t.push(n))}}return t}a(_U,"getIndexedValues");var Fa=0,xf=0;function Vf(){xf=Date.now()-performance.now()}a(Vf,"adjustStartTime");Vf();var uU=6e4;setInterval(Vf,uU).unref();function lU(){let e=performance.now()+xf;return e>Fa?(Fa=e,e):(Fa+=488e-6,Fa)}a(lU,"getNextMonotonicTime");kf.exports={validateEnv:aU,stringifyData:oU,convertKeyValueToWrite:cU,getNextMonotonicTime:lU,getIndexedValues:_U}});var Yf=f((jX,$f)=>{"use strict";var xa=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(xa,"DBIDefinition");$f.exports=xa});var Wf=f((tZ,Kf)=>{"use strict";var EU={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))},dU="certificate.pem",hU="privateKey.pem",fU="ca.pem";Kf.exports={CERTIFICATE_VALUES:EU,CERTIFICATE_PEM_NAME:dU,PRIVATEKEY_PEM_NAME:hU,CA_PEM_NAME:fU}});var te=f((rZ,Qf)=>{"use strict";var $e=require("validate.js");$e.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||$e.validators.type.checks[t](e)?null:` must be a '${t}' value`};$e.validators.type.checks={Object:function(e){return $e.isObject(e)&&!$e.isArray(e)},Array:$e.isArray,Integer:$e.isInteger,Number:$e.isNumber,String:$e.isString,Date:$e.isDate,Boolean:function(e){return typeof e=="boolean"}};$e.validators.hasValidFileExt=function(e,t){return $e.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};Qf.exports={validateObject:SU,validateObjectAsync:TU,validateBySchema:mU};function SU(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=$e(e,t,{format:"flat"});return r?new Error(r):null}a(SU,"validateObject");async function TU(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await $e.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(TU,"validateObjectAsync");function mU(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(mU,"validateBySchema")});var Lu=f((iZ,zf)=>{"use strict";var RU=require("fs-extra"),P=require("joi"),AU=require("os"),{boolean:re,string:_r,number:Mt,array:Cu}=P.types(),{totalmem:Jf}=require("os"),Wn=require("path"),pU=I(),ka=b(),nZ=Wf(),gU=m(),NU=te(),Xf="log",OU="custom_functions",IU="Invalid logging.rotation.maxSize unit. Available units are G, M or K",bU="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",wU="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",CU="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",LU="rootPath config parameter is undefined",yU="clustering.enabled config parameter is undefined",us=Mt.min(0).required(),$a=Cu.items({host:_r.required(),port:us}).empty(null),yr;zf.exports={configValidator:UU,routesValidator:HU,route_constraints:$a};function UU(e){if(yr=e.rootPath,ka.isEmpty(yr))throw LU;let t=re.required(),r=P.valid("production","development").required(),s=Mt.min(1).max(1e3).empty(null).default(vU),n=_r.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Va),i=P.custom(MU).messages({"any.custom":"{:#label} {:#error}"}),o=_r.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=P.string().empty(null).default(Va),_=P.custom(DU).empty(null).default(Va),u=e.clustering?.enabled;if(ka.isEmpty(u))throw yU;let l;return u===!0?l=P.object({enabled:t,hubServer:P.object({cluster:P.object({name:P.required().empty(null),network:P.object({port:us,routes:$a}).required()}).required(),leafNodes:P.object({network:P.object({port:us}).required()}).required(),network:P.object({port:us}).required()}).required(),leafServer:P.object({network:P.object({port:us,routes:$a}).required(),streams:P.object({maxAge:Mt.min(120).allow(null).optional(),maxBytes:Mt.min(1).allow(null).optional(),maxMsgs:Mt.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:P.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:re.optional(),tls:P.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:re.required(),verify:re.optional()}),user:_r.optional().empty(null)}).required():l=P.object({enabled:t,tls:P.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:re.required()})}).required(),P.object({clustering:l,customFunctions:P.object({enabled:t,network:P.object({cors:re.required(),corsAccessList:Cu.required(),headersTimeout:Mt.min(1).required(),https:re.required(),keepAliveTimeout:Mt.min(1).required(),port:us,timeout:Mt.min(1).required()}),nodeEnv:r,root:n,tls:P.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:P.object({enabled:t}).required(),logging:P.object({file:re.required(),level:P.valid("notify","fatal","error","warn","info","debug","trace"),rotation:P.object({enabled:re.optional(),compress:re.optional(),interval:_r.custom(BU).optional().empty(null),maxSize:_r.custom(PU).optional().empty(null),path:_r.optional().empty(null).default(Va)}).required(),root:n,stdStreams:re.required(),auditLog:re.required()}).required(),operationsApi:P.object({authentication:P.object({operationTokenTimeout:P.required(),refreshTokenTimeout:P.required()}).required(),foreground:re.required(),network:P.object({cors:re.required(),corsAccessList:Cu.required(),headersTimeout:Mt.min(1).required(),https:re.required(),keepAliveTimeout:Mt.min(1).required(),port:us,timeout:Mt.min(1).required()}).required(),nodeEnv:r,tls:P.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:_r.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:P.object({threads:s}).required(),storage:P.object({writeAsync:re.required(),overlappingSync:re.optional(),caching:re.optional(),compression:re.optional(),noReadAhead:re.optional(),path:_,prefetchWrites:re.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(UU,"configValidator");function Zf(e){return RU.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Zf,"doesPathExist");function MU(e,t){if(e===null)return;let r=Zf(e);return r?t.message(r):e}a(MU,"validatePemFile");function DU(e,t){P.assert(e,_r.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Zf(e);if(r)return t.message(r)}a(DU,"validatePath");function PU(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(IU);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(wU):e}a(PU,"validateRotationMaxSize");function BU(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(bU);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(CU):e}a(BU,"validateRotationInterval");function vU(e,t){let r=t.state.path.join("."),s=AU.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Jf();return i=Math.round(Math.min(i,Jf())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),pU.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(vU,"setDefaultThreads");function Va(e,t){if(!ka.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(ka.isEmpty(yr))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Wn.join(yr,OU);case"logging.root":return Wn.join(yr,Xf);case"clustering.leafServer.streams.path":return Wn.join(yr,"clustering","leaf");case"storage.path":return Wn.join(yr,gU.SCHEMA_DIR_NAME);case"logging.rotation.path":return Wn.join(yr,Xf);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Va,"setDefaultRoot");function HU(e){let t=P.object({routes:$a});return NU.validateBySchema({routes:e},t)}a(HU,"routesValidator")});var lr=f((oZ,cS)=>{"use strict";var At=m(),ot=b(),Te=I(),{configValidator:qU,routesValidator:jf}=Lu(),Rt=require("fs-extra"),GU=require("yaml"),$t=require("path"),FU=require("is-number"),tS=require("properties-reader"),xU=require("lodash"),{handleHDBError:VU}=L(),{HTTP_STATUS_CODES:kU,HDB_ERROR_MSGS:Ya}=it(),$U=require("minimist"),{SCHEMAS_PARAM_CONFIG:Qn,CONFIG_PARAMS:Ur,CONFIG_PARAM_MAP:ur}=At,YU="Unable to get config value because config is uninitialized",KU="Config successfully initialized",WU="Error backing up config file",QU="Empty parameter sent to getConfigValue",rS=$t.join(At.PACKAGE_ROOT,"config","yaml",At.HDB_DEFAULT_CONFIG_FILE),JU="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",eS={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"},Ka,Ne;cS.exports={createConfigFile:XU,getDefaultConfig:ZU,getConfigValue:nS,initConfig:iS,flattenConfig:ls,updateConfigValue:aS,updateConfigObject:jU,getConfiguration:rM,setConfiguration:sM,readConfigFile:Du,getClusteringRoutes:nM,initOldConfig:oS,getConfigFromFile:iM};function XU(e){let t=Js(rS);Ka=ls(t.toJSON());let r;for(let o in e){let c=ur[o.toLowerCase()];if(c===Ur.SCHEMAS){r=e[o];continue}if(c!==void 0){let _=c.split("_"),u=yu(c,e[o]);try{t.setIn([..._],u)}catch(l){Te.error(l)}}}r&&sS(t,r),Mu(t);let s=t.toJSON();Ne=ls(s);let n=t.getIn(["rootPath"]),i=$t.join(n,At.HDB_CONFIG_FILE);Rt.createFileSync(i),Rt.writeFileSync(i,String(t)),Te.trace(`Config file written to ${i}`)}a(XU,"createConfigFile");function sS(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!ot.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Qn.TABLES))for(let i in s[n][Qn.TABLES])for(let o in s[n][Qn.TABLES][i]){let c=s[n][Qn.TABLES][i][o],_=[Ur.SCHEMAS,n,Qn.TABLES,i,o];e.hasIn(_)?e.setIn(_,c):e.addIn(_,c)}else for(let i in s[n]){let o=s[n][i],c=[Ur.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){Te.error("Error parsing schemas CLI/env config arguments",s)}}a(sS,"setSchemasConfig");function ZU(e){if(Ka===void 0){let r=Js(rS);Ka=ls(r.toJSON())}let t=ur[e.toLowerCase()];if(t!==void 0)return Ka[t.toLowerCase()]}a(ZU,"getDefaultConfig");function nS(e){if(ot.isEmpty(e)){Te.error(QU);return}if(Ne===void 0){Te.trace(YU);return}let t=ur[e.toLowerCase()];if(t!==void 0)return Ne[t.toLowerCase()]}a(nS,"getConfigValue");function Uu(e){let t=$U(process.argv);return t.ROOTPATH?$t.join(t.ROOTPATH,At.HDB_CONFIG_FILE):tS(e).get(At.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Uu,"getConfigFilePath");function iS(e=!1){if(Ne===void 0||e){let t=ot.getPropsFilePath();try{Rt.accessSync(t,Rt.constants.F_OK|Rt.constants.R_OK)}catch(i){throw Te.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}let r=Uu(t),s;if(r.includes("config/settings.js"))try{oS(r);return}catch(i){if(i.code!==At.NODE_ERROR_CODES.ENOENT)throw i}try{s=Js(r)}catch(i){if(i.code===At.NODE_ERROR_CODES.ENOENT){Te.trace(`HarperDB config file not found at ${r}.
|
|
5
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw Te.error(i),new Error(`Error reading HarperDB config file at ${r}`)}zU(s,r),Mu(s);let n=s.toJSON();if(Ne=ls(n),Ne.logging_rotation_rotate)for(let i in eS)Ne[i]&&Te.error(`Config ${eS[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Te.trace(KU)}}a(iS,"initConfig");function zU(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],$t.join(r,At.SCHEMA_DIR_NAME)),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],$t.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],$t.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(Te.trace("Updating config file with missing config params"),Rt.writeFileSync(t,String(e)))}a(zU,"checkForUpdatedConfig");function Mu(e){let t=e.toJSON(),r=qU(t);if(r.error)throw Ya.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(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams.path)}a(Mu,"validateConfig");function jU(e,t){Ne===void 0&&(Ne={});let r=ur[e.toLowerCase()];if(r===void 0){Te.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ne[r.toLowerCase()]=t}a(jU,"updateConfigObject");function aS(e,t,r=void 0,s=!1,n=!1){Ne===void 0&&iS();let i=nS(ur.hdb_root),o=$t.join(i,At.HDB_CONFIG_FILE),c=Js(o),_;if(r===void 0&&e.toLowerCase()===Ur.SCHEMAS)_=t;else if(r===void 0){let E=ur[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let d=E.split("_"),h=yu(E,t);c.setIn([...d],h)}else for(let E in r){let d=ur[E.toLowerCase()];if(d===Ur.SCHEMAS){_=r[E];continue}if(d!==void 0){let h=d.split("_"),T=yu(d,r[E]);try{c.setIn([...h],T)}catch(R){Te.error(R)}}}_&&sS(c,_),Mu(c);let u=c.getIn(["rootPath"]),l=$t.join(u,At.HDB_CONFIG_FILE);s===!0&&eM(o,u),Rt.writeFileSync(l,String(c)),n&&(Ne=ls(c.toJSON())),Te.trace(`Config parameter: ${e} updated with value: ${t}`)}a(aS,"updateConfigValue");function eM(e,t){try{let r=$t.join(t,"backup",`${At.HDB_CONFIG_FILE}.bak`);Rt.copySync(e,r),Te.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Te.error(WU),Te.error(r)}}a(eM,"backupConfigFile");var tM=["schemas"];function ls(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!tM.includes(r)){let s=ls(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(ls,"flattenConfig");function yu(e,t){if(e===Ur.CLUSTERING_NODENAME||e===Ur.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(FU(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||ot.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 ot.autoCast(t)}a(yu,"castConfigValue");function rM(){let e=ot.getPropsFilePath(),t=Uu(e);return Js(t).toJSON()}a(rM,"getConfiguration");async function sM(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return aS(void 0,void 0,n,!0),JU}catch(i){throw typeof i=="string"||i instanceof String?VU(i,i,kU.BAD_REQUEST,void 0,void 0,!0):i}}a(sM,"setConfiguration");function Du(){let e=ot.getPropsFilePath();try{Rt.accessSync(e,Rt.constants.F_OK|Rt.constants.R_OK)}catch(s){throw Te.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Uu(e);return Js(t).toJSON()}a(Du,"readConfigFile");function Js(e){return GU.parseDocument(Rt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Js,"parseYamlDoc");function nM(){let e=Du(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=ot.isEmptyOrZeroLength(t)?[]:t;let r=jf(t);if(r)throw Ya.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=ot.isEmptyOrZeroLength(s)?[]:s;let n=jf(s);if(n)throw Ya.CONFIG_VALIDATION(n.message);if(!ot.isEmptyOrZeroLength(s)&&!ot.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!ot.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Ya.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(nM,"getClusteringRoutes");function oS(e){let t=tS(e);Ne={};for(let r in ur){let s=t.get(r.toUpperCase());if(ot.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=ur[r].toLowerCase();n===Ur.LOGGING_ROOT?Ne[n]=$t.dirname(s):Ne[n]=s}return Ne}a(oS,"initOldConfig");function iM(e){let t=Du();return xU.get(t,e.replaceAll("_","."))}a(iM,"getConfigFromFile")});var B=f((_Z,uS)=>{"use strict";var Pu=require("fs-extra"),Yt=require("path"),aM=require("os"),oM=require("properties-reader"),Jn=I(),Xs=b(),y=m(),Wa=lr(),cM="Error initializing environment manager",Qa="BOOT_PROPS_FILE_PATH",_S=!1,_M={[y.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[y.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Er={};uS.exports={BOOT_PROPS_FILE_PATH:Qa,getHdbBasePath:uM,setHdbBasePath:lM,get:EM,initSync:hM,setProperty:k,initTestEnvironment:fM};function uM(){return Er[y.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(uM,"getHdbBasePath");function lM(e){Er[y.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(lM,"setHdbBasePath");function EM(e){let t=Wa.getConfigValue(e);return t===void 0?Er[e]:t}a(EM,"get");function k(e,t){_M[e]&&(Er[e]=t),Wa.updateConfigObject(e,t)}a(k,"setProperty");function dM(){let e;try{e=Xs.getPropsFilePath(),Pu.accessSync(e,Pu.constants.F_OK|Pu.constants.R_OK),_S=!0;let t=oM(e);return Er[y.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(y.HDB_SETTINGS_NAMES.INSTALL_USER),Er[y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Er[Qa]=e,!0}catch{return Jn.trace(`Environment manager found no properties file at ${e}`),!1}}a(dM,"doesPropFileExist");function hM(e=!1){try{(_S||dM())&&(Wa.initConfig(e),Er[y.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Wa.getConfigValue(y.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Jn.error(cM),Jn.error(t),console.error(t),process.exit(1)}}a(hM,"initSync");function fM(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,_=Yt.join(__dirname,"../../","unitTests");Er[Qa]=Yt.join(_,"hdb_boot_properties.file"),k(y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Yt.join(_,"settings.test")),k(y.HDB_SETTINGS_NAMES.INSTALL_USER,aM.userInfo().username),k(y.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Yt.join(_,"envDir","utility","keys","privateKey.pem")),k(y.HDB_SETTINGS_NAMES.CERT_KEY,Yt.join(_,"envDir","utility","keys","certificate.pem")),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Yt.join(_,"envDir","utility","keys","privateKey.pem")),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Yt.join(_,"envDir","utility","keys","certificate.pem")),k(y.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),k(y.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Yt.join(_,"envDir","log")),k(y.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),k(y.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),k(y.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),k(y.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Yt.join(_,"envDir")),k(y.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Xs.isEmpty(n)?!0:n),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Xs.isEmpty(n)?!0:n),k(y.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),k(y.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Xs.isEmpty(i)?!1:i),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Xs.isEmpty(i)?!1:i),k(y.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),k(y.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),k(y.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),k(y.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),k(y.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Yt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),k(y.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Xs.isEmpty(c)?!1:c),o&&(k("CORS_ACCESSLIST",o),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(k(y.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(k(y.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(k(y.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Qa}. Please check your boot props and settings files`;Jn.fatal(r),Jn.error(t)}}a(fM,"initTestEnvironment")});var dS=f((lZ,ES)=>{"use strict";var Bu=B(),lS=m();Bu.initSync();var SM=Bu.get(lS.CONFIG_PARAMS.STORAGE_COMPRESSION),TM=Bu.get(lS.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Ja=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=SM&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=TM&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(Ja,"OpenDBIObject");ES.exports=Ja});var SS=f((dZ,fS)=>{"use strict";var Zs=B(),Xn=m();Zs.initSync();var mM=Zs.get(Xn.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Zs.get(Xn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Zs.get(Xn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",hS=Zs.get(Xn.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),RM=Zs.get(Xn.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Xa=class{constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=mM,hS!==void 0&&(this.overlappingSync=hS),this.noReadAhead=RM}};a(Xa,"OpenEnvironmentObject");fS.exports=Xa});var X=f((fZ,NS)=>{"use strict";var vu=require("lmdb"),pt=require("fs-extra"),Dt=require("path"),za=_s(),TS=I(),Oe=it().LMDB_ERRORS_ENUM,ja=Yf(),Hu=dS(),mS=SS(),Mr=Ue(),Pt=Mr.INTERNAL_DBIS_NAME,RS=Mr.DBI_DEFINITION_NAME,AM="data.mdb",pM="lock.mdb",Zn=".mdb",gM="-lock",Za=class{constructor(t,r,s=!1){this.dbi=gt(t,r),this.key_type=this.dbi[Mr.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Mr.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new vu.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(Za,"TransactionCursor");function qu(e,t){if(e===void 0)throw new Error(Oe.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Oe.ENV_NAME_REQUIRED)}a(qu,"pathEnvNameValidation");async function Gu(e,t,r=!0){try{await pt.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Oe.INVALID_BASE_PATH):s}try{let s=Dt.join(e,t+Zn);return await pt.access(s,pt.constants.R_OK|pt.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await pt.access(Dt.join(e,t,AM),pt.constants.R_OK|pt.constants.F_OK),Dt.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Oe.INVALID_ENVIRONMENT)}else throw new Error(Oe.INVALID_ENVIRONMENT);throw s}}a(Gu,"validateEnvironmentPath");function eo(e,t){if(za.validateEnv(e),t===void 0)throw new Error(Oe.DBI_NAME_REQUIRED)}a(eo,"validateEnvDBIName");async function NM(e,t,r=!1,s=!1){qu(e,t),t=t.toString();try{return await Gu(e,t,s),Fu(e,t,r)}catch(n){if(n.message===Oe.INVALID_ENVIRONMENT){let i=Dt.join(e,t);await pt.mkdirp(s?i:e);let o=new mS(s?i:i+Zn,!1),c=vu.open(o);c.dbis=Object.create(null);let _=new Hu(!1);c.openDB(Pt,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=xu(e,t,r);return c[Mr.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=c,c}throw n}}a(NM,"createEnvironment");async function OM(e,t,r,s=!0){let n=await Fu(e,t);if(r===void 0)throw new Error(Oe.DESTINATION_PATH_REQUIRED);try{await pt.access(Dt.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(Oe.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(OM,"copyEnvironment");async function Fu(e,t,r=!1){qu(e,t),t=t.toString();let s=xu(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 Gu(e,t),i=Dt.join(e,t+Zn),o=n!=i,c=new mS(n,o),_=vu.open(c);_.dbis=Object.create(null);let u=pS(_);for(let l=0;l<u.length;l++)gt(_,u[l]);return _[Mr.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=_,_}a(Fu,"openEnvironment");async function IM(e,t,r=!1){qu(e,t),t=t.toString();let s=Dt.join(e,t+Zn),n=await Gu(e,t);if(global.lmdb_map!==void 0){let i=xu(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await AS(o),delete global.lmdb_map[i]}}await pt.remove(n),await pt.remove(n===s?n+gM:Dt.join(Dt.dirname(n),pM))}a(IM,"deleteEnvironment");async function AS(e){za.validateEnv(e);let t=e[Mr.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(AS,"closeEnvironment");function xu(e,t,r=!1){let n=`${Dt.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(xu,"getCachedEnvironmentName");function bM(e){za.validateEnv(e);let t=Object.create(null),r=gt(e,Pt);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Pt)try{t[s]=Object.assign(new ja,n)}catch{TS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(bM,"listDBIDefinitions");function pS(e){za.validateEnv(e);let t=[],r=gt(e,Pt);for(let{key:s}of r.getRange({start:!1}))s!==Pt&&t.push(s);return t}a(pS,"listDBIs");function wM(e,t){let s=gt(e,Pt).getEntry(t),n=new ja;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{TS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(wM,"getDBIDefinition");function gS(e,t,r,s=!1){if(eo(e,t),t=t.toString(),t===Pt)throw new Error(Oe.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return gt(e,t)}catch(n){if(n.message===Oe.DBI_DOES_NOT_EXIST){let i=new Hu(r,s===!0),o=e.openDB(t,i),c=new ja(r===!0,s);return o[RS]=c,gt(e,Pt).putSync(t,c),e.dbis[t]=o,o}throw n}}a(gS,"createDBI");function gt(e,t){if(eo(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Pt?r=wM(e,t):r=new ja,r===void 0)throw new Error(Oe.DBI_DOES_NOT_EXIST);let s;try{let n=new Hu(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(Oe.DBI_DOES_NOT_EXIST):n}return s[RS]=r,e.dbis[t]=s,s}a(gt,"openDBI");function CM(e,t){eo(e,t),t=t.toString();let r=gt(e,t),s=r.getStats();return r[Mr.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(CM,"statDBI");async function LM(e,t){try{let r=Dt.join(e,t+Zn);return(await pt.stat(r)).size}catch{throw new Error(Oe.INVALID_ENVIRONMENT)}}a(LM,"environmentDataSize");function yM(e,t){if(eo(e,t),t=t.toString(),t===Pt)throw new Error(Oe.CANNOT_DROP_INTERNAL_DBIS_NAME);gt(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],gt(e,Pt).removeSync(t)}a(yM,"dropDBI");function UM(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{gt(e,n)}catch(i){if(i.message===Oe.DBI_DOES_NOT_EXIST)gS(e,n,n!==t,n===t);else throw i}}}a(UM,"initializeDBIs");NS.exports={openDBI:gt,openEnvironment:Fu,createEnvironment:NM,listDBIs:pS,listDBIDefinitions:bM,createDBI:gS,dropDBI:yM,statDBI:CM,deleteEnvironment:IM,initializeDBIs:UM,TransactionCursor:Za,environmentDataSize:LM,copyEnvironment:OM,closeEnvironment:AS}});var IS=f((TZ,OS)=>{"use strict";var to=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(to,"InsertRecordsResponseObject");OS.exports=to});var wS=f((RZ,bS)=>{"use strict";var ro=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(ro,"UpdateRecordsResponseObject");bS.exports=ro});var LS=f((pZ,CS)=>{"use strict";var so=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(so,"UpsertRecordsResponseObject");CS.exports=so});var zs=f((bZ,MS)=>{"use strict";var MM=X(),DM=IS(),PM=wS(),BM=LS(),Kt=_s(),zn=it().LMDB_ERRORS_ENUM,vM=Ue(),dr=m(),HM=b(),qM=require("uuid"),NZ=require("lmdb"),{handleHDBError:GM,hdb_errors:FM}=L(),{OVERFLOW_MARKER:OZ,MAX_SEARCH_KEY_LENGTH:IZ}=vM,yS=B();yS.initSync();var no=yS.get(dr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Vu=dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Es=dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function xM(e,t,r,s,n=Kt.getNextMonotonicTime()){Ku(e,t,r,s),ku(e,t,r);let i=new DM,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];US(u,!0,n);let l=VM(e,t,r,u),E=u[t];o.push(l),c.push(E)}return $u(o,c,s,i,n)}a(xM,"insertRecords");function VM(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][dr.FUNC_VAL],s[o]=c)}let _=Kt.getIndexedValues(c),u=e.dbis[o];if(_){no&&u.prefetch(_.map(l=>({key:l,value:n})),io);for(let l=0,E=_.length;l<E;l++)u.put(_[l],n)}}no&&e.dbis[t].prefetch([n],io),e.dbis[t].put(n,s,s[Es])})}a(VM,"insertRecord");function kM(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(kM,"removeSkippedRecords");function US(e,t,r){let s=r>0;(s||!Number.isInteger(e[Es]))&&(e[Es]=r||(r=Kt.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Vu]))&&(e[Vu]=r||Kt.getNextMonotonicTime()):delete e[Vu]}a(US,"setTimestamps");function ku(e,t,r){r.indexOf(dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),MM.initializeDBIs(e,t,r)}a(ku,"initializeTransaction");async function $M(e,t,r,s,n=Kt.getNextMonotonicTime()){Ku(e,t,r,s),ku(e,t,r);let i=new PM,o=[],c=[],_=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],d;try{d=Yu(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),o.push(u);continue}c.push(d),_.push(E)}return $u(c,_,s,i,n,o)}a($M,"updateRecords");async function YM(e,t,r,s,n=Kt.getNextMonotonicTime()){try{Ku(e,t,r,s)}catch(_){throw GM(_,_.message,FM.HTTP_STATUS_CODES.BAD_REQUEST)}ku(e,t,r);let i=new BM,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;HM.isEmpty(u[t])?(l=qM.v4(),u[t]=l):l=u[t];let E=Yu(e,t,u,l,i,!1,n);o.push(E),c.push(l)}return $u(o,c,s,i,n)}a(YM,"upsertRecords");async function $u(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,_=o.length;c<_;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Kt.getNextMonotonicTime(),kM(r,i),s}a($u,"finalizeWrite");function Yu(e,t,r,s,n,i=!1,o){let c=e.dbis[t],_=c.getEntry(s),u=_?.value,l=u;if(!u){if(i)return!1;u={}}if(US(r,!l,o),Number.isInteger(r[Es])&&u[Es]>r[Es])return!1;l&&n.original_records.push(u);let E,d=a(()=>{for(let T in r){if(!r.hasOwnProperty(T)||T===t)continue;let R=r[T],g=e.dbis[T];if(g===void 0)continue;let H=u[T];if(typeof R=="function"){let q=R([[u]]);Array.isArray(q)&&(R=q[0][dr.FUNC_VAL],r[T]=R)}if(R===H)continue;let x=Kt.getIndexedValues(H);if(x){no&&g.prefetch(x.map(q=>({key:q,value:s})),io);for(let q=0,ye=x.length;q<ye;q++)g.remove(x[q],s)}if(x=Kt.getIndexedValues(R),x){no&&g.prefetch(x.map(q=>({key:q,value:s})),io);for(let q=0,ye=x.length;q<ye;q++)g.put(x[q],s)}}let h=Object.assign({},u,r);c.put(s,h,h[Es])},"do_put");return _?E=c.ifVersion(s,_.version,d):E=c.ifNoExists(s,d),E.then(h=>h?!0:Yu(e,t,r,s,n,i,o))}a(Yu,"updateUpsertRecord");function KM(e,t,r){if(Kt.validateEnv(e),t===void 0)throw new Error(zn.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(zn.WRITE_ATTRIBUTES_REQUIRED):new Error(zn.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(KM,"validateBasic");function Ku(e,t,r,s){if(KM(e,t,r),!Array.isArray(s))throw s===void 0?new Error(zn.RECORDS_REQUIRED):new Error(zn.RECORDS_MUST_BE_ARRAY)}a(Ku,"validateWrite");function io(){}a(io,"noop");MS.exports={insertRecords:xM,updateRecords:$M,upsertRecords:YM}});var j=f((CZ,qS)=>{"use strict";var si=m(),WM=b(),Ye=B(),ni=require("path"),QM=require("minimist"),DS=require("fs-extra"),PS=require("lodash");Ye.initSync();var{CONFIG_PARAMS:Dr,SCHEMAS_PARAM_CONFIG:jn,SYSTEM_SCHEMA_NAME:ao}=si,ei,ti,ri;function BS(){if(ei!==void 0)return ei;if(Ye.getHdbBasePath()!==void 0)return ei=Ye.get(Dr.STORAGE_PATH)||ni.join(Ye.getHdbBasePath(),si.SCHEMA_DIR_NAME),ei}a(BS,"getBaseSchemaPath");function vS(){if(ti!==void 0)return ti;if(Ye.getHdbBasePath()!==void 0)return ti=HS(ao),ti}a(vS,"getSystemSchemaPath");function JM(){if(ri!==void 0)return ri;if(Ye.getHdbBasePath()!==void 0)return ri=Ye.get(si.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||ni.join(Ye.getHdbBasePath(),si.TRANSACTIONS_DIR_NAME),ri}a(JM,"getTransactionAuditStoreBasePath");function XM(e,t){let r=Ye.get(Dr.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||ni.join(JM(),e.toString())}a(XM,"getTransactionAuditStorePath");function HS(e,t){e=e.toString(),t=t&&t.toString();let r=Ye.get(si.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||ni.join(BS(),e)}a(HS,"getSchemaPath");function ZM(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,QM(process.argv));let s=r[Dr.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!WM.isObject(s))throw o;i=s}for(let o of i){let c=o[ao];if(!c)continue;let _=Ye.get(Dr.SCHEMAS);_=_??{};let u=c?.tables?.[t]?.[jn.PATH];if(u)return PS.set(_,[ao,jn.TABLES,t,jn.PATH],u),Ye.setProperty(Dr.SCHEMAS,_),u;let l=c?.[jn.PATH];if(l)return PS.set(_,[ao,jn.PATH],l),Ye.setProperty(Dr.SCHEMAS,_),l}}let n=r[Dr.STORAGE_PATH.toUpperCase()];if(n){if(!DS.pathExistsSync(n))throw new Error(n+" does not exist");let i=ni.join(n,e);return DS.mkdirsSync(i),Ye.setProperty(Dr.STORAGE_PATH,n),i}return vS()}a(ZM,"initSystemSchemaPaths");function zM(){ei=void 0,ti=void 0,ri=void 0}a(zM,"resetPaths");qS.exports={getBaseSchemaPath:BS,getSystemSchemaPath:vS,getTransactionAuditStorePath:XM,getSchemaPath:HS,initSystemSchemaPaths:ZM,resetPaths:zM}});var Wt=f((yZ,xS)=>{"use strict";var FS=b(),GS=m(),co=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Wu=require("joi"),oo={schema_format:{pattern:co,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},jM=Wu.alternatives(Wu.string().min(1).max(oo.schema_length.maximum).pattern(co).messages({"string.pattern.base":"{:#label} "+oo.schema_format.message}),Wu.number()).required();function eD(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>oo.schema_length.maximum?`'${e}' maximum of 250 characters`:co.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(eD,"checkValidTable");function tD(e,t){return FS.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(tD,"validateSchemaExists");function rD(e,t){let r=t.state.ancestors[0].schema;return FS.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(rD,"validateTableExists");function sD(e,t){return e.toLowerCase()===GS.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${GS.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(sD,"validateSchemaName");xS.exports={common_validators:oo,schema_regex:co,hdb_schema_table:jM,validateSchemaExists:tD,validateTableExists:rD,validateSchemaName:sD,checkValidTable:eD}});var _o=f((MZ,VS)=>{var{common_validators:Pr}=Wt(),ii=te(),Bt="is required",Z={schema:{presence:!0,format:Pr.schema_format,length:Pr.schema_length},table:{presence:!0,format:Pr.schema_format,length:Pr.schema_length},attribute:{presence:!0,format:Pr.schema_format,length:Pr.schema_length},hash_attribute:{presence:!0,format:Pr.schema_format,length:Pr.schema_length}};function ai(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(ai,"makeAttributesStrings");function nD(e){return e=ai(e),Z.schema.presence={message:Bt},Z.table.presence=!1,Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ii.validateObject(e,Z)}a(nD,"schema_object");function iD(e){return e=ai(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ii.validateObject(e,Z)}a(iD,"table_object");function aD(e){return e=ai(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence=!1,Z.hash_attribute.presence={message:Bt},ii.validateObject(e,Z)}a(aD,"create_table_object");function oD(e){return e=ai(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence={message:Bt},Z.hash_attribute.presence=!1,ii.validateObject(e,Z)}a(oD,"attribute_object");function cD(e){return e=ai(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ii.validateObject(e,Z)}a(cD,"describe_table");function _D(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(_D,"validateTableResidence");VS.exports={schema_object:nD,create_table_object:aD,table_object:iD,attribute_object:oD,describe_table:cD,validateTableResidence:_D}});var $S=f((PZ,kS)=>{"use strict";var uD=require("uuid"),uo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||uD.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(uo,"CreateAttributeObject");kS.exports=uo});var Eo=f((vZ,YS)=>{"use strict";var lD=$S(),lo=class extends lD{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(lo,"LMDBCreateAttributeObject");YS.exports=lo});var WS=f((qZ,KS)=>{"use strict";KS.exports=dD;var ED="inserted";function dD(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===ED?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(dD,"returnObject")});var ho=f((FZ,zS)=>{"use strict";var hD=m(),Qu=X(),fD=zs(),{getSystemSchemaPath:SD,getSchemaPath:TD}=j(),mD=os(),RD=_o(),AD=Eo(),pD=WS(),{handleHDBError:QS,hdb_errors:XS}=L(),JS=b(),{HTTP_STATUS_CODES:gD}=XS,Ju=mD.hdb_attribute,ZS=[];for(let e=0;e<Ju.attributes.length;e++)ZS.push(Ju.attributes[e].attribute);var ND="inserted";zS.exports=OD;async function OD(e){let t=RD.attribute_object(e);if(t)throw QS(new Error,t.message,XS.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&JS.checkGlobalSchemaTable(e.schema,e.table);if(r)throw QS(new Error,r,gD.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=JS.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new AD(e.schema,e.table,e.attribute,e.id);try{let i=await Qu.openEnvironment(TD(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);Qu.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Qu.openEnvironment(SD(),hD.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:_}=await fD.insertRecords(o,Ju.hash_attribute,ZS,[n]);return pD(ND,c,{records:[n]},_)}catch(i){throw i}}a(OD,"lmdbCreateAttribute")});var Zu=f((VZ,eT)=>{var{hdb_schema_table:jS}=Wt(),ID=te(),Xu=require("joi"),bD={undefined:"undefined",null:"null"},wD=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||bD[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"),CD=Xu.object({schema:jS,table:jS,records:Xu.array().items(Xu.object().custom(wD)).required()});eT.exports=function(e){return ID.validateBySchema(e,CD)}});var fo=f((YZ,rT)=>{"use strict";var hr=b(),tT=I(),$Z=Zu();rT.exports=LD;function LD(e){if(hr.isEmpty(e))throw new Error("invalid update parameters defined.");if(hr.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(hr.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(hr.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&&hr.isEmptyOrZeroLength(o[r]))throw tT.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(!hr.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw tT.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`);!hr.isEmpty(o[r])&&o[r]!==""&&s.has(hr.autoCast(o[r]))&&(o.skip=!0),s.add(hr.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(LD,"insertUpdateValidate")});var oi=f((WZ,sT)=>{"use strict";var yD=m().OPERATIONS_ENUM,So=class{constructor(t,r,s,n,i=void 0){this.operation=yD.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(So,"InsertObject");sT.exports=So});var mo=f((XZ,nT)=>{"use strict";var JZ=oi(),To=m(),ju=b(),zu=I(),UD=require("uuid"),{handleHDBError:ci,hdb_errors:MD}=L(),{HDB_ERROR_MSGS:_i,HTTP_STATUS_CODES:ui}=MD;nT.exports=DD;function DD(e,t,r){for(let n=0;n<t.length;n++)PD(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];BD(i,r,e.operation)}}a(DD,"processRows");function PD(e){if(Buffer.byteLength(String(e))>To.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ci(new Error,_i.ATTR_NAME_LENGTH_ERR(e),ui.BAD_REQUEST,void 0,void 0,!0);if(ju.isEmptyOrZeroLength(e)||ju.isEmpty(e.trim()))throw ci(new Error,_i.ATTR_NAME_NULLISH_ERR,ui.BAD_REQUEST,void 0,void 0,!0)}a(PD,"validateAttribute");function BD(e,t,r){if(!e.hasOwnProperty(t)||ju.isEmptyOrZeroLength(e[t])){if(r===To.OPERATIONS_ENUM.INSERT||r===To.OPERATIONS_ENUM.UPSERT){e[t]=UD.v4();return}throw zu.error("Update transaction aborted due to record with no hash value:",e),ci(new Error,_i.RECORD_MISSING_HASH_ERR,ui.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>To.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw zu.error(e),ci(new Error,_i.HASH_VAL_LENGTH_ERR,ui.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw zu.error(e),ci(new Error,_i.INVALID_FORWARD_SLASH_IN_HASH_ERR,ui.BAD_REQUEST,void 0,void 0,!0)}a(BD,"validateHash")});var aT=f((zZ,iT)=>{"use strict";var Ro=class{constructor(t,r){this.type=t,this.message=r}};a(Ro,"ITCEventObject");iT.exports=Ro});var Ao=f((e3,_T)=>{var vD=require("crypto"),oT=9;function HD(e){let t=GD(oT),r=cT(e+t);return t+r}a(HD,"createHash");function qD(e,t){let r=e.substr(0,oT),s=r+cT(t+r);return e===s}a(qD,"validateHash");function GD(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(GD,"generateSalt");function cT(e){return vD.createHash("md5").update(e).digest("hex")}a(cT,"md5");_T.exports={hash:HD,validate:qD}});var lT=f((r3,uT)=>{"use strict";var Br=m(),li=class{constructor(t=0,r=Br.STORAGE_TYPES_ENUM.LMDB,s=Br.LICENSE_VALUES.API_CALL_DEFAULT,n=Br.RAM_ALLOCATION_ENUM.DEFAULT,i=Br.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(li,"BaseLicense");var po=class extends li{constructor(t=0,r=Br.STORAGE_TYPES_ENUM.LMDB,s=Br.LICENSE_VALUES.API_CALL_DEFAULT,n=Br.RAM_ALLOCATION_ENUM.DEFAULT,i=Br.LICENSE_VALUES.VERSION_DEFAULT,o,c=!1){super(t,r,s,n,i,o),this.enterprise=c}};a(po,"ExtendedLicense");uT.exports={BaseLicense:li,ExtendedLicense:po}});var tn=f((n3,TT)=>{"use strict";var en=require("fs-extra"),ET=Ao(),dT=require("crypto"),FD=require("moment"),xD=require("uuid").v4,Pe=I(),tl=require("path"),VD=b(),ct=m(),kD=lT().ExtendedLicense,js="invalid license key format",$D="061183",YD="mofi25",KD="aes-256-cbc",WD=16,QD=32,hT=B();hT.initSync();var el;TT.exports={validateLicense:fT,generateFingerPrint:XD,licenseSearch:ST,getLicense:jD};function rl(){return tl.join(hT.getHdbBasePath(),ct.LICENSE_KEY_DIR_NAME,ct.LICENSE_FILE_NAME)}a(rl,"getLicenseDirPath");function JD(){let e=rl();return tl.join(e,ct.LICENSE_FILE_NAME)}a(JD,"getLicenseFilePath");function sl(){let e=rl();return tl.join(e,ct.REG_KEY_FILE_NAME)}a(sl,"getFingerPrintFilePath");async function XD(){let e=sl();try{return await en.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await ZD();throw Pe.error(`Error writing fingerprint file to ${e}`),Pe.error(t),new Error("There was an error generating the fingerprint")}}a(XD,"generateFingerPrint");async function ZD(){let e=xD(),t=ET.hash(e),r=sl();try{await en.mkdirp(rl()),await en.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Pe.error(`Error writing fingerprint file to ${r}`),Pe.error(s),new Error("There was an error generating the fingerprint")}return t}a(ZD,"writeFingerprint");function fT(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:ct.STORAGE_TYPES_ENUM.LMDB,api_call:ct.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:ct.RAM_ALLOCATION_ENUM.DEFAULT,version:ct.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Pe.error("empty license key passed to validate."),r;let s=sl(),n=!1;try{n=en.statSync(s)}catch(i){Pe.error(i)}if(n){let i;try{i=en.readFileSync(s,"utf8")}catch{Pe.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(YD),c=o[1];c=Buffer.concat([Buffer.from(c)],WD);let _=Buffer.concat([Buffer.from(i)],QD),u=dT.createDecipheriv(KD,_,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=u.update(o[0],"hex","utf8"),l.trim(),l+=u.final("utf8")}catch{let h=zD(o[0],i);if(h)l=h;else throw r.valid_license=!1,r.valid_machine=!1,console.error(js),Pe.error(js),new Error(js)}let E;if(isNaN(l))try{E=JSON.parse(l),r.api_call=E.api_call,r.version=E.version,r.storage_type=E.storage_type,r.exp_date=E.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),E.ram_allocation&&(r.ram_allocation=E.ram_allocation)}catch{throw console.error(js),Pe.error(js),new Error(js)}else r.exp_date=l;r.exp_date<FD().valueOf()&&(r.valid_date=!1),ET.validate(o[1],`${$D}${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||Pe.error("Invalid licence"),r}a(fT,"validateLicense");function zD(e,t){try{let r=dT.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Pe.warn("Check old license failed")}}a(zD,"checkOldLicense");function ST(){let e=new kD;e.api_call=0;let t=[];try{t=en.readFileSync(JD(),"utf-8").split(ct.NEW_LINE)}catch(r){r.code==="ENOENT"?Pe.info("no license file found"):Pe.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(VD.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=fT(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){Pe.error("There was an error parsing the license string."),Pe.error(n),e.api_call=ct.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=ct.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=ct.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=ct.LICENSE_VALUES.API_CALL_DEFAULT),el=e,e}a(ST,"licenseSearch");async function jD(){return el||await ST(),el}a(jD,"getLicense")});var hs=f((a3,_l)=>{"use strict";var{Worker:eP,MessageChannel:tP,parentPort:fr,isMainThread:AT,threadId:rP,workerData:sP}=require("worker_threads"),{PACKAGE_ROOT:nP}=m(),{join:iP,isAbsolute:aP,extname:oP}=require("path"),{totalmem:mT}=require("os"),ol=m(),pT=B(),cP=tn(),go=I(),_P=m();pT.initSync();var uP=pT.get(ol.CONFIG_PARAMS.HTTP_THREADS)||1,lP=1024*1024,vr=[],ds=[],EP=50,gT=1e4,NT="restart",OT="request_thread_info",IT="resource_report",bT="thread_info",wT="added-port",nl;_l.exports={startWorker:il,restartWorkers:cl,shutdownWorkers:hP,workers:vr,setMonitorListener:RP,onMessageFromWorkers:fP,broadcast:SP};function il(e,t={}){let s=cP.licenseSearch().ram_allocation,n=process.constrainedMemory?.()||mT();n=Math.min(n,mT());let i=Math.min(Math.max(Math.floor(n/lP/(1+uP/4)),512),s||1/0),o=Math.min(Math.max(i>>7,16),64),c=[];for(let u of ds){let{port1:l,port2:E}=new tP;u.postMessage({type:wT,port:l},[l]),c.push(E)}oP(e)||(e+=".js");let _=new eP(aP(e)?e:iP(nP,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:i,maxYoungGenerationSizeMb:o},argv:process.argv.slice(2),workerData:{addPorts:c,name:t.name},transferList:c},t));return No(_,!0),_.unexpectedRestarts=t.unexpectedRestarts||0,_.startCopy=()=>{il(e,t)},_.on("error",u=>{console.error("Worker error:",u),go.error("Worker error:",u)}),_.on("exit",u=>{vr.splice(vr.indexOf(_),1),!_.wasShutdown&&t.autoRestart!==!1&&(_.unexpectedRestarts<EP?(t.unexpectedRestarts=_.unexpectedRestarts+1,il(e,t)):go.error(`Thread has been restarted ${_.restarts} times and will not be restarted`))}),_.on("message",u=>{u.type===NT&&cl(u.workerType),u.type===OT&&TP(_),u.type===IT&&mP(_,u)}),vr.push(_),pP(),t.onStarted&&t.onStarted(_),_.name=t.name,_}a(il,"startWorker");var dP=[ol.THREAD_TYPES.HTTP];async function cl(e=null,t=2,r=!0){if(AT){t<1&&(t=t*vr.length);let s=[];for(let n of vr.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({type:ol.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=dP.indexOf(n.name)>-1,o=new Promise(c=>{let _=setTimeout(()=>n.terminate(),gT*2).unref();n.on("exit",()=>{clearTimeout(_),s.splice(s.indexOf(o)),!i&&r&&n.startCopy(),c()})});s.push(o),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else fr.postMessage({type:NT,workerType:e})}a(cl,"restartWorkers");function hP(e){return cl(e,1/0,!1)}a(hP,"shutdownWorkers");var CT=[];function fP(e){CT.push(e)}a(fP,"onMessageFromWorkers");function SP(e){for(let t of ds)try{t.postMessage(e)}catch(r){go.error("Unable to send message to worker",r)}}a(SP,"broadcast");function TP(e){e.postMessage({type:bT,workers:LT()})}a(TP,"sendThreadInfo");function LT(){let e=Date.now();return vr.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(LT,"getChildWorkerInfo");function mP(e,t){e.resources=t,e.resources.updated=Date.now()}a(mP,"recordResourceReport");var al;function RP(e){al=e}a(RP,"setMonitorListener");var AP=1e3,RT=!1;function pP(){RT||(RT=!0,setInterval(()=>{for(let e of vr){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}al&&al()},AP).unref())}a(pP,"startMonitoring");var gP=1e3;if(fr){No(fr);for(let e of sP.addPorts)No(e);setInterval(()=>{let e=process.memoryUsage();fr.postMessage({type:IT,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},gP).unref(),nl=a(()=>new Promise((e,t)=>{fr.on("message",r),fr.postMessage({type:OT});function r(s){s.type===bT&&(fr.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else nl=LT;_l.exports.getThreadInfo=nl;function No(e,t){ds.push(e),e.on("message",r=>{if(r.type===wT)No(r.port);else for(let s of CT)s(r)}).on("close",()=>{ds.splice(ds.indexOf(e),1)}).on("exit",()=>{ds.splice(ds.indexOf(e),1)}),t||e.unref()}a(No,"addPort");AT||fr.on("message",async e=>{let{type:t}=e;t===_P.ITC_EVENT_TYPES.SHUTDOWN&&(fr.unref(),setTimeout(()=>{go.warn("Thread did not voluntarily terminate",rP),process.exit(0)},gT).unref())})});var MT=f((c3,UT)=>{"use strict";var ul=X(),NP=I(),yT=it().LMDB_ERRORS_ENUM;UT.exports=OP;async function OP(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await ul.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==yT.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await ul.closeEnvironment(global.lmdb_map[s]),await ul.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==yT.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){NP.error(t)}}a(OP,"cleanLMDBMap")});var Ot=f((u3,BT)=>{"use strict";var Io=Zu(),Nt=b(),IP=require("util"),bo=Qt(),bP=qr(),ll=I(),{handleHDBError:Hr,hdb_errors:wP}=L(),{HTTP_STATUS_CODES:fs}=wP,CP=IP.promisify(bP.getTableSchema),LP="updated",DT="inserted",PT="upserted";BT.exports={insert:UP,update:MP,upsert:DP,validation:yP,flush:PP};async function yP(e){if(Nt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Nt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Nt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await CP(e.schema,e.table),r=Io(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Nt.isEmptyOrZeroLength(c[s]))throw ll.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Nt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw ll.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Nt.isEmpty(c[s])&&c[s]!==""&&n.has(Nt.autoCast(c[s]))&&(c.skip=!0),n.add(Nt.autoCast(c[s]));for(let _ in c)i[_]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(yP,"validation");async function UP(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Io(e);if(t)throw Hr(new Error,t.message,fs.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw Hr(new Error,r,fs.BAD_REQUEST);let s=await bo.createRecords(e);return Oo(DT,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(UP,"insertData");async function MP(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Io(e);if(t)throw Hr(new Error,t.message,fs.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw Hr(new Error,r,fs.BAD_REQUEST);let s=await bo.updateRecords(e);return Nt.isEmpty(s.existing_rows)?Oo(LP,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Oo(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(MP,"updateData");async function DP(e){if(e.operation!=="upsert")throw Hr(new Error,"invalid operation, must be upsert",fs.INTERNAL_SERVER_ERROR);let t=Io(e);if(t)throw Hr(new Error,t.message,fs.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw Hr(new Error,r,fs.BAD_REQUEST);try{let s=await bo.upsertRecords(e);return Oo(PT,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw Hr(s,null,null,ll.ERR,n)}}a(DP,"upsertData");function Oo(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===DT?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===PT?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Oo,"returnObject");function PP(e){return bo.flush(e.schema,e.table)}a(PP,"flush")});var dl=f((E3,qT)=>{var BP=te(),El=require("joi"),{hdb_schema_table:vT}=Wt(),HT={schema:vT,table:vT},vP={date:El.date().iso().required()},HP={timestamp:El.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};qT.exports=function(e,t){let r=t==="timestamp"?{...HT,...HP}:{...HT,...vP},s=El.object(r);return BP.validateBySchema(e,s)}});var VT=f((d3,xT)=>{var qP=te(),GT=require("joi"),{hdb_schema_table:FT}=Wt(),GP=GT.object({schema:FT,table:FT,hash_values:GT.array().required()});xT.exports=function(e){return qP.validateBySchema(e,GP)}});var $T=f((h3,kT)=>{"use strict";var wo=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(wo,"InsertObject");var Co=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(Co,"NoSQLSeachObject");var Lo=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(Lo,"DeleteResponseObject");kT.exports={InsertObject:wo,NoSQLSeachObject:Co,DeleteResponseObject:Lo}});var Ts=f((S3,JT)=>{"use strict";var KT=dl(),FP=VT(),yo=b(),YT=require("moment"),WT=I(),{promisify:xP,callbackify:VP}=require("util"),Ss=m(),kP=qr(),hl=xP(kP.getTableSchema),fl=Qt(),{DeleteResponseObject:$P}=$T(),{handleHDBError:Gr,hdb_errors:YP}=L(),{HDB_ERROR_MSGS:Uo,HTTP_STATUS_CODES:Fr}=YP,KP="records successfully deleted",WP=VP(QT);JT.exports={delete:WP,deleteRecord:QT,deleteFilesBefore:QP,deleteAuditLogsBefore:JP};async function QP(e){let t=KT(e,"date");if(t)throw Gr(t,t.message,Fr.BAD_REQUEST,void 0,void 0,!0);if(!YT(e.date,YT.ISO_8601).isValid())throw Gr(new Error,Uo.INVALID_DATE,Fr.BAD_REQUEST,Ss.LOG_LEVELS.ERROR,Uo.INVALID_DATE,!0);let s=yo.checkSchemaTableExist(e.schema,e.table);if(s)throw Gr(new Error,s,Fr.NOT_FOUND,Ss.LOG_LEVELS.ERROR,s,!0);let n=await fl.deleteRecordsBefore(e);if(await hl(e.schema,e.table),WT.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(QP,"deleteFilesBefore");async function JP(e){let t=KT(e,"timestamp");if(t)throw Gr(t,t.message,Fr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Gr(new Error,Uo.INVALID_VALUE("Timestamp"),Fr.BAD_REQUEST,Ss.LOG_LEVELS.ERROR,Uo.INVALID_VALUE("Timestamp"),!0);let r=yo.checkSchemaTableExist(e.schema,e.table);if(r)throw Gr(new Error,r,Fr.NOT_FOUND,Ss.LOG_LEVELS.ERROR,r,!0);let s=await fl.deleteAuditLogsBefore(e);return await hl(e.schema,e.table),WT.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(JP,"deleteAuditLogsBefore");async function QT(e){let t=FP(e);if(t)throw Gr(t,t.message,Fr.BAD_REQUEST,void 0,void 0,!0);let r=yo.checkSchemaTableExist(e.schema,e.table);if(r)throw Gr(new Error,r,Fr.NOT_FOUND,Ss.LOG_LEVELS.ERROR,r,!0);try{await hl(e.schema,e.table);let s=await fl.deleteRecords(e);return yo.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${KP}`),s}catch(s){if(s.message===Ss.SEARCH_NOT_FOUND_MESSAGE){let n=new $P;return n.message=Ss.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(QT,"deleteRecord")});var ZT=f((m3,XT)=>{var Sl=te(),Be={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 XP(e){return Be.password.presence=!0,Be.username.presence=!0,Be.role.presence=!0,Be.active.presence=!0,Sl.validateObject(e,Be)}a(XP,"addUserValidation");function ZP(e){return Be.password.presence=!1,Be.username.presence=!0,Be.role.presence=!1,Be.active.presence=!1,Sl.validateObject(e,Be)}a(ZP,"alterUserValidation");function zP(e){return Be.password.presence=!1,Be.username.presence=!0,Be.role.presence=!1,Be.active.presence=!1,Sl.validateObject(e,Be)}a(zP,"dropUserValidation");XT.exports={addUserValidation:XP,alterUserValidation:ZP,dropUserValidation:zP}});var xr=f((A3,tm)=>{"use strict";var Ei=require("crypto"),jT="aes-256-cbc",jP=32,eB=16,Tl=64,em=32,tB=Tl+em,zT=new Map;tm.exports={encrypt:rB,decrypt:sB,createNatsTableStreamName:nB};function rB(e){let t=Ei.randomBytes(jP),r=Ei.randomBytes(eB),s=Ei.createCipheriv(jT,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(rB,"encrypt");function sB(e){let t=e.substr(0,Tl),r=e.substr(Tl,em),s=e.substr(tB,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Ei.createDecipheriv(jT,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(sB,"decrypt");function nB(e,t){let r=`${e}.${t}`,s=zT.get(r);return s||(s=Ei.createHash("md5").update(`${e}.${t}`).digest("hex"),zT.set(r,s)),s}a(nB,"createNatsTableStreamName")});var oe=f((N3,sm)=>{"use strict";var{platform:g3}=require("os"),iB="nats-server.zip",ml="nats-server",aB=process.platform==="win32"?`${ml}.exe`:ml,Rl="HDB",oB=/^[^\s.,*>]+$/,rm="__request__",cB=a(e=>`${e}.${rm}`,"REQUEST_SUBJECT"),_B={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},uB={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},lB={HUB:"hub.pid",LEAF:"leaf.pid"},EB={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},dB={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Rl,deliver_subject:"__HDB__.WORKQUEUE"},hB={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Rl,deliver_subject:"HDB.SCHEMAQUEUE"},fB={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Rl,deliver_subject:"HDB.USERQUEUE"},SB={SUCCESS:"success",ERROR:"error"},TB={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},mB={TXN:"txn",MSGID:"msgid"},rn={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},RB={[rn.ERR]:1,[rn.WRN]:2,[rn.INF]:3,[rn.DBG]:4,[rn.TRC]:5},AB={debug:"-D",trace:"-DVV"};sm.exports={NATS_SERVER_ZIP:iB,NATS_SERVER_NAME:ml,NATS_BINARY_NAME:aB,PID_FILES:lB,NATS_CONFIG_FILES:uB,SERVER_SUFFIX:EB,WORK_QUEUE_CONSUMER_NAMES:dB,SCHEMA_QUEUE_CONSUMER_NAMES:hB,USER_QUEUE_CONSUMER_NAMES:fB,NATS_TERM_CONSTRAINTS_RX:oB,REQUEST_SUFFIX:rm,UPDATE_REMOTE_RESPONSE_STATUSES:SB,CLUSTER_STATUS_STATUSES:TB,REQUEST_SUBJECT:cB,SUBJECT_PREFIXES:mB,MSG_HEADERS:_B,LOG_LEVELS:rn,LOG_LEVEL_FLAGS:AB,LOG_LEVEL_HIERARCHY:RB}});var Vr=f((b3,mm)=>{"use strict";var cm="username is required",_m="nothing to update, must supply active, role or password to update",um="password cannot be an empty string",lm="If role is specified, it cannot be empty.",Em="active must be true or false";mm.exports={addUser:CB,alterUser:LB,dropUser:UB,userInfo:MB,listUsers:Do,listUsersExternal:DB,setUsersToGlobal:di,findAndValidateUser:vB,getClusterUser:HB,USERNAME_REQUIRED:cm,ALTERUSER_NOTHING_TO_UPDATE:_m,EMPTY_PASSWORD:um,EMPTY_ROLE:lm,ACTIVE_BOOLEAN:Em};var dm=Ot(),pB=Ts(),pl=Ao(),hm=ZT(),fm=It(),gl=nn(),_t=b(),Sm=require("validate.js"),M=I(),{promisify:Nl}=require("util"),Ol=xr(),nm=m(),im=oe(),gB=lr(),I3=B(),NB=tn(),OB=os(),{handleHDBError:Jt,hdb_errors:IB}=L(),{HTTP_STATUS_CODES:Xt,AUTHENTICATION_ERROR_MSGS:Al,HDB_ERROR_MSGS:sn}=IB,{UserEventMsg:Il}=kr(),am=require("lodash"),Tm={username:!0,active:!0,role:!0,password:!0},om=new Map,Mo=Nl(fm.searchByValue),bB=Nl(fm.searchByHash),wB=Nl(pB.delete);async function CB(e){let t=Sm.cleanAttributes(e,Tm),r=hm.addUserValidation(t);if(r)throw Jt(new Error,r.message,Xt.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 Mo(s),n=n&&Array.from(n)}catch(_){throw M.error("There was an error searching for a role in add user"),M.error(_),_}if(!n||n.length<1)throw Jt(new Error,sn.ROLE_NAME_NOT_FOUND(t.role),Xt.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Jt(new Error,sn.DUP_ROLES_FOUND(t.role),Xt.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Ol.encrypt(t.password)),t.password=pl.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await dm.insert(i)}catch(_){throw M.error("There was an error searching for a user."),M.error(_),_}M.debug(o);try{await di()}catch(_){throw M.error("Got an error setting users to global"),M.error(_),_}if(o.skipped_hashes.length===1)throw Jt(new Error,sn.USER_ALREADY_EXISTS(t.username),Xt.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],gl.signalUserChange(new Il(process.pid)),`${c.username} successfully added`}a(CB,"addUser");async function LB(e){let t=Sm.cleanAttributes(e,Tm);if(_t.isEmptyOrZeroLength(t.username))throw new Error(cm);if(_t.isEmptyOrZeroLength(t.password)&&_t.isEmptyOrZeroLength(t.role)&&_t.isEmptyOrZeroLength(t.active))throw new Error(_m);if(!_t.isEmpty(t.password)&&_t.isEmptyOrZeroLength(t.password.trim()))throw new Error(um);if(!_t.isEmpty(t.active)&&!_t.isBoolean(t.active))throw new Error(Em);let r=yB(t.username);if(!_t.isEmpty(t.password)&&!_t.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Ol.encrypt(t.password)),t.password=pl.hash(t.password)),t.role==="")throw new Error(lm);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await Mo(i)||[])}catch(c){throw M.error("Got an error searching for a role."),M.error(c),c}if(!o||o.length===0){let c=sn.ALTER_USER_ROLE_NOT_FOUND(t.role);throw M.error(c),Jt(new Error,c,Xt.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=sn.ALTER_USER_DUP_ROLES(t.role);throw M.error(c),Jt(new Error,c,Xt.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await dm.update(s)}catch(i){throw M.error("Error during update."),M.error(i),i}try{await di()}catch(i){throw M.error("Got an error setting users to global"),M.error(i),i}return gl.signalUserChange(new Il(process.pid)),n}a(LB,"alterUser");function yB(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(yB,"isClusterUser");async function UB(e){try{let t=hm.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(_t.isEmpty(global.hdb_users.get(e.username)))throw Jt(new Error,sn.USER_NOT_EXIST(e.username),Xt.NOT_FOUND,void 0,void 0,!0);let s;try{s=await wB(r)}catch(n){throw M.error("Got an error deleting a user."),M.error(n),n}M.debug(s);try{await di()}catch(n){throw M.error("Got an error setting users to global."),M.error(n),n}return gl.signalUserChange(new Il(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(UB,"dropUser");async function MB(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 bB(r)}catch(n){throw M.error("Got an error searching for a role."),M.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw M.error(r),r}return t}a(MB,"userInfo");async function DB(){let e;try{e=await Do()}catch(t){throw M.error("Got an error listing users."),M.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(DB,"listUsersExternal");async function Do(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Mo(e)}catch(o){throw M.error("Got an error searching for roles."),M.error(o),o}let r={};for(let o of t)r[o.id]=am.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await Mo(s)}catch(o){throw M.error("Got an error searching for users."),M.error(o),o}let i=new Map;for(let o of n)o=am.cloneDeep(o),o.role=r[o.role],PB(o.role),i.set(o.username,o);return(await NB.getLicense()).enterprise?i:BB(Array.from(i.values()))}catch(e){throw M.error("got an error listing users"),M.error(e),_t.errorizeMessage(e)}return null}a(Do,"listUsers");function PB(e){try{if(!e){M.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(OB)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){M.error("Got an error trying to set system permissions."),M.error(t)}}a(PB,"appendSystemTablesToRole");function BB(e){try{if(M.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&&(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(n.username,n)):r.set(n.username,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?(M.warn("No roles found with active users."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return M.error("error filtering users."),M.error(t),new Map}}a(BB,"nonEnterpriseFilter");async function di(){try{let e=await Do();global.hdb_users=e}catch(e){throw M.error(e),e}}a(di,"setUsersToGlobal");async function vB(e,t,r=!0){global.hdb_users||await di();let s=global.hdb_users.get(e);if(!s)throw Jt(new Error,Al.GENERIC_AUTH_FAIL,Xt.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Jt(new Error,Al.USER_INACTIVE,Xt.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(om.get(t)===s.password)return n;if(pl.validate(s.password,t))om.set(t,s.password);else throw Jt(new Error,Al.GENERIC_AUTH_FAIL,Xt.UNAUTHORIZED,void 0,void 0,!0)}return n}a(vB,"findAndValidateUser");async function HB(){let e=await Do(),t=gB.getConfigFromFile(nm.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!_t.isEmpty(r)&&r?.role?.role===nm.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Ol.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+im.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+im.SERVER_SUFFIX.ADMIN,r}a(HB,"getClusterUser")});var Po=f((C3,gm)=>{"use strict";var ms=I(),ut=m(),qB=MT(),Rm=qr(),GB=Rs(),FB=Vr(),{validateEvent:pm}=kr(),hi=Qt(),xB=require("process"),VB={[ut.ITC_EVENT_TYPES.SCHEMA]:kB,[ut.ITC_EVENT_TYPES.USER]:YB};async function kB(e){let t=pm(e);if(t){ms.error(t);return}ms.trace("ITC schemaHandler received schema event:",e),await qB(e.message),await $B(e.message)}a(kB,"schemaHandler");async function $B(e){try{if(hi.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),hi.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),hi.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME),global.hdb_schema!==void 0&&typeof global.hdb_schema=="object"&&e.operation!==void 0)switch(e.operation){case"drop_schema":delete global.hdb_schema[e.schema];break;case"drop_table":global.hdb_schema[e.schema]!==void 0&&delete global.hdb_schema[e.schema][e.table];break;case"create_schema":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={});break;case"create_table":case"create_attribute":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={}),global.hdb_schema[e.schema][e.table]=await GB.describeTable({schema:e.schema,table:e.table});break;default:Rm.setSchemaDataToGlobal(Am);break}else Rm.setSchemaDataToGlobal(Am)}catch(t){ms.error(t)}}a($B,"syncSchemaMetadata");function Am(e){e&&ms.error(e)}a(Am,"handleErrorCallback");async function YB(e){try{hi.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),hi.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME);let t=pm(e);if(t){ms.error(t);return}ms.trace(`ITC userHandler ${ut.HDB_ITC_CLIENT_PREFIX}${xB.pid} received user event:`,e),await FB.setUsersToGlobal()}catch(t){ms.error(t)}}a(YB,"userHandler");gm.exports=VB});var kr=f((D3,Om)=>{"use strict";var y3=I(),bl=b(),KB=m(),{ITC_ERRORS:fi}=it(),{parentPort:U3,threadId:WB,isMainThread:QB,workerData:M3}=require("worker_threads"),{onMessageFromWorkers:JB,broadcast:XB}=hs();Om.exports={sendItcEvent:ZB,validateEvent:Nm,SchemaEventMsg:zB,UserEventMsg:jB};var Bo;JB(e=>{Bo=Bo||Po(),Nm(e),Bo[e.type]&&Bo[e.type](e)});function ZB(e){!QB&&e.message&&(e.message.originator=WB),XB(e)}a(ZB,"sendItcEvent");function Nm(e){if(typeof e!="object")return fi.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||bl.isEmpty(e.type))return fi.MISSING_TYPE;if(!e.hasOwnProperty("message")||bl.isEmpty(e.message))return fi.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||bl.isEmpty(e.message.originator))return fi.MISSING_ORIGIN;if(KB.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return fi.INVALID_EVENT(e.type)}a(Nm,"validateEvent");function zB(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(zB,"SchemaEventMsg");function jB(e){this.originator=e}a(jB,"UserEventMsg")});var nn=f((v3,Cm)=>{"use strict";var Im=m(),B3=b(),vo=I(),bm=aT(),an,{sendItcEvent:wm}=kr();function ev(e){try{vo.trace("signalSchemaChange called with message:",e),an=an||Po();let t=new bm(Im.ITC_EVENT_TYPES.SCHEMA,e);an.schema(t),wm(t)}catch(t){vo.error(t)}}a(ev,"signalSchemaChange");function tv(e){try{vo.trace("signalUserChange called with message:",e),an=an||Po();let t=new bm(Im.ITC_EVENT_TYPES.USER,e);an.user(t),wm(t)}catch(t){vo.error(t)}}a(tv,"signalUserChange");Cm.exports={signalSchemaChange:ev,signalUserChange:tv}});var Ho=f((q3,ym)=>{"use strict";var Lm=b(),rv=m(),sv=I(),nv=ho(),iv=Eo(),av=nn(),{SchemaEventMsg:ov}=kr(),cv="already exists in";ym.exports=_v;async function _v(e,t,r){if(Lm.isEmptyOrZeroLength(r))return r;let s=[];Lm.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 uv(e,t.schema,t.name,i)})),n}a(_v,"lmdbCheckForNewAttributes");async function uv(e,t,r,s){let n=new iv(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await lv(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(cv))sv.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(uv,"createNewAttribute");async function lv(e){let t;return t=await nv(e),av.signalSchemaChange(new ov(process.pid,rv.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(lv,"createAttribute")});var on=f((F3,Um)=>{"use strict";var qo=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(qo,"LMDBTransactionObject");Um.exports=qo});var Dm=f((V3,Mm)=>{"use strict";var Ev=on(),dv=m().OPERATIONS_ENUM,Go=class extends Ev{constructor(t,r,s,n,i=void 0){super(dv.INSERT,r,s,n,i),this.records=t}};a(Go,"LMDBInsertTransactionObject");Mm.exports=Go});var Bm=f(($3,Pm)=>{"use strict";var hv=on(),fv=m().OPERATIONS_ENUM,Fo=class extends hv{constructor(t,r,s,n,i,o=void 0){super(fv.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(Fo,"LMDBUpdateTransactionObject");Pm.exports=Fo});var Hm=f((K3,vm)=>{"use strict";var Sv=on(),Tv=m().OPERATIONS_ENUM,xo=class extends Sv{constructor(t,r,s,n,i,o=void 0){super(Tv.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(xo,"LMDBUpsertTransactionObject");vm.exports=xo});var Gm=f((Q3,qm)=>{"use strict";var mv=on(),Rv=m().OPERATIONS_ENUM,Vo=class extends mv{constructor(t,r,s,n,i=void 0){super(Rv.DELETE,s,n,t,i),this.original_records=r}};a(Vo,"LMDBDeleteTransactionObject");qm.exports=Vo});var Si=f((Z3,km)=>{"use strict";var X3=require("path"),Fm=X(),Av=Dm(),pv=Bm(),gv=Hm(),Nv=Gm(),cn=Ue(),xm=b(),{CONFIG_PARAMS:Ov}=m(),Vm=B();Vm.initSync();var ko=m().OPERATIONS_ENUM,{getTransactionAuditStorePath:Iv}=j();km.exports=bv;async function bv(e,t){if(Vm.get(Ov.LOGGING_AUDITLOG)===!1)return;let r=Iv(e.schema,e.table),s=await Fm.openEnvironment(r,e.table,!0),n=wv(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Fm.initializeDBIs(s,cn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,cn.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[cn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[cn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),xm.isEmpty(n.user_name)||s.dbis[cn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[cn.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(bv,"writeTransaction");function wv(e,t){let r=xm.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===ko.INSERT)return new Av(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ko.UPDATE)return new pv(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ko.UPSERT)return new gv(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ko.DELETE)return new Nv(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(wv,"createTransactionObject")});var wl=f((ez,$m)=>{"use strict";var Cv=fo(),j3=oi(),Ti=m(),Lv=mo(),yv=zs().insertRecords,Uv=X(),Mv=I(),Dv=Ho(),{getSchemaPath:Pv}=j(),Bv=Si();$m.exports=vv;async function vv(e){try{let{schema_table:t,attributes:r}=Cv(e);Lv(e,r,t.hash_attribute),e.schema!==Ti.SYSTEM_SCHEMA_NAME&&(r.includes(Ti.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ti.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ti.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ti.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Dv(e.hdb_auth_header,t,r),n=Pv(e.schema,e.table),i=await Uv.openEnvironment(n,e.table),o=await yv(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Bv(e,o)}catch(c){Mv.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(vv,"lmdbCreateRecords")});var Wm=f((rz,Km)=>{"use strict";var Ym=m(),Hv=wl(),qv=oi(),Gv=require("fs-extra"),{getSchemaPath:Fv}=j();Km.exports=xv;async function xv(e){let t=[{name:e.schema,createddate:Date.now()}],r=new qv(Ym.SYSTEM_SCHEMA_NAME,Ym.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Hv(r),await Gv.mkdirp(Fv(e.schema))}a(xv,"lmdbCreateSchema")});var Jm=f((nz,Qm)=>{"use strict";var $o=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a($o,"DeleteRecordsResponseObject");Qm.exports=$o});var yl=f((_z,zm)=>{"use strict";var Xm=X(),Cl=_s(),Ll=it().LMDB_ERRORS_ENUM,Vv=Ue(),Zm=I(),az=b(),kv=require("lmdb"),$v=Jm(),Yv=m(),{OVERFLOW_MARKER:oz,MAX_SEARCH_KEY_LENGTH:cz}=Vv,Kv=Yv.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Wv(e,t,r,s){if(Cl.validateEnv(e),t===void 0)throw new Error(Ll.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ll.IDS_REQUIRED):new Error(Ll.IDS_MUST_BE_ITERABLE);try{let n=Xm.listDBIs(e);Xm.initializeDBIs(e,t,n);let i=new $v,o,c=[],_=[];for(let d=0,h=r.length;d<h;d++)try{o=r[d];let T=e.dbis[t].get(o);if(!T||s&&T[Kv]>s){i.skipped.push(o);continue}let R=e.dbis[t].ifVersion(o,kv.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let g=0;g<n.length;g++){let H=n[g];if(!T.hasOwnProperty(H)||H===t)continue;let x=e.dbis[H],q=T[H];if(q!=null)try{let ye=Cl.getIndexedValues(q);if(ye)for(let U=0,$=ye.length;U<$;U++)x.remove(ye[U],o)}catch{Zm.warn(`cannot delete from attribute: ${H}, ${q}:${o}`)}}});c.push(R),_.push(o),i.original_records.push(T)}catch(T){Zm.warn(T),i.skipped.push(o)}let u=[],l=await Promise.all(c);for(let d=0,h=l.length;d<h;d++)l[d]===!0?i.deleted.push(_[d]):(i.skipped.push(_[d]),u.push(d));let E=0;for(let d=0;d<u.length;d++){let h=u[d];i.original_records.splice(h-E,1),E++}return i.txn_time=Cl.getNextMonotonicTime(),i}catch(n){throw n}}a(Wv,"deleteRecords");zm.exports={deleteRecords:Wv}});var mi=f((lz,eR)=>{"use strict";var _n=b(),Qv=yl(),Jv=X(),{getSchemaPath:Xv}=j(),Zv=Si(),zv=I();eR.exports=jv;async function jv(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(_n.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(_n.isEmptyOrZeroLength(e.hash_values)&&!_n.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let _=e.records[c][s];_n.isEmpty(_)||e.hash_values.push(_)}}if(_n.isEmptyOrZeroLength(e.hash_values))return jm([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(_n.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=Xv(e.schema,e.table),i=await Jv.openEnvironment(n,e.table),o=await Qv.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await Zv(e,o)}catch(c){zv.error(`unable to write transaction due to ${c.message}`)}return jm(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(jv,"lmdbDeleteRecords");function jm(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(jm,"createDeleteResponse")});var Ml=f((hz,tR)=>{"use strict";var eH=m(),dz=_s();function Ul(e,t){let r=Object.create(null);if(t.length===1&&eH.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(Ul,"parseRow");function tH(e,t,r,s){let n=Ul(r,e);s.push(n)}a(tH,"searchAll");function rH(e,t,r,s){let n=Ul(r,e);s[t]=n}a(rH,"searchAllToMap");function sH(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(sH,"iterateDBI");function As(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(As,"pushResults");function nH(e,t,r,s,n,i){t.toString().endsWith(e)&&As(t,r,s,n,i)}a(nH,"endsWith");function iH(e,t,r,s,n,i){t.toString().includes(e)&&As(t,r,s,n,i)}a(iH,"contains");function aH(e,t,r,s,n,i){t>e&&As(t,r,s,n,i)}a(aH,"greaterThanCompare");function oH(e,t,r,s,n,i){t>=e&&As(t,r,s,n,i)}a(oH,"greaterThanEqualCompare");function cH(e,t,r,s,n,i){t<e&&As(t,r,s,n,i)}a(cH,"lessThanCompare");function _H(e,t,r,s,n,i){t<=e&&As(t,r,s,n,i)}a(_H,"lessThanEqualCompare");tR.exports={parseRow:Ul,searchAll:tH,searchAllToMap:rH,iterateDBI:sH,endsWith:nH,contains:iH,greaterThanCompare:aH,greaterThanEqualCompare:oH,lessThanCompare:cH,lessThanEqualCompare:_H,pushResults:As}});var gs=f((Rz,cR)=>{"use strict";var $r=X(),Sz=I(),lt=_s(),Yo=Ue(),ce=it().LMDB_ERRORS_ENUM,Tz=b(),uH=m(),Ko=Ml(),{parseRow:lH}=Ko,mz=require("lmdb"),{OVERFLOW_MARKER:rR,MAX_SEARCH_KEY_LENGTH:EH}=Yo;function sR(e,t,r,s=!1,n=void 0,i=void 0){return ps(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(sR,"iterateFullIndex");function Ri(e,t,r,s,n,i=!1,o=void 0,c=void 0,_=!1,u=!1){return ps(e,t,r,(l,E,d,h)=>{let x={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!_:!u,exclusiveStart:i===!0?u:_};return h===r?(x.values=!1,E.getRange(x).map(q=>({value:q}))):E.getRange(x)})}a(Ri,"iterateRangeBetween");function ps(e,t,r,s){let n=e.database||e,i=$r.openDBI(n,r);i[Yo.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&$r.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(ps,"setupTransaction");function nR(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(rR)){if(!n)if(r)n=$r.openDBI(e,r);else{let _=$r.listDBIs(e);for(let u=0,l=_.length;u<l&&(n=$r.openDBI(e,_[u]),!n[Yo.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(nR,"getOverflowCheck");function dH(e,t,r,s=!1,n=void 0,i=void 0){if(lt.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return ps(e,t,t,(o,c,_)=>(Wo(r),r=Ai(_,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(u=>lH(u.value,r))))}a(dH,"searchAll");function hH(e,t,r,s=!1,n=void 0,i=void 0){if(lt.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);Wo(r),r=Ai(e.database||e,r);let o=new Map;for(let{key:c,value:_}of sR(e,t,t,s,n,i))o.set(c,Ko.parseRow(_,r));return o}a(hH,"searchAllToMap");function fH(e,t,r=!1,s=void 0,n=void 0){if(lt.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=sR(e,void 0,t,r,s,n),c=o.transaction,_=nR(c.database,c,void 0,t);for(let{key:u,value:l}of o){let E=_(u,l);i[E]===void 0&&(i[E]=[]),i[E].push(l)}return i}a(fH,"iterateDBI");function SH(e,t){if(lt.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return $r.statDBI(e,t).entryCount}a(SH,"countAll");function TH(e,t,r,s,n=!1,i=void 0,o=void 0){return Yr(e,r,s),ps(e,t,r,(c,_,u,l)=>(s=lt.convertKeyValueToWrite(s),l===r?_.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:_.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(E=>({key:s,value:E}))))}a(TH,"equals");function mH(e,t,r){return Yr(e,t,r),$r.openDBI(e,t).getValuesCount(r)}a(mH,"count");function RH(e,t,r,s,n=!1,i=void 0,o=void 0){return Yr(e,r,s),ps(e,null,r,(c,_)=>{s=lt.convertKeyValueToWrite(s);let u=!0;typeof s=="number"&&(u=!1);let l;if(n===!0){let E;for(let d of _.getKeys({transaction:c,start:s}))if(!d.startsWith(s)){E=d;break}return E!==void 0&&(Number.isInteger(o)?o++:i++),l=_.getRange({transaction:c,start:E,end:void 0,reverse:n,limit:i,offset:o}).map(d=>{let{key:h}=d;if(h!==E){if(h.toString().startsWith(s))return d;if(u===!0)return l.DONE}}),l.filter(d=>d)}else return l=_.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(E=>{if(E.key.toString().startsWith(s))return E;if(u===!0)return l.DONE}),u?l:l.filter(E=>E)})}a(RH,"startsWith");function AH(e,t,r,s,n=!1,i=void 0,o=void 0){return iR(e,t,r,s,n,i,o,!0)}a(AH,"endsWith");function iR(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Yr(e,r,s),ps(e,null,r,(_,u,l,E)=>{let d=nR(l,_,E,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:_,end:n?!1:void 0,reverse:n}).flatMap(h=>{let T=h.toString();return T.endsWith(rR)?u.getValues(h,{transaction:_}).map(R=>{let g=d(h,R);if(c?g.endsWith(s):g.includes(s))return{key:g,value:R}}).filter(R=>R):(c?T.endsWith(s):T.includes(s))?u[Yo.DBI_DEFINITION_NAME].is_hash_attribute?{key:h,value:h}:u.getValues(h,{transaction:_}).map(R=>({key:h,value:R})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(iR,"contains");function pH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),Ri(e,t,r,s,_,n,i,o,!0,!1)}a(pH,"greaterThan");function gH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),Ri(e,t,r,s,_,n,i,o,!1,!1)}a(gH,"greaterThanEqual");function NH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Ri(e,t,r,_,s,n,i,o,!1,!0)}a(NH,"lessThan");function OH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Ri(e,t,r,_,s,n,i,o,!1,!1)}a(OH,"lessThanEqual");function IH(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(lt.validateEnv(e),r===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ce.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ce.END_VALUE_REQUIRED);if(s=lt.convertKeyValueToWrite(s),n=lt.convertKeyValueToWrite(n),s>n)throw new Error(ce.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ri(e,t,r,s,n,i,o,c)}a(IH,"between");function bH(e,t,r,s){lt.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(Wo(r),r=Ai(n,r),s===void 0)throw new Error(ce.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=Ko.parseRow(c,r)),o}a(bH,"searchByHash");function wH(e,t,r){lt.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(wH,"checkHashExists");function CH(e,t,r,s,n=[]){return oR(e,t,r,s,n),aR(e,t,r,s,n).map(i=>i[1])}a(CH,"batchSearchByHash");function LH(e,t,r,s,n=[]){oR(e,t,r,s,n);let i=new Map;for(let[o,c]of aR(e,t,r,s,n))i.set(o,c);return i}a(LH,"batchSearchByHashToMap");function aR(e,t,r,s,n=[]){return ps(e,t,t,(i,o,c)=>{r=Ai(c,r);let _=r.length<3;return s.map(u=>{let l=c.dbis[t].get(u,{transaction:i,lazy:_});if(l)return[u,Ko.parseRow(l,r)];n.push(u)}).filter(u=>u)})}a(aR,"batchHashSearch");function oR(e,t,r,s,n){if(lt.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(Wo(r),s==null)throw new Error(ce.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ce.IDS_MUST_BE_ITERABLE)}a(oR,"initializeBatchSearchByHash");function Wo(e){if(!Array.isArray(e))throw e===void 0?new Error(ce.FETCH_ATTRIBUTES_REQUIRED):new Error(ce.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Wo,"validateFetchAttributes");function Yr(e,t,r){if(lt.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.SEARCH_VALUE_REQUIRED);if(r?.length>EH)throw new Error(ce.SEARCH_VALUE_TOO_LARGE)}a(Yr,"validateComparisonFunctions");function Ai(e,t){return t.length===1&&uH.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=$r.listDBIs(e)),t}a(Ai,"setGetWholeRowAttributes");cR.exports={searchAll:dH,searchAllToMap:hH,count:mH,countAll:SH,equals:TH,startsWith:RH,endsWith:AH,contains:iR,searchByHash:bH,setGetWholeRowAttributes:Ai,batchSearchByHash:CH,batchSearchByHashToMap:LH,checkHashExists:wH,iterateDBI:fH,greaterThan:pH,greaterThanEqual:gH,lessThan:NH,lessThanEqual:OH,between:IH}});var pi=f((gz,ER)=>{var _R=require("lodash"),uR=te(),W=require("joi"),yH=b(),{hdb_schema_table:vt,checkValidTable:lR}=Wt(),{handleHDBError:UH,hdb_errors:MH}=L(),{HTTP_STATUS_CODES:DH}=MH,pz=W.object({schema:vt,table:vt,hash_values:W.array().min(0).items(W.alternatives(W.string(),W.number())).required(),get_attributes:W.array().min(1).items(vt).required()}),PH=W.object({schema:vt,table:vt,search_attribute:vt,search_value:W.any().required(),get_attributes:W.array().min(1).items(vt).required(),desc:W.bool(),limit:W.number().integer().min(1),offset:W.number().integer().min(0)}),BH=W.object({schema:vt,table:vt,operator:W.string().valid("and","or").default("and").lowercase(),offset:W.number().integer().min(0),limit:W.number().integer().min(1),get_attributes:W.array().min(1).items(vt).required(),conditions:W.array().min(1).items(W.object({search_attribute:vt,search_type:W.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:W.when("search_type",{switch:[{is:"equals",then:W.any()},{is:"between",then:W.array().items(W.alternatives([W.string(),W.number()])).length(2)}],otherwise:W.alternatives(W.string(),W.number())}).required()})).required()});ER.exports=function(e,t){let r=null;switch(t){case"value":r=uR.validateBySchema(e,PH);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(lR("schema",e.schema)),i(lR("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=uR.validateBySchema(e,BH);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=yH.checkGlobalSchemaTable(e.schema,e.table);if(n)return UH(new Error,n,DH.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,c=[...e.get_attributes];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let u=0,l=e.conditions.length;u<l;u++){let E=e.conditions[u];c.push(E.search_attribute)}let _=_R.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!_R.some(o,l=>l===u||l.attribute===u||l.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var Dl=f((Oz,dR)=>{"use strict";var vH=X(),HH=pi(),{getSchemaPath:qH}=j();dR.exports=GH;function GH(e){let t=HH(e,"hashes");if(t)throw t;let r=qH(e.schema,e.table);return vH.openEnvironment(r,e.table)}a(GH,"initialize")});var Pl=f((bz,hR)=>{"use strict";var FH=gs(),xH=Dl();hR.exports=VH;async function VH(e){let t=await xH(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return FH.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(VH,"lmdbGetDataByHash")});var un=f((Cz,fR)=>{"use strict";var Qo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(Qo,"SearchByHashObject");fR.exports=Qo});var TR=f((Uz,SR)=>{"use strict";var yz=un(),kH=gs(),$H=Dl();SR.exports=YH;async function YH(e){let t=await $H(e),r=global.hdb_schema[e.schema][e.table];return kH.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(YH,"lmdbSearchByHash")});var Ht=f((Dz,mR)=>{"use strict";var Jo=class{constructor(t,r,s,n,i,o,c,_=!1,u=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=_,this.limit=u,this.offset=l}};a(Jo,"SearchObject");mR.exports=Jo});var Xo=f((Bz,OR)=>{"use strict";var ve=gs(),KH=X(),WH=b(),C=Ue(),Ns=m(),QH=os(),RR=it().LMDB_ERRORS_ENUM,{compareKeys:ln}=require("ordered-binary"),{getSchemaPath:JH}=j(),Sr=Ns.SEARCH_WILDCARDS;async function XH(e,t,r){let s;e.schema===Ns.SYSTEM_SCHEMA_NAME?s=QH[e.table]:s=global.hdb_schema[e.schema][e.table];let n=NR(e,s.hash_attribute,r,t);return pR(e,n,s.hash_attribute,r)}a(XH,"prepSearch");async function pR(e,t,r,s){let n=JH(e.schema,e.table),i=await KH.openEnvironment(n,e.table),o=gR(i,e,t,r),c=o.transaction||i;if([C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,C.SEARCH_TYPES.SEARCH_ALL,C.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(zH(e,r)===!1){let l=e.search_attribute;if(l===r)return s?AR(o,()=>!0):o.map(d=>({[r]:d.key}));let E=a(d=>({[r]:d.value,[l]:d.key}),"toObject");return s?AR(o,E):o.map(E)}let u=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?ve.batchSearchByHashToMap(c,r,e.get_attributes,u):ve.batchSearchByHash(c,r,e.get_attributes,u)}a(pR,"executeSearch");function gR(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:_}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,_=Number.isInteger(_)?_:void 0,r){case C.SEARCH_TYPES.EQUALS:n=ve.equals(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.CONTAINS:n=ve.contains(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.ENDS_WITH:case C.SEARCH_TYPES._ENDS_WITH:n=ve.endsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.STARTS_WITH:case C.SEARCH_TYPES._STARTS_WITH:n=ve.startsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return ve.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return ve.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case C.SEARCH_TYPES.SEARCH_ALL:return ve.searchAll(e,s,t.get_attributes,o,c,_);case C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return ve.searchAllToMap(e,s,t.get_attributes,o,c,_);case C.SEARCH_TYPES.BETWEEN:n=ve.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,_);break;case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:n=ve.greaterThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:n=ve.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:n=ve.lessThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:n=ve.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;default:return Object.create(null)}return n}a(gR,"searchByType");function ZH(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case C.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case C.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case C.SEARCH_TYPES.ENDS_WITH:case C.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case C.SEARCH_TYPES.STARTS_WITH:case C.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case C.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return ln(i,s[0])>=0&&ln(i,s[1])<=0};case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:return n=>ln(n[r],s)>0;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>ln(n[r],s)>=0;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:return n=>ln(n[r],s)<0;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>ln(n[r],s)<=0;default:return Object.create(null)}}a(ZH,"filterByType");function AR(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(AR,"createMapFromIterable");function zH(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(zH,"checkToFetchMore");function NR(e,t,r,s){if(WH.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Sr.indexOf(n)>-1)return r===!0?C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:C.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Sr[0])<0&&n.indexOf(Sr[1])<0)return c===!0?r===!0?C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:C.SEARCH_TYPES.EQUALS;if(Sr.indexOf(i)>=0&&Sr.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),C.SEARCH_TYPES.CONTAINS;if(Sr.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),C.SEARCH_TYPES.ENDS_WITH;if(Sr.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),C.SEARCH_TYPES.STARTS_WITH;if(n.includes(Sr[0])||n.includes(Sr[1]))return C.SEARCH_TYPES.EQUALS;throw new Error(RR.UNKNOWN_SEARCH_TYPE)}else switch(s){case Ns.VALUE_SEARCH_COMPARATORS.BETWEEN:return C.SEARCH_TYPES.BETWEEN;case Ns.VALUE_SEARCH_COMPARATORS.GREATER:return C.SEARCH_TYPES.GREATER_THAN;case Ns.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return C.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ns.VALUE_SEARCH_COMPARATORS.LESS:return C.SEARCH_TYPES.LESS_THAN;case Ns.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return C.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(RR.UNKNOWN_SEARCH_TYPE)}}a(NR,"createSearchTypeFromSearchObject");OR.exports={executeSearch:pR,createSearchTypeFromSearchObject:NR,prepSearch:XH,searchByType:gR,filterByType:ZH}});var bR=f((qz,IR)=>{"use strict";var Hz=Ht(),jH=pi(),eq=b(),tq=m(),rq=Xo();IR.exports=sq;function sq(e,t){if(!eq.isEmpty(t)&&tq.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=jH(e,"value");if(s)throw s;let n=!0;return rq.prepSearch(e,t,n)}a(sq,"lmdbGetDataByValue")});var En=f((xz,wR)=>{"use strict";var Fz=Ht(),nq=pi(),iq=b(),aq=m(),oq=Xo();wR.exports=cq;async function cq(e,t){if(!iq.isEmpty(t)&&aq.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=nq(e,"value");if(s)throw s;return oq.prepSearch(e,t,!1)}a(cq,"lmdbSearchByValue")});var LR=f(($z,CR)=>{"use strict";var kz=Ue(),Zo=class{constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}};a(Zo,"SearchByConditionsObject");var zo=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(zo,"SearchCondition");var jo=class{constructor(t,r){this.attribute=t,this.desc=r}};a(jo,"SortAttribute");CR.exports={SearchByConditionsObject:Zo,SearchCondition:zo,SortAttribute:jo}});var PR=f((Wz,DR)=>{"use strict";var Kz=LR().SearchByConditionsObject,_q=Ht(),uq=pi(),Bl=gs(),ec=Ue(),MR=Xo(),lq=Ml(),Eq=require("lodash"),{getSchemaPath:dq}=j(),yR=X(),{handleHDBError:hq,hdb_errors:fq}=L(),{HTTP_STATUS_CODES:Sq}=fq,Tq=1e8;DR.exports=mq;async function mq(e){let t=uq(e,"conditions");if(t)throw hq(t,t.message,Sq.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=dq(e.schema,e.table),s=await yR.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)yR.openDBI(s,u.search_attribute);let i=Eq.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let l=u.search_type;l===ec.SEARCH_TYPES.EQUALS?u.estimated_count=Bl.count(s,u.search_attribute,u.search_value):l===ec.SEARCH_TYPES.CONTAINS||l===ec.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=Tq}return u.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await UR(o,e,i[0],n.hash_attribute),_;if(!e.operator||e.operator.toLowerCase()==="and"){let u=s.dbis[n.hash_attribute],l=i.slice(1).map(MR.filterByType),E=l.length,d=Bl.setGetWholeRowAttributes(s,e.get_attributes);_=c.map(h=>u.get(h,{transaction:o,lazy:!0})),E>0&&(_=_.filter(h=>{for(let T=0;T<E;T++)if(!l[T](h))return!1;return!0})),(e.offset||e.limit!==void 0)&&(_=_.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),_=_.map(h=>lq.parseRow(h,d))}else{for(let E=1;E<i.length;E++){let d=i[E],h=await UR(o,e,d,n.hash_attribute);c=c.concat(h)}let u=new Set,l=e.offset||0;c=c.filter(E=>u.has(E)?!1:(u.add(E),!0)).slice(l,e.limit&&e.limit+l),_=Bl.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return _.onDone=()=>{o.done()},_}a(mq,"lmdbSearchByConditions");async function UR(e,t,r,s){let n=new _q(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===ec.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,MR.searchByType(e,n,i,s).map(o=>o.value)}a(UR,"executeConditionSearch")});var gi=f((Jz,BR)=>{"use strict";var Rq=m().OPERATIONS_ENUM,tc=class{constructor(t,r,s,n=void 0){this.operation=Rq.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(tc,"DeleteObject");BR.exports=tc});var vl=f((Zz,kR)=>{"use strict";var GR=Ht(),FR=gi(),xR=En(),VR=mi(),Ke=m(),vR=b(),HR=X(),{getTransactionAuditStorePath:Aq,getSchemaPath:pq}=j(),qR=I();kR.exports=gq;async function gq(e){try{if(vR.isEmpty(global.hdb_schema[e.schema])||vR.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Nq(e),await Oq(e);let t=pq(e.schema,e.table);try{await HR.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")qR.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Aq(e.schema,e.table);await HR.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")qR.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(gq,"lmdbDropTable");async function Nq(e){let t=new GR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await xR(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 FR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await VR(n)}a(Nq,"deleteAttributesFromSystem");async function Oq(e){let t=new GR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await xR(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 FR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await VR(n)}catch(i){throw i}}a(Oq,"dropTableFromSystem")});var YR=f((jz,$R)=>{"use strict";var Iq=require("fs-extra"),bq=Ht(),wq=un(),Cq=gi(),Lq=vl(),yq=mi(),Uq=Pl(),Mq=En(),Tr=m(),{getSchemaPath:Dq}=j(),{handleHDBError:Pq,hdb_errors:Bq}=L(),{HDB_ERROR_MSGS:vq,HTTP_STATUS_CODES:Hq}=Bq;$R.exports=qq;async function qq(e){let t;try{t=await Gq(e.schema);let r=new bq(Tr.SYSTEM_SCHEMA_NAME,Tr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await Mq(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await Lq(c)}catch(_){if(_.message!=="invalid environment")throw _}}let n=new Cq(Tr.SYSTEM_SCHEMA_NAME,Tr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await yq(n);let i=Dq(t);await Iq.remove(i)}catch(r){throw r}}a(qq,"lmdbDropSchema");async function Gq(e){let t=new wq(Tr.SYSTEM_SCHEMA_NAME,Tr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await Uq(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw Pq(new Error,vq.SCHEMA_NOT_FOUND(e),Hq.NOT_FOUND,void 0,void 0,!0);return s}a(Gq,"validateDropSchema")});var Hl=f((t2,KR)=>{"use strict";var rc=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(rc,"CreateTableObject");KR.exports=rc});var QR=f((n2,WR)=>{"use strict";var Fq=require("fs-extra"),sc=X(),{getTransactionAuditStorePath:xq}=j(),ql=Ue(),s2=Hl();WR.exports=Vq;async function Vq(e){let t;try{let r=xq(e.schema,e.table);await Fq.mkdirp(r),t=await sc.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{sc.createDBI(t,ql.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),sc.createDBI(t,ql.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),sc.createDBI(t,ql.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(Vq,"createTransactionsAuditEnvironment")});var zR=f((a2,ZR)=>{"use strict";var Gl=m(),JR=X(),kq=zs(),{getSystemSchemaPath:$q,getSchemaPath:Yq}=j(),Kq=os(),Wq=ho(),Fl=Eo(),Qq=I(),Jq=QR(),Vl=Kq.hdb_table,XR=[];for(let e=0;e<Vl.attributes.length;e++)XR.push(Vl.attributes[e].attribute);ZR.exports=Xq;async function Xq(e,t){let r=Yq(t.schema,t.table),s=new Fl(t.schema,t.table,Gl.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Fl(t.schema,t.table,Gl.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Fl(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await JR.createEnvironment(r,t.table),e!==void 0){let o=await JR.openEnvironment($q(),Gl.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await kq.insertRecords(o,Vl.hash_attribute,XR,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await xl(s),await xl(n),await xl(i)}await Jq(t)}catch(o){throw o}}a(Xq,"lmdbCreateTable");async function xl(e){try{await Wq(e)}catch(t){Qq.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(xl,"createAttribute")});var eA=f((c2,jR)=>{"use strict";var Zq=fo(),zq=mo(),jq=Ho(),Ni=m(),eG=zs().updateRecords,tG=X(),{getSchemaPath:rG}=j(),sG=Si(),nG=I();jR.exports=iG;async function iG(e){try{let{schema_table:t,attributes:r}=Zq(e);zq(e,r,t.hash_attribute),e.schema!==Ni.SYSTEM_SCHEMA_NAME&&(r.includes(Ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await jq(e.hdb_auth_header,t,r),n=rG(e.schema,e.table),i=await tG.openEnvironment(n,e.table),o=await eG(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await sG(e,o)}catch(c){nG.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(iG,"lmdbUpdateRecords")});var rA=f((u2,tA)=>{"use strict";var aG=m().OPERATIONS_ENUM,nc=class{constructor(t,r,s,n=void 0){this.operation=aG.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(nc,"UpsertObject");tA.exports=nc});var nA=f((d2,sA)=>{"use strict";var E2=rA(),oG=fo(),cG=mo(),_G=Ho(),Oi=m(),uG=zs().upsertRecords,lG=X(),{getSchemaPath:EG}=j(),dG=Si(),hG=I(),{handleHDBError:fG,hdb_errors:SG}=L();sA.exports=TG;async function TG(e){let t;try{t=oG(e)}catch(_){throw fG(_,_.message,SG.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;cG(e,s,r.hash_attribute),e.schema!==Oi.SYSTEM_SCHEMA_NAME&&(s.includes(Oi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Oi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Oi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Oi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await _G(e.hdb_auth_header,r,s),i=EG(e.schema,e.table),o=await lG.openEnvironment(i,e.table),c=await uG(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await dG(e,c)}catch(_){hG.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(TG,"lmdbUpsertRecords")});var uA=f((f2,_A)=>{"use strict";var mG=Ht(),iA=b(),aA=I(),RG=En(),oA=m(),AG=yl().deleteRecords,pG=X(),{getSchemaPath:gG}=j(),{promisify:NG}=require("util"),OG=NG(setTimeout),cA=1e4,IG=10;_A.exports=bG;async function bG(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(iA.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 mG(e.schema,e.table,oA.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=Array.from(await RG(n,oA.VALUE_SEARCH_COMPARATORS.LESS))}catch(n){throw aA.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return iA.isEmptyOrZeroLength(s)?(aA.trace("No records found to delete"),{message:"No records found to delete"}):await wG(e,s,t)}a(bG,"lmdbDeleteRecordsBefore");async function wG(e,t,r){let s=gG(e.schema,e.table),n=await pG.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,c=t.length;o<c;o+=cA){let _=t.slice(o,o+cA),u=[];for(let l=0,E=_.length;l<E;l++)u.push(_[l][r]);try{let l=await AG(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(l.deleted),i.skipped_hashes=i.skipped_hashes.concat(l.skipped)}catch(l){throw l}await OG(IG)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(wG,"chunkDeletes")});var EA=f((T2,lA)=>{"use strict";var ic=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(ic,"DeleteBeforeObject");lA.exports=ic});var hA=f((R2,dA)=>{"use strict";var ac=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(ac,"DeleteAuditLogsBeforeResults");dA.exports=ac});var TA=f((g2,SA)=>{"use strict";var kl=X(),{getTransactionAuditStorePath:CG}=j(),p2=EA(),Ii=Ue(),LG=b(),fA=hA(),yG=require("util").promisify,UG=yG(setTimeout),MG=1e4,DG=100;SA.exports=PG;async function PG(e){let t=CG(e.schema,e.table),r=await kl.openEnvironment(t,e.table,!0),s=kl.listDBIs(r);kl.initializeDBIs(r,Ii.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new fA;do n=await BG(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 UG(DG);while(n.transactions_deleted>0);return i}a(PG,"deleteAuditLogsBefore");async function BG(e,t){let r=new fA;try{let s=e.dbis[Ii.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Ii.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];LG.isEmpty(c)||(n=e.dbis[Ii.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let _=0;_<o.hash_values.length;_++)n=e.dbis[Ii.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[_],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>MG)break}return await n,r}catch(s){throw s}}a(BG,"deleteTransactions")});var RA=f((O2,mA)=>{"use strict";var oc=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(oc,"DropAttributeObject");mA.exports=oc});var pA=f((w2,AA)=>{"use strict";var vG=Ht(),HG=gi(),b2=RA(),Zt=m(),qG=b(),$l=X(),GG=os(),FG=En(),xG=mi(),{getSchemaPath:VG}=j();AA.exports=kG;async function kG(e,t=!0){let r;e.schema===Zt.SYSTEM_SCHEMA_NAME?r=GG[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await YG(e),n=VG(e.schema,e.table),i=await $l.openEnvironment(n,e.table);return t===!0&&await $G(e,i,r.hash_attribute),$l.dropDBI(i,e.attribute),s}a(kG,"lmdbDropAttribute");async function $G(e,t,r){let s=$l.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:_}of s.getRange({start:!1,versions:!0})){let u={};for(let l in c)l!==i&&(u[l]=c[l]);n=t.dbis[r].put(o,u,_)}await n}a($G,"removeAttributeFromAllObjects");async function YG(e){let t=new vG(Zt.SYSTEM_SCHEMA_NAME,Zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await FG(t)).filter(o=>o[Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(qG.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new HG(Zt.SYSTEM_SCHEMA_NAME,Zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return xG(i)}a(YG,"dropAttributeFromSystem")});var wA=f((y2,bA)=>{"use strict";var Yl=X(),dn=Ue(),L2=_s(),Kl=m(),gA=b(),{getTransactionAuditStorePath:KG}=j(),WG=gs(),cc=on(),QG=I();bA.exports=JG;async function JG(e){let t=KG(e.schema,e.table),r=await Yl.openEnvironment(t,e.table,!0),s=Yl.listDBIs(r);Yl.initializeDBIs(r,dn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Kl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return NA(r,e.search_values);case Kl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,ZG(r,e.search_values,n);case Kl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return XG(r,e.search_values);default:return NA(r)}}a(JG,"readAuditLog");function NA(e,t=[0,Date.now()]){gA.isEmpty(t[0])&&(t[0]=0),gA.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[dn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new cc,n))}a(NA,"searchTransactionsByTimestamp");function XG(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[dn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,IA(e,i))}return Object.fromEntries(r)}a(XG,"searchTransactionsByUsername");function ZG(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=WG.equals(e,dn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,dn.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:E}of l){let d=Number(E);s.has(d)?s.get(d).push(u.toString()):s.set(d,[u.toString()])}}let n=Array.from(s.keys()),i=IA(e,n),o=new Map;for(let c=0;c<i.length;c++){let _=i[c],u=_.timestamp,l=s.get(u);OA(_,"records",r,l,o),OA(_,"original_records",r,l,o)}return Object.fromEntries(o)}a(ZG,"searchTransactionsByHashValues");function OA(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],_=c[r].toString();if(s.indexOf(_)>=0)if(n.has(_)){let u=n.get(_),l=u[u.length-1];if(l.timestamp===i)l[t]=[c];else{let E=new cc(e.operation,e.user_name,i,void 0);E[t]=[c],u.push(E)}}else{let u=new cc(e.operation,e.user_name,i,void 0);u[t]=[c],n.set(_,[u])}}}a(OA,"loopRecords");function IA(e,t){let r=[];try{let s=e.dbis[dn.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 cc,i);r.push(o)}}catch(i){QG.warn(i)}return r}catch(s){throw s}}a(IA,"batchSearchTransactions")});var LA=f((M2,CA)=>{"use strict";var{getSchemaPath:zG}=j(),jG=X();CA.exports={writeTransaction:eF};async function eF(e,t,r){let s=zG(e,t);return(await jG.openEnvironment(s,t)).transaction(r)}a(eF,"writeTransaction")});var DA=f((P2,MA)=>{"use strict";var{getSchemaPath:yA}=j(),UA=X();MA.exports={flush:tF,resetReadTxn:rF};async function tF(e,t){return(await UA.openEnvironment(yA(e,t),t.toString())).flushed}a(tF,"flush");async function rF(e,t){try{(await UA.openEnvironment(yA(e,t),t.toString())).resetReadTxn()}catch{}}a(rF,"resetReadTxn")});var vA=f((v2,BA)=>{"use strict";var sF=I(),{handleHDBError:nF}=L(),iF=wu(),aF=ho(),oF=wl(),cF=Wm(),_F=mi(),uF=Pl(),lF=TR(),EF=bR(),dF=En(),hF=PR(),fF=YR(),SF=zR(),TF=eA(),mF=nA(),RF=uA(),AF=TA(),pF=vl(),gF=pA(),NF=wA(),OF=LA(),PA=DA(),_c=class extends iF{async searchByConditions(t){return hF(t)}async getDataByHash(t){return await uF(t)}async searchByHash(t){return await lF(t)}async getDataByValue(t,r){return await EF(t,r)}async searchByValue(t){return await dF(t)}async createSchema(t){return await cF(t)}async dropSchema(t){return await fF(t)}async createTable(t,r){return await SF(t,r)}async dropTable(t){return await pF(t)}async createAttribute(t){return await aF(t)}async createRecords(t){return await oF(t)}async updateRecords(t){return await TF(t)}async upsertRecords(t){try{return await mF(t)}catch(r){throw nF(r,null,null,sF.ERR,r)}}async deleteRecords(t){return await _F(t)}async deleteRecordsBefore(t){return await RF(t)}async dropAttribute(t){return await gF(t)}async deleteAuditLogsBefore(t){return await AF(t)}async readAuditLog(t){return await NF(t)}writeTransaction(t,r,s){return OF.writeTransaction(t,r,s)}flush(t,r){return PA.flush(t,r)}resetReadTxn(t,r){return PA.resetReadTxn(t,r)}};a(_c,"LMDBBridge");BA.exports=_c});var Qt=f((q2,qA)=>{"use strict";var IF=vA(),bF=wu(),wF=B();wF.initSync();var HA;function CF(){return HA instanceof bF?HA:new IF}a(CF,"getBridge");qA.exports=CF()});var VA=f((F2,xA)=>{"use strict";var GA=require("lodash"),bi=require("mathjs"),LF=require("jsonata"),FA=b();xA.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?GA.uniqWith(e,GA.isEqual):e,searchJSON:yF,mad:wi.bind(null,bi.mad),mean:wi.bind(null,bi.mean),mode:wi.bind(null,bi.mode),prod:wi.bind(null,bi.prod),median:wi.bind(null,bi.median)};function wi(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(wi,"aggregateFunction");function yF(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(FA.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),FA.isEmpty(this.__ala__.res[r])){let s=LF(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(yF,"searchJSON")});var $A=f((V2,kA)=>{"use strict";var le=require("moment"),Wl="YYYY-MM-DDTHH:mm:ss.SSSZZ";le.suppressDeprecationWarnings=!0;kA.exports={current_date:()=>le().utc().format("YYYY-MM-DD"),current_time:()=>le().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return le(e).utc().format("YYYY");case"month":return le(e).utc().format("MM");case"day":return le(e).utc().format("DD");case"hour":return le(e).utc().format("HH");case"minute":return le(e).utc().format("mm");case"second":return le(e).utc().format("ss");case"millisecond":return le(e).utc().format("SSS");default:break}},date:e=>le(e).utc().format(Wl),date_format:(e,t)=>le(e).utc().format(t),date_add:(e,t,r)=>le(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>le(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=le(e).utc(),n=le(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>le().utc().valueOf(),get_server_time:()=>le().format(Wl),offset_utc:(e,t)=>le(e).utc().utcOffset(t).format(Wl)}});var QA=f((k2,WA)=>{"use strict";var UF=require("@turf/area"),MF=require("@turf/length"),DF=require("@turf/circle"),PF=require("@turf/difference"),BF=require("@turf/distance"),vF=require("@turf/boolean-contains"),HF=require("@turf/boolean-equal"),qF=require("@turf/boolean-disjoint"),GF=require("@turf/helpers"),YA=m(),G=b();WA.exports={geoArea:FF,geoLength:xF,geoCircle:VF,geoDifference:kF,geoDistance:KA,geoNear:$F,geoContains:YF,geoEqual:KF,geoCrosses:WF,geoConvert:QF};var Ql="geo1 is required",Jl="geo2 is required";function FF(e){if(G.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),UF.default(e)}a(FF,"geoArea");function xF(e,t){if(G.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),MF.default(e,{units:t||"kilometers"})}a(xF,"geoLength");function VF(e,t,r){if(G.isEmpty(e))throw new Error("point is required");if(G.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),DF.default(e,t,{units:r||"kilometers"})}a(VF,"geoCircle");function kF(e,t){if(G.isEmpty(e))throw new Error("poly1 is required");if(G.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),PF(e,t)}a(kF,"geoDifference");function KA(e,t,r){if(G.isEmpty(e))throw new Error("point1 is required");if(G.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),BF.default(e,t,{units:r||"kilometers"})}a(KA,"geoDistance");function $F(e,t,r,s){if(G.isEmpty(e))throw new Error("point1 is required");if(G.isEmpty(t))throw new Error("point2 is required");if(G.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return KA(e,t,s)<=r}a($F,"geoNear");function YF(e,t){if(G.isEmpty(e))throw new Error(Ql);if(G.isEmpty(e))throw new Error(Jl);return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),vF.default(e,t)}a(YF,"geoContains");function KF(e,t){if(G.isEmpty(e))throw new Error(Ql);if(G.isEmpty(e))throw new Error(Jl);return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),HF.default(e,t)}a(KF,"geoEqual");function WF(e,t){if(G.isEmpty(e))throw new Error(Ql);if(G.isEmpty(e))throw new Error(Jl);return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),!qF.default(e,t)}a(WF,"geoCrosses");function QF(e,t,r){if(G.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(G.isEmpty(t))throw new Error("geo_type is required");if(G.isEmpty(YA.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(YA.GEO_CONVERSION_ENUM).join(",")}`);return GF[t](e,r)}a(QF,"geoConvert")});var uc=f((Y2,JA)=>{var Os=VA(),Et=$A(),zt=QA();JA.exports=e=>{e.aggr.mad=e.aggr.MAD=Os.mad,e.aggr.mean=e.aggr.MEAN=Os.mean,e.aggr.mode=e.aggr.MODE=Os.mode,e.aggr.prod=e.aggr.PROD=Os.prod,e.aggr.median=e.aggr.MEDIAN=Os.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Os.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Os.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Et.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Et.current_time,e.fn.extract=e.fn.EXTRACT=Et.extract,e.fn.date=e.fn.DATE=Et.date,e.fn.date_format=e.fn.DATE_FORMAT=Et.date_format,e.fn.date_add=e.fn.DATE_ADD=Et.date_add,e.fn.date_sub=e.fn.DATE_SUB=Et.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Et.date_diff,e.fn.now=e.fn.NOW=Et.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Et.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Et.get_server_time,e.fn.getdate=e.fn.GETDATE=Et.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Et.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=zt.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=zt.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=zt.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=zt.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=zt.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=zt.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=zt.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=zt.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=zt.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=zt.geoNear}});var zA=f((K2,ZA)=>{"use strict";var Ci=require("lodash"),Ie=require("alasql");Ie.options.cache=!1;var JF=uc(),XA=require("clone"),lc=require("recursive-iterator"),D=I(),v=b(),hn=Qt(),XF=m(),{hdb_errors:ZF}=L(),zF="IS NULL",qt="There was a problem performing this search. Please check the logs and try again.";JF(Ie);var Ec=class{constructor(t,r){if(v.isEmpty(t))throw D.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(),v.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!v.isEmptyOrZeroLength(s))return D.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw D.error("Error thrown from checkEmptySQL in SQLSearch class method search."),D.error(s),new Error(qt)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw D.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),D.error(s),new Error(qt)}if(Object.keys(this.data).length===0)return D.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw D.error("Error thrown from processJoins in SQLSearch class method search."),D.error(s),new Error(qt)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw D.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),D.error(s),new Error(qt)}try{return t=await this._finalSQL(),t}catch(s){throw D.error("Error thrown from finalSQL in SQLSearch class method search."),D.error(s),new Error(qt)}}_getColumns(){let t=new lc(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(XA(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Ci.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(v.isEmpty(this.statement.where)){D.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new lc(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!v.isEmpty(r)&&r.right)if(v.isNotEmptyAndHasValue(r.right.value)){let s=v.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new Ie.yy.LogicValue({value:s}):r.right instanceof Ie.yy.StringValue&&!v.isEmpty(s)&&v.autoCasterIsNumberCheck(s.toString())&&(r.right=new Ie.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=v.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new Ie.yy.LogicValue({value:i}):s instanceof Ie.yy.StringValue&&v.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new Ie.yy.NumValue({value:i}))});if(t){D.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new lc(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(!v.isEmpty(XF.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(v.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(v.isEmptyOrZeroLength(r.left.columnid)||v.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(v.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!v.isEmpty(r.right.value)||!v.isEmpty(r.left.value)?s.add(v.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let _=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<_.length;u++)if(_[u].value)s.add(_[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(v.isEmptyOrZeroLength(this.all_table_attributes)&&v.isEmptyOrZeroLength(this.statement.from)&&v.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&&Ci.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(v.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);v.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(v.isEmptyOrZeroLength(this.all_table_attributes)&&!v.isEmptyOrZeroLength(this.columns.columns))return t;if(v.isEmptyOrZeroLength(this.all_table_attributes)&&v.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Ie.promise(r)}catch(r){throw D.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),D.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(XA(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(v.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(zF)>-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=Ci.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},_=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(_=!0),!v.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!v.isEmptyOrZeroLength(this.exact_search_values[u].values))if(_)try{c.hash_values=Array.from(this.exact_search_values[u].values);let l=await hn.getDataByHash(c);for(let E of c.hash_values)l.get(E)&&!this.data[i].__merged_data[E]&&(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,E))}catch(l){throw D.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),D.error(l),new Error(qt)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async l=>{let E=Object.assign({},c);E.search_value=l;let d=await hn.getDataByValue(E);for(let[h,T]of d)this.data[i].__merged_data[h]?this._updateMergedAttribute(i,h,n.attribute,T[n.attribute]):(this.data[i].__merged_data[h]=[...s[i]],this._updateMergedAttribute(i,h,n.attribute,T[n.attribute]),this._setMergedHashAttribute(i,v.autoCast(h)))}))}catch(l){throw D.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),D.error(l),new Error(qt)}else if(!v.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!v.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let l=this.comparator_search_values[u].comparators;for(let E=0,d=l.length;E<d;E++){let h=l[E];c.search_attribute=h.attribute,c.search_value=h.search_value;let T=await hn.getDataByValue(c,h.operation);if(_)for(let[R]of T)this.data[i].__merged_data[R]||(this.data[i].__merged_data[R]=[...s[i]],this._setMergedHashAttribute(i,v.autoCast(R)));else for(let[R,g]of T)this.data[i].__merged_data[R]?this._updateMergedAttribute(i,R,n.attribute,g[n.attribute]):(this.data[i].__merged_data[R]=[...s[i]],this._updateMergedAttribute(i,R,n.attribute,g[n.attribute]),this._setMergedHashAttribute(i,v.autoCast(R)))}}catch(l){throw D.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),D.error(l),new Error(qt)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await hn.getDataByValue(c);if(_)for(let[E]of l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,v.autoCast(E)));else for(let[E,d]of l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,d[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,d[n.attribute]),this._setMergedHashAttribute(i,v.autoCast(E)))}catch(l){throw D.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),D.error(l),new Error(qt)}}}_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 Ie.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 Ie.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new Ie.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 Ie.yy.FuncValue:new Ie.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(h=>{h.joinmode&&h.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(h.table);let T=h.joinmode+" JOIN ? AS "+(h.as?h.as:h.table.tableid);h.on&&(T+=" ON "+h.on.toString()),i.push(T),t.push(Object.values(this.data[`${h.table.databaseid_orig}_${h.table.as?h.table.as_orig:h.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(h=>{let T=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__hash_name,R=h.as?h.as_orig:h.tableid_orig;o.push({key:`'${R}.${T}'`,schema:h.databaseid_orig,table:h.as?h.as_orig:h.tableid_orig,keys:new Set}),r.push(`${h.as?h.as:h.tableid}.\`${T}\` AS "${R}.${T}"`),c[h.as?h.as_orig:h.tableid_orig]=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__merged_attributes});let _=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(h=>{h.is_func?r.push(h.initial_select_column.toString()):h.initial_select_column.tableid?r.push(`${h.initial_select_column.tableid}.${h.initial_select_column.columnid} AS ${h.expression.columnid}`):r.push(`${h.initial_select_column.columnid} AS ${h.expression.columnid}`)}));let l="",E="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",E=this.statement.offset?"OFFSET "+this.statement.offset:"");let d=[];try{let h=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${_} ${u} ${l} ${E}`,T=this._convertColumnsToIndexes(h,n);d=await Ie.promise(T,t),t=null}catch(h){throw D.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),D.error(h),new Error("There was a problem processing the data.")}if(d&&d.length>0){for(let h=0,T=d.length;h<T;h++){let R=d[h];o.forEach(g=>{R[g.key]!==null&&R[g.key]!==void 0&&g.keys.add(R[g.key])})}o.forEach(h=>{let T=Object.keys(this.data[`${h.schema}_${h.table}`].__merged_data),R=Ci.difference(T,[...h.keys].map(g=>g.toString()));for(let g=0,H=R.length;g<H;g++){let x=R[g];delete this.data[`${h.schema}_${h.table}`].__merged_data[x]}})}return{existing_attributes:c,joined_length:d?d.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new lc(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=Ci.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw D.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),D.error(i),new Error(qt)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},_=await hn.getDataByHash(c),u=n.columns.length;for(let l=0,E=o.length;l<E;l++){let d=o[l],h=_.get(d);for(let T=0;T<u;T++){let R=n.columns[T],g=h[R]===void 0?null:h[R];this.data[s].__merged_data[d].push(g)}}}}catch(r){throw D.error("Error thrown from getDataByHash function in SQLSearch class method getData."),D.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,_=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===_}).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();D.trace(`Final SQL: ${n}`),s=await Ie.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),D.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw D.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),D.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 D.error(ZF.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),D.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=n[i],u=new RegExp(`${_}.\`${o}\``,"g"),l=`${_}.[${c}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;s=s.replace(_,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await hn.getDataByValue(i);for(let[c,_]of o)this.data[n].__merged_data[c]||(this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=_[s.attribute]}catch(o){throw D.error("There was an error when processing this SQL operation. Check your logs"),D.error(o),new Error(qt)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(Ec,"SQLSearch");ZA.exports=Ec});var It=f((Q2,ep)=>{"use strict";var jF=vf();ep.exports={searchByConditions:s0,searchByHash:n0,searchByValue:i0,search:a0};var Xl=Qt(),jA=require("util"),e0=jA.callbackify(Xl.searchByHash),t0=jA.callbackify(Xl.searchByValue),r0=zA();async function s0(e){return Xl.searchByConditions(e)}a(s0,"searchByConditions");function n0(e,t){try{e0(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(n0,"searchByHash");function i0(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),t0(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(i0,"searchByValue");function a0(e,t){try{let r=new jF(e);r.validate(),new r0(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(a0,"search")});var Rs=f((X2,cp)=>{"use strict";var rp=It(),Kr=I(),sp=_o(),o0=require("lodash"),c0=xr(),np=b(),{promisify:ip}=require("util"),z=m(),{handleHDBError:dc,hdb_errors:_0}=L(),{HDB_ERROR_MSGS:hc,HTTP_STATUS_CODES:ap}=_0,u0=B();u0.initSync();var tp=X(),l0=gs(),{getSchemaPath:E0}=j(),Li=ip(rp.searchByValue),d0=ip(rp.searchByHash),fn="name",op="hash_attribute",Zl="schema",h0="schema_table",f0="attribute";cp.exports={describeAll:S0,describeTable:fc,describeSchema:m0};async function S0(e){try{let t=np.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:fn,search_value:z.WILDCARD_SEARCH_VALUE,get_attributes:[fn]},i=await Li(n),o={},c={};for(let d of i)o[d.name]=!0,!t&&!s&&(c[d.name]=r[d.name].describe);let _={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:z.ID_ATTRIBUTE_STRING,search_value:z.WILDCARD_SEARCH_VALUE,get_attributes:[op,z.ID_ATTRIBUTE_STRING,fn,Zl]},u=await Li(_),l=[];for(let d of u)try{let h;if(t||s)h=await fc({schema:d.schema,table:d.name});else if(r&&r[d.schema].describe&&r[d.schema].tables[d.name].describe){let T=r[d.schema].tables[d.name].attribute_permissions;h=await fc({schema:d.schema,table:d.name},T)}h&&l.push(h)}catch(h){Kr.error(h)}let E={};for(let d in l)t||s?(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s?E[d]={}:c[d]&&(E[d]={});return E}catch(t){return Kr.error("Got an error in describeAll"),Kr.error(t),dc(new Error,hc.DESCRIBE_ALL_ERR)}}a(S0,"describeAll");async function fc(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=sp.describe_table(e);if(o)throw o;if(r===z.SYSTEM_SCHEMA_NAME)return global.hdb_schema[z.SYSTEM_SCHEMA_NAME][s];let c={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:fn,search_value:s,hash_values:[],get_attributes:[z.WILDCARD_SEARCH_VALUE]},_=Array.from(await Li(c));if(!_||_.length===0)throw dc(new Error,hc.TABLE_NOT_FOUND(e.schema,e.table),ap.NOT_FOUND);for await(let u of _)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw dc(new Error,hc.INVALID_TABLE_ERR(i));let l={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:h0,search_value:r+"."+s,get_attributes:[f0]},E=Array.from(await Li(l));E=o0.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=T0(n)),i.attributes=E,i.clustering_stream_name=c0.createNatsTableStreamName(u.schema,u.name);try{let d=E0(i.schema,i.name),h=await tp.openEnvironment(d,i.name),T=tp.statDBI(h,i.hash_attribute);i.record_count=T.entryCount;for(let{key:R}of l0.lessThan(h,i.hash_attribute,z.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,1/0,!0,1,0))i.last_updated_record=R}catch(d){Kr.warn(`unable to stat table dbi due to ${d}`)}}catch(l){Kr.error(`There was an error getting attributes for table '${u.name}'`),Kr.error(l)}return i}a(fc,"descTable");function T0(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(T0,"getAttrsByPerms");async function m0(e){let t=sp.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:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Zl,search_value:s,hash_values:[],get_attributes:[op,z.ID_ATTRIBUTE_STRING,fn,Zl]},i=Array.from(await Li(n));if(i&&i.length<1){let o={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[fn]},c=Array.from(await d0(o));if(c&&c.length<1)throw dc(new Error,hc.SCHEMA_NOT_FOUND(e.schema),ap.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async c=>{try{let _;if(r&&r.tables[c.name]&&(_=r.tables[c.name]),np.isEmpty(_)||_.describe){let u=await fc({schema:e.schema,table:c.name},_?_.attribute_permissions:null);u&&(o[u.name]=u)}}catch(_){Kr.error(`Error describing schema table '${e.schema}.${c}'`),Kr.error(_)}})),o}}a(m0,"describeSchema")});var qr=f((z2,dp)=>{var Sn=os(),{callbackify:lp,promisify:R0}=require("util");dp.exports={setSchemaDataToGlobal:_p,getTableSchema:g0,getSystemSchema:O0,setSchemaDataToGlobalAsync:R0(_p)};var Ep=Rs(),A0=lp(Ep.describeAll),p0=lp(Ep.describeTable);function _p(e){A0(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Sn),global.hdb_schema=r,e(null,null)})}a(_p,"setSchemaDataToGlobal");function up(e,t){return e==="system"?Sn[t]:global.hdb_schema[e][t]}a(up,"returnSchema");function g0(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?N0(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,up(e,t))}):r(null,up(e,t))}a(g0,"getTableSchema");function N0(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=Sn:global.hdb_schema={system:Sn},r();return}p0(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:Sn}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(N0,"setTableDataToGlobal");function O0(){return Sn}a(O0,"getSystemSchema")});var Sc=f((e4,hp)=>{"use strict";var I0=Qt();hp.exports={writeTransaction:b0};function b0(e,t,r){return I0.writeTransaction(e,t,r)}a(b0,"writeTransaction")});var zl=f((r4,w0)=>{w0.exports={name:"harperdb",version:"4.1.1",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{node:">=14.0.0","preferred-node":"18.15.0","go-lang":"1.19.10","nats-server":"2.9.18"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license --storage_type=lmdb && npm run cover:logging && 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/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","cover:lmdbutility":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","cover:hdbserver":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --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'","cover:apitests":"cd bin/ && node harperdb.js stop && node harperdb.js && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*.js' --config '../unitTests/.mocharc.json' && node harperdb.js stop","cover:logging":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.350.0","@aws-sdk/lib-storage":"3.350.0","@aws-sdk/abort-controller":"3.347.0","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.2.0","@fastify/cors":"~8.2.0","@fastify/static":"~6.9.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4","cbor-x":"1.5.1",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2",esbuild:"^0.17.10","fast-glob":"3.2.12",fastify:"~4.17.0","fastify-plugin":"~4.5.0","fs-extra":"11.1.0","human-readable-ids":"1.0.4",inquirer:"8.2.5","is-number":"7.0.0",joi:"17.9.2",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.0",lmdb:"2.8.1",lodash:"4.17.21",mathjs:"11.6.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4",msgpackr:"1.9.5",nats:"2.14.0",needle:"3.2.0","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.0",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.14.1",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.5.1","stream-chain":"2.2.5","stream-json":"1.7.5",systeminformation:"5.17.10","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.0","validate.js":"0.13.1",yaml:"2.2.1"},devDependencies:{axios:"0.27.2",chai:"4.3.7","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":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"^1.22.11","newman-reporter-teamcity":"^0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},lmdb:{msgpackr:"1.8.4"},"newman-reporter-html":{newman:"5.3.2"}}}});var be=f((l4,Mp)=>{"use strict";var pe=B();pe.initSync();var C0=require("fs-extra"),L0=require("semver"),Pi=require("path"),{monotonicFactory:y0}=require("ulidx"),sE=y0(),U0=require("util"),Sp=require("child_process"),M0=U0.promisify(Sp.exec),D0=Sp.spawn,V=oe(),Q=m(),Tc=b(),Wr=I(),mc=xr(),P0=Sc(),yi=lr(),{encode:tE,decode:nE}=require("msgpackr"),{isEmpty:Is}=Tc,Tp=Vr(),mp=12e10,{connect:B0,StorageType:Rp,RetentionPolicy:Ap,AckPolicy:iE,DeliverPolicy:Bi,DiscardPolicy:v0,NatsConnection:s4,JetStreamManager:n4,JetStreamClient:i4,StringCodec:a4,JSONCodec:H0,createInbox:aE,StreamSource:o4,headers:q0,toJsMsg:pp,nuid:c4,JetStreamOptions:_4,ErrorCode:fp,nanos:u4}=require("nats"),{PACKAGE_ROOT:G0}=m(),F0=zl(),gp=H0(),x0="clustering",V0=F0.engines[V.NATS_SERVER_NAME],k0=Pi.join(G0,"dependencies"),rE=Pi.join(k0,`${process.platform}-${process.arch}`,V.NATS_BINARY_NAME),jl,eE,Ui,Mi,Di,Gt;Mp.exports={runCommand:Np,checkNATSServerInstalled:$0,createConnection:oE,getConnection:Rc,getJetStreamManager:vi,getJetStream:Op,getNATSReferences:dt,getServerList:K0,createLocalStream:cE,listStreams:Ip,deleteLocalStream:W0,getServerConfig:Hi,listRemoteStreams:Q0,viewStream:J0,viewStreamIterator:X0,publishToStream:Z0,createWorkQueueStream:z0,addSourceToWorkStream:wp,request:j0,removeSourceFromWorkStream:Lp,reloadNATS:_E,reloadNATSHub:ex,reloadNATSLeaf:tx,extractServerName:Cp,requestErrorHandler:rx,updateWorkStream:sx,createLocalTableStream:yp,createTableStreams:nx,purgeTableStream:Up,purgeSchemaTableStreams:ix,getStreamInfo:ax,updateLocalStreams:cx,closeConnection:Y0,getJsmServerName:qi,addNatsMsgHeader:bp};async function Np(e,t=void 0){let{stdout:r,stderr:s}=await M0(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
1
|
+
"use strict";var Cw=Object.defineProperty;var a=(e,t)=>Cw(e,"name",{value:t,configurable:!0});var f=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var cs=f((yX,Lw)=>{Lw.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 m=f((UX,Mh)=>{"use strict";var Ut=require("path"),yw=require("fs");function Uw(){let e=__dirname;for(;!yw.existsSync(Ut.join(e,"package.json"));){let t=Ut.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(Uw,"getHDBPackageRoot");var Cr=Uw(),Rh="js",ba=Rh,Mw="harperdb-config.yaml",Dw="defaultConfig.yaml",Pw="hdb",Ah=`harperdb.${ba}`,ph=`customFunctionsServer.${ba}`,Bw=`restartHdb.${ba}`,hu="HarperDB",Ia="Custom Functions",wa="Clustering Hub",Ca="Clustering Leaf",vw="Clustering Ingest Service",Hw="Clustering Reply Service",qw="foreground.pid",Gw="hdb.pid",Fw={HDB:hu,CLUSTERING_HUB:wa,CLUSTERING_LEAF:Ca,CLUSTERING_INGEST_SERVICE:vw,CLUSTERING_REPLY_SERVICE:Hw,CUSTOM_FUNCTIONS:Ia,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},xw={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},Vw={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},kw={harperdb:hu,"clustering hub":wa,"clustering leaf":Ca,"custom functions":Ia,custom_functions:Ia,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},$w={CLUSTERING_HUB_PROC_DESCRIPTOR:wa,CLUSTERING_LEAF_PROC_DESCRIPTOR:Ca},du={HDB:Ut.join(Cr,"server/harperdb"),CUSTOM_FUNCTIONS:Ut.join(Cr,"server/customFunctions"),CLUSTERING_HUB:Ut.join(Cr,"server/nats"),CLUSTERING_LEAF:Ut.join(Cr,"server/nats")},Yw={HDB:Ut.join(du.HDB,Ah),CUSTOM_FUNCTIONS:Ut.join(du.CUSTOM_FUNCTIONS,ph)},Kw={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Ut.join(Cr,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Ut.join(Cr,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Ut.join(Cr,"launchServiceScripts/launchUpdateNodes4-0-0.js")},Ww={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},gh="support@harperdb.io",Qw="customer-success@harperdb.io",Nh=1,Jw=4141,Oh="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",Xw="https://www.harperdb.io/product",Zw=`For support, please submit a request at ${Oh} or contact ${gh}`,Ih=`For license support, please contact ${Qw}`,zw="None of the specified records were found.",jw="hash attribute not found",eC=`Your current license only supports ${Nh} role. ${Ih}`,tC="Your current license only supports 3 connections to a node.",rC="127.0.0.1",sC=1,nC=/^\.$/,iC=/^\.\.$/,aC="U+002E",oC=/\//g,cC="U+002F",_C=/U\+002F/g,uC=/^U\+002E$/,lC=/^U\+002EU\+002E$/,EC="d",dC=999999,hC="*",fC="--max-old-space-size=",SC="system",TC="__hdb_hash",mC=".harperdb",RC=".hdb",AC="keys",pC="hdb_boot_properties.file",gC=".updateConfig.json",NC="SIGTSTP",OC=24,IC=6e4,bC=448,wC="blob",CC="trash",LC="schema",yC="transactions",UC=".count",MC="id",DC="PROCESS_NAME",bh={SETTINGS_PATH_KEY:"settings_path"},wh=require("lodash"),PC={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"},BC={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},vC={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},HC={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"},qC={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"},nt="hdb_internal:",GC={CREATE_SCHEMA:nt+"create_schema",CREATE_TABLE:nt+"create_table",CREATE_ATTRIBUTE:nt+"create_attribute",ADD_USER:nt+"add_user",ALTER_USER:nt+"alter_user",DROP_USER:nt+"drop_user",HDB_NODES:nt+"hdb_nodes",HDB_USERS:nt+"hdb_users",HDB_WORKERS:nt+"hdb_workers",CATCHUP:nt+"catchup",SCHEMA_CATCHUP:nt+"schema_catchup",WORKER_ROOM:nt+"cluster_workers"},FC={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"},xC="060493.ks",VC=".license",kC={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},w={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",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",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",PURGE_STREAM:"purge_stream"},$C={CSV:".csv",JSON:".json"},YC={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},KC={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Gn={};Gn[w.INSERT]=w.INSERT;Gn[w.UPDATE]=w.UPDATE;Gn[w.UPSERT]=w.UPSERT;Gn[w.DELETE]=w.DELETE;var J=Object.create(null);J[w.DESCRIBE_ALL]=w.DESCRIBE_ALL;J[w.DESCRIBE_TABLE]=w.DESCRIBE_TABLE;J[w.DESCRIBE_SCHEMA]=w.DESCRIBE_SCHEMA;J[w.READ_LOG]=w.READ_LOG;J[w.ADD_NODE]=w.ADD_NODE;J[w.LIST_USERS]=w.LIST_USERS;J[w.LIST_ROLES]=w.LIST_ROLES;J[w.USER_INFO]=w.USER_INFO;J[w.SQL]=w.SQL;J[w.GET_JOB]=w.GET_JOB;J[w.SEARCH_JOBS_BY_START_DATE]=w.SEARCH_JOBS_BY_START_DATE;J[w.DELETE_FILES_BEFORE]=w.DELETE_FILES_BEFORE;J[w.EXPORT_LOCAL]=w.EXPORT_LOCAL;J[w.EXPORT_TO_S3]=w.EXPORT_TO_S3;J[w.CLUSTER_STATUS]=w.CLUSTER_STATUS;J[w.REMOVE_NODE]=w.REMOVE_NODE;J[w.RESTART]=w.RESTART;J[w.CUSTOM_FUNCTIONS_STATUS]=w.CUSTOM_FUNCTIONS_STATUS;J[w.GET_CUSTOM_FUNCTIONS]=w.GET_CUSTOM_FUNCTIONS;J[w.GET_CUSTOM_FUNCTION]=w.GET_CUSTOM_FUNCTION;J[w.SET_CUSTOM_FUNCTION]=w.SET_CUSTOM_FUNCTION;J[w.DROP_CUSTOM_FUNCTION]=w.DROP_CUSTOM_FUNCTION;J[w.ADD_CUSTOM_FUNCTION_PROJECT]=w.ADD_CUSTOM_FUNCTION_PROJECT;J[w.DROP_CUSTOM_FUNCTION_PROJECT]=w.DROP_CUSTOM_FUNCTION_PROJECT;J[w.PACKAGE_CUSTOM_FUNCTION_PROJECT]=w.PACKAGE_CUSTOM_FUNCTION_PROJECT;J[w.DEPLOY_CUSTOM_FUNCTION_PROJECT]=w.DEPLOY_CUSTOM_FUNCTION_PROJECT;var WC={RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},QC={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Ch={HDB_ROOT_KEY:"HDB_ROOT",SERVER_PORT_KEY:"SERVER_PORT",CERT_KEY:"CERTIFICATE",PRIVATE_KEY_KEY:"PRIVATE_KEY",HTTP_SECURE_ENABLED_KEY:"HTTPS_ON",CORS_ENABLED_KEY:"CORS_ON",CORS_WHITELIST_KEY:"CORS_WHITELIST",LOG_LEVEL_KEY:"LOG_LEVEL",LOGGER_KEY:"LOGGER",LOG_PATH_KEY:"LOG_PATH",LOG_ROTATE:"LOG_ROTATE",LOG_ROTATE_MAX_SIZE:"LOG_ROTATE_MAX_SIZE",LOG_ROTATE_RETAIN:"LOG_ROTATE_RETAIN",LOG_ROTATE_COMPRESS:"LOG_ROTATE_COMPRESS",LOG_ROTATE_DATE_FORMAT:"LOG_ROTATE_DATE_FORMAT",LOG_ROTATE_ROTATE_MODULE:"LOG_ROTATE_ROTATE_MODULE",LOG_ROTATE_WORKER_INTERVAL:"LOG_ROTATE_WORKER_INTERVAL",LOG_ROTATE_ROTATE_INTERVAL:"LOG_ROTATE_ROTATE_INTERVAL",LOG_ROTATE_TIMEZONE:"LOG_ROTATE_TIMEZONE",LOG_DAILY_ROTATE_KEY:"LOG_DAILY_ROTATE",LOG_MAX_DAILY_FILES_KEY:"LOG_MAX_DAILY_FILES",PROPS_ENV_KEY:"NODE_ENV",SETTINGS_PATH_KEY:"settings_path",CLUSTERING_PORT_KEY:"CLUSTERING_PORT",CLUSTERING_NODE_NAME_KEY:"NODE_NAME",CLUSTERING_ENABLED_KEY:"CLUSTERING",ALLOW_SELF_SIGNED_SSL_CERTS:"ALLOW_SELF_SIGNED_SSL_CERTS",MAX_HDB_PROCESSES:"MAX_HDB_PROCESSES",INSTALL_USER:"install_user",CLUSTERING_USER_KEY:"CLUSTERING_USER",MAX_CLUSTERING_PROCESSES:"MAX_CLUSTERING_PROCESSES",SERVER_TIMEOUT_KEY:"SERVER_TIMEOUT_MS",SERVER_KEEP_ALIVE_TIMEOUT_KEY:"SERVER_KEEP_ALIVE_TIMEOUT",SERVER_HEADERS_TIMEOUT_KEY:"SERVER_HEADERS_TIMEOUT",DISABLE_TRANSACTION_LOG_KEY:"DISABLE_TRANSACTION_LOG",OPERATION_TOKEN_TIMEOUT_KEY:"OPERATION_TOKEN_TIMEOUT",REFRESH_TOKEN_TIMEOUT_KEY:"REFRESH_TOKEN_TIMEOUT",CUSTOM_FUNCTIONS_ENABLED_KEY:"CUSTOM_FUNCTIONS",CUSTOM_FUNCTIONS_PORT_KEY:"CUSTOM_FUNCTIONS_PORT",CUSTOM_FUNCTIONS_DIRECTORY_KEY:"CUSTOM_FUNCTIONS_DIRECTORY",MAX_CUSTOM_FUNCTION_PROCESSES:"MAX_CUSTOM_FUNCTION_PROCESSES",LOG_TO_FILE:"LOG_TO_FILE",LOG_TO_STDSTREAMS:"LOG_TO_STDSTREAMS",RUN_IN_FOREGROUND:"RUN_IN_FOREGROUND",LOCAL_STUDIO_ON:"LOCAL_STUDIO_ON",STORAGE_WRITE_ASYNC:"STORAGE_WRITE_ASYNC"},JC=wh.invert(Ch),S={CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",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",HTTP_SESSION_AFFINITY:"http_sessionAffinity",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",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",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",SCHEMAS:"schemas"},Lh={settings_path:bh.SETTINGS_PATH_KEY,hdb_root_key:S.ROOTPATH,hdb_root:S.ROOTPATH,server_port_key:S.OPERATIONSAPI_NETWORK_PORT,server_port:S.OPERATIONSAPI_NETWORK_PORT,cert_key:S.OPERATIONSAPI_TLS_CERTIFICATE,certificate:S.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:S.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:S.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:S.OPERATIONSAPI_NETWORK_HTTPS,https_on:S.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:S.OPERATIONSAPI_NETWORK_CORS,cors_on:S.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:S.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:S.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:S.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:S.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:S.LOGGING_LEVEL,log_level:S.LOGGING_LEVEL,log_path_key:S.LOGGING_ROOT,log_path:S.LOGGING_ROOT,props_env_key:S.OPERATIONSAPI_NODEENV,node_env:S.OPERATIONSAPI_NODEENV,clustering_node_name_key:S.CLUSTERING_NODENAME,node_name:S.CLUSTERING_NODENAME,clustering_enabled_key:S.CLUSTERING_ENABLED,clustering:S.CLUSTERING_ENABLED,max_http_threads:S.HTTP_THREADS,max_hdb_processes:S.HTTP_THREADS,server_timeout_key:S.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:S.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:S.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:S.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:S.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:S.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:S.LOGGING_AUDITLOG,disable_transaction_log:S.LOGGING_AUDITLOG,operation_token_timeout_key:S.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:S.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:S.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:S.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_enabled_key:S.CUSTOMFUNCTIONS_ENABLED,custom_functions:S.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:S.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:S.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:S.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:S.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:S.HTTP_THREADS,log_to_file:S.LOGGING_FILE,log_to_stdstreams:S.LOGGING_STDSTREAMS,run_in_foreground:S.OPERATIONSAPI_FOREGROUND,local_studio_on:S.LOCALSTUDIO_ENABLED,clustering_port:S.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:S.CLUSTERING_USER,clustering_enabled:S.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:S.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:S.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:S.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:S.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:S.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:S.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:S.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:S.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:S.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:S.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:S.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:S.CLUSTERING_NODENAME,clustering_tls_certificate:S.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:S.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:S.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:S.CLUSTERING_TLS_INSECURE,clustering_tls_verify:S.CLUSTERING_TLS_VERIFY,clustering_loglevel:S.CLUSTERING_LOGLEVEL,clustering_republishmessages:S.CLUSTERING_REPUBLISHMESSAGES,customfunctions_enabled:S.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:S.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:S.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:S.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:S.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:S.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:S.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:S.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:S.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:S.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:S.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:S.CUSTOMFUNCTIONS_NODEENV,http_threads:S.HTTP_THREADS,http_session_affinity:S.HTTP_SESSION_AFFINITY,customfunctions_processes:S.HTTP_THREADS,customfunctions_root:S.CUSTOMFUNCTIONS_ROOT,localstudio_enabled:S.LOCALSTUDIO_ENABLED,logging_file:S.LOGGING_FILE,logging_level:S.LOGGING_LEVEL,logging_root:S.LOGGING_ROOT,logging_rotation_enabled:S.LOGGING_ROTATION_ENABLED,logging_rotation_compress:S.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:S.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:S.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:S.LOGGING_ROTATION_PATH,logging_stdstreams:S.LOGGING_STDSTREAMS,logging_auditlog:S.LOGGING_AUDITLOG,operationsapi_authentication_operationtokentimeout:S.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:S.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:S.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:S.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:S.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:S.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:S.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:S.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:S.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:S.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:S.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:S.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:S.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:S.OPERATIONSAPI_NODEENV,operationsapi_root:S.ROOTPATH,schemas:S.SCHEMAS,storage_path:S.STORAGE_PATH};for(let e in S){let t=S[e];Lh[t.toLowerCase()]=t}var XC={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},ZC={csv_file_load:"csv_file_load",csv_data_load:w.CSV_DATA_LOAD,csv_url_load:w.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"},zC={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"},jC={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},eL={FILE_SYSTEM:"fs",LMDB:"lmdb"},tL={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},rL={DEVELOPMENT:8192,DEFAULT:512},sL={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"},nL={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"},iL={ENOENT:"ENOENT",EACCES:"EACCES"},yh={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},aL="__clustering__",oL=Object.values(yh),cL=15984864e5,Uh={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},_L=wh.invert(Uh),uL={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"},lL=111,EL=`\r
|
|
2
|
+
`,dL={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},hL=["*","%"],fL="unauthorized_access",SL="func_val",TL={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},mL={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},RL={SHUTDOWN:"shutdown",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request",METRICS:"metrics",GET_METRICS:"get_metrics",RESTART:"restart"},AL={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},pL={HTTP:"http"},gL={STOPPED:"stopped",ONLINE:"online"},NL="3.x.x";Mh.exports={LOCAL_HARPERDB_OPERATIONS:J,HDB_SUPPORT_ADDRESS:gh,HDB_SUPPORT_URL:Oh,HDB_PRICING_URL:Xw,SUPPORT_HELP_MSG:Zw,LICENSE_HELP_MSG:Ih,HDB_PROC_NAME:Ah,HDB_PROC_DESCRIPTOR:hu,CLUSTERING_LEAF_PROC_DESCRIPTOR:Ca,CLUSTERING_HUB_PROC_DESCRIPTOR:wa,SYSTEM_SCHEMA_NAME:SC,HASH_FOLDER_NAME:TC,HDB_HOME_DIR_NAME:mC,UPDATE_FILE_NAME:gC,LICENSE_KEY_DIR_NAME:AC,BOOT_PROPS_FILE_NAME:pC,JOB_TYPE_ENUM:ZC,JOB_STATUS_ENUM:kC,SYSTEM_TABLE_NAMES:HC,SYSTEM_TABLE_HASH_ATTRIBUTES:qC,OPERATIONS_ENUM:w,VALID_S3_FILE_TYPES:$C,S3_BUCKET_AUTH_KEYS:YC,VALID_SQL_OPS_ENUM:KC,GEO_CONVERSION_ENUM:QC,HDB_SETTINGS_NAMES:Ch,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:JC,SERVICE_ACTIONS_ENUM:WC,CLUSTER_MESSAGE_TYPE_ENUM:zC,CLUSTER_CONNECTION_DIRECTION_ENUM:jC,CLUSTER_EVENTS_DEFS_ENUM:sL,PERIOD_REGEX:nC,DOUBLE_PERIOD_REGEX:iC,UNICODE_PERIOD:aC,FORWARD_SLASH_REGEX:oC,UNICODE_FORWARD_SLASH:cC,ESCAPED_FORWARD_SLASH_REGEX:_C,ESCAPED_PERIOD_REGEX:uC,ESCAPED_DOUBLE_PERIOD_REGEX:lC,REG_KEY_FILE_NAME:xC,RESTART_TIMEOUT_MS:IC,HDB_FILE_PERMISSIONS:bC,SCHEMA_DIR_NAME:LC,TRANSACTIONS_DIR_NAME:yC,LIMIT_COUNT_NAME:UC,ID_ATTRIBUTE_STRING:MC,INSERT_MODULE_ENUM:BC,UPGRADE_JSON_FIELD_NAMES_ENUM:vC,RESTART_CODE:NC,RESTART_CODE_NUM:OC,CLUSTER_OPERATIONS:Gn,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:FC,HDB_INTERNAL_SC_CHANNEL_PREFIX:nt,INTERNAL_SC_CHANNELS:GC,CLUSTERING_MESSAGE_TYPES:uL,HDB_FILE_SUFFIX:RC,BLOB_FOLDER_NAME:wC,HDB_TRASH_DIR:CC,ORIGINATOR_SET_VALUE:lL,LICENSE_VALUES:tL,RAM_ALLOCATION_ENUM:rL,STORAGE_TYPES_ENUM:eL,TIME_STAMP_NAMES_ENUM:yh,TIME_STAMP_NAMES:oL,PERMS_UPDATE_RELEASE_TIMESTAMP:cL,SEARCH_NOT_FOUND_MESSAGE:zw,SEARCH_ATTRIBUTE_NOT_FOUND:jw,LICENSE_ROLE_DENIED_RESPONSE:eC,LICENSE_MAX_CONNS_REACHED:tC,BASIC_LICENSE_MAX_NON_CU_ROLES:Nh,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:Jw,VALUE_SEARCH_COMPARATORS:Uh,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:_L,LICENSE_FILE_NAME:VC,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:nL,NEW_LINE:EL,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:sC,MOMENT_DAYS_TAG:EC,API_TURNOVER_SEC:dC,LOOPBACK:rC,CODE_EXTENSION:ba,WILDCARD_SEARCH_VALUE:hC,NODE_ERROR_CODES:iL,JAVASCRIPT_EXTENSION:Rh,PERMS_CRUD_ENUM:dL,UNAUTHORIZED_PERMISSION_NAME:fL,SEARCH_WILDCARDS:hL,FUNC_VAL:SL,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:TL,JWT_ENUM:mL,CLUSTERING_FLAG:aL,ITC_EVENT_TYPES:RL,CUSTOM_FUNCTION_PROC_NAME:ph,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Ia,SERVICES:AL,THREAD_TYPES:pL,MEM_SETTING_KEY:fC,HDB_RESTART_SCRIPT:Bw,PROCESS_DESCRIPTORS:Fw,SERVICE_SERVERS:Yw,SERVICE_SERVERS_CWD:du,PROCESS_DESCRIPTORS_VALIDATE:kw,LAUNCH_SERVICE_SCRIPTS:Kw,LOG_LEVELS:Vw,PROCESS_NAME_ENV_PROP:DC,LOG_NAMES:xw,PM2_PROCESS_STATUSES:gL,CONFIG_PARAM_MAP:Lh,CONFIG_PARAMS:S,HDB_CONFIG_FILE:Mw,HDB_DEFAULT_CONFIG_FILE:Dw,ROLE_TYPES_ENUM:Ww,BOOT_PROP_PARAMS:bh,INSTALL_PROMPTS:PC,HDB_ROOT_DIR_NAME:Pw,CLUSTERING_PROCESSES:$w,FOREGROUND_PID_FILE:qw,PACKAGE_ROOT:Cr,PRE_4_0_0_VERSION:NL,SCHEMAS_PARAM_CONFIG:XC,HDB_PID_FILE:Gw}});var fu=f((DX,Bh)=>{"use strict";var Dh=require("minimist");Bh.exports=OL;function OL(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=Ph(process.env),s=Ph(Dh(process.argv))):(r=process.env,s=Dh(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let c=e[i];s[c]!==void 0?n[c]=s[c].toString().trim():r[c]!==void 0&&(n[c]=r[c].toString().trim())}return n}a(OL,"assignCMDENVVariables");function Ph(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(Ph,"objKeysToLowerCase")});var I=f((BX,Wh)=>{"use strict";var Ws=require("fs-extra"),{workerData:IL,threadId:bL}=require("worker_threads"),Lr=require("path"),qh=require("yaml"),Gh=require("properties-reader"),Ae=m(),vh=fu(),wL=require("os"),{PACKAGE_ROOT:Tu}=m(),Fh={};for(let e in console)Fh[e]=console[e];var ke={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},xh={STDOUT:"stdOut",STDERR:"stdErr"},CL=Lr.join(Tu,"logs"),LL=Lr.join(Tu,"config/yaml/",Ae.HDB_DEFAULT_CONFIG_FILE),yL=1e4,ar,or,Ve,La,ya,Ua,xn,Fn;Fn===void 0&&Vh();Wh.exports={notify:Yh,fatal:Kh,error:Vn,warn:pu,info:Ma,debug:Au,trace:Ru,setLogLevel:HL,log_level:Ve,loggerWithTag:UL,suppressLogging:ML,initLogSettings:Vh,setupConsoleLogging:kh,logCustomLevel:BL,closeLogFile:mu,getLogFilePath:()=>Ua,OUTPUTS:xh};function Vh(e=!1){try{if(Fn===void 0||e){mu();let t=vL();Fn=Gh(t);let r=vh(["ROOTPATH"]);({level:Ve,config_log_path:ya,to_file:ar,to_stream:or}=qL(r.ROOTPATH?Lr.join(r.ROOTPATH,Ae.HDB_CONFIG_FILE):Fn.get("settings_path"))),La=Ae.LOG_NAMES.HDB,Ua=Lr.join(ya,La)}}catch(t){if(Fn=void 0,t.code===Ae.NODE_ERROR_CODES.ENOENT){let r=vh(Object.keys(Ae.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Ae.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let _=r[o];if(c===Ae.CONFIG_PARAMS.LOGGING_LEVEL){Ve=_;continue}if(c===Ae.CONFIG_PARAMS.LOGGING_STDSTREAMS){or=_;continue}c===Ae.CONFIG_PARAMS.LOGGING_FILE&&(ar=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=GL();ar=ar===void 0?n:ar,ar=Hh(ar),or=or===void 0?i:or,or=Hh(or),Ve=Ve===void 0?s:Ve,ya=CL,La=Ae.LOG_NAMES.INSTALL,Ua=Lr.join(ya,La);return}throw Vn("Error initializing log settings"),Vn(t),t}kh()}a(Vh,"initLogSettings");var Su=!0;function kh(){Ks("error",Vn),Ks("warn",pu),Ks("log",Ma),Ks("info",Ma),Ks("debug",Au),Ks("trace",Ru)}a(kh,"setupConsoleLogging");function Ks(e,t){console[e]=function(...r){if(Su&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Fh[e](...r)}}a(Ks,"logConsole");function UL(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(Yh),fatal:r(Kh),error:r(Vn),warn:r(pu),info:r(Ma),debug:r(Au),trace:r(Ru)};function r(s){return function(...n){return s(t,...n)}}}a(UL,"loggerWithTag");function ML(e){try{Su=!1,e()}finally{Su=!0}}a(ML,"suppressLogging");var DL=IL?.name?.replace(/ /g,"-")||"main";function cr(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,o=[e],c=0,_;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(_=t[0]?.serviceName,c++)),o.unshift(_||DL+"/"+bL);c<n;c++){let u=t[c];u instanceof Error&&u.stack?s+=u.stack:typeof u=="object"?s+=JSON.stringify(u):s+=u,c<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
|
|
3
|
+
`}a(cr,"createLogRecord");function kn(e){ar&&$h(e),or&&process.stdout.write(e)}a(kn,"logStdOut");function Da(e){ar&&$h(e),or&&process.stderr.write(e)}a(Da,"logStdErr");function $h(e){PL(),Ws.appendFileSync(xn,e)}a($h,"logToFile");function mu(){try{Ws.closeSync(xn)}catch{}xn=null}a(mu,"closeLogFile");function PL(){xn||(xn=Ws.openSync(Ua,"a"),setTimeout(()=>{mu()},yL).unref())}a(PL,"openLogFile");function Ma(...e){ke[Ve]<=ke.info&&kn(cr("info",e))}a(Ma,"info");function Ru(...e){ke[Ve]<=ke.trace&&kn(cr("trace",e))}a(Ru,"trace");function Vn(...e){ke[Ve]<=ke.error&&Da(cr("error",e))}a(Vn,"error");function Au(...e){ke[Ve]<=ke.debug&&kn(cr("debug",e))}a(Au,"debug");function Yh(...e){ke[Ve]<=ke.notify&&kn(cr("notify",e))}a(Yh,"notify");function Kh(...e){ke[Ve]<=ke.fatal&&Da(cr("fatal",e))}a(Kh,"fatal");function pu(...e){ke[Ve]<=ke.warn&&Da(cr("warn",e))}a(pu,"warn");function BL(e,t,...r){t===xh.STDERR?Da(cr(e,r)):kn(cr(e,r))}a(BL,"logCustomLevel");function vL(){let e;try{e=wL.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Lr.join(e,Ae.HDB_HOME_DIR_NAME,Ae.BOOT_PROPS_FILE_NAME);return Ws.existsSync(t)||(t=Lr.join(Tu,"utility/hdb_boot_properties.file")),t}a(vL,"getPropsFilePath");function HL(e){Ve=e}a(HL,"setLogLevel");function Hh(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Hh,"autoCastBoolean");function qL(e){try{if(e.includes("config/settings.js")){let o=Gh(e);return{level:o.get(Ae.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Lr.dirname(o.get(Ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Ae.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Ae.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=qh.parseDocument(Ws.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===Ae.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(qL,"getLogConfig");function GL(){try{let e=qh.parseDocument(Ws.readFileSync(LL,"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(GL,"getDefaultConfig")});var Jh=f((HX,Qh)=>{"use strict";var FL=require("util"),xL=require("path"),VL=require("child_process"),kL=FL.promisify(VL.execFile),$L=1e3*1e3*10;Qh.exports={findPs:YL};async function YL(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await kL("ps",["wwxo",`pid,${r}`],{maxBuffer:$L});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:xL.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(YL,"findPs")});var Ue=f((GX,Zh)=>{"use strict";var KL="__dbis__",WL="__environment_name__",QL="__dbi_defintion__",JL={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"},XL=["__createdtime__","__updatedtime__"],ZL="\uFFFF",Xh={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},zL=Object.values(Xh);Zh.exports={INTERNAL_DBIS_NAME:KL,DBI_DEFINITION_NAME:QL,SEARCH_TYPES:JL,TIMESTAMP_NAMES:XL,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:WL,TRANSACTIONS_DBI_NAMES_ENUM:Xh,TRANSACTIONS_DBIS:zL,OVERFLOW_MARKER:ZL}});var it=f((FX,of)=>{"use strict";var zh=m(),jh=Ue(),ef={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},tf=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),rf={500:tf("There was an error processing your request."),400:"Invalid request"},jL=rf[ef.INTERNAL_SERVER_ERROR],ey={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.`},ty={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},ry={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"},sy={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${jh.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${jh.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"},ny={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${zh.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 ${zh.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"},sf={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"},iy={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."},ay={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`},oy={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"},cy={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},_y={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`},nf={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.`},af={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:e=>`ITC server received invalid event type: ${e}`},uy={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."},ly={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},Ey={...sf,...ry,...ey,...iy,...ay,...oy,...cy,..._y,...ny,...nf,...af,...uy,...ly,...ty};of.exports={CHECK_LOGS_WRAPPER:tf,HDB_ERROR_MSGS:Ey,DEFAULT_ERROR_MSGS:rf,DEFAULT_ERROR_RESP:jL,HTTP_STATUS_CODES:ef,LMDB_ERRORS_ENUM:sy,AUTHENTICATION_ERROR_MSGS:sf,VALIDATION_ERROR_MSGS:nf,ITC_ERRORS:af}});var L=f((VX,uf)=>{"use strict";var Qs=it(),dy=I(),hy=m(),$n=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,cf),this.http_resp_code=s||Qs.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Qs.DEFAULT_ERROR_MSGS[s]?Qs.DEFAULT_ERROR_MSGS[s]:Qs.DEFAULT_ERROR_MSGS[Qs.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&dy[n](i)}};a($n,"HdbError");function cf(e,t,r,s=hy.LOG_LEVELS.ERROR,n=null,i=!1){if(_f(e))return e;let o=new $n(e,t,r,s,n);return i&&delete o.stack,o}a(cf,"handleHDBError");function _f(e){return e.__proto__.constructor.name===$n.name}a(_f,"isHDBError");uf.exports={isHDBError:_f,handleHDBError:cf,hdb_errors:Qs}});var b=f((YX,Of)=>{"use strict";var _s=require("path"),fy=require("fs-extra"),De=I(),lf=require("fs-extra"),Yn=require("os"),Sy=require("net"),Ty=require("recursive-iterator"),Me=m(),ff=Jh(),Ef=require("papaparse"),Pa=require("moment"),{inspect:my}=require("util"),df=require("is-number"),$X=require("lodash"),{hdb_errors:Ba}=L(),Sf=require("util").promisify(setTimeout),Ry=100,Ay=5,py="",gy=4,hf={true:!0,false:!1,undefined:null,null:null,NaN:NaN};Of.exports={isEmpty:at,isEmptyOrZeroLength:kt,arrayHasEmptyValues:Iy,arrayHasEmptyOrZeroLengthValues:by,buildFolderPath:wy,isBoolean:Tf,errorizeMessage:Ny,stripFileExtension:Ly,autoCast:yy,autoCastJSON:mf,autoCastJSONDeep:gu,removeDir:Uy,compareVersions:My,isCompatibleDataVersion:Dy,escapeRawValue:Py,unescapeValue:By,stringifyProps:vy,timeoutPromise:qy,isClusterOperation:Fy,getClusterUser:Vy,checkGlobalSchemaTable:xy,getHomeDir:Af,getPropsFilePath:Hy,promisifyPapaParse:ky,removeBOM:pf,createEventPromise:$y,checkProcessRunning:Yy,checkSchemaTableExist:Ky,checkSchemaExists:gf,checkTableExists:Nf,getStartOfTomorrowInSeconds:Wy,getLimitKey:Qy,isObject:Cy,isNotEmptyAndHasValue:Oy,autoCasterIsNumberCheck:Rf,backtickASTSchemaItems:Jy,isPortTaken:Gy,stopProcess:Xy,createForkArgs:Zy,autoCastBoolean:zy,async_set_timeout:Sf,getTableHashAttribute:jy,doesSchemaExist:eU,doesTableExist:tU,stringifyObj:rU,ms_to_time:sU,changeExtension:nU,PACKAGE_ROOT:Me.PACKAGE_ROOT};function Ny(e){return e instanceof Error?e:new Error(e)}a(Ny,"errorizeMessage");function at(e){return e==null}a(at,"isEmpty");function Oy(e){return!at(e)&&(e||e===0||e===""||Tf(e))}a(Oy,"isNotEmptyAndHasValue");function kt(e){return at(e)||e.length===0||e.size===0}a(kt,"isEmptyOrZeroLength");function Iy(e){if(at(e))return!0;for(let t=0;t<e.length;t++)if(at(e[t]))return!0;return!1}a(Iy,"arrayHasEmptyValues");function by(e){if(kt(e))return!0;for(let t=0;t<e.length;t++)if(kt(e[t]))return!0;return!1}a(by,"arrayHasEmptyOrZeroLengthValues");function wy(...e){try{return e.join(_s.sep)}catch{console.error(e)}}a(wy,"buildFolderPath");function Tf(e){return at(e)?!1:e===!0||e===!1}a(Tf,"isBoolean");function Cy(e){return at(e)?!1:typeof e=="object"}a(Cy,"isObject");function Ly(e){return kt(e)?py:e.slice(0,-gy)}a(Ly,"stripFileExtension");function yy(e){return at(e)||e===""||typeof e!="string"?e:hf[e]!==void 0?hf[e]:Rf(e)===!0?Number(e):e}a(yy,"autoCast");function mf(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(mf,"autoCastJSON");function gu(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=gu(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=gu(r);s!==r&&(e[t]=s)}return e}else return mf(e)}a(gu,"autoCastJSONDeep");function Rf(e){if(e.startsWith("0.")&&df(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&df(e))}a(Rf,"autoCasterIsNumberCheck");async function Uy(e){if(kt(e))throw new Error(`Directory path: ${e} does not exist`);try{await lf.emptyDir(e),await lf.remove(e)}catch(t){throw De.error(`Error removing files in ${e} -- ${t}`),t}}a(Uy,"removeDir");function My(e,t){if(kt(e)){De.info("Invalid current version sent as parameter.");return}if(kt(t)){De.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),_=Math.min(o.length,c.length);for(let u=0;u<_;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(My,"compareVersions");function Dy(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(Dy,"isCompatibleDataVersion");function Py(e){if(at(e))return e;let t=String(e);return t==="."?Me.UNICODE_PERIOD:t===".."?Me.UNICODE_PERIOD+Me.UNICODE_PERIOD:t.replace(Me.FORWARD_SLASH_REGEX,Me.UNICODE_FORWARD_SLASH)}a(Py,"escapeRawValue");function By(e){if(at(e))return e;let t=String(e);return t===Me.UNICODE_PERIOD?".":t===Me.UNICODE_PERIOD+Me.UNICODE_PERIOD?"..":String(e).replace(Me.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(By,"unescapeValue");function vy(e,t){if(at(e))return De.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+Yn.EOL}!kt(s)&&s[0]===";"?r+=" "+s+n+Yn.EOL:kt(s)||(r+=s+"="+n+Yn.EOL)}catch{De.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(vy,"stringifyProps");function Af(){let e;try{e=Yn.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Af,"getHomeDir");function Hy(){let e=_s.join(Af(),Me.HDB_HOME_DIR_NAME,Me.BOOT_PROPS_FILE_NAME);return fy.existsSync(e)||(e=_s.join(__dirname,"../","hdb_boot_properties.file")),e}a(Hy,"getPropsFilePath");function qy(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(qy,"timeoutPromise");async function Gy(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=Sy.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(Gy,"isPortTaken");function Fy(e){try{return Me.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){De.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Fy,"isClusterOperation");function xy(e,t){if(!global.hdb_schema[e])return Ba.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return Ba.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(xy,"checkGlobalSchemaTable");function Vy(e,t){if(at(t)){De.warn("No CLUSTERING_USER defined, clustering disabled");return}if(at(e)||kt(e)){De.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){De.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){De.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Vy,"getClusterUser");function ky(){Ef.parsePromise=function(e,t){return new Promise(function(r,s){Ef.parse(e,{header:!0,transformHeader:pf,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(ky,"promisifyPapaParse");function pf(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(pf,"removeBOM");function $y(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;De.info(`Got cluster status event response: ${my(n)}`);try{i.cancel()}catch{De.error("Error trying to cancel timeout.")}s(n)})})}a($y,"createEventPromise");async function Yy(e){let t=!0,r=0;do await Sf(Ry*r++),(await ff.findPs(e)).length>0&&(t=!1);while(t&&r<Ay);if(t)throw new Error(`process ${e} was not started`)}a(Yy,"checkProcessRunning");function Ky(e,t){let r=gf(e);if(r)return r;let s=Nf(e,t);if(s)return s}a(Ky,"checkSchemaTableExist");function gf(e){if(!global.hdb_schema[e])return Ba.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(gf,"checkSchemaExists");function Nf(e,t){if(!global.hdb_schema[e][t])return Ba.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Nf,"checkTableExists");function Wy(){let e=Pa().utc().add(1,Me.MOMENT_DAYS_TAG).startOf(Me.MOMENT_DAYS_TAG).unix(),t=Pa().utc().unix();return e-t}a(Wy,"getStartOfTomorrowInSeconds");function Qy(){return Pa().utc().format("DD-MM-YYYY")}a(Qy,"getLimitKey");function Jy(e){try{let t=new Ty(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){De.error("Got an error back ticking items."),De.error(t)}}a(Jy,"backtickASTSchemaItems");async function Xy(e){let t=Yn.userInfo();(await ff.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),De.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(Xy,"stopProcess");function Zy(e){return[e]}a(Zy,"createForkArgs");function zy(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(zy,"autoCastBoolean");function jy(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(jy,"getTableHashAttribute");function eU(e){return global?.hdb_schema?.[e]!==void 0}a(eU,"doesSchemaExist");function tU(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(tU,"doesTableExist");function rU(e){try{return JSON.stringify(e)}catch{return e}}a(rU,"stringifyObj");function sU(e){let t=Pa.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(sU,"ms_to_time");function nU(e,t){let r=_s.basename(e,_s.extname(e));return _s.join(_s.dirname(e),r+t)}a(nU,"changeExtension")});var Hf=f((QX,vf)=>{"use strict";var Nu=require("recursive-iterator"),iU=require("alasql"),Ou=require("clone"),If=b(),{handleHDBError:bf,hdb_errors:aU}=L(),{HDB_ERROR_MSGS:wf,HTTP_STATUS_CODES:Cf}=aU,oU=["DISTINCT_ARRAY"],Lf=Symbol("validateTables"),Iu=Symbol("validateTable"),WX=Symbol("getAllColumns"),yf=Symbol("validateAllColumns"),va=Symbol("findColumn"),Uf=Symbol("validateOrderBy"),Kn=Symbol("validateSegment"),bu=Symbol("validateColumn"),Mf=Symbol("setColumnsForTable"),Df=Symbol("checkColumnsForAsterisk"),Pf=Symbol("validateGroupBy"),Bf=Symbol("hasColumns"),Ha=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Lf](),this[Df](),this[yf]()}[Lf](){if(this[Bf]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Iu](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Iu](t.table)})}}[Bf](){let t=!1,r=new Nu(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Iu](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw bf(new Error,wf.SCHEMA_NOT_FOUND(t.databaseid),Cf.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw bf(new Error,wf.TABLE_NOT_FOUND(t.databaseid,t.tableid),Cf.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=Ou(s);n.table=Ou(t),this.attributes.push(n)})}[va](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)}[Df](){let t=new Nu(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Mf](r.tableid)}[Mf](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new iU.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[yf](){this[Kn](this.statement.columns,!1),this[Kn](this.statement.joins,!1),this[Kn](this.statement.where,!1),this[Pf](this.statement.group,!1),this[Kn](this.statement.order,!0)}[Kn](t,r){if(!t)return;let s=new Nu(t),n=[];for(let{node:i,path:o}of s)!If.isEmpty(i)&&!If.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Uf](i):n.push(this[bu](i)));return n}[Pf](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&oU.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Ou(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[va](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[va](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[Uf](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[bu](t)}[bu](t){let r=this[va](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(Ha,"SelectValidator");vf.exports=Ha});var wu=f((XX,qf)=>{"use strict";var qa=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(qa,"BridgeMethods");qf.exports=qa});var us=f((e3,$f)=>{"use strict";var Gf=it().LMDB_ERRORS_ENUM,zX=require("lmdb"),cU=Ue(),jX=require("buffer").Buffer,{OVERFLOW_MARKER:Ff,MAX_SEARCH_KEY_LENGTH:Ga}=cU,xf=["number","string","symbol","boolean","bigint"];function _U(e){if(e=e?.database||e,!e)throw new Error(Gf.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(Gf.INVALID_ENVIRONMENT)}a(_U,"validateEnv");function uU(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(uU,"stringifyData");function lU(e){return e instanceof Date?e.valueOf():e}a(lU,"convertKeyValueToWrite");function EU(e){if(e==null)return;if(xf.includes(typeof e))return e.length>Ga?[e.slice(0,Ga)+Ff]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];xf.includes(typeof n)&&(n.length>Ga?t.push(n.slice(0,Ga)+Ff):t.push(n))}}return t}a(EU,"getIndexedValues");var Fa=0,Vf=0;function kf(){Vf=Date.now()-performance.now()}a(kf,"adjustStartTime");kf();var dU=6e4;setInterval(kf,dU).unref();function hU(){let e=performance.now()+Vf;return e>Fa?(Fa=e,e):(Fa+=488e-6,Fa)}a(hU,"getNextMonotonicTime");$f.exports={validateEnv:_U,stringifyData:uU,convertKeyValueToWrite:lU,getNextMonotonicTime:hU,getIndexedValues:EU}});var Kf=f((r3,Yf)=>{"use strict";var xa=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(xa,"DBIDefinition");Yf.exports=xa});var Qf=f((n3,Wf)=>{"use strict";var fU={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))},SU="certificate.pem",TU="privateKey.pem",mU="ca.pem";Wf.exports={CERTIFICATE_VALUES:fU,CERTIFICATE_PEM_NAME:SU,PRIVATEKEY_PEM_NAME:TU,CA_PEM_NAME:mU}});var te=f((i3,Jf)=>{"use strict";var $e=require("validate.js");$e.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||$e.validators.type.checks[t](e)?null:` must be a '${t}' value`};$e.validators.type.checks={Object:function(e){return $e.isObject(e)&&!$e.isArray(e)},Array:$e.isArray,Integer:$e.isInteger,Number:$e.isNumber,String:$e.isString,Date:$e.isDate,Boolean:function(e){return typeof e=="boolean"}};$e.validators.hasValidFileExt=function(e,t){return $e.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};Jf.exports={validateObject:RU,validateObjectAsync:AU,validateBySchema:pU};function RU(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=$e(e,t,{format:"flat"});return r?new Error(r):null}a(RU,"validateObject");async function AU(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await $e.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(AU,"validateObjectAsync");function pU(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(pU,"validateBySchema")});var Lu=f((c3,jf)=>{"use strict";var gU=require("fs-extra"),P=require("joi"),NU=require("os"),{boolean:re,string:_r,number:Mt,array:Cu}=P.types(),{totalmem:Xf}=require("os"),Wn=require("path"),OU=I(),ka=b(),o3=Qf(),IU=m(),bU=te(),Zf="log",wU="custom_functions",CU="Invalid logging.rotation.maxSize unit. Available units are G, M or K",LU="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",yU="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",UU="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",MU="rootPath config parameter is undefined",DU="clustering.enabled config parameter is undefined",ls=Mt.min(0).required(),$a=Cu.items({host:_r.required(),port:ls}).empty(null),yr;jf.exports={configValidator:PU,routesValidator:FU,route_constraints:$a};function PU(e){if(yr=e.rootPath,ka.isEmpty(yr))throw MU;let t=re.required(),r=P.valid("production","development").required(),s=Mt.min(1).max(1e3).empty(null).default(GU),n=_r.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Va),i=P.custom(BU).messages({"any.custom":"{:#label} {:#error}"}),o=_r.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=P.string().empty(null).default(Va),_=P.custom(vU).empty(null).default(Va),u=e.clustering?.enabled;if(ka.isEmpty(u))throw DU;let l;return u===!0?l=P.object({enabled:t,hubServer:P.object({cluster:P.object({name:P.required().empty(null),network:P.object({port:ls,routes:$a}).required()}).required(),leafNodes:P.object({network:P.object({port:ls}).required()}).required(),network:P.object({port:ls}).required()}).required(),leafServer:P.object({network:P.object({port:ls,routes:$a}).required(),streams:P.object({maxAge:Mt.min(120).allow(null).optional(),maxBytes:Mt.min(1).allow(null).optional(),maxMsgs:Mt.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:P.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:re.optional(),tls:P.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:re.required(),verify:re.optional()}),user:_r.optional().empty(null)}).required():l=P.object({enabled:t,tls:P.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:re.required()})}).required(),P.object({clustering:l,customFunctions:P.object({enabled:t,network:P.object({cors:re.required(),corsAccessList:Cu.required(),headersTimeout:Mt.min(1).required(),https:re.required(),keepAliveTimeout:Mt.min(1).required(),port:ls,timeout:Mt.min(1).required()}),nodeEnv:r,root:n,tls:P.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:P.object({enabled:t}).required(),logging:P.object({file:re.required(),level:P.valid("notify","fatal","error","warn","info","debug","trace"),rotation:P.object({enabled:re.optional(),compress:re.optional(),interval:_r.custom(qU).optional().empty(null),maxSize:_r.custom(HU).optional().empty(null),path:_r.optional().empty(null).default(Va)}).required(),root:n,stdStreams:re.required(),auditLog:re.required()}).required(),operationsApi:P.object({authentication:P.object({operationTokenTimeout:P.required(),refreshTokenTimeout:P.required()}).required(),foreground:re.required(),network:P.object({cors:re.required(),corsAccessList:Cu.required(),headersTimeout:Mt.min(1).required(),https:re.required(),keepAliveTimeout:Mt.min(1).required(),port:ls,timeout:Mt.min(1).required()}).required(),nodeEnv:r,tls:P.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:_r.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:P.object({threads:s}).required(),storage:P.object({writeAsync:re.required(),overlappingSync:re.optional(),caching:re.optional(),compression:re.optional(),noReadAhead:re.optional(),path:_,prefetchWrites:re.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(PU,"configValidator");function zf(e){return gU.existsSync(e)?null:`Specified path ${e} does not exist.`}a(zf,"doesPathExist");function BU(e,t){if(e===null)return;let r=zf(e);return r?t.message(r):e}a(BU,"validatePemFile");function vU(e,t){P.assert(e,_r.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=zf(e);if(r)return t.message(r)}a(vU,"validatePath");function HU(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(CU);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(yU):e}a(HU,"validateRotationMaxSize");function qU(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(LU);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(UU):e}a(qU,"validateRotationInterval");function GU(e,t){let r=t.state.path.join("."),s=NU.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Xf();return i=Math.round(Math.min(i,Xf())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),OU.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(GU,"setDefaultThreads");function Va(e,t){if(!ka.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(ka.isEmpty(yr))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Wn.join(yr,wU);case"logging.root":return Wn.join(yr,Zf);case"clustering.leafServer.streams.path":return Wn.join(yr,"clustering","leaf");case"storage.path":return Wn.join(yr,IU.SCHEMA_DIR_NAME);case"logging.rotation.path":return Wn.join(yr,Zf);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Va,"setDefaultRoot");function FU(e){let t=P.object({routes:$a});return bU.validateBySchema({routes:e},t)}a(FU,"routesValidator")});var lr=f((u3,_S)=>{"use strict";var At=m(),ot=b(),Te=I(),{configValidator:xU,routesValidator:eS}=Lu(),Rt=require("fs-extra"),VU=require("yaml"),$t=require("path"),kU=require("is-number"),rS=require("properties-reader"),$U=require("lodash"),{handleHDBError:YU}=L(),{HTTP_STATUS_CODES:KU,HDB_ERROR_MSGS:Ya}=it(),WU=require("minimist"),{SCHEMAS_PARAM_CONFIG:Qn,CONFIG_PARAMS:Ur,CONFIG_PARAM_MAP:ur}=At,QU="Unable to get config value because config is uninitialized",JU="Config successfully initialized",XU="Error backing up config file",ZU="Empty parameter sent to getConfigValue",sS=$t.join(At.PACKAGE_ROOT,"config","yaml",At.HDB_DEFAULT_CONFIG_FILE),zU="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",tS={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"},Ka,Ne;_S.exports={createConfigFile:jU,getDefaultConfig:eM,getConfigValue:iS,initConfig:aS,flattenConfig:Es,updateConfigValue:oS,updateConfigObject:rM,getConfiguration:iM,setConfiguration:aM,readConfigFile:Du,getClusteringRoutes:oM,initOldConfig:cS,getConfigFromFile:cM};function jU(e){let t=Js(sS);Ka=Es(t.toJSON());let r;for(let o in e){let c=ur[o.toLowerCase()];if(c===Ur.SCHEMAS){r=e[o];continue}if(c!==void 0){let _=c.split("_"),u=yu(c,e[o]);try{t.setIn([..._],u)}catch(l){Te.error(l)}}}r&&nS(t,r),Mu(t);let s=t.toJSON();Ne=Es(s);let n=t.getIn(["rootPath"]),i=$t.join(n,At.HDB_CONFIG_FILE);Rt.createFileSync(i),Rt.writeFileSync(i,String(t)),Te.trace(`Config file written to ${i}`)}a(jU,"createConfigFile");function nS(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!ot.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Qn.TABLES))for(let i in s[n][Qn.TABLES])for(let o in s[n][Qn.TABLES][i]){let c=s[n][Qn.TABLES][i][o],_=[Ur.SCHEMAS,n,Qn.TABLES,i,o];e.hasIn(_)?e.setIn(_,c):e.addIn(_,c)}else for(let i in s[n]){let o=s[n][i],c=[Ur.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){Te.error("Error parsing schemas CLI/env config arguments",s)}}a(nS,"setSchemasConfig");function eM(e){if(Ka===void 0){let r=Js(sS);Ka=Es(r.toJSON())}let t=ur[e.toLowerCase()];if(t!==void 0)return Ka[t.toLowerCase()]}a(eM,"getDefaultConfig");function iS(e){if(ot.isEmpty(e)){Te.error(ZU);return}if(Ne===void 0){Te.trace(QU);return}let t=ur[e.toLowerCase()];if(t!==void 0)return Ne[t.toLowerCase()]}a(iS,"getConfigValue");function Uu(e){let t=WU(process.argv);return t.ROOTPATH?$t.join(t.ROOTPATH,At.HDB_CONFIG_FILE):rS(e).get(At.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Uu,"getConfigFilePath");function aS(e=!1){if(Ne===void 0||e){let t=ot.getPropsFilePath();try{Rt.accessSync(t,Rt.constants.F_OK|Rt.constants.R_OK)}catch(i){throw Te.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}let r=Uu(t),s;if(r.includes("config/settings.js"))try{cS(r);return}catch(i){if(i.code!==At.NODE_ERROR_CODES.ENOENT)throw i}try{s=Js(r)}catch(i){if(i.code===At.NODE_ERROR_CODES.ENOENT){Te.trace(`HarperDB config file not found at ${r}.
|
|
5
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw Te.error(i),new Error(`Error reading HarperDB config file at ${r}`)}tM(s,r),Mu(s);let n=s.toJSON();if(Ne=Es(n),Ne.logging_rotation_rotate)for(let i in tS)Ne[i]&&Te.error(`Config ${tS[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Te.trace(JU)}}a(aS,"initConfig");function tM(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],$t.join(r,At.SCHEMA_DIR_NAME)),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],$t.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],$t.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(Te.trace("Updating config file with missing config params"),Rt.writeFileSync(t,String(e)))}a(tM,"checkForUpdatedConfig");function Mu(e){let t=e.toJSON(),r=xU(t);if(r.error)throw Ya.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(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams.path)}a(Mu,"validateConfig");function rM(e,t){Ne===void 0&&(Ne={});let r=ur[e.toLowerCase()];if(r===void 0){Te.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ne[r.toLowerCase()]=t}a(rM,"updateConfigObject");function oS(e,t,r=void 0,s=!1,n=!1){Ne===void 0&&aS();let i=iS(ur.hdb_root),o=$t.join(i,At.HDB_CONFIG_FILE),c=Js(o),_;if(r===void 0&&e.toLowerCase()===Ur.SCHEMAS)_=t;else if(r===void 0){let E=ur[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let d=E.split("_"),h=yu(E,t);c.setIn([...d],h)}else for(let E in r){let d=ur[E.toLowerCase()];if(d===Ur.SCHEMAS){_=r[E];continue}if(d!==void 0){let h=d.split("_"),T=yu(d,r[E]);try{c.setIn([...h],T)}catch(R){Te.error(R)}}}_&&nS(c,_),Mu(c);let u=c.getIn(["rootPath"]),l=$t.join(u,At.HDB_CONFIG_FILE);s===!0&&sM(o,u),Rt.writeFileSync(l,String(c)),n&&(Ne=Es(c.toJSON())),Te.trace(`Config parameter: ${e} updated with value: ${t}`)}a(oS,"updateConfigValue");function sM(e,t){try{let r=$t.join(t,"backup",`${At.HDB_CONFIG_FILE}.bak`);Rt.copySync(e,r),Te.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Te.error(XU),Te.error(r)}}a(sM,"backupConfigFile");var nM=["schemas"];function Es(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!nM.includes(r)){let s=Es(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(Es,"flattenConfig");function yu(e,t){if(e===Ur.CLUSTERING_NODENAME||e===Ur.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(kU(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||ot.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 ot.autoCast(t)}a(yu,"castConfigValue");function iM(){let e=ot.getPropsFilePath(),t=Uu(e);return Js(t).toJSON()}a(iM,"getConfiguration");async function aM(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return oS(void 0,void 0,n,!0),zU}catch(i){throw typeof i=="string"||i instanceof String?YU(i,i,KU.BAD_REQUEST,void 0,void 0,!0):i}}a(aM,"setConfiguration");function Du(){let e=ot.getPropsFilePath();try{Rt.accessSync(e,Rt.constants.F_OK|Rt.constants.R_OK)}catch(s){throw Te.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Uu(e);return Js(t).toJSON()}a(Du,"readConfigFile");function Js(e){return VU.parseDocument(Rt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Js,"parseYamlDoc");function oM(){let e=Du(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=ot.isEmptyOrZeroLength(t)?[]:t;let r=eS(t);if(r)throw Ya.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=ot.isEmptyOrZeroLength(s)?[]:s;let n=eS(s);if(n)throw Ya.CONFIG_VALIDATION(n.message);if(!ot.isEmptyOrZeroLength(s)&&!ot.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!ot.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Ya.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(oM,"getClusteringRoutes");function cS(e){let t=rS(e);Ne={};for(let r in ur){let s=t.get(r.toUpperCase());if(ot.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=ur[r].toLowerCase();n===Ur.LOGGING_ROOT?Ne[n]=$t.dirname(s):Ne[n]=s}return Ne}a(cS,"initOldConfig");function cM(e){let t=Du();return $U.get(t,e.replaceAll("_","."))}a(cM,"getConfigFromFile")});var B=f((E3,lS)=>{"use strict";var Pu=require("fs-extra"),Yt=require("path"),_M=require("os"),uM=require("properties-reader"),Jn=I(),Xs=b(),y=m(),Wa=lr(),lM="Error initializing environment manager",Qa="BOOT_PROPS_FILE_PATH",uS=!1,EM={[y.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[y.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Er={};lS.exports={BOOT_PROPS_FILE_PATH:Qa,getHdbBasePath:dM,setHdbBasePath:hM,get:fM,initSync:TM,setProperty:k,initTestEnvironment:mM};function dM(){return Er[y.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(dM,"getHdbBasePath");function hM(e){Er[y.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(hM,"setHdbBasePath");function fM(e){let t=Wa.getConfigValue(e);return t===void 0?Er[e]:t}a(fM,"get");function k(e,t){EM[e]&&(Er[e]=t),Wa.updateConfigObject(e,t)}a(k,"setProperty");function SM(){let e;try{e=Xs.getPropsFilePath(),Pu.accessSync(e,Pu.constants.F_OK|Pu.constants.R_OK),uS=!0;let t=uM(e);return Er[y.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(y.HDB_SETTINGS_NAMES.INSTALL_USER),Er[y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Er[Qa]=e,!0}catch{return Jn.trace(`Environment manager found no properties file at ${e}`),!1}}a(SM,"doesPropFileExist");function TM(e=!1){try{(uS||SM())&&(Wa.initConfig(e),Er[y.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Wa.getConfigValue(y.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Jn.error(lM),Jn.error(t),console.error(t),process.exit(1)}}a(TM,"initSync");function mM(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,_=Yt.join(__dirname,"../../","unitTests");Er[Qa]=Yt.join(_,"hdb_boot_properties.file"),k(y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Yt.join(_,"settings.test")),k(y.HDB_SETTINGS_NAMES.INSTALL_USER,_M.userInfo().username),k(y.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Yt.join(_,"envDir","utility","keys","privateKey.pem")),k(y.HDB_SETTINGS_NAMES.CERT_KEY,Yt.join(_,"envDir","utility","keys","certificate.pem")),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Yt.join(_,"envDir","utility","keys","privateKey.pem")),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Yt.join(_,"envDir","utility","keys","certificate.pem")),k(y.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),k(y.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Yt.join(_,"envDir","log")),k(y.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),k(y.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),k(y.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),k(y.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Yt.join(_,"envDir")),k(y.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Xs.isEmpty(n)?!0:n),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Xs.isEmpty(n)?!0:n),k(y.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),k(y.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Xs.isEmpty(i)?!1:i),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Xs.isEmpty(i)?!1:i),k(y.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),k(y.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),k(y.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),k(y.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),k(y.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Yt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),k(y.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Xs.isEmpty(c)?!1:c),o&&(k("CORS_ACCESSLIST",o),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(k(y.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(k(y.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(k(y.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Qa}. Please check your boot props and settings files`;Jn.fatal(r),Jn.error(t)}}a(mM,"initTestEnvironment")});var hS=f((h3,dS)=>{"use strict";var Bu=B(),ES=m();Bu.initSync();var RM=Bu.get(ES.CONFIG_PARAMS.STORAGE_COMPRESSION),AM=Bu.get(ES.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Ja=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=RM&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=AM&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(Ja,"OpenDBIObject");dS.exports=Ja});var TS=f((S3,SS)=>{"use strict";var Zs=B(),Xn=m();Zs.initSync();var pM=Zs.get(Xn.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Zs.get(Xn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Zs.get(Xn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",fS=Zs.get(Xn.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),gM=Zs.get(Xn.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Xa=class{constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=pM,fS!==void 0&&(this.overlappingSync=fS),this.noReadAhead=gM}};a(Xa,"OpenEnvironmentObject");SS.exports=Xa});var X=f((m3,OS)=>{"use strict";var vu=require("lmdb"),pt=require("fs-extra"),Dt=require("path"),za=us(),mS=I(),Oe=it().LMDB_ERRORS_ENUM,ja=Kf(),Hu=hS(),RS=TS(),Mr=Ue(),Pt=Mr.INTERNAL_DBIS_NAME,AS=Mr.DBI_DEFINITION_NAME,NM="data.mdb",OM="lock.mdb",Zn=".mdb",IM="-lock",Za=class{constructor(t,r,s=!1){this.dbi=gt(t,r),this.key_type=this.dbi[Mr.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Mr.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new vu.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(Za,"TransactionCursor");function qu(e,t){if(e===void 0)throw new Error(Oe.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Oe.ENV_NAME_REQUIRED)}a(qu,"pathEnvNameValidation");async function Gu(e,t,r=!0){try{await pt.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Oe.INVALID_BASE_PATH):s}try{let s=Dt.join(e,t+Zn);return await pt.access(s,pt.constants.R_OK|pt.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await pt.access(Dt.join(e,t,NM),pt.constants.R_OK|pt.constants.F_OK),Dt.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Oe.INVALID_ENVIRONMENT)}else throw new Error(Oe.INVALID_ENVIRONMENT);throw s}}a(Gu,"validateEnvironmentPath");function eo(e,t){if(za.validateEnv(e),t===void 0)throw new Error(Oe.DBI_NAME_REQUIRED)}a(eo,"validateEnvDBIName");async function bM(e,t,r=!1,s=!1){qu(e,t),t=t.toString();try{return await Gu(e,t,s),Fu(e,t,r)}catch(n){if(n.message===Oe.INVALID_ENVIRONMENT){let i=Dt.join(e,t);await pt.mkdirp(s?i:e);let o=new RS(s?i:i+Zn,!1),c=vu.open(o);c.dbis=Object.create(null);let _=new Hu(!1);c.openDB(Pt,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=xu(e,t,r);return c[Mr.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=c,c}throw n}}a(bM,"createEnvironment");async function wM(e,t,r,s=!0){let n=await Fu(e,t);if(r===void 0)throw new Error(Oe.DESTINATION_PATH_REQUIRED);try{await pt.access(Dt.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(Oe.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(wM,"copyEnvironment");async function Fu(e,t,r=!1){qu(e,t),t=t.toString();let s=xu(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 Gu(e,t),i=Dt.join(e,t+Zn),o=n!=i,c=new RS(n,o),_=vu.open(c);_.dbis=Object.create(null);let u=gS(_);for(let l=0;l<u.length;l++)gt(_,u[l]);return _[Mr.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=_,_}a(Fu,"openEnvironment");async function CM(e,t,r=!1){qu(e,t),t=t.toString();let s=Dt.join(e,t+Zn),n=await Gu(e,t);if(global.lmdb_map!==void 0){let i=xu(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await pS(o),delete global.lmdb_map[i]}}await pt.remove(n),await pt.remove(n===s?n+IM:Dt.join(Dt.dirname(n),OM))}a(CM,"deleteEnvironment");async function pS(e){za.validateEnv(e);let t=e[Mr.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(pS,"closeEnvironment");function xu(e,t,r=!1){let n=`${Dt.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(xu,"getCachedEnvironmentName");function LM(e){za.validateEnv(e);let t=Object.create(null),r=gt(e,Pt);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Pt)try{t[s]=Object.assign(new ja,n)}catch{mS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(LM,"listDBIDefinitions");function gS(e){za.validateEnv(e);let t=[],r=gt(e,Pt);for(let{key:s}of r.getRange({start:!1}))s!==Pt&&t.push(s);return t}a(gS,"listDBIs");function yM(e,t){let s=gt(e,Pt).getEntry(t),n=new ja;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{mS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(yM,"getDBIDefinition");function NS(e,t,r,s=!1){if(eo(e,t),t=t.toString(),t===Pt)throw new Error(Oe.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return gt(e,t)}catch(n){if(n.message===Oe.DBI_DOES_NOT_EXIST){let i=new Hu(r,s===!0),o=e.openDB(t,i),c=new ja(r===!0,s);return o[AS]=c,gt(e,Pt).putSync(t,c),e.dbis[t]=o,o}throw n}}a(NS,"createDBI");function gt(e,t){if(eo(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Pt?r=yM(e,t):r=new ja,r===void 0)throw new Error(Oe.DBI_DOES_NOT_EXIST);let s;try{let n=new Hu(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(Oe.DBI_DOES_NOT_EXIST):n}return s[AS]=r,e.dbis[t]=s,s}a(gt,"openDBI");function UM(e,t){eo(e,t),t=t.toString();let r=gt(e,t),s=r.getStats();return r[Mr.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(UM,"statDBI");async function MM(e,t){try{let r=Dt.join(e,t+Zn);return(await pt.stat(r)).size}catch{throw new Error(Oe.INVALID_ENVIRONMENT)}}a(MM,"environmentDataSize");function DM(e,t){if(eo(e,t),t=t.toString(),t===Pt)throw new Error(Oe.CANNOT_DROP_INTERNAL_DBIS_NAME);gt(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],gt(e,Pt).removeSync(t)}a(DM,"dropDBI");function PM(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{gt(e,n)}catch(i){if(i.message===Oe.DBI_DOES_NOT_EXIST)NS(e,n,n!==t,n===t);else throw i}}}a(PM,"initializeDBIs");OS.exports={openDBI:gt,openEnvironment:Fu,createEnvironment:bM,listDBIs:gS,listDBIDefinitions:LM,createDBI:NS,dropDBI:DM,statDBI:UM,deleteEnvironment:CM,initializeDBIs:PM,TransactionCursor:Za,environmentDataSize:MM,copyEnvironment:wM,closeEnvironment:pS}});var bS=f((A3,IS)=>{"use strict";var to=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(to,"InsertRecordsResponseObject");IS.exports=to});var CS=f((g3,wS)=>{"use strict";var ro=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(ro,"UpdateRecordsResponseObject");wS.exports=ro});var yS=f((O3,LS)=>{"use strict";var so=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(so,"UpsertRecordsResponseObject");LS.exports=so});var zs=f((L3,DS)=>{"use strict";var BM=X(),vM=bS(),HM=CS(),qM=yS(),Kt=us(),zn=it().LMDB_ERRORS_ENUM,GM=Ue(),dr=m(),FM=b(),xM=require("uuid"),b3=require("lmdb"),{handleHDBError:VM,hdb_errors:kM}=L(),{OVERFLOW_MARKER:w3,MAX_SEARCH_KEY_LENGTH:C3}=GM,US=B();US.initSync();var no=US.get(dr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Vu=dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,ds=dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function $M(e,t,r,s,n=Kt.getNextMonotonicTime()){Ku(e,t,r,s),ku(e,t,r);let i=new vM,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];MS(u,!0,n);let l=YM(e,t,r,u),E=u[t];o.push(l),c.push(E)}return $u(o,c,s,i,n)}a($M,"insertRecords");function YM(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][dr.FUNC_VAL],s[o]=c)}let _=Kt.getIndexedValues(c),u=e.dbis[o];if(_){no&&u.prefetch(_.map(l=>({key:l,value:n})),io);for(let l=0,E=_.length;l<E;l++)u.put(_[l],n)}}no&&e.dbis[t].prefetch([n],io),e.dbis[t].put(n,s,s[ds])})}a(YM,"insertRecord");function KM(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(KM,"removeSkippedRecords");function MS(e,t,r){let s=r>0;(s||!Number.isInteger(e[ds]))&&(e[ds]=r||(r=Kt.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Vu]))&&(e[Vu]=r||Kt.getNextMonotonicTime()):delete e[Vu]}a(MS,"setTimestamps");function ku(e,t,r){r.indexOf(dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),BM.initializeDBIs(e,t,r)}a(ku,"initializeTransaction");async function WM(e,t,r,s,n=Kt.getNextMonotonicTime()){Ku(e,t,r,s),ku(e,t,r);let i=new HM,o=[],c=[],_=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],d;try{d=Yu(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),o.push(u);continue}c.push(d),_.push(E)}return $u(c,_,s,i,n,o)}a(WM,"updateRecords");async function QM(e,t,r,s,n=Kt.getNextMonotonicTime()){try{Ku(e,t,r,s)}catch(_){throw VM(_,_.message,kM.HTTP_STATUS_CODES.BAD_REQUEST)}ku(e,t,r);let i=new qM,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;FM.isEmpty(u[t])?(l=xM.v4(),u[t]=l):l=u[t];let E=Yu(e,t,u,l,i,!1,n);o.push(E),c.push(l)}return $u(o,c,s,i,n)}a(QM,"upsertRecords");async function $u(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,_=o.length;c<_;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Kt.getNextMonotonicTime(),KM(r,i),s}a($u,"finalizeWrite");function Yu(e,t,r,s,n,i=!1,o){let c=e.dbis[t],_=c.getEntry(s),u=_?.value,l=u;if(!u){if(i)return!1;u={}}if(MS(r,!l,o),Number.isInteger(r[ds])&&u[ds]>r[ds])return!1;l&&n.original_records.push(u);let E,d=a(()=>{for(let T in r){if(!r.hasOwnProperty(T)||T===t)continue;let R=r[T],g=e.dbis[T];if(g===void 0)continue;let H=u[T];if(typeof R=="function"){let q=R([[u]]);Array.isArray(q)&&(R=q[0][dr.FUNC_VAL],r[T]=R)}if(R===H)continue;let x=Kt.getIndexedValues(H);if(x){no&&g.prefetch(x.map(q=>({key:q,value:s})),io);for(let q=0,ye=x.length;q<ye;q++)g.remove(x[q],s)}if(x=Kt.getIndexedValues(R),x){no&&g.prefetch(x.map(q=>({key:q,value:s})),io);for(let q=0,ye=x.length;q<ye;q++)g.put(x[q],s)}}let h=Object.assign({},u,r);c.put(s,h,h[ds])},"do_put");return _?E=c.ifVersion(s,_.version,d):E=c.ifNoExists(s,d),E.then(h=>h?!0:Yu(e,t,r,s,n,i,o))}a(Yu,"updateUpsertRecord");function JM(e,t,r){if(Kt.validateEnv(e),t===void 0)throw new Error(zn.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(zn.WRITE_ATTRIBUTES_REQUIRED):new Error(zn.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(JM,"validateBasic");function Ku(e,t,r,s){if(JM(e,t,r),!Array.isArray(s))throw s===void 0?new Error(zn.RECORDS_REQUIRED):new Error(zn.RECORDS_MUST_BE_ARRAY)}a(Ku,"validateWrite");function io(){}a(io,"noop");DS.exports={insertRecords:$M,updateRecords:WM,upsertRecords:QM}});var j=f((U3,GS)=>{"use strict";var si=m(),XM=b(),Ye=B(),ni=require("path"),ZM=require("minimist"),PS=require("fs-extra"),BS=require("lodash");Ye.initSync();var{CONFIG_PARAMS:Dr,SCHEMAS_PARAM_CONFIG:jn,SYSTEM_SCHEMA_NAME:ao}=si,ei,ti,ri;function vS(){if(ei!==void 0)return ei;if(Ye.getHdbBasePath()!==void 0)return ei=Ye.get(Dr.STORAGE_PATH)||ni.join(Ye.getHdbBasePath(),si.SCHEMA_DIR_NAME),ei}a(vS,"getBaseSchemaPath");function HS(){if(ti!==void 0)return ti;if(Ye.getHdbBasePath()!==void 0)return ti=qS(ao),ti}a(HS,"getSystemSchemaPath");function zM(){if(ri!==void 0)return ri;if(Ye.getHdbBasePath()!==void 0)return ri=Ye.get(si.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||ni.join(Ye.getHdbBasePath(),si.TRANSACTIONS_DIR_NAME),ri}a(zM,"getTransactionAuditStoreBasePath");function jM(e,t){let r=Ye.get(Dr.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||ni.join(zM(),e.toString())}a(jM,"getTransactionAuditStorePath");function qS(e,t){e=e.toString(),t=t&&t.toString();let r=Ye.get(si.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||ni.join(vS(),e)}a(qS,"getSchemaPath");function eD(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,ZM(process.argv));let s=r[Dr.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!XM.isObject(s))throw o;i=s}for(let o of i){let c=o[ao];if(!c)continue;let _=Ye.get(Dr.SCHEMAS);_=_??{};let u=c?.tables?.[t]?.[jn.PATH];if(u)return BS.set(_,[ao,jn.TABLES,t,jn.PATH],u),Ye.setProperty(Dr.SCHEMAS,_),u;let l=c?.[jn.PATH];if(l)return BS.set(_,[ao,jn.PATH],l),Ye.setProperty(Dr.SCHEMAS,_),l}}let n=r[Dr.STORAGE_PATH.toUpperCase()];if(n){if(!PS.pathExistsSync(n))throw new Error(n+" does not exist");let i=ni.join(n,e);return PS.mkdirsSync(i),Ye.setProperty(Dr.STORAGE_PATH,n),i}return HS()}a(eD,"initSystemSchemaPaths");function tD(){ei=void 0,ti=void 0,ri=void 0}a(tD,"resetPaths");GS.exports={getBaseSchemaPath:vS,getSystemSchemaPath:HS,getTransactionAuditStorePath:jM,getSchemaPath:qS,initSystemSchemaPaths:eD,resetPaths:tD}});var Wt=f((D3,VS)=>{"use strict";var xS=b(),FS=m(),co=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Wu=require("joi"),oo={schema_format:{pattern:co,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},rD=Wu.alternatives(Wu.string().min(1).max(oo.schema_length.maximum).pattern(co).messages({"string.pattern.base":"{:#label} "+oo.schema_format.message}),Wu.number()).required();function sD(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>oo.schema_length.maximum?`'${e}' maximum of 250 characters`:co.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(sD,"checkValidTable");function nD(e,t){return xS.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(nD,"validateSchemaExists");function iD(e,t){let r=t.state.ancestors[0].schema;return xS.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(iD,"validateTableExists");function aD(e,t){return e.toLowerCase()===FS.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${FS.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(aD,"validateSchemaName");VS.exports={common_validators:oo,schema_regex:co,hdb_schema_table:rD,validateSchemaExists:nD,validateTableExists:iD,validateSchemaName:aD,checkValidTable:sD}});var _o=f((B3,kS)=>{var{common_validators:Pr}=Wt(),ii=te(),Bt="is required",Z={schema:{presence:!0,format:Pr.schema_format,length:Pr.schema_length},table:{presence:!0,format:Pr.schema_format,length:Pr.schema_length},attribute:{presence:!0,format:Pr.schema_format,length:Pr.schema_length},hash_attribute:{presence:!0,format:Pr.schema_format,length:Pr.schema_length}};function ai(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(ai,"makeAttributesStrings");function oD(e){return e=ai(e),Z.schema.presence={message:Bt},Z.table.presence=!1,Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ii.validateObject(e,Z)}a(oD,"schema_object");function cD(e){return e=ai(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ii.validateObject(e,Z)}a(cD,"table_object");function _D(e){return e=ai(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence=!1,Z.hash_attribute.presence={message:Bt},ii.validateObject(e,Z)}a(_D,"create_table_object");function uD(e){return e=ai(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence={message:Bt},Z.hash_attribute.presence=!1,ii.validateObject(e,Z)}a(uD,"attribute_object");function lD(e){return e=ai(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ii.validateObject(e,Z)}a(lD,"describe_table");function ED(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(ED,"validateTableResidence");kS.exports={schema_object:oD,create_table_object:_D,table_object:cD,attribute_object:uD,describe_table:lD,validateTableResidence:ED}});var YS=f((H3,$S)=>{"use strict";var dD=require("uuid"),uo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||dD.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(uo,"CreateAttributeObject");$S.exports=uo});var Eo=f((G3,KS)=>{"use strict";var hD=YS(),lo=class extends hD{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(lo,"LMDBCreateAttributeObject");KS.exports=lo});var QS=f((x3,WS)=>{"use strict";WS.exports=SD;var fD="inserted";function SD(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===fD?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(SD,"returnObject")});var ho=f((k3,jS)=>{"use strict";var TD=m(),Qu=X(),mD=zs(),{getSystemSchemaPath:RD,getSchemaPath:AD}=j(),pD=cs(),gD=_o(),ND=Eo(),OD=QS(),{handleHDBError:JS,hdb_errors:ZS}=L(),XS=b(),{HTTP_STATUS_CODES:ID}=ZS,Ju=pD.hdb_attribute,zS=[];for(let e=0;e<Ju.attributes.length;e++)zS.push(Ju.attributes[e].attribute);var bD="inserted";jS.exports=wD;async function wD(e){let t=gD.attribute_object(e);if(t)throw JS(new Error,t.message,ZS.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&XS.checkGlobalSchemaTable(e.schema,e.table);if(r)throw JS(new Error,r,ID.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=XS.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new ND(e.schema,e.table,e.attribute,e.id);try{let i=await Qu.openEnvironment(AD(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);Qu.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Qu.openEnvironment(RD(),TD.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:_}=await mD.insertRecords(o,Ju.hash_attribute,zS,[n]);return OD(bD,c,{records:[n]},_)}catch(i){throw i}}a(wD,"lmdbCreateAttribute")});var Zu=f((Y3,tT)=>{var{hdb_schema_table:eT}=Wt(),CD=te(),Xu=require("joi"),LD={undefined:"undefined",null:"null"},yD=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||LD[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"),UD=Xu.object({schema:eT,table:eT,records:Xu.array().items(Xu.object().custom(yD)).required()});tT.exports=function(e){return CD.validateBySchema(e,UD)}});var fo=f((Q3,sT)=>{"use strict";var hr=b(),rT=I(),W3=Zu();sT.exports=MD;function MD(e){if(hr.isEmpty(e))throw new Error("invalid update parameters defined.");if(hr.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(hr.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(hr.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&&hr.isEmptyOrZeroLength(o[r]))throw rT.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(!hr.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw rT.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`);!hr.isEmpty(o[r])&&o[r]!==""&&s.has(hr.autoCast(o[r]))&&(o.skip=!0),s.add(hr.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(MD,"insertUpdateValidate")});var oi=f((X3,nT)=>{"use strict";var DD=m().OPERATIONS_ENUM,So=class{constructor(t,r,s,n,i=void 0){this.operation=DD.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(So,"InsertObject");nT.exports=So});var mo=f((j3,iT)=>{"use strict";var z3=oi(),To=m(),ju=b(),zu=I(),PD=require("uuid"),{handleHDBError:ci,hdb_errors:BD}=L(),{HDB_ERROR_MSGS:_i,HTTP_STATUS_CODES:ui}=BD;iT.exports=vD;function vD(e,t,r){for(let n=0;n<t.length;n++)HD(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];qD(i,r,e.operation)}}a(vD,"processRows");function HD(e){if(Buffer.byteLength(String(e))>To.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ci(new Error,_i.ATTR_NAME_LENGTH_ERR(e),ui.BAD_REQUEST,void 0,void 0,!0);if(ju.isEmptyOrZeroLength(e)||ju.isEmpty(e.trim()))throw ci(new Error,_i.ATTR_NAME_NULLISH_ERR,ui.BAD_REQUEST,void 0,void 0,!0)}a(HD,"validateAttribute");function qD(e,t,r){if(!e.hasOwnProperty(t)||ju.isEmptyOrZeroLength(e[t])){if(r===To.OPERATIONS_ENUM.INSERT||r===To.OPERATIONS_ENUM.UPSERT){e[t]=PD.v4();return}throw zu.error("Update transaction aborted due to record with no hash value:",e),ci(new Error,_i.RECORD_MISSING_HASH_ERR,ui.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>To.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw zu.error(e),ci(new Error,_i.HASH_VAL_LENGTH_ERR,ui.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw zu.error(e),ci(new Error,_i.INVALID_FORWARD_SLASH_IN_HASH_ERR,ui.BAD_REQUEST,void 0,void 0,!0)}a(qD,"validateHash")});var oT=f((tZ,aT)=>{"use strict";var Ro=class{constructor(t,r){this.type=t,this.message=r}};a(Ro,"ITCEventObject");aT.exports=Ro});var Ao=f((sZ,uT)=>{var GD=require("crypto"),cT=9;function FD(e){let t=VD(cT),r=_T(e+t);return t+r}a(FD,"createHash");function xD(e,t){let r=e.substr(0,cT),s=r+_T(t+r);return e===s}a(xD,"validateHash");function VD(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(VD,"generateSalt");function _T(e){return GD.createHash("md5").update(e).digest("hex")}a(_T,"md5");uT.exports={hash:FD,validate:xD}});var ET=f((iZ,lT)=>{"use strict";var Br=m(),li=class{constructor(t=0,r=Br.STORAGE_TYPES_ENUM.LMDB,s=Br.LICENSE_VALUES.API_CALL_DEFAULT,n=Br.RAM_ALLOCATION_ENUM.DEFAULT,i=Br.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(li,"BaseLicense");var po=class extends li{constructor(t=0,r=Br.STORAGE_TYPES_ENUM.LMDB,s=Br.LICENSE_VALUES.API_CALL_DEFAULT,n=Br.RAM_ALLOCATION_ENUM.DEFAULT,i=Br.LICENSE_VALUES.VERSION_DEFAULT,o,c=!1){super(t,r,s,n,i,o),this.enterprise=c}};a(po,"ExtendedLicense");lT.exports={BaseLicense:li,ExtendedLicense:po}});var tn=f((oZ,mT)=>{"use strict";var en=require("fs-extra"),dT=Ao(),hT=require("crypto"),kD=require("moment"),$D=require("uuid").v4,Pe=I(),tl=require("path"),YD=b(),ct=m(),KD=ET().ExtendedLicense,js="invalid license key format",WD="061183",QD="mofi25",JD="aes-256-cbc",XD=16,ZD=32,fT=B();fT.initSync();var el;mT.exports={validateLicense:ST,generateFingerPrint:jD,licenseSearch:TT,getLicense:rP};function rl(){return tl.join(fT.getHdbBasePath(),ct.LICENSE_KEY_DIR_NAME,ct.LICENSE_FILE_NAME)}a(rl,"getLicenseDirPath");function zD(){let e=rl();return tl.join(e,ct.LICENSE_FILE_NAME)}a(zD,"getLicenseFilePath");function sl(){let e=rl();return tl.join(e,ct.REG_KEY_FILE_NAME)}a(sl,"getFingerPrintFilePath");async function jD(){let e=sl();try{return await en.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await eP();throw Pe.error(`Error writing fingerprint file to ${e}`),Pe.error(t),new Error("There was an error generating the fingerprint")}}a(jD,"generateFingerPrint");async function eP(){let e=$D(),t=dT.hash(e),r=sl();try{await en.mkdirp(rl()),await en.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Pe.error(`Error writing fingerprint file to ${r}`),Pe.error(s),new Error("There was an error generating the fingerprint")}return t}a(eP,"writeFingerprint");function ST(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:ct.STORAGE_TYPES_ENUM.LMDB,api_call:ct.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:ct.RAM_ALLOCATION_ENUM.DEFAULT,version:ct.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Pe.error("empty license key passed to validate."),r;let s=sl(),n=!1;try{n=en.statSync(s)}catch(i){Pe.error(i)}if(n){let i;try{i=en.readFileSync(s,"utf8")}catch{Pe.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(QD),c=o[1];c=Buffer.concat([Buffer.from(c)],XD);let _=Buffer.concat([Buffer.from(i)],ZD),u=hT.createDecipheriv(JD,_,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=u.update(o[0],"hex","utf8"),l.trim(),l+=u.final("utf8")}catch{let h=tP(o[0],i);if(h)l=h;else throw r.valid_license=!1,r.valid_machine=!1,console.error(js),Pe.error(js),new Error(js)}let E;if(isNaN(l))try{E=JSON.parse(l),r.api_call=E.api_call,r.version=E.version,r.storage_type=E.storage_type,r.exp_date=E.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),E.ram_allocation&&(r.ram_allocation=E.ram_allocation)}catch{throw console.error(js),Pe.error(js),new Error(js)}else r.exp_date=l;r.exp_date<kD().valueOf()&&(r.valid_date=!1),dT.validate(o[1],`${WD}${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||Pe.error("Invalid licence"),r}a(ST,"validateLicense");function tP(e,t){try{let r=hT.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Pe.warn("Check old license failed")}}a(tP,"checkOldLicense");function TT(){let e=new KD;e.api_call=0;let t=[];try{t=en.readFileSync(zD(),"utf-8").split(ct.NEW_LINE)}catch(r){r.code==="ENOENT"?Pe.info("no license file found"):Pe.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(YD.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=ST(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){Pe.error("There was an error parsing the license string."),Pe.error(n),e.api_call=ct.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=ct.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=ct.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=ct.LICENSE_VALUES.API_CALL_DEFAULT),el=e,e}a(TT,"licenseSearch");async function rP(){return el||await TT(),el}a(rP,"getLicense")});var fs=f((_Z,_l)=>{"use strict";var{Worker:sP,MessageChannel:nP,parentPort:fr,isMainThread:pT,threadId:iP,workerData:aP}=require("worker_threads"),{PACKAGE_ROOT:oP}=m(),{join:cP,isAbsolute:_P,extname:uP}=require("path"),{totalmem:RT}=require("os"),ol=m(),gT=B(),lP=tn(),go=I(),EP=m();gT.initSync();var dP=gT.get(ol.CONFIG_PARAMS.HTTP_THREADS)||1,hP=1024*1024,vr=[],hs=[],fP=50,NT=1e4,OT="restart",IT="request_thread_info",bT="resource_report",wT="thread_info",CT="added-port",nl;_l.exports={startWorker:il,restartWorkers:cl,shutdownWorkers:TP,workers:vr,setMonitorListener:gP,onMessageFromWorkers:mP,broadcast:RP};function il(e,t={}){let s=lP.licenseSearch().ram_allocation,n=process.constrainedMemory?.()||RT();n=Math.min(n,RT());let i=Math.min(Math.max(Math.floor(n/hP/(1+dP/4)),512),s||1/0),o=Math.min(Math.max(i>>7,16),64),c=[];for(let u of hs){let{port1:l,port2:E}=new nP;u.postMessage({type:CT,port:l},[l]),c.push(E)}uP(e)||(e+=".js");let _=new sP(_P(e)?e:cP(oP,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:i,maxYoungGenerationSizeMb:o},argv:process.argv.slice(2),workerData:{addPorts:c,name:t.name},transferList:c},t));return No(_,!0),_.unexpectedRestarts=t.unexpectedRestarts||0,_.startCopy=()=>{il(e,t)},_.on("error",u=>{console.error("Worker error:",u),go.error("Worker error:",u)}),_.on("exit",u=>{vr.splice(vr.indexOf(_),1),!_.wasShutdown&&t.autoRestart!==!1&&(_.unexpectedRestarts<fP?(t.unexpectedRestarts=_.unexpectedRestarts+1,il(e,t)):go.error(`Thread has been restarted ${_.restarts} times and will not be restarted`))}),_.on("message",u=>{u.type===OT&&cl(u.workerType),u.type===IT&&AP(_),u.type===bT&&pP(_,u)}),vr.push(_),OP(),t.onStarted&&t.onStarted(_),_.name=t.name,_}a(il,"startWorker");var SP=[ol.THREAD_TYPES.HTTP];async function cl(e=null,t=2,r=!0){if(pT){t<1&&(t=t*vr.length);let s=[];for(let n of vr.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({type:ol.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=SP.indexOf(n.name)>-1,o=new Promise(c=>{let _=setTimeout(()=>n.terminate(),NT*2).unref();n.on("exit",()=>{clearTimeout(_),s.splice(s.indexOf(o)),!i&&r&&n.startCopy(),c()})});s.push(o),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else fr.postMessage({type:OT,workerType:e})}a(cl,"restartWorkers");function TP(e){return cl(e,1/0,!1)}a(TP,"shutdownWorkers");var LT=[];function mP(e){LT.push(e)}a(mP,"onMessageFromWorkers");function RP(e){for(let t of hs)try{t.postMessage(e)}catch(r){go.error("Unable to send message to worker",r)}}a(RP,"broadcast");function AP(e){e.postMessage({type:wT,workers:yT()})}a(AP,"sendThreadInfo");function yT(){let e=Date.now();return vr.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(yT,"getChildWorkerInfo");function pP(e,t){e.resources=t,e.resources.updated=Date.now()}a(pP,"recordResourceReport");var al;function gP(e){al=e}a(gP,"setMonitorListener");var NP=1e3,AT=!1;function OP(){AT||(AT=!0,setInterval(()=>{for(let e of vr){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}al&&al()},NP).unref())}a(OP,"startMonitoring");var IP=1e3;if(fr){No(fr);for(let e of aP.addPorts)No(e);setInterval(()=>{let e=process.memoryUsage();fr.postMessage({type:bT,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},IP).unref(),nl=a(()=>new Promise((e,t)=>{fr.on("message",r),fr.postMessage({type:IT});function r(s){s.type===wT&&(fr.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else nl=yT;_l.exports.getThreadInfo=nl;function No(e,t){hs.push(e),e.on("message",r=>{if(r.type===CT)No(r.port);else for(let s of LT)s(r)}).on("close",()=>{hs.splice(hs.indexOf(e),1)}).on("exit",()=>{hs.splice(hs.indexOf(e),1)}),t||e.unref()}a(No,"addPort");pT||fr.on("message",async e=>{let{type:t}=e;t===EP.ITC_EVENT_TYPES.SHUTDOWN&&(fr.unref(),setTimeout(()=>{go.warn("Thread did not voluntarily terminate",iP),process.exit(0)},NT).unref())})});var DT=f((lZ,MT)=>{"use strict";var ul=X(),bP=I(),UT=it().LMDB_ERRORS_ENUM;MT.exports=wP;async function wP(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await ul.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==UT.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await ul.closeEnvironment(global.lmdb_map[s]),await ul.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==UT.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){bP.error(t)}}a(wP,"cleanLMDBMap")});var Ot=f((dZ,vT)=>{"use strict";var Io=Zu(),Nt=b(),CP=require("util"),bo=Qt(),LP=qr(),ll=I(),{handleHDBError:Hr,hdb_errors:yP}=L(),{HTTP_STATUS_CODES:Ss}=yP,UP=CP.promisify(LP.getTableSchema),MP="updated",PT="inserted",BT="upserted";vT.exports={insert:PP,update:BP,upsert:vP,validation:DP,flush:HP};async function DP(e){if(Nt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Nt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Nt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await UP(e.schema,e.table),r=Io(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Nt.isEmptyOrZeroLength(c[s]))throw ll.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Nt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw ll.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Nt.isEmpty(c[s])&&c[s]!==""&&n.has(Nt.autoCast(c[s]))&&(c.skip=!0),n.add(Nt.autoCast(c[s]));for(let _ in c)i[_]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(DP,"validation");async function PP(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Io(e);if(t)throw Hr(new Error,t.message,Ss.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw Hr(new Error,r,Ss.BAD_REQUEST);let s=await bo.createRecords(e);return Oo(PT,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(PP,"insertData");async function BP(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Io(e);if(t)throw Hr(new Error,t.message,Ss.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw Hr(new Error,r,Ss.BAD_REQUEST);let s=await bo.updateRecords(e);return Nt.isEmpty(s.existing_rows)?Oo(MP,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Oo(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(BP,"updateData");async function vP(e){if(e.operation!=="upsert")throw Hr(new Error,"invalid operation, must be upsert",Ss.INTERNAL_SERVER_ERROR);let t=Io(e);if(t)throw Hr(new Error,t.message,Ss.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw Hr(new Error,r,Ss.BAD_REQUEST);try{let s=await bo.upsertRecords(e);return Oo(BT,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw Hr(s,null,null,ll.ERR,n)}}a(vP,"upsertData");function Oo(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===PT?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===BT?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Oo,"returnObject");function HP(e){return bo.flush(e.schema,e.table)}a(HP,"flush")});var dl=f((fZ,GT)=>{var qP=te(),El=require("joi"),{hdb_schema_table:HT}=Wt(),qT={schema:HT,table:HT},GP={date:El.date().iso().required()},FP={timestamp:El.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};GT.exports=function(e,t){let r=t==="timestamp"?{...qT,...FP}:{...qT,...GP},s=El.object(r);return qP.validateBySchema(e,s)}});var kT=f((SZ,VT)=>{var xP=te(),FT=require("joi"),{hdb_schema_table:xT}=Wt(),VP=FT.object({schema:xT,table:xT,hash_values:FT.array().required()});VT.exports=function(e){return xP.validateBySchema(e,VP)}});var YT=f((TZ,$T)=>{"use strict";var wo=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(wo,"InsertObject");var Co=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(Co,"NoSQLSeachObject");var Lo=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(Lo,"DeleteResponseObject");$T.exports={InsertObject:wo,NoSQLSeachObject:Co,DeleteResponseObject:Lo}});var ms=f((RZ,XT)=>{"use strict";var WT=dl(),kP=kT(),yo=b(),KT=require("moment"),QT=I(),{promisify:$P,callbackify:YP}=require("util"),Ts=m(),KP=qr(),hl=$P(KP.getTableSchema),fl=Qt(),{DeleteResponseObject:WP}=YT(),{handleHDBError:Gr,hdb_errors:QP}=L(),{HDB_ERROR_MSGS:Uo,HTTP_STATUS_CODES:Fr}=QP,JP="records successfully deleted",XP=YP(JT);XT.exports={delete:XP,deleteRecord:JT,deleteFilesBefore:ZP,deleteAuditLogsBefore:zP};async function ZP(e){let t=WT(e,"date");if(t)throw Gr(t,t.message,Fr.BAD_REQUEST,void 0,void 0,!0);if(!KT(e.date,KT.ISO_8601).isValid())throw Gr(new Error,Uo.INVALID_DATE,Fr.BAD_REQUEST,Ts.LOG_LEVELS.ERROR,Uo.INVALID_DATE,!0);let s=yo.checkSchemaTableExist(e.schema,e.table);if(s)throw Gr(new Error,s,Fr.NOT_FOUND,Ts.LOG_LEVELS.ERROR,s,!0);let n=await fl.deleteRecordsBefore(e);if(await hl(e.schema,e.table),QT.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(ZP,"deleteFilesBefore");async function zP(e){let t=WT(e,"timestamp");if(t)throw Gr(t,t.message,Fr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Gr(new Error,Uo.INVALID_VALUE("Timestamp"),Fr.BAD_REQUEST,Ts.LOG_LEVELS.ERROR,Uo.INVALID_VALUE("Timestamp"),!0);let r=yo.checkSchemaTableExist(e.schema,e.table);if(r)throw Gr(new Error,r,Fr.NOT_FOUND,Ts.LOG_LEVELS.ERROR,r,!0);let s=await fl.deleteAuditLogsBefore(e);return await hl(e.schema,e.table),QT.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(zP,"deleteAuditLogsBefore");async function JT(e){let t=kP(e);if(t)throw Gr(t,t.message,Fr.BAD_REQUEST,void 0,void 0,!0);let r=yo.checkSchemaTableExist(e.schema,e.table);if(r)throw Gr(new Error,r,Fr.NOT_FOUND,Ts.LOG_LEVELS.ERROR,r,!0);try{await hl(e.schema,e.table);let s=await fl.deleteRecords(e);return yo.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${JP}`),s}catch(s){if(s.message===Ts.SEARCH_NOT_FOUND_MESSAGE){let n=new WP;return n.message=Ts.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(JT,"deleteRecord")});var zT=f((pZ,ZT)=>{var Sl=te(),Be={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 jP(e){return Be.password.presence=!0,Be.username.presence=!0,Be.role.presence=!0,Be.active.presence=!0,Sl.validateObject(e,Be)}a(jP,"addUserValidation");function eB(e){return Be.password.presence=!1,Be.username.presence=!0,Be.role.presence=!1,Be.active.presence=!1,Sl.validateObject(e,Be)}a(eB,"alterUserValidation");function tB(e){return Be.password.presence=!1,Be.username.presence=!0,Be.role.presence=!1,Be.active.presence=!1,Sl.validateObject(e,Be)}a(tB,"dropUserValidation");ZT.exports={addUserValidation:jP,alterUserValidation:eB,dropUserValidation:tB}});var xr=f((NZ,rm)=>{"use strict";var Ei=require("crypto"),em="aes-256-cbc",rB=32,sB=16,Tl=64,tm=32,nB=Tl+tm,jT=new Map;rm.exports={encrypt:iB,decrypt:aB,createNatsTableStreamName:oB};function iB(e){let t=Ei.randomBytes(rB),r=Ei.randomBytes(sB),s=Ei.createCipheriv(em,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(iB,"encrypt");function aB(e){let t=e.substr(0,Tl),r=e.substr(Tl,tm),s=e.substr(nB,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Ei.createDecipheriv(em,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(aB,"decrypt");function oB(e,t){let r=`${e}.${t}`,s=jT.get(r);return s||(s=Ei.createHash("md5").update(`${e}.${t}`).digest("hex"),jT.set(r,s)),s}a(oB,"createNatsTableStreamName")});var oe=f((bZ,nm)=>{"use strict";var{platform:IZ}=require("os"),cB="nats-server.zip",ml="nats-server",_B=process.platform==="win32"?`${ml}.exe`:ml,Rl="HDB",uB=/^[^\s.,*>]+$/,sm="__request__",lB=a(e=>`${e}.${sm}`,"REQUEST_SUBJECT"),EB={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},dB={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},hB={HUB:"hub.pid",LEAF:"leaf.pid"},fB={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},SB={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Rl,deliver_subject:"__HDB__.WORKQUEUE"},TB={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Rl,deliver_subject:"HDB.SCHEMAQUEUE"},mB={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Rl,deliver_subject:"HDB.USERQUEUE"},RB={SUCCESS:"success",ERROR:"error"},AB={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},pB={TXN:"txn",MSGID:"msgid"},rn={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},gB={[rn.ERR]:1,[rn.WRN]:2,[rn.INF]:3,[rn.DBG]:4,[rn.TRC]:5},NB={debug:"-D",trace:"-DVV"};nm.exports={NATS_SERVER_ZIP:cB,NATS_SERVER_NAME:ml,NATS_BINARY_NAME:_B,PID_FILES:hB,NATS_CONFIG_FILES:dB,SERVER_SUFFIX:fB,WORK_QUEUE_CONSUMER_NAMES:SB,SCHEMA_QUEUE_CONSUMER_NAMES:TB,USER_QUEUE_CONSUMER_NAMES:mB,NATS_TERM_CONSTRAINTS_RX:uB,REQUEST_SUFFIX:sm,UPDATE_REMOTE_RESPONSE_STATUSES:RB,CLUSTER_STATUS_STATUSES:AB,REQUEST_SUBJECT:lB,SUBJECT_PREFIXES:pB,MSG_HEADERS:EB,LOG_LEVELS:rn,LOG_LEVEL_FLAGS:NB,LOG_LEVEL_HIERARCHY:gB}});var Vr=f((LZ,Rm)=>{"use strict";var _m="username is required",um="nothing to update, must supply active, role or password to update",lm="password cannot be an empty string",Em="If role is specified, it cannot be empty.",dm="active must be true or false";Rm.exports={addUser:UB,alterUser:MB,dropUser:PB,userInfo:BB,listUsers:Do,listUsersExternal:vB,setUsersToGlobal:di,findAndValidateUser:GB,getClusterUser:FB,USERNAME_REQUIRED:_m,ALTERUSER_NOTHING_TO_UPDATE:um,EMPTY_PASSWORD:lm,EMPTY_ROLE:Em,ACTIVE_BOOLEAN:dm};var hm=Ot(),OB=ms(),pl=Ao(),fm=zT(),Sm=It(),gl=nn(),_t=b(),Tm=require("validate.js"),M=I(),{promisify:Nl}=require("util"),Ol=xr(),im=m(),am=oe(),IB=lr(),CZ=B(),bB=tn(),wB=cs(),{handleHDBError:Jt,hdb_errors:CB}=L(),{HTTP_STATUS_CODES:Xt,AUTHENTICATION_ERROR_MSGS:Al,HDB_ERROR_MSGS:sn}=CB,{UserEventMsg:Il}=kr(),om=require("lodash"),mm={username:!0,active:!0,role:!0,password:!0},cm=new Map,Mo=Nl(Sm.searchByValue),LB=Nl(Sm.searchByHash),yB=Nl(OB.delete);async function UB(e){let t=Tm.cleanAttributes(e,mm),r=fm.addUserValidation(t);if(r)throw Jt(new Error,r.message,Xt.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 Mo(s),n=n&&Array.from(n)}catch(_){throw M.error("There was an error searching for a role in add user"),M.error(_),_}if(!n||n.length<1)throw Jt(new Error,sn.ROLE_NAME_NOT_FOUND(t.role),Xt.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Jt(new Error,sn.DUP_ROLES_FOUND(t.role),Xt.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Ol.encrypt(t.password)),t.password=pl.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await hm.insert(i)}catch(_){throw M.error("There was an error searching for a user."),M.error(_),_}M.debug(o);try{await di()}catch(_){throw M.error("Got an error setting users to global"),M.error(_),_}if(o.skipped_hashes.length===1)throw Jt(new Error,sn.USER_ALREADY_EXISTS(t.username),Xt.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],gl.signalUserChange(new Il(process.pid)),`${c.username} successfully added`}a(UB,"addUser");async function MB(e){let t=Tm.cleanAttributes(e,mm);if(_t.isEmptyOrZeroLength(t.username))throw new Error(_m);if(_t.isEmptyOrZeroLength(t.password)&&_t.isEmptyOrZeroLength(t.role)&&_t.isEmptyOrZeroLength(t.active))throw new Error(um);if(!_t.isEmpty(t.password)&&_t.isEmptyOrZeroLength(t.password.trim()))throw new Error(lm);if(!_t.isEmpty(t.active)&&!_t.isBoolean(t.active))throw new Error(dm);let r=DB(t.username);if(!_t.isEmpty(t.password)&&!_t.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Ol.encrypt(t.password)),t.password=pl.hash(t.password)),t.role==="")throw new Error(Em);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await Mo(i)||[])}catch(c){throw M.error("Got an error searching for a role."),M.error(c),c}if(!o||o.length===0){let c=sn.ALTER_USER_ROLE_NOT_FOUND(t.role);throw M.error(c),Jt(new Error,c,Xt.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=sn.ALTER_USER_DUP_ROLES(t.role);throw M.error(c),Jt(new Error,c,Xt.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await hm.update(s)}catch(i){throw M.error("Error during update."),M.error(i),i}try{await di()}catch(i){throw M.error("Got an error setting users to global"),M.error(i),i}return gl.signalUserChange(new Il(process.pid)),n}a(MB,"alterUser");function DB(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(DB,"isClusterUser");async function PB(e){try{let t=fm.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(_t.isEmpty(global.hdb_users.get(e.username)))throw Jt(new Error,sn.USER_NOT_EXIST(e.username),Xt.NOT_FOUND,void 0,void 0,!0);let s;try{s=await yB(r)}catch(n){throw M.error("Got an error deleting a user."),M.error(n),n}M.debug(s);try{await di()}catch(n){throw M.error("Got an error setting users to global."),M.error(n),n}return gl.signalUserChange(new Il(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(PB,"dropUser");async function BB(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 LB(r)}catch(n){throw M.error("Got an error searching for a role."),M.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw M.error(r),r}return t}a(BB,"userInfo");async function vB(){let e;try{e=await Do()}catch(t){throw M.error("Got an error listing users."),M.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(vB,"listUsersExternal");async function Do(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Mo(e)}catch(o){throw M.error("Got an error searching for roles."),M.error(o),o}let r={};for(let o of t)r[o.id]=om.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await Mo(s)}catch(o){throw M.error("Got an error searching for users."),M.error(o),o}let i=new Map;for(let o of n)o=om.cloneDeep(o),o.role=r[o.role],HB(o.role),i.set(o.username,o);return(await bB.getLicense()).enterprise?i:qB(Array.from(i.values()))}catch(e){throw M.error("got an error listing users"),M.error(e),_t.errorizeMessage(e)}return null}a(Do,"listUsers");function HB(e){try{if(!e){M.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(wB)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){M.error("Got an error trying to set system permissions."),M.error(t)}}a(HB,"appendSystemTablesToRole");function qB(e){try{if(M.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&&(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(n.username,n)):r.set(n.username,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?(M.warn("No roles found with active users."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return M.error("error filtering users."),M.error(t),new Map}}a(qB,"nonEnterpriseFilter");async function di(){try{let e=await Do();global.hdb_users=e}catch(e){throw M.error(e),e}}a(di,"setUsersToGlobal");async function GB(e,t,r=!0){global.hdb_users||await di();let s=global.hdb_users.get(e);if(!s)throw Jt(new Error,Al.GENERIC_AUTH_FAIL,Xt.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Jt(new Error,Al.USER_INACTIVE,Xt.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(cm.get(t)===s.password)return n;if(pl.validate(s.password,t))cm.set(t,s.password);else throw Jt(new Error,Al.GENERIC_AUTH_FAIL,Xt.UNAUTHORIZED,void 0,void 0,!0)}return n}a(GB,"findAndValidateUser");async function FB(){let e=await Do(),t=IB.getConfigFromFile(im.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!_t.isEmpty(r)&&r?.role?.role===im.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Ol.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+am.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+am.SERVER_SUFFIX.ADMIN,r}a(FB,"getClusterUser")});var Po=f((UZ,Nm)=>{"use strict";var Rs=I(),ut=m(),xB=DT(),Am=qr(),VB=As(),kB=Vr(),{validateEvent:gm}=kr(),hi=Qt(),$B=require("process"),YB={[ut.ITC_EVENT_TYPES.SCHEMA]:KB,[ut.ITC_EVENT_TYPES.USER]:QB};async function KB(e){let t=gm(e);if(t){Rs.error(t);return}Rs.trace("ITC schemaHandler received schema event:",e),await xB(e.message),await WB(e.message)}a(KB,"schemaHandler");async function WB(e){try{if(hi.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),hi.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),hi.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME),global.hdb_schema!==void 0&&typeof global.hdb_schema=="object"&&e.operation!==void 0)switch(e.operation){case"drop_schema":delete global.hdb_schema[e.schema];break;case"drop_table":global.hdb_schema[e.schema]!==void 0&&delete global.hdb_schema[e.schema][e.table];break;case"create_schema":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={});break;case"create_table":case"create_attribute":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={}),global.hdb_schema[e.schema][e.table]=await VB.describeTable({schema:e.schema,table:e.table});break;default:Am.setSchemaDataToGlobal(pm);break}else Am.setSchemaDataToGlobal(pm)}catch(t){Rs.error(t)}}a(WB,"syncSchemaMetadata");function pm(e){e&&Rs.error(e)}a(pm,"handleErrorCallback");async function QB(e){try{hi.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),hi.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME);let t=gm(e);if(t){Rs.error(t);return}Rs.trace(`ITC userHandler ${ut.HDB_ITC_CLIENT_PREFIX}${$B.pid} received user event:`,e),await kB.setUsersToGlobal()}catch(t){Rs.error(t)}}a(QB,"userHandler");Nm.exports=YB});var kr=f((vZ,Im)=>{"use strict";var DZ=I(),bl=b(),JB=m(),{ITC_ERRORS:fi}=it(),{parentPort:PZ,threadId:XB,isMainThread:ZB,workerData:BZ}=require("worker_threads"),{onMessageFromWorkers:zB,broadcast:jB}=fs();Im.exports={sendItcEvent:ev,validateEvent:Om,SchemaEventMsg:tv,UserEventMsg:rv};var Bo;zB(e=>{Bo=Bo||Po(),Om(e),Bo[e.type]&&Bo[e.type](e)});function ev(e){!ZB&&e.message&&(e.message.originator=XB),jB(e)}a(ev,"sendItcEvent");function Om(e){if(typeof e!="object")return fi.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||bl.isEmpty(e.type))return fi.MISSING_TYPE;if(!e.hasOwnProperty("message")||bl.isEmpty(e.message))return fi.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||bl.isEmpty(e.message.originator))return fi.MISSING_ORIGIN;if(JB.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return fi.INVALID_EVENT(e.type)}a(Om,"validateEvent");function tv(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(tv,"SchemaEventMsg");function rv(e){this.originator=e}a(rv,"UserEventMsg")});var nn=f((GZ,Lm)=>{"use strict";var bm=m(),qZ=b(),vo=I(),wm=oT(),an,{sendItcEvent:Cm}=kr();function sv(e){try{vo.trace("signalSchemaChange called with message:",e),an=an||Po();let t=new wm(bm.ITC_EVENT_TYPES.SCHEMA,e);an.schema(t),Cm(t)}catch(t){vo.error(t)}}a(sv,"signalSchemaChange");function nv(e){try{vo.trace("signalUserChange called with message:",e),an=an||Po();let t=new wm(bm.ITC_EVENT_TYPES.USER,e);an.user(t),Cm(t)}catch(t){vo.error(t)}}a(nv,"signalUserChange");Lm.exports={signalSchemaChange:sv,signalUserChange:nv}});var Ho=f((xZ,Um)=>{"use strict";var ym=b(),iv=m(),av=I(),ov=ho(),cv=Eo(),_v=nn(),{SchemaEventMsg:uv}=kr(),lv="already exists in";Um.exports=Ev;async function Ev(e,t,r){if(ym.isEmptyOrZeroLength(r))return r;let s=[];ym.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 dv(e,t.schema,t.name,i)})),n}a(Ev,"lmdbCheckForNewAttributes");async function dv(e,t,r,s){let n=new cv(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await hv(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(lv))av.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(dv,"createNewAttribute");async function hv(e){let t;return t=await ov(e),_v.signalSchemaChange(new uv(process.pid,iv.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(hv,"createAttribute")});var on=f((kZ,Mm)=>{"use strict";var qo=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(qo,"LMDBTransactionObject");Mm.exports=qo});var Pm=f((YZ,Dm)=>{"use strict";var fv=on(),Sv=m().OPERATIONS_ENUM,Go=class extends fv{constructor(t,r,s,n,i=void 0){super(Sv.INSERT,r,s,n,i),this.records=t}};a(Go,"LMDBInsertTransactionObject");Dm.exports=Go});var vm=f((WZ,Bm)=>{"use strict";var Tv=on(),mv=m().OPERATIONS_ENUM,Fo=class extends Tv{constructor(t,r,s,n,i,o=void 0){super(mv.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(Fo,"LMDBUpdateTransactionObject");Bm.exports=Fo});var qm=f((JZ,Hm)=>{"use strict";var Rv=on(),Av=m().OPERATIONS_ENUM,xo=class extends Rv{constructor(t,r,s,n,i,o=void 0){super(Av.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(xo,"LMDBUpsertTransactionObject");Hm.exports=xo});var Fm=f((ZZ,Gm)=>{"use strict";var pv=on(),gv=m().OPERATIONS_ENUM,Vo=class extends pv{constructor(t,r,s,n,i=void 0){super(gv.DELETE,s,n,t,i),this.original_records=r}};a(Vo,"LMDBDeleteTransactionObject");Gm.exports=Vo});var Si=f((ez,$m)=>{"use strict";var jZ=require("path"),xm=X(),Nv=Pm(),Ov=vm(),Iv=qm(),bv=Fm(),cn=Ue(),Vm=b(),{CONFIG_PARAMS:wv}=m(),km=B();km.initSync();var ko=m().OPERATIONS_ENUM,{getTransactionAuditStorePath:Cv}=j();$m.exports=Lv;async function Lv(e,t){if(km.get(wv.LOGGING_AUDITLOG)===!1)return;let r=Cv(e.schema,e.table),s=await xm.openEnvironment(r,e.table,!0),n=yv(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){xm.initializeDBIs(s,cn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,cn.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[cn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[cn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),Vm.isEmpty(n.user_name)||s.dbis[cn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[cn.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(Lv,"writeTransaction");function yv(e,t){let r=Vm.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===ko.INSERT)return new Nv(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ko.UPDATE)return new Ov(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ko.UPSERT)return new Iv(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ko.DELETE)return new bv(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(yv,"createTransactionObject")});var wl=f((sz,Ym)=>{"use strict";var Uv=fo(),rz=oi(),Ti=m(),Mv=mo(),Dv=zs().insertRecords,Pv=X(),Bv=I(),vv=Ho(),{getSchemaPath:Hv}=j(),qv=Si();Ym.exports=Gv;async function Gv(e){try{let{schema_table:t,attributes:r}=Uv(e);Mv(e,r,t.hash_attribute),e.schema!==Ti.SYSTEM_SCHEMA_NAME&&(r.includes(Ti.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ti.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ti.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ti.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await vv(e.hdb_auth_header,t,r),n=Hv(e.schema,e.table),i=await Pv.openEnvironment(n,e.table),o=await Dv(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await qv(e,o)}catch(c){Bv.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(Gv,"lmdbCreateRecords")});var Qm=f((iz,Wm)=>{"use strict";var Km=m(),Fv=wl(),xv=oi(),Vv=require("fs-extra"),{getSchemaPath:kv}=j();Wm.exports=$v;async function $v(e){let t=[{name:e.schema,createddate:Date.now()}],r=new xv(Km.SYSTEM_SCHEMA_NAME,Km.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Fv(r),await Vv.mkdirp(kv(e.schema))}a($v,"lmdbCreateSchema")});var Xm=f((oz,Jm)=>{"use strict";var $o=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a($o,"DeleteRecordsResponseObject");Jm.exports=$o});var yl=f((Ez,jm)=>{"use strict";var Zm=X(),Cl=us(),Ll=it().LMDB_ERRORS_ENUM,Yv=Ue(),zm=I(),_z=b(),Kv=require("lmdb"),Wv=Xm(),Qv=m(),{OVERFLOW_MARKER:uz,MAX_SEARCH_KEY_LENGTH:lz}=Yv,Jv=Qv.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Xv(e,t,r,s){if(Cl.validateEnv(e),t===void 0)throw new Error(Ll.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ll.IDS_REQUIRED):new Error(Ll.IDS_MUST_BE_ITERABLE);try{let n=Zm.listDBIs(e);Zm.initializeDBIs(e,t,n);let i=new Wv,o,c=[],_=[];for(let d=0,h=r.length;d<h;d++)try{o=r[d];let T=e.dbis[t].get(o);if(!T||s&&T[Jv]>s){i.skipped.push(o);continue}let R=e.dbis[t].ifVersion(o,Kv.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let g=0;g<n.length;g++){let H=n[g];if(!T.hasOwnProperty(H)||H===t)continue;let x=e.dbis[H],q=T[H];if(q!=null)try{let ye=Cl.getIndexedValues(q);if(ye)for(let U=0,$=ye.length;U<$;U++)x.remove(ye[U],o)}catch{zm.warn(`cannot delete from attribute: ${H}, ${q}:${o}`)}}});c.push(R),_.push(o),i.original_records.push(T)}catch(T){zm.warn(T),i.skipped.push(o)}let u=[],l=await Promise.all(c);for(let d=0,h=l.length;d<h;d++)l[d]===!0?i.deleted.push(_[d]):(i.skipped.push(_[d]),u.push(d));let E=0;for(let d=0;d<u.length;d++){let h=u[d];i.original_records.splice(h-E,1),E++}return i.txn_time=Cl.getNextMonotonicTime(),i}catch(n){throw n}}a(Xv,"deleteRecords");jm.exports={deleteRecords:Xv}});var mi=f((hz,tR)=>{"use strict";var _n=b(),Zv=yl(),zv=X(),{getSchemaPath:jv}=j(),eH=Si(),tH=I();tR.exports=rH;async function rH(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(_n.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(_n.isEmptyOrZeroLength(e.hash_values)&&!_n.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let _=e.records[c][s];_n.isEmpty(_)||e.hash_values.push(_)}}if(_n.isEmptyOrZeroLength(e.hash_values))return eR([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(_n.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=jv(e.schema,e.table),i=await zv.openEnvironment(n,e.table),o=await Zv.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await eH(e,o)}catch(c){tH.error(`unable to write transaction due to ${c.message}`)}return eR(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(rH,"lmdbDeleteRecords");function eR(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(eR,"createDeleteResponse")});var Ml=f((Tz,rR)=>{"use strict";var sH=m(),Sz=us();function Ul(e,t){let r=Object.create(null);if(t.length===1&&sH.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(Ul,"parseRow");function nH(e,t,r,s){let n=Ul(r,e);s.push(n)}a(nH,"searchAll");function iH(e,t,r,s){let n=Ul(r,e);s[t]=n}a(iH,"searchAllToMap");function aH(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(aH,"iterateDBI");function ps(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(ps,"pushResults");function oH(e,t,r,s,n,i){t.toString().endsWith(e)&&ps(t,r,s,n,i)}a(oH,"endsWith");function cH(e,t,r,s,n,i){t.toString().includes(e)&&ps(t,r,s,n,i)}a(cH,"contains");function _H(e,t,r,s,n,i){t>e&&ps(t,r,s,n,i)}a(_H,"greaterThanCompare");function uH(e,t,r,s,n,i){t>=e&&ps(t,r,s,n,i)}a(uH,"greaterThanEqualCompare");function lH(e,t,r,s,n,i){t<e&&ps(t,r,s,n,i)}a(lH,"lessThanCompare");function EH(e,t,r,s,n,i){t<=e&&ps(t,r,s,n,i)}a(EH,"lessThanEqualCompare");rR.exports={parseRow:Ul,searchAll:nH,searchAllToMap:iH,iterateDBI:aH,endsWith:oH,contains:cH,greaterThanCompare:_H,greaterThanEqualCompare:uH,lessThanCompare:lH,lessThanEqualCompare:EH,pushResults:ps}});var Ns=f((gz,_R)=>{"use strict";var $r=X(),Rz=I(),lt=us(),Yo=Ue(),ce=it().LMDB_ERRORS_ENUM,Az=b(),dH=m(),Ko=Ml(),{parseRow:hH}=Ko,pz=require("lmdb"),{OVERFLOW_MARKER:sR,MAX_SEARCH_KEY_LENGTH:fH}=Yo;function nR(e,t,r,s=!1,n=void 0,i=void 0){return gs(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(nR,"iterateFullIndex");function Ri(e,t,r,s,n,i=!1,o=void 0,c=void 0,_=!1,u=!1){return gs(e,t,r,(l,E,d,h)=>{let x={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!_:!u,exclusiveStart:i===!0?u:_};return h===r?(x.values=!1,E.getRange(x).map(q=>({value:q}))):E.getRange(x)})}a(Ri,"iterateRangeBetween");function gs(e,t,r,s){let n=e.database||e,i=$r.openDBI(n,r);i[Yo.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&$r.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(gs,"setupTransaction");function iR(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(sR)){if(!n)if(r)n=$r.openDBI(e,r);else{let _=$r.listDBIs(e);for(let u=0,l=_.length;u<l&&(n=$r.openDBI(e,_[u]),!n[Yo.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(iR,"getOverflowCheck");function SH(e,t,r,s=!1,n=void 0,i=void 0){if(lt.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return gs(e,t,t,(o,c,_)=>(Wo(r),r=Ai(_,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(u=>hH(u.value,r))))}a(SH,"searchAll");function TH(e,t,r,s=!1,n=void 0,i=void 0){if(lt.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);Wo(r),r=Ai(e.database||e,r);let o=new Map;for(let{key:c,value:_}of nR(e,t,t,s,n,i))o.set(c,Ko.parseRow(_,r));return o}a(TH,"searchAllToMap");function mH(e,t,r=!1,s=void 0,n=void 0){if(lt.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=nR(e,void 0,t,r,s,n),c=o.transaction,_=iR(c.database,c,void 0,t);for(let{key:u,value:l}of o){let E=_(u,l);i[E]===void 0&&(i[E]=[]),i[E].push(l)}return i}a(mH,"iterateDBI");function RH(e,t){if(lt.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return $r.statDBI(e,t).entryCount}a(RH,"countAll");function AH(e,t,r,s,n=!1,i=void 0,o=void 0){return Yr(e,r,s),gs(e,t,r,(c,_,u,l)=>(s=lt.convertKeyValueToWrite(s),l===r?_.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:_.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(E=>({key:s,value:E}))))}a(AH,"equals");function pH(e,t,r){return Yr(e,t,r),$r.openDBI(e,t).getValuesCount(r)}a(pH,"count");function gH(e,t,r,s,n=!1,i=void 0,o=void 0){return Yr(e,r,s),gs(e,null,r,(c,_)=>{s=lt.convertKeyValueToWrite(s);let u=!0;typeof s=="number"&&(u=!1);let l;if(n===!0){let E;for(let d of _.getKeys({transaction:c,start:s}))if(!d.startsWith(s)){E=d;break}return E!==void 0&&(Number.isInteger(o)?o++:i++),l=_.getRange({transaction:c,start:E,end:void 0,reverse:n,limit:i,offset:o}).map(d=>{let{key:h}=d;if(h!==E){if(h.toString().startsWith(s))return d;if(u===!0)return l.DONE}}),l.filter(d=>d)}else return l=_.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(E=>{if(E.key.toString().startsWith(s))return E;if(u===!0)return l.DONE}),u?l:l.filter(E=>E)})}a(gH,"startsWith");function NH(e,t,r,s,n=!1,i=void 0,o=void 0){return aR(e,t,r,s,n,i,o,!0)}a(NH,"endsWith");function aR(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Yr(e,r,s),gs(e,null,r,(_,u,l,E)=>{let d=iR(l,_,E,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:_,end:n?!1:void 0,reverse:n}).flatMap(h=>{let T=h.toString();return T.endsWith(sR)?u.getValues(h,{transaction:_}).map(R=>{let g=d(h,R);if(c?g.endsWith(s):g.includes(s))return{key:g,value:R}}).filter(R=>R):(c?T.endsWith(s):T.includes(s))?u[Yo.DBI_DEFINITION_NAME].is_hash_attribute?{key:h,value:h}:u.getValues(h,{transaction:_}).map(R=>({key:h,value:R})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(aR,"contains");function OH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),Ri(e,t,r,s,_,n,i,o,!0,!1)}a(OH,"greaterThan");function IH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),Ri(e,t,r,s,_,n,i,o,!1,!1)}a(IH,"greaterThanEqual");function bH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Ri(e,t,r,_,s,n,i,o,!1,!0)}a(bH,"lessThan");function wH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Ri(e,t,r,_,s,n,i,o,!1,!1)}a(wH,"lessThanEqual");function CH(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(lt.validateEnv(e),r===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ce.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ce.END_VALUE_REQUIRED);if(s=lt.convertKeyValueToWrite(s),n=lt.convertKeyValueToWrite(n),s>n)throw new Error(ce.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ri(e,t,r,s,n,i,o,c)}a(CH,"between");function LH(e,t,r,s){lt.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(Wo(r),r=Ai(n,r),s===void 0)throw new Error(ce.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=Ko.parseRow(c,r)),o}a(LH,"searchByHash");function yH(e,t,r){lt.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(yH,"checkHashExists");function UH(e,t,r,s,n=[]){return cR(e,t,r,s,n),oR(e,t,r,s,n).map(i=>i[1])}a(UH,"batchSearchByHash");function MH(e,t,r,s,n=[]){cR(e,t,r,s,n);let i=new Map;for(let[o,c]of oR(e,t,r,s,n))i.set(o,c);return i}a(MH,"batchSearchByHashToMap");function oR(e,t,r,s,n=[]){return gs(e,t,t,(i,o,c)=>{r=Ai(c,r);let _=r.length<3;return s.map(u=>{let l=c.dbis[t].get(u,{transaction:i,lazy:_});if(l)return[u,Ko.parseRow(l,r)];n.push(u)}).filter(u=>u)})}a(oR,"batchHashSearch");function cR(e,t,r,s,n){if(lt.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(Wo(r),s==null)throw new Error(ce.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ce.IDS_MUST_BE_ITERABLE)}a(cR,"initializeBatchSearchByHash");function Wo(e){if(!Array.isArray(e))throw e===void 0?new Error(ce.FETCH_ATTRIBUTES_REQUIRED):new Error(ce.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Wo,"validateFetchAttributes");function Yr(e,t,r){if(lt.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.SEARCH_VALUE_REQUIRED);if(r?.length>fH)throw new Error(ce.SEARCH_VALUE_TOO_LARGE)}a(Yr,"validateComparisonFunctions");function Ai(e,t){return t.length===1&&dH.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=$r.listDBIs(e)),t}a(Ai,"setGetWholeRowAttributes");_R.exports={searchAll:SH,searchAllToMap:TH,count:pH,countAll:RH,equals:AH,startsWith:gH,endsWith:NH,contains:aR,searchByHash:LH,setGetWholeRowAttributes:Ai,batchSearchByHash:UH,batchSearchByHashToMap:MH,checkHashExists:yH,iterateDBI:mH,greaterThan:OH,greaterThanEqual:IH,lessThan:bH,lessThanEqual:wH,between:CH}});var pi=f((Iz,dR)=>{var uR=require("lodash"),lR=te(),W=require("joi"),DH=b(),{hdb_schema_table:vt,checkValidTable:ER}=Wt(),{handleHDBError:PH,hdb_errors:BH}=L(),{HTTP_STATUS_CODES:vH}=BH,Oz=W.object({schema:vt,table:vt,hash_values:W.array().min(0).items(W.alternatives(W.string(),W.number())).required(),get_attributes:W.array().min(1).items(vt).required()}),HH=W.object({schema:vt,table:vt,search_attribute:vt,search_value:W.any().required(),get_attributes:W.array().min(1).items(vt).required(),desc:W.bool(),limit:W.number().integer().min(1),offset:W.number().integer().min(0)}),qH=W.object({schema:vt,table:vt,operator:W.string().valid("and","or").default("and").lowercase(),offset:W.number().integer().min(0),limit:W.number().integer().min(1),get_attributes:W.array().min(1).items(vt).required(),conditions:W.array().min(1).items(W.object({search_attribute:vt,search_type:W.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:W.when("search_type",{switch:[{is:"equals",then:W.any()},{is:"between",then:W.array().items(W.alternatives([W.string(),W.number()])).length(2)}],otherwise:W.alternatives(W.string(),W.number())}).required()})).required()});dR.exports=function(e,t){let r=null;switch(t){case"value":r=lR.validateBySchema(e,HH);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(ER("schema",e.schema)),i(ER("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=lR.validateBySchema(e,qH);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=DH.checkGlobalSchemaTable(e.schema,e.table);if(n)return PH(new Error,n,vH.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,c=[...e.get_attributes];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let u=0,l=e.conditions.length;u<l;u++){let E=e.conditions[u];c.push(E.search_attribute)}let _=uR.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!uR.some(o,l=>l===u||l.attribute===u||l.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var Dl=f((wz,hR)=>{"use strict";var GH=X(),FH=pi(),{getSchemaPath:xH}=j();hR.exports=VH;function VH(e){let t=FH(e,"hashes");if(t)throw t;let r=xH(e.schema,e.table);return GH.openEnvironment(r,e.table)}a(VH,"initialize")});var Pl=f((Lz,fR)=>{"use strict";var kH=Ns(),$H=Dl();fR.exports=YH;async function YH(e){let t=await $H(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return kH.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(YH,"lmdbGetDataByHash")});var un=f((Uz,SR)=>{"use strict";var Qo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(Qo,"SearchByHashObject");SR.exports=Qo});var mR=f((Pz,TR)=>{"use strict";var Dz=un(),KH=Ns(),WH=Dl();TR.exports=QH;async function QH(e){let t=await WH(e),r=global.hdb_schema[e.schema][e.table];return KH.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(QH,"lmdbSearchByHash")});var Ht=f((vz,RR)=>{"use strict";var Jo=class{constructor(t,r,s,n,i,o,c,_=!1,u=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=_,this.limit=u,this.offset=l}};a(Jo,"SearchObject");RR.exports=Jo});var Xo=f((qz,IR)=>{"use strict";var ve=Ns(),JH=X(),XH=b(),C=Ue(),Os=m(),ZH=cs(),AR=it().LMDB_ERRORS_ENUM,{compareKeys:ln}=require("ordered-binary"),{getSchemaPath:zH}=j(),Sr=Os.SEARCH_WILDCARDS;async function jH(e,t,r){let s;e.schema===Os.SYSTEM_SCHEMA_NAME?s=ZH[e.table]:s=global.hdb_schema[e.schema][e.table];let n=OR(e,s.hash_attribute,r,t);return gR(e,n,s.hash_attribute,r)}a(jH,"prepSearch");async function gR(e,t,r,s){let n=zH(e.schema,e.table),i=await JH.openEnvironment(n,e.table),o=NR(i,e,t,r),c=o.transaction||i;if([C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,C.SEARCH_TYPES.SEARCH_ALL,C.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(tq(e,r)===!1){let l=e.search_attribute;if(l===r)return s?pR(o,()=>!0):o.map(d=>({[r]:d.key}));let E=a(d=>({[r]:d.value,[l]:d.key}),"toObject");return s?pR(o,E):o.map(E)}let u=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?ve.batchSearchByHashToMap(c,r,e.get_attributes,u):ve.batchSearchByHash(c,r,e.get_attributes,u)}a(gR,"executeSearch");function NR(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:_}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,_=Number.isInteger(_)?_:void 0,r){case C.SEARCH_TYPES.EQUALS:n=ve.equals(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.CONTAINS:n=ve.contains(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.ENDS_WITH:case C.SEARCH_TYPES._ENDS_WITH:n=ve.endsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.STARTS_WITH:case C.SEARCH_TYPES._STARTS_WITH:n=ve.startsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return ve.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return ve.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case C.SEARCH_TYPES.SEARCH_ALL:return ve.searchAll(e,s,t.get_attributes,o,c,_);case C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return ve.searchAllToMap(e,s,t.get_attributes,o,c,_);case C.SEARCH_TYPES.BETWEEN:n=ve.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,_);break;case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:n=ve.greaterThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:n=ve.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:n=ve.lessThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:n=ve.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;default:return Object.create(null)}return n}a(NR,"searchByType");function eq(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case C.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case C.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case C.SEARCH_TYPES.ENDS_WITH:case C.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case C.SEARCH_TYPES.STARTS_WITH:case C.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case C.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return ln(i,s[0])>=0&&ln(i,s[1])<=0};case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:return n=>ln(n[r],s)>0;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>ln(n[r],s)>=0;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:return n=>ln(n[r],s)<0;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>ln(n[r],s)<=0;default:return Object.create(null)}}a(eq,"filterByType");function pR(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(pR,"createMapFromIterable");function tq(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(tq,"checkToFetchMore");function OR(e,t,r,s){if(XH.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Sr.indexOf(n)>-1)return r===!0?C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:C.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Sr[0])<0&&n.indexOf(Sr[1])<0)return c===!0?r===!0?C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:C.SEARCH_TYPES.EQUALS;if(Sr.indexOf(i)>=0&&Sr.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),C.SEARCH_TYPES.CONTAINS;if(Sr.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),C.SEARCH_TYPES.ENDS_WITH;if(Sr.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),C.SEARCH_TYPES.STARTS_WITH;if(n.includes(Sr[0])||n.includes(Sr[1]))return C.SEARCH_TYPES.EQUALS;throw new Error(AR.UNKNOWN_SEARCH_TYPE)}else switch(s){case Os.VALUE_SEARCH_COMPARATORS.BETWEEN:return C.SEARCH_TYPES.BETWEEN;case Os.VALUE_SEARCH_COMPARATORS.GREATER:return C.SEARCH_TYPES.GREATER_THAN;case Os.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return C.SEARCH_TYPES.GREATER_THAN_EQUAL;case Os.VALUE_SEARCH_COMPARATORS.LESS:return C.SEARCH_TYPES.LESS_THAN;case Os.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return C.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(AR.UNKNOWN_SEARCH_TYPE)}}a(OR,"createSearchTypeFromSearchObject");IR.exports={executeSearch:gR,createSearchTypeFromSearchObject:OR,prepSearch:jH,searchByType:NR,filterByType:eq}});var wR=f((xz,bR)=>{"use strict";var Fz=Ht(),rq=pi(),sq=b(),nq=m(),iq=Xo();bR.exports=aq;function aq(e,t){if(!sq.isEmpty(t)&&nq.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=rq(e,"value");if(s)throw s;let n=!0;return iq.prepSearch(e,t,n)}a(aq,"lmdbGetDataByValue")});var En=f(($z,CR)=>{"use strict";var kz=Ht(),oq=pi(),cq=b(),_q=m(),uq=Xo();CR.exports=lq;async function lq(e,t){if(!cq.isEmpty(t)&&_q.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=oq(e,"value");if(s)throw s;return uq.prepSearch(e,t,!1)}a(lq,"lmdbSearchByValue")});var yR=f((Wz,LR)=>{"use strict";var Kz=Ue(),Zo=class{constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}};a(Zo,"SearchByConditionsObject");var zo=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(zo,"SearchCondition");var jo=class{constructor(t,r){this.attribute=t,this.desc=r}};a(jo,"SortAttribute");LR.exports={SearchByConditionsObject:Zo,SearchCondition:zo,SortAttribute:jo}});var BR=f((Xz,PR)=>{"use strict";var Jz=yR().SearchByConditionsObject,Eq=Ht(),dq=pi(),Bl=Ns(),ec=Ue(),DR=Xo(),hq=Ml(),fq=require("lodash"),{getSchemaPath:Sq}=j(),UR=X(),{handleHDBError:Tq,hdb_errors:mq}=L(),{HTTP_STATUS_CODES:Rq}=mq,Aq=1e8;PR.exports=pq;async function pq(e){let t=dq(e,"conditions");if(t)throw Tq(t,t.message,Rq.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=Sq(e.schema,e.table),s=await UR.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)UR.openDBI(s,u.search_attribute);let i=fq.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let l=u.search_type;l===ec.SEARCH_TYPES.EQUALS?u.estimated_count=Bl.count(s,u.search_attribute,u.search_value):l===ec.SEARCH_TYPES.CONTAINS||l===ec.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=Aq}return u.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await MR(o,e,i[0],n.hash_attribute),_;if(!e.operator||e.operator.toLowerCase()==="and"){let u=s.dbis[n.hash_attribute],l=i.slice(1).map(DR.filterByType),E=l.length,d=Bl.setGetWholeRowAttributes(s,e.get_attributes);_=c.map(h=>u.get(h,{transaction:o,lazy:!0})),E>0&&(_=_.filter(h=>{for(let T=0;T<E;T++)if(!l[T](h))return!1;return!0})),(e.offset||e.limit!==void 0)&&(_=_.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),_=_.map(h=>hq.parseRow(h,d))}else{for(let E=1;E<i.length;E++){let d=i[E],h=await MR(o,e,d,n.hash_attribute);c=c.concat(h)}let u=new Set,l=e.offset||0;c=c.filter(E=>u.has(E)?!1:(u.add(E),!0)).slice(l,e.limit&&e.limit+l),_=Bl.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return _.onDone=()=>{o.done()},_}a(pq,"lmdbSearchByConditions");async function MR(e,t,r,s){let n=new Eq(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===ec.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,DR.searchByType(e,n,i,s).map(o=>o.value)}a(MR,"executeConditionSearch")});var gi=f((zz,vR)=>{"use strict";var gq=m().OPERATIONS_ENUM,tc=class{constructor(t,r,s,n=void 0){this.operation=gq.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(tc,"DeleteObject");vR.exports=tc});var vl=f((e2,$R)=>{"use strict";var FR=Ht(),xR=gi(),VR=En(),kR=mi(),Ke=m(),HR=b(),qR=X(),{getTransactionAuditStorePath:Nq,getSchemaPath:Oq}=j(),GR=I();$R.exports=Iq;async function Iq(e){try{if(HR.isEmpty(global.hdb_schema[e.schema])||HR.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await bq(e),await wq(e);let t=Oq(e.schema,e.table);try{await qR.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")GR.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Nq(e.schema,e.table);await qR.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")GR.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(Iq,"lmdbDropTable");async function bq(e){let t=new FR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await VR(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 xR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await kR(n)}a(bq,"deleteAttributesFromSystem");async function wq(e){let t=new FR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await VR(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 xR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await kR(n)}catch(i){throw i}}a(wq,"dropTableFromSystem")});var KR=f((r2,YR)=>{"use strict";var Cq=require("fs-extra"),Lq=Ht(),yq=un(),Uq=gi(),Mq=vl(),Dq=mi(),Pq=Pl(),Bq=En(),Tr=m(),{getSchemaPath:vq}=j(),{handleHDBError:Hq,hdb_errors:qq}=L(),{HDB_ERROR_MSGS:Gq,HTTP_STATUS_CODES:Fq}=qq;YR.exports=xq;async function xq(e){let t;try{t=await Vq(e.schema);let r=new Lq(Tr.SYSTEM_SCHEMA_NAME,Tr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await Bq(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await Mq(c)}catch(_){if(_.message!=="invalid environment")throw _}}let n=new Uq(Tr.SYSTEM_SCHEMA_NAME,Tr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Dq(n);let i=vq(t);await Cq.remove(i)}catch(r){throw r}}a(xq,"lmdbDropSchema");async function Vq(e){let t=new yq(Tr.SYSTEM_SCHEMA_NAME,Tr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await Pq(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw Hq(new Error,Gq.SCHEMA_NOT_FOUND(e),Fq.NOT_FOUND,void 0,void 0,!0);return s}a(Vq,"validateDropSchema")});var Hl=f((n2,WR)=>{"use strict";var rc=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(rc,"CreateTableObject");WR.exports=rc});var JR=f((o2,QR)=>{"use strict";var kq=require("fs-extra"),sc=X(),{getTransactionAuditStorePath:$q}=j(),ql=Ue(),a2=Hl();QR.exports=Yq;async function Yq(e){let t;try{let r=$q(e.schema,e.table);await kq.mkdirp(r),t=await sc.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{sc.createDBI(t,ql.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),sc.createDBI(t,ql.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),sc.createDBI(t,ql.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(Yq,"createTransactionsAuditEnvironment")});var jR=f((_2,zR)=>{"use strict";var Gl=m(),XR=X(),Kq=zs(),{getSystemSchemaPath:Wq,getSchemaPath:Qq}=j(),Jq=cs(),Xq=ho(),Fl=Eo(),Zq=I(),zq=JR(),Vl=Jq.hdb_table,ZR=[];for(let e=0;e<Vl.attributes.length;e++)ZR.push(Vl.attributes[e].attribute);zR.exports=jq;async function jq(e,t){let r=Qq(t.schema,t.table),s=new Fl(t.schema,t.table,Gl.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Fl(t.schema,t.table,Gl.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Fl(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await XR.createEnvironment(r,t.table),e!==void 0){let o=await XR.openEnvironment(Wq(),Gl.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Kq.insertRecords(o,Vl.hash_attribute,ZR,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await xl(s),await xl(n),await xl(i)}await zq(t)}catch(o){throw o}}a(jq,"lmdbCreateTable");async function xl(e){try{await Xq(e)}catch(t){Zq.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(xl,"createAttribute")});var tA=f((l2,eA)=>{"use strict";var eG=fo(),tG=mo(),rG=Ho(),Ni=m(),sG=zs().updateRecords,nG=X(),{getSchemaPath:iG}=j(),aG=Si(),oG=I();eA.exports=cG;async function cG(e){try{let{schema_table:t,attributes:r}=eG(e);tG(e,r,t.hash_attribute),e.schema!==Ni.SYSTEM_SCHEMA_NAME&&(r.includes(Ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await rG(e.hdb_auth_header,t,r),n=iG(e.schema,e.table),i=await nG.openEnvironment(n,e.table),o=await sG(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await aG(e,o)}catch(c){oG.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(cG,"lmdbUpdateRecords")});var sA=f((d2,rA)=>{"use strict";var _G=m().OPERATIONS_ENUM,nc=class{constructor(t,r,s,n=void 0){this.operation=_G.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(nc,"UpsertObject");rA.exports=nc});var iA=f((S2,nA)=>{"use strict";var f2=sA(),uG=fo(),lG=mo(),EG=Ho(),Oi=m(),dG=zs().upsertRecords,hG=X(),{getSchemaPath:fG}=j(),SG=Si(),TG=I(),{handleHDBError:mG,hdb_errors:RG}=L();nA.exports=AG;async function AG(e){let t;try{t=uG(e)}catch(_){throw mG(_,_.message,RG.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;lG(e,s,r.hash_attribute),e.schema!==Oi.SYSTEM_SCHEMA_NAME&&(s.includes(Oi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Oi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Oi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Oi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await EG(e.hdb_auth_header,r,s),i=fG(e.schema,e.table),o=await hG.openEnvironment(i,e.table),c=await dG(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await SG(e,c)}catch(_){TG.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(AG,"lmdbUpsertRecords")});var lA=f((m2,uA)=>{"use strict";var pG=Ht(),aA=b(),oA=I(),gG=En(),cA=m(),NG=yl().deleteRecords,OG=X(),{getSchemaPath:IG}=j(),{promisify:bG}=require("util"),wG=bG(setTimeout),_A=1e4,CG=10;uA.exports=LG;async function LG(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(aA.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 pG(e.schema,e.table,cA.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=Array.from(await gG(n,cA.VALUE_SEARCH_COMPARATORS.LESS))}catch(n){throw oA.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return aA.isEmptyOrZeroLength(s)?(oA.trace("No records found to delete"),{message:"No records found to delete"}):await yG(e,s,t)}a(LG,"lmdbDeleteRecordsBefore");async function yG(e,t,r){let s=IG(e.schema,e.table),n=await OG.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,c=t.length;o<c;o+=_A){let _=t.slice(o,o+_A),u=[];for(let l=0,E=_.length;l<E;l++)u.push(_[l][r]);try{let l=await NG(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(l.deleted),i.skipped_hashes=i.skipped_hashes.concat(l.skipped)}catch(l){throw l}await wG(CG)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(yG,"chunkDeletes")});var dA=f((A2,EA)=>{"use strict";var ic=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(ic,"DeleteBeforeObject");EA.exports=ic});var fA=f((g2,hA)=>{"use strict";var ac=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(ac,"DeleteAuditLogsBeforeResults");hA.exports=ac});var mA=f((I2,TA)=>{"use strict";var kl=X(),{getTransactionAuditStorePath:UG}=j(),O2=dA(),Ii=Ue(),MG=b(),SA=fA(),DG=require("util").promisify,PG=DG(setTimeout),BG=1e4,vG=100;TA.exports=HG;async function HG(e){let t=UG(e.schema,e.table),r=await kl.openEnvironment(t,e.table,!0),s=kl.listDBIs(r);kl.initializeDBIs(r,Ii.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new SA;do n=await qG(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 PG(vG);while(n.transactions_deleted>0);return i}a(HG,"deleteAuditLogsBefore");async function qG(e,t){let r=new SA;try{let s=e.dbis[Ii.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Ii.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];MG.isEmpty(c)||(n=e.dbis[Ii.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let _=0;_<o.hash_values.length;_++)n=e.dbis[Ii.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[_],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>BG)break}return await n,r}catch(s){throw s}}a(qG,"deleteTransactions")});var AA=f((w2,RA)=>{"use strict";var oc=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(oc,"DropAttributeObject");RA.exports=oc});var gA=f((y2,pA)=>{"use strict";var GG=Ht(),FG=gi(),L2=AA(),Zt=m(),xG=b(),$l=X(),VG=cs(),kG=En(),$G=mi(),{getSchemaPath:YG}=j();pA.exports=KG;async function KG(e,t=!0){let r;e.schema===Zt.SYSTEM_SCHEMA_NAME?r=VG[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await QG(e),n=YG(e.schema,e.table),i=await $l.openEnvironment(n,e.table);return t===!0&&await WG(e,i,r.hash_attribute),$l.dropDBI(i,e.attribute),s}a(KG,"lmdbDropAttribute");async function WG(e,t,r){let s=$l.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:_}of s.getRange({start:!1,versions:!0})){let u={};for(let l in c)l!==i&&(u[l]=c[l]);n=t.dbis[r].put(o,u,_)}await n}a(WG,"removeAttributeFromAllObjects");async function QG(e){let t=new GG(Zt.SYSTEM_SCHEMA_NAME,Zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await kG(t)).filter(o=>o[Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(xG.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new FG(Zt.SYSTEM_SCHEMA_NAME,Zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return $G(i)}a(QG,"dropAttributeFromSystem")});var CA=f((D2,wA)=>{"use strict";var Yl=X(),dn=Ue(),M2=us(),Kl=m(),NA=b(),{getTransactionAuditStorePath:JG}=j(),XG=Ns(),cc=on(),ZG=I();wA.exports=zG;async function zG(e){let t=JG(e.schema,e.table),r=await Yl.openEnvironment(t,e.table,!0),s=Yl.listDBIs(r);Yl.initializeDBIs(r,dn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Kl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return OA(r,e.search_values);case Kl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,eF(r,e.search_values,n);case Kl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return jG(r,e.search_values);default:return OA(r)}}a(zG,"readAuditLog");function OA(e,t=[0,Date.now()]){NA.isEmpty(t[0])&&(t[0]=0),NA.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[dn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new cc,n))}a(OA,"searchTransactionsByTimestamp");function jG(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[dn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,bA(e,i))}return Object.fromEntries(r)}a(jG,"searchTransactionsByUsername");function eF(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=XG.equals(e,dn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,dn.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:E}of l){let d=Number(E);s.has(d)?s.get(d).push(u.toString()):s.set(d,[u.toString()])}}let n=Array.from(s.keys()),i=bA(e,n),o=new Map;for(let c=0;c<i.length;c++){let _=i[c],u=_.timestamp,l=s.get(u);IA(_,"records",r,l,o),IA(_,"original_records",r,l,o)}return Object.fromEntries(o)}a(eF,"searchTransactionsByHashValues");function IA(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],_=c[r].toString();if(s.indexOf(_)>=0)if(n.has(_)){let u=n.get(_),l=u[u.length-1];if(l.timestamp===i)l[t]=[c];else{let E=new cc(e.operation,e.user_name,i,void 0);E[t]=[c],u.push(E)}}else{let u=new cc(e.operation,e.user_name,i,void 0);u[t]=[c],n.set(_,[u])}}}a(IA,"loopRecords");function bA(e,t){let r=[];try{let s=e.dbis[dn.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 cc,i);r.push(o)}}catch(i){ZG.warn(i)}return r}catch(s){throw s}}a(bA,"batchSearchTransactions")});var yA=f((B2,LA)=>{"use strict";var{getSchemaPath:tF}=j(),rF=X();LA.exports={writeTransaction:sF};async function sF(e,t,r){let s=tF(e,t);return(await rF.openEnvironment(s,t)).transaction(r)}a(sF,"writeTransaction")});var PA=f((H2,DA)=>{"use strict";var{getSchemaPath:UA}=j(),MA=X();DA.exports={flush:nF,resetReadTxn:iF};async function nF(e,t){return(await MA.openEnvironment(UA(e,t),t.toString())).flushed}a(nF,"flush");async function iF(e,t){try{(await MA.openEnvironment(UA(e,t),t.toString())).resetReadTxn()}catch{}}a(iF,"resetReadTxn")});var HA=f((G2,vA)=>{"use strict";var aF=I(),{handleHDBError:oF}=L(),cF=wu(),_F=ho(),uF=wl(),lF=Qm(),EF=mi(),dF=Pl(),hF=mR(),fF=wR(),SF=En(),TF=BR(),mF=KR(),RF=jR(),AF=tA(),pF=iA(),gF=lA(),NF=mA(),OF=vl(),IF=gA(),bF=CA(),wF=yA(),BA=PA(),_c=class extends cF{async searchByConditions(t){return TF(t)}async getDataByHash(t){return await dF(t)}async searchByHash(t){return await hF(t)}async getDataByValue(t,r){return await fF(t,r)}async searchByValue(t){return await SF(t)}async createSchema(t){return await lF(t)}async dropSchema(t){return await mF(t)}async createTable(t,r){return await RF(t,r)}async dropTable(t){return await OF(t)}async createAttribute(t){return await _F(t)}async createRecords(t){return await uF(t)}async updateRecords(t){return await AF(t)}async upsertRecords(t){try{return await pF(t)}catch(r){throw oF(r,null,null,aF.ERR,r)}}async deleteRecords(t){return await EF(t)}async deleteRecordsBefore(t){return await gF(t)}async dropAttribute(t){return await IF(t)}async deleteAuditLogsBefore(t){return await NF(t)}async readAuditLog(t){return await bF(t)}writeTransaction(t,r,s){return wF.writeTransaction(t,r,s)}flush(t,r){return BA.flush(t,r)}resetReadTxn(t,r){return BA.resetReadTxn(t,r)}};a(_c,"LMDBBridge");vA.exports=_c});var Qt=f((x2,GA)=>{"use strict";var CF=HA(),LF=wu(),yF=B();yF.initSync();var qA;function UF(){return qA instanceof LF?qA:new CF}a(UF,"getBridge");GA.exports=UF()});var kA=f((k2,VA)=>{"use strict";var FA=require("lodash"),bi=require("mathjs"),MF=require("jsonata"),xA=b();VA.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?FA.uniqWith(e,FA.isEqual):e,searchJSON:DF,mad:wi.bind(null,bi.mad),mean:wi.bind(null,bi.mean),mode:wi.bind(null,bi.mode),prod:wi.bind(null,bi.prod),median:wi.bind(null,bi.median)};function wi(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(wi,"aggregateFunction");function DF(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(xA.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),xA.isEmpty(this.__ala__.res[r])){let s=MF(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(DF,"searchJSON")});var YA=f((Y2,$A)=>{"use strict";var le=require("moment"),Wl="YYYY-MM-DDTHH:mm:ss.SSSZZ";le.suppressDeprecationWarnings=!0;$A.exports={current_date:()=>le().utc().format("YYYY-MM-DD"),current_time:()=>le().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return le(e).utc().format("YYYY");case"month":return le(e).utc().format("MM");case"day":return le(e).utc().format("DD");case"hour":return le(e).utc().format("HH");case"minute":return le(e).utc().format("mm");case"second":return le(e).utc().format("ss");case"millisecond":return le(e).utc().format("SSS");default:break}},date:e=>le(e).utc().format(Wl),date_format:(e,t)=>le(e).utc().format(t),date_add:(e,t,r)=>le(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>le(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=le(e).utc(),n=le(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>le().utc().valueOf(),get_server_time:()=>le().format(Wl),offset_utc:(e,t)=>le(e).utc().utcOffset(t).format(Wl)}});var JA=f((K2,QA)=>{"use strict";var PF=require("@turf/area"),BF=require("@turf/length"),vF=require("@turf/circle"),HF=require("@turf/difference"),qF=require("@turf/distance"),GF=require("@turf/boolean-contains"),FF=require("@turf/boolean-equal"),xF=require("@turf/boolean-disjoint"),VF=require("@turf/helpers"),KA=m(),G=b();QA.exports={geoArea:kF,geoLength:$F,geoCircle:YF,geoDifference:KF,geoDistance:WA,geoNear:WF,geoContains:QF,geoEqual:JF,geoCrosses:XF,geoConvert:ZF};var Ql="geo1 is required",Jl="geo2 is required";function kF(e){if(G.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),PF.default(e)}a(kF,"geoArea");function $F(e,t){if(G.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),BF.default(e,{units:t||"kilometers"})}a($F,"geoLength");function YF(e,t,r){if(G.isEmpty(e))throw new Error("point is required");if(G.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),vF.default(e,t,{units:r||"kilometers"})}a(YF,"geoCircle");function KF(e,t){if(G.isEmpty(e))throw new Error("poly1 is required");if(G.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),HF(e,t)}a(KF,"geoDifference");function WA(e,t,r){if(G.isEmpty(e))throw new Error("point1 is required");if(G.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),qF.default(e,t,{units:r||"kilometers"})}a(WA,"geoDistance");function WF(e,t,r,s){if(G.isEmpty(e))throw new Error("point1 is required");if(G.isEmpty(t))throw new Error("point2 is required");if(G.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return WA(e,t,s)<=r}a(WF,"geoNear");function QF(e,t){if(G.isEmpty(e))throw new Error(Ql);if(G.isEmpty(e))throw new Error(Jl);return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),GF.default(e,t)}a(QF,"geoContains");function JF(e,t){if(G.isEmpty(e))throw new Error(Ql);if(G.isEmpty(e))throw new Error(Jl);return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),FF.default(e,t)}a(JF,"geoEqual");function XF(e,t){if(G.isEmpty(e))throw new Error(Ql);if(G.isEmpty(e))throw new Error(Jl);return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),!xF.default(e,t)}a(XF,"geoCrosses");function ZF(e,t,r){if(G.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(G.isEmpty(t))throw new Error("geo_type is required");if(G.isEmpty(KA.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(KA.GEO_CONVERSION_ENUM).join(",")}`);return VF[t](e,r)}a(ZF,"geoConvert")});var uc=f((Q2,XA)=>{var Is=kA(),Et=YA(),zt=JA();XA.exports=e=>{e.aggr.mad=e.aggr.MAD=Is.mad,e.aggr.mean=e.aggr.MEAN=Is.mean,e.aggr.mode=e.aggr.MODE=Is.mode,e.aggr.prod=e.aggr.PROD=Is.prod,e.aggr.median=e.aggr.MEDIAN=Is.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Is.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Is.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Et.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Et.current_time,e.fn.extract=e.fn.EXTRACT=Et.extract,e.fn.date=e.fn.DATE=Et.date,e.fn.date_format=e.fn.DATE_FORMAT=Et.date_format,e.fn.date_add=e.fn.DATE_ADD=Et.date_add,e.fn.date_sub=e.fn.DATE_SUB=Et.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Et.date_diff,e.fn.now=e.fn.NOW=Et.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Et.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Et.get_server_time,e.fn.getdate=e.fn.GETDATE=Et.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Et.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=zt.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=zt.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=zt.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=zt.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=zt.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=zt.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=zt.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=zt.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=zt.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=zt.geoNear}});var jA=f((J2,zA)=>{"use strict";var Ci=require("lodash"),Ie=require("alasql");Ie.options.cache=!1;var zF=uc(),ZA=require("clone"),lc=require("recursive-iterator"),D=I(),v=b(),hn=Qt(),jF=m(),{hdb_errors:e0}=L(),t0="IS NULL",qt="There was a problem performing this search. Please check the logs and try again.";zF(Ie);var Ec=class{constructor(t,r){if(v.isEmpty(t))throw D.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(),v.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!v.isEmptyOrZeroLength(s))return D.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw D.error("Error thrown from checkEmptySQL in SQLSearch class method search."),D.error(s),new Error(qt)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw D.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),D.error(s),new Error(qt)}if(Object.keys(this.data).length===0)return D.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw D.error("Error thrown from processJoins in SQLSearch class method search."),D.error(s),new Error(qt)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw D.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),D.error(s),new Error(qt)}try{return t=await this._finalSQL(),t}catch(s){throw D.error("Error thrown from finalSQL in SQLSearch class method search."),D.error(s),new Error(qt)}}_getColumns(){let t=new lc(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(ZA(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Ci.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(v.isEmpty(this.statement.where)){D.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new lc(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!v.isEmpty(r)&&r.right)if(v.isNotEmptyAndHasValue(r.right.value)){let s=v.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new Ie.yy.LogicValue({value:s}):r.right instanceof Ie.yy.StringValue&&!v.isEmpty(s)&&v.autoCasterIsNumberCheck(s.toString())&&(r.right=new Ie.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=v.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new Ie.yy.LogicValue({value:i}):s instanceof Ie.yy.StringValue&&v.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new Ie.yy.NumValue({value:i}))});if(t){D.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new lc(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(!v.isEmpty(jF.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(v.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(v.isEmptyOrZeroLength(r.left.columnid)||v.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(v.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!v.isEmpty(r.right.value)||!v.isEmpty(r.left.value)?s.add(v.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let _=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<_.length;u++)if(_[u].value)s.add(_[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(v.isEmptyOrZeroLength(this.all_table_attributes)&&v.isEmptyOrZeroLength(this.statement.from)&&v.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&&Ci.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(v.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);v.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(v.isEmptyOrZeroLength(this.all_table_attributes)&&!v.isEmptyOrZeroLength(this.columns.columns))return t;if(v.isEmptyOrZeroLength(this.all_table_attributes)&&v.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Ie.promise(r)}catch(r){throw D.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),D.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(ZA(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(v.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(t0)>-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=Ci.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},_=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(_=!0),!v.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!v.isEmptyOrZeroLength(this.exact_search_values[u].values))if(_)try{c.hash_values=Array.from(this.exact_search_values[u].values);let l=await hn.getDataByHash(c);for(let E of c.hash_values)l.get(E)&&!this.data[i].__merged_data[E]&&(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,E))}catch(l){throw D.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),D.error(l),new Error(qt)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async l=>{let E=Object.assign({},c);E.search_value=l;let d=await hn.getDataByValue(E);for(let[h,T]of d)this.data[i].__merged_data[h]?this._updateMergedAttribute(i,h,n.attribute,T[n.attribute]):(this.data[i].__merged_data[h]=[...s[i]],this._updateMergedAttribute(i,h,n.attribute,T[n.attribute]),this._setMergedHashAttribute(i,v.autoCast(h)))}))}catch(l){throw D.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),D.error(l),new Error(qt)}else if(!v.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!v.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let l=this.comparator_search_values[u].comparators;for(let E=0,d=l.length;E<d;E++){let h=l[E];c.search_attribute=h.attribute,c.search_value=h.search_value;let T=await hn.getDataByValue(c,h.operation);if(_)for(let[R]of T)this.data[i].__merged_data[R]||(this.data[i].__merged_data[R]=[...s[i]],this._setMergedHashAttribute(i,v.autoCast(R)));else for(let[R,g]of T)this.data[i].__merged_data[R]?this._updateMergedAttribute(i,R,n.attribute,g[n.attribute]):(this.data[i].__merged_data[R]=[...s[i]],this._updateMergedAttribute(i,R,n.attribute,g[n.attribute]),this._setMergedHashAttribute(i,v.autoCast(R)))}}catch(l){throw D.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),D.error(l),new Error(qt)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await hn.getDataByValue(c);if(_)for(let[E]of l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,v.autoCast(E)));else for(let[E,d]of l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,d[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,d[n.attribute]),this._setMergedHashAttribute(i,v.autoCast(E)))}catch(l){throw D.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),D.error(l),new Error(qt)}}}_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 Ie.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 Ie.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new Ie.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 Ie.yy.FuncValue:new Ie.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(h=>{h.joinmode&&h.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(h.table);let T=h.joinmode+" JOIN ? AS "+(h.as?h.as:h.table.tableid);h.on&&(T+=" ON "+h.on.toString()),i.push(T),t.push(Object.values(this.data[`${h.table.databaseid_orig}_${h.table.as?h.table.as_orig:h.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(h=>{let T=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__hash_name,R=h.as?h.as_orig:h.tableid_orig;o.push({key:`'${R}.${T}'`,schema:h.databaseid_orig,table:h.as?h.as_orig:h.tableid_orig,keys:new Set}),r.push(`${h.as?h.as:h.tableid}.\`${T}\` AS "${R}.${T}"`),c[h.as?h.as_orig:h.tableid_orig]=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__merged_attributes});let _=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(h=>{h.is_func?r.push(h.initial_select_column.toString()):h.initial_select_column.tableid?r.push(`${h.initial_select_column.tableid}.${h.initial_select_column.columnid} AS ${h.expression.columnid}`):r.push(`${h.initial_select_column.columnid} AS ${h.expression.columnid}`)}));let l="",E="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",E=this.statement.offset?"OFFSET "+this.statement.offset:"");let d=[];try{let h=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${_} ${u} ${l} ${E}`,T=this._convertColumnsToIndexes(h,n);d=await Ie.promise(T,t),t=null}catch(h){throw D.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),D.error(h),new Error("There was a problem processing the data.")}if(d&&d.length>0){for(let h=0,T=d.length;h<T;h++){let R=d[h];o.forEach(g=>{R[g.key]!==null&&R[g.key]!==void 0&&g.keys.add(R[g.key])})}o.forEach(h=>{let T=Object.keys(this.data[`${h.schema}_${h.table}`].__merged_data),R=Ci.difference(T,[...h.keys].map(g=>g.toString()));for(let g=0,H=R.length;g<H;g++){let x=R[g];delete this.data[`${h.schema}_${h.table}`].__merged_data[x]}})}return{existing_attributes:c,joined_length:d?d.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new lc(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=Ci.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw D.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),D.error(i),new Error(qt)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},_=await hn.getDataByHash(c),u=n.columns.length;for(let l=0,E=o.length;l<E;l++){let d=o[l],h=_.get(d);for(let T=0;T<u;T++){let R=n.columns[T],g=h[R]===void 0?null:h[R];this.data[s].__merged_data[d].push(g)}}}}catch(r){throw D.error("Error thrown from getDataByHash function in SQLSearch class method getData."),D.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,_=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===_}).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();D.trace(`Final SQL: ${n}`),s=await Ie.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),D.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw D.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),D.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 D.error(e0.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),D.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=n[i],u=new RegExp(`${_}.\`${o}\``,"g"),l=`${_}.[${c}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;s=s.replace(_,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await hn.getDataByValue(i);for(let[c,_]of o)this.data[n].__merged_data[c]||(this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=_[s.attribute]}catch(o){throw D.error("There was an error when processing this SQL operation. Check your logs"),D.error(o),new Error(qt)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(Ec,"SQLSearch");zA.exports=Ec});var It=f((Z2,tp)=>{"use strict";var r0=Hf();tp.exports={searchByConditions:a0,searchByHash:o0,searchByValue:c0,search:_0};var Xl=Qt(),ep=require("util"),s0=ep.callbackify(Xl.searchByHash),n0=ep.callbackify(Xl.searchByValue),i0=jA();async function a0(e){return Xl.searchByConditions(e)}a(a0,"searchByConditions");function o0(e,t){try{s0(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(o0,"searchByHash");function c0(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),n0(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(c0,"searchByValue");function _0(e,t){try{let r=new r0(e);r.validate(),new i0(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(_0,"search")});var As=f((j2,_p)=>{"use strict";var sp=It(),Kr=I(),np=_o(),u0=require("lodash"),l0=xr(),ip=b(),{promisify:ap}=require("util"),z=m(),{handleHDBError:dc,hdb_errors:E0}=L(),{HDB_ERROR_MSGS:hc,HTTP_STATUS_CODES:op}=E0,d0=B();d0.initSync();var rp=X(),h0=Ns(),{getSchemaPath:f0}=j(),Li=ap(sp.searchByValue),S0=ap(sp.searchByHash),fn="name",cp="hash_attribute",Zl="schema",T0="schema_table",m0="attribute";_p.exports={describeAll:R0,describeTable:fc,describeSchema:p0};async function R0(e){try{let t=ip.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:fn,search_value:z.WILDCARD_SEARCH_VALUE,get_attributes:[fn]},i=await Li(n),o={},c={};for(let d of i)o[d.name]=!0,!t&&!s&&(c[d.name]=r[d.name].describe);let _={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:z.ID_ATTRIBUTE_STRING,search_value:z.WILDCARD_SEARCH_VALUE,get_attributes:[cp,z.ID_ATTRIBUTE_STRING,fn,Zl]},u=await Li(_),l=[];for(let d of u)try{let h;if(t||s)h=await fc({schema:d.schema,table:d.name});else if(r&&r[d.schema].describe&&r[d.schema].tables[d.name].describe){let T=r[d.schema].tables[d.name].attribute_permissions;h=await fc({schema:d.schema,table:d.name},T)}h&&l.push(h)}catch(h){Kr.error(h)}let E={};for(let d in l)t||s?(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s?E[d]={}:c[d]&&(E[d]={});return E}catch(t){return Kr.error("Got an error in describeAll"),Kr.error(t),dc(new Error,hc.DESCRIBE_ALL_ERR)}}a(R0,"describeAll");async function fc(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=np.describe_table(e);if(o)throw o;if(r===z.SYSTEM_SCHEMA_NAME)return global.hdb_schema[z.SYSTEM_SCHEMA_NAME][s];let c={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:fn,search_value:s,hash_values:[],get_attributes:[z.WILDCARD_SEARCH_VALUE]},_=Array.from(await Li(c));if(!_||_.length===0)throw dc(new Error,hc.TABLE_NOT_FOUND(e.schema,e.table),op.NOT_FOUND);for await(let u of _)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw dc(new Error,hc.INVALID_TABLE_ERR(i));let l={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:T0,search_value:r+"."+s,get_attributes:[m0]},E=Array.from(await Li(l));E=u0.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=A0(n)),i.attributes=E,i.clustering_stream_name=l0.createNatsTableStreamName(u.schema,u.name);try{let d=f0(i.schema,i.name),h=await rp.openEnvironment(d,i.name),T=rp.statDBI(h,i.hash_attribute);i.record_count=T.entryCount;for(let{key:R}of h0.lessThan(h,i.hash_attribute,z.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,1/0,!0,1,0))i.last_updated_record=R}catch(d){Kr.warn(`unable to stat table dbi due to ${d}`)}}catch(l){Kr.error(`There was an error getting attributes for table '${u.name}'`),Kr.error(l)}return i}a(fc,"descTable");function A0(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(A0,"getAttrsByPerms");async function p0(e){let t=np.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:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Zl,search_value:s,hash_values:[],get_attributes:[cp,z.ID_ATTRIBUTE_STRING,fn,Zl]},i=Array.from(await Li(n));if(i&&i.length<1){let o={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[fn]},c=Array.from(await S0(o));if(c&&c.length<1)throw dc(new Error,hc.SCHEMA_NOT_FOUND(e.schema),op.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async c=>{try{let _;if(r&&r.tables[c.name]&&(_=r.tables[c.name]),ip.isEmpty(_)||_.describe){let u=await fc({schema:e.schema,table:c.name},_?_.attribute_permissions:null);u&&(o[u.name]=u)}}catch(_){Kr.error(`Error describing schema table '${e.schema}.${c}'`),Kr.error(_)}})),o}}a(p0,"describeSchema")});var qr=f((t4,hp)=>{var Sn=cs(),{callbackify:Ep,promisify:g0}=require("util");hp.exports={setSchemaDataToGlobal:up,getTableSchema:I0,getSystemSchema:w0,setSchemaDataToGlobalAsync:g0(up)};var dp=As(),N0=Ep(dp.describeAll),O0=Ep(dp.describeTable);function up(e){N0(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Sn),global.hdb_schema=r,e(null,null)})}a(up,"setSchemaDataToGlobal");function lp(e,t){return e==="system"?Sn[t]:global.hdb_schema[e][t]}a(lp,"returnSchema");function I0(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?b0(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,lp(e,t))}):r(null,lp(e,t))}a(I0,"getTableSchema");function b0(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=Sn:global.hdb_schema={system:Sn},r();return}O0(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:Sn}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(b0,"setTableDataToGlobal");function w0(){return Sn}a(w0,"getSystemSchema")});var Sc=f((s4,fp)=>{"use strict";var C0=Qt();fp.exports={writeTransaction:L0};function L0(e,t,r){return C0.writeTransaction(e,t,r)}a(L0,"writeTransaction")});var zl=f((i4,y0)=>{y0.exports={name:"harperdb",version:"4.1.2",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{node:">=14.0.0","preferred-node":"18.15.0","go-lang":"1.19.10","nats-server":"2.9.18"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license --storage_type=lmdb && npm run cover:logging && 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/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","cover:lmdbutility":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","cover:hdbserver":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --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'","cover:apitests":"cd bin/ && node harperdb.js stop && node harperdb.js && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*.js' --config '../unitTests/.mocharc.json' && node harperdb.js stop","cover:logging":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.354.0","@aws-sdk/lib-storage":"3.354.0","@aws-sdk/abort-controller":"3.347.0","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.2.0","@fastify/cors":"~8.2.0","@fastify/static":"~6.9.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4","cbor-x":"1.5.1",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2",esbuild:"^0.17.10","fast-glob":"3.2.12",fastify:"~4.17.0","fastify-plugin":"~4.5.0","fs-extra":"11.1.0","human-readable-ids":"1.0.4",inquirer:"8.2.5","is-number":"7.0.0",joi:"17.9.2",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.0",lmdb:"2.8.2",lodash:"4.17.21",mathjs:"11.6.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4",msgpackr:"1.9.5",nats:"2.14.0",needle:"3.2.0","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.0",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.14.1",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.5.1","stream-chain":"2.2.5","stream-json":"1.7.5",systeminformation:"5.17.10","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.0","validate.js":"0.13.1",yaml:"2.3.1"},devDependencies:{axios:"0.27.2",chai:"4.3.7","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":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"^1.22.11","newman-reporter-teamcity":"^0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},lmdb:{msgpackr:"1.8.4"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}}}});var be=f((h4,Dp)=>{"use strict";var pe=B();pe.initSync();var U0=require("fs-extra"),M0=require("semver"),Pi=require("path"),{monotonicFactory:D0}=require("ulidx"),sE=D0(),P0=require("util"),Tp=require("child_process"),B0=P0.promisify(Tp.exec),v0=Tp.spawn,V=oe(),Q=m(),Tc=b(),Wr=I(),mc=xr(),H0=Sc(),yi=lr(),{encode:tE,decode:nE}=require("msgpackr"),{isEmpty:bs}=Tc,mp=Vr(),Rp=12e10,{connect:q0,StorageType:Ap,RetentionPolicy:pp,AckPolicy:iE,DeliverPolicy:Bi,DiscardPolicy:G0,NatsConnection:a4,JetStreamManager:o4,JetStreamClient:c4,StringCodec:_4,JSONCodec:F0,createInbox:aE,StreamSource:u4,headers:x0,toJsMsg:gp,nuid:l4,JetStreamOptions:E4,ErrorCode:Sp,nanos:d4}=require("nats"),{PACKAGE_ROOT:V0}=m(),k0=zl(),Np=F0(),$0="clustering",Y0=k0.engines[V.NATS_SERVER_NAME],K0=Pi.join(V0,"dependencies"),rE=Pi.join(K0,`${process.platform}-${process.arch}`,V.NATS_BINARY_NAME),jl,eE,Ui,Mi,Di,Gt;Dp.exports={runCommand:Op,checkNATSServerInstalled:W0,createConnection:oE,getConnection:Rc,getJetStreamManager:vi,getJetStream:Ip,getNATSReferences:dt,getServerList:J0,createLocalStream:cE,listStreams:bp,deleteLocalStream:X0,getServerConfig:Hi,listRemoteStreams:Z0,viewStream:z0,viewStreamIterator:j0,publishToStream:ex,createWorkQueueStream:tx,addSourceToWorkStream:Cp,request:rx,removeSourceFromWorkStream:yp,reloadNATS:_E,reloadNATSHub:sx,reloadNATSLeaf:nx,extractServerName:Lp,requestErrorHandler:ix,updateWorkStream:ax,createLocalTableStream:Up,createTableStreams:ox,purgeTableStream:Mp,purgeSchemaTableStreams:cx,getStreamInfo:_x,updateLocalStreams:lx,closeConnection:Q0,getJsmServerName:qi,addNatsMsgHeader:wp};async function Op(e,t=void 0){let{stdout:r,stderr:s}=await B0(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
6
6
|
`,""));return r.replace(`
|
|
7
|
-
`,"")}a(Np,"runCommand");async function $0(){try{await C0.access(rE)}catch{return!1}let e=await Np(`${rE} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return L0.eq(t,V0)}a($0,"checkNATSServerInstalled");async function oE(e,t,r,s=!0,n="127.0.0.1"){return B0({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:pe.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:pe.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:pe.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}a(oE,"createConnection");async function Y0(){Gt&&(await Gt.drain(),Gt=void 0)}a(Y0,"closeConnection");async function Rc(){if(!Gt){let e=await Tp.getClusterUser();if(Is(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);Gt=await oE(t,e.username,e.decrypt_hash)}return Gt}a(Rc,"getConnection");async function vi(){if(Mi)return Mi;Is(Gt)&&await Rc();let{domain:e}=Hi(Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Is(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Mi=await Gt.jetstreamManager({domain:e}),Mi}a(vi,"getJetStreamManager");async function Op(){if(Di)return Di;Is(Gt)&&await Rc();let{domain:e}=Hi(Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Is(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Di=Gt.jetstream({domain:e}),Di}a(Op,"getJetStream");async function dt(){let e=Gt||await Rc(),t=Mi||await vi(),r=Di||await Op();return{connection:e,jsm:t,js:r}}a(dt,"getNATSReferences");async function K0(e){let t=pe.get(Q.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await Tp.getClusterUser(),n=await oE(t,r,s),i=aE(),o=n.subscribe(i),c=[],_,u=(async()=>{for await(let l of o){let E=gp.decode(l.data);E.response_time=Date.now()-_,c.push(E)}})();return _=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await Tc.async_set_timeout(e),await o.drain(),await n.close(),await u,c}a(K0,"getServerList");async function cE(e,t){let{jsm:r}=await dt(),s=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Rp.File,retention:Ap.Limits,subjects:t,discard:v0.Old,duplicate_window:mp,max_msgs:n,max_bytes:i,max_age:s})}a(cE,"createLocalStream");async function Ip(){let{jsm:e}=await dt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(Ip,"listStreams");async function W0(e){let{jsm:t}=await dt();await t.streams.delete(e)}a(W0,"deleteLocalStream");async function Q0(e){let{connection:t}=await dt(),r=[],s=aE(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(gp.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(Q0,"listRemoteStreams");async function J0(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await dt(),i=sE(),o=[],c={ack_policy:iE.None,durable_name:i,deliver_subject:i,deliver_policy:Bi.All};t&&(c.deliver_policy=Bi.StartTime,c.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,c);let _={timeout:2e3};r&&(_.max=r);let u=await n.subscribe(i,_);for await(let l of u){let E=pp(l),d=nE(E.data),h={nats_timestamp:E.info.timestampNanos,nats_sequence:E.info.streamSequence,entry:d};E.headers&&(h.origin=E.headers.get(V.MSG_HEADERS.ORIGIN),h.nats_msg_id=E.headers.get(V.MSG_HEADERS.NATS_MSG_ID)),o.push(h),u.getPending()===1&&E.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),o}catch(_){if(await s.consumers.delete(e,i),_.code==="TIMEOUT")return o;throw _}}a(J0,"viewStream");async function*X0(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await dt(),i=sE(),o={ack_policy:iE.None,durable_name:i,deliver_subject:i,deliver_policy:Bi.All};t&&(o.deliver_policy=Bi.StartTime,o.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,o);let c={timeout:2e3};r&&(c.max=r);let _=await n.subscribe(i,c);for await(let u of _){let l=pp(u),E=nE(l.data);E[0]||(E=[E]);for(let d of E){let h={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};l.headers&&(h.origin=l.headers.get(V.MSG_HEADERS.ORIGIN),h.nats_msg_id=l.headers.get(V.MSG_HEADERS.NATS_MSG_ID)),yield h}_.getPending()===1&&l.info.pending===0&&_.stop()}await s.consumers.delete(e,i)}catch(c){if(await s.consumers.delete(e,i),c.code==="TIMEOUT")return[];throw c}}a(X0,"viewStreamIterator");async function Z0(e,t,r,s){Wr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s);let n=!0;pe.get(Q.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)===!1&&r&&r.has(V.MSG_HEADERS.NATS_MSG_ID)&&(n=!1),r=bp(s,r);let{js:i}=await dt(),o=await qi(),c=`${e}.${o}`;try{Wr.trace(`publishToStream publishing to subject: ${c}, data:`,s),n&&await i.publish(c,tE(s),{headers:r})}catch(_){if(_.code&&_.code.toString()==="503")Wr.trace(`publishToStream creating stream: ${t}`),await cE(t,[c]),n&&await i.publish(c,tE(s),{headers:r});else throw _}}a(Z0,"publishToStream");function bp(e,t){t===void 0&&(t=q0());let r=pe.get(Q.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(V.MSG_HEADERS.NATS_MSG_ID)){let s=Tc.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${sE()}`;t.append(V.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(V.MSG_HEADERS.ORIGIN)||t.append(V.MSG_HEADERS.ORIGIN,r),t}a(bp,"addNatsMsgHeader");function Hi(e){e=e.toLowerCase();let t=Pi.join(pe.get(Q.CONFIG_PARAMS.ROOTPATH),x0);if(e===Q.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Is(eE)&&(eE={port:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.HUB,config_file:V.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Pi.join(t,V.PID_FILES.HUB),hdb_nats_path:t}),eE;if(e===Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Is(jl)&&(jl={port:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,config_file:V.NATS_CONFIG_FILES.LEAF_SERVER,domain:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,pid_file_path:Pi.join(t,V.PID_FILES.LEAF),hdb_nats_path:t}),jl;Wr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Hi,"getServerConfig");async function z0(e){let{jsm:t}=await dt(),r=await qi();try{await t.streams.add({name:e.stream_name,storage:Rp.File,retention:Ap.Workqueue,duplicate_window:mp,subjects:[`${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:iE.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:Bi.All,max_ack_pending:1e4,deliver_group:e.deliver_group});else throw s}}a(z0,"createWorkQueueStream");async function wp(e,t,r){let{jsm:s}=await dt(),n=await s.streams.info(t),i=Cp(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:_}=r,u=mc.createNatsTableStreamName(c,_),l=i===e,E,d,h=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let R=0,g=n.config.sources.length;R<g;R++)if(E=n.config.sources[R],d=R,l&&E.name===u||!l&&E.name===u&&E.external&&E.external.api===`$JS.${e}.API`){h=!0;break}if(h===!0){if(E.opt_start_time===o)return;n.config.sources.splice(d,1),await s.streams.update(t,n.config)}let T={name:u,opt_start_time:o,filter_subject:`${V.SUBJECT_PREFIXES.TXN}.>`};l||(T.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(T),await s.streams.update(t,n.config)}a(wp,"addSourceToWorkStream");function Cp(e){return e.split(".")[1]}a(Cp,"extractServerName");async function Lp(e,t,r){let{schema:s,table:n}=r,i=mc.createNatsTableStreamName(s,n),{jsm:o}=await dt(),c=await o.streams.info(t);if(!Array.isArray(c.config.sources)||c.config.sources.length===0)return;let _=c.config.sources.length,u;for(;_--;)if(u=c.config.sources[_],u.name===i&&u.external.api===`$JS.${e}.API`){c.config.sources.splice(_,1);break}await o.streams.update(t,c.config)}a(Lp,"removeSourceFromWorkStream");async function j0(e,t,r=2e3,s=aE()){if(!Tc.isObject(t))throw new Error("data param must be an object");let n=tE(t),{connection:i}=await dt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return nE(c.data)}a(j0,"request");function _E(e){return new Promise(async(t,r)=>{let s=D0(rE,["--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(_E,"reloadNATS");async function ex(){let{pid_file_path:e}=Hi(Q.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await _E(e)}a(ex,"reloadNATSHub");async function tx(){let{pid_file_path:e}=Hi(Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await _E(e)}a(tx,"reloadNATSLeaf");function rx(e,t,r){let s;switch(e.code){case fp.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case fp.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(rx,"requestErrorHandler");async function sx(e,t){let r=t+V.SERVER_SUFFIX.LEAF;await P0.writeTransaction(Q.SYSTEM_SCHEMA_NAME,Q.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await wp(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await Lp(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(sx,"updateWorkStream");async function yp(e,t){let r=mc.createNatsTableStreamName(e,t),s=await qi(),n=ox(e,t,s);await cE(r,[n])}a(yp,"createLocalTableStream");async function nx(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await yp(s,n)}}a(nx,"createTableStreams");async function Up(e,t){if(pe.get(Q.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=mc.createNatsTableStreamName(e,t),{jsm:s}=await dt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Wr.warn(r);else throw r}}a(Up,"purgeTableStream");async function ix(e,t){if(pe.get(Q.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await Up(e,t[r])}a(ix,"purgeSchemaTableStreams");async function ax(e){return(await vi()).streams.info(e)}a(ax,"getStreamInfo");function ox(e,t,r){return`${V.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(ox,"createSubjectName");async function qi(){if(Ui)return Ui;if(Ui=(await vi())?.nc?.info?.server_name,Ui===void 0)throw new Error("Unable to get jetstream manager server name");return Ui}a(qi,"getJsmServerName");async function cx(){let e=await vi(),t=await qi(),r=await Ip();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=_x(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===V.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let u=`${V.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Wr.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}else if(n.name===V.WORK_QUEUE_CONSUMER_NAMES.stream_name){let u=`${V.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Wr.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u,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 u=i.split(".");u[u.length-1]=t;let l=u.join(".");Wr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(cx,"updateLocalStreams");function _x(e){let{config:t}=e,r=!1;if(t.name===V.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===V.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(_x,"updateStreamLimits")});var uE=f((d4,Dp)=>{"use strict";var Ac=class{constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};a(Ac,"ClusteringOriginObject");Dp.exports=Ac});var Tn=f((f4,Pp)=>{"use strict";var ux=b(),lE=B(),Qr=m(),lx=oe(),Ex=be(),jt=I(),dx=uE(),hx=xr();lE.initSync();Pp.exports={postOperationHandler:Sx};async function pc(e,t,r,s){if(e.schema===Qr.SYSTEM_SCHEMA_NAME)return;let n=fx(e,t,r);n&&(jt.trace(`sendOperationTransaction publishing to schema ${e.schema} table ${e.table} following transaction:`,n),await Ex.publishToStream(`${lx.SUBJECT_PREFIXES.TXN}.${e.schema}.${e.table}`,hx.createNatsTableStreamName(e.schema,e.table),s,n))}a(pc,"sendOperationTransaction");function fx(e,t,r){if(ux.isEmptyOrZeroLength(t))return null;let s={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===Qr.OPERATIONS_ENUM.DELETE?s.hash_values=t:s.records=e.records,s}a(fx,"convertCRUDOperationToTransaction");async function Sx(e,t,r){if(!lE.get(Qr.CONFIG_PARAMS.CLUSTERING_ENABLED))return;jt.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let s=e.hdb_user?.username,n=lE.get(Qr.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new dx(t.txn_time,s,n);switch(e.operation){case Qr.OPERATIONS_ENUM.INSERT:try{await pc(e,t.inserted_hashes,i,r)}catch(o){jt.error("There was an error calling clustering postOperationHandler for insert."),jt.error(o)}break;case Qr.OPERATIONS_ENUM.DELETE:try{await pc(e,t.deleted_hashes,i,r)}catch(o){jt.error("There was an error calling clustering postOperationHandler for delete."),jt.error(o)}break;case Qr.OPERATIONS_ENUM.UPDATE:try{await pc(e,t.update_hashes,i,r)}catch(o){jt.error("There was an error calling clustering postOperationHandler for update."),jt.error(o)}break;case Qr.OPERATIONS_ENUM.UPSERT:try{await pc(e,t.upserted_hashes,i,r)}catch(o){jt.error("There was an error calling clustering postOperationHandler for upsert."),jt.error(o)}break;default:break}return t}a(Sx,"postOperationHandler")});var Gp=f((T4,qp)=>{"use strict";var Tx=It(),mx=qr(),Bp=I(),vp=Ot(),Rx=Sc(),Ax=require("clone"),dE=require("alasql"),px=uc(),Hp=require("util"),gx=Hp.promisify(mx.getTableSchema),Nx=Hp.promisify(Tx.search),Ox=m(),EE=b(),Ix=Tn();px(dE);qp.exports={update:wx};var bx="There was a problem performing this update. Please check the logs and try again.";async function wx({statement:e,hdb_user:t}){let r=await gx(e.table.databaseid,e.table.tableid),s=Cx(e.columns);EE.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=Ax(n),c=EE.isEmpty(i)?"":` WHERE ${i.toString()}`,_=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,u=dE.parse(_).statements[0],l=await Rx.writeTransaction(r.schema,r.name,async()=>{let E=await Nx(u),d=Lx(s,E);return yx(o,d,t)});return await vp.flush({schema:r.schema,table:r.name}),l}a(wx,"update");function Cx(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value:t[r.column.columnid]=dE.compile(`SELECT ${r.expression.toString()} AS [${Ox.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Bp.error(t),new Error(bx)}}a(Cx,"createUpdateRecord");function Lx(e,t){return EE.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Lx,"buildUpdateRecords");async function yx(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await vp.update(s);await Ix.postOperationHandler(s,n);try{delete n.new_attributes,delete n.txn_time}catch(i){Bp.error(`Error delete new_attributes from update response: ${i}`)}return n}a(yx,"updateRecords")});var xp=f((R4,Fp)=>{var Ux=require("alasql"),Mx=It(),Dx=I(),Px=Qt(),fE=require("util"),hE=b(),Bx=m(),vx=qr(),Hx=Sc(),qx=Tn(),Gx=Ot(),Fx="record",xx="successfully deleted",Vx=fE.callbackify(Kx),kx=fE.promisify(Mx.search),$x=fE.promisify(vx.getTableSchema);Fp.exports={convertDelete:Vx};function Yx(e){return`${e.deleted_hashes.length} ${Fx}${e.deleted_hashes.length===1?"":"s"} ${xx}`}a(Yx,"generateReturnMessage");async function Kx({statement:e,hdb_user:t}){let r=await $x(e.table.databaseid,e.table.tableid);hE.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=hE.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=Ux.parse(o).statements[0],_={operation:Bx.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{let u=await Hx.writeTransaction(r.schema,r.name,async()=>(_.records=await kx(c),Px.deleteRecords(_)));return await Gx.flush({schema:r.schema,table:r.name}),u.deleted_hashes.length>0&&await qx.postOperationHandler(_,u),hE.isEmptyOrZeroLength(u.message)&&(u.message=Yx(u)),delete u.txn_time,u}catch(u){throw Dx.error(u),u.hdb_code?u.message:u}}a(Kx,"convertDelete")});var $p=f((p4,kp)=>{"use strict";var TE=Rs(),{hdb_errors:SE}=L();kp.exports={checkSchemaExists:Vp,checkSchemaTableExists:Wx,schema_describe:TE};async function Vp(e){if(!global.hdb_schema[e])try{let t=await TE.describeSchema({schema:e});global.hdb_schema[e]=t}catch{return SE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}}a(Vp,"checkSchemaExists");async function Wx(e,t){let r=await Vp(e);if(r)return r;if(!global.hdb_schema[e][t])try{let s=await TE.describeTable({schema:e,table:t});if(!s||Object.keys(s).length===0)return SE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t);global.hdb_schema[e][t]=s}catch{return SE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}}a(Wx,"checkSchemaTableExists")});var Nc=f((O4,Qp)=>{"use strict";var mn=_o(),bs=$p(),Qx=I(),Jx=require("uuid").v4,N4=require("clone"),Rn=nn(),ws=m(),Xx=require("util"),Cs=Qt(),{handleHDBError:We,hdb_errors:Zx}=L(),{HDB_ERROR_MSGS:gc,HTTP_STATUS_CODES:Qe}=Zx,{SchemaEventMsg:An}=kr(),Yp=be();Qp.exports={createSchema:zx,createSchemaStructure:Kp,createTable:jx,createTableStructure:Wp,createAttribute:nV,dropSchema:eV,dropTable:tV,dropAttribute:rV};async function zx(e){try{let t=await Kp(e);return Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema)),t}catch(t){throw t}}a(zx,"createSchema");async function Kp(e){let t=mn.schema_object(e);if(t)throw We(t,t.message,Qe.BAD_REQUEST,void 0,void 0,!0);if(!await bs.checkSchemaExists(e.schema))throw We(new Error,gc.SCHEMA_EXISTS_ERR(e.schema),Qe.BAD_REQUEST,ws.LOG_LEVELS.ERROR,gc.SCHEMA_EXISTS_ERR(e.schema),!0);return await Cs.createSchema(e),`schema '${e.schema}' successfully created`}a(Kp,"createSchemaStructure");async function jx(e){let t=await Wp(e);return Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema,e.table)),t}a(jx,"createTable");async function Wp(e){let t=mn.create_table_object(e);if(t)throw We(t,t.message,Qe.BAD_REQUEST,void 0,void 0,!0);mn.validateTableResidence(e.residence);let r=await bs.checkSchemaExists(e.schema);if(r)throw We(new Error,r,Qe.NOT_FOUND,ws.LOG_LEVELS.ERROR,r,!0);if(!await bs.checkSchemaTableExists(e.schema,e.table))throw We(new Error,gc.TABLE_EXISTS_ERR(e.schema,e.table),Qe.BAD_REQUEST,ws.LOG_LEVELS.ERROR,gc.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Jx(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Cs.createTable(n,e);else throw We(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Qe.BAD_REQUEST);else await Cs.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(i){throw i}}a(Wp,"createTableStructure");async function eV(e){let t=mn.schema_object(e);if(t)throw We(t,t.message,Qe.BAD_REQUEST,void 0,void 0,!0);let r=await bs.checkSchemaExists(e.schema);if(r)throw We(new Error,r,Qe.NOT_FOUND,ws.LOG_LEVELS.ERROR,r,!0);let s=await bs.schema_describe.describeSchema({schema:e.schema});global.hdb_schema[e.schema]=s;let n=Object.keys(global.hdb_schema[e.schema]);return await Cs.dropSchema(e),Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema)),delete global.hdb_schema[e.schema],await Yp.purgeSchemaTableStreams(e.schema,n),`successfully deleted schema '${e.schema}'`}a(eV,"dropSchema");async function tV(e){let t=mn.table_object(e);if(t)throw We(t,t.message,Qe.BAD_REQUEST,void 0,void 0,!0);let r=await bs.checkSchemaTableExists(e.schema,e.table);if(r)throw We(new Error,r,Qe.NOT_FOUND,ws.LOG_LEVELS.ERROR,r,!0);return await Cs.dropTable(e),Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema,e.table)),await Yp.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(tV,"dropTable");async function rV(e){let t=mn.attribute_object(e);if(t)throw We(t,t.message,Qe.BAD_REQUEST,void 0,void 0,!0);let r=await bs.checkSchemaTableExists(e.schema,e.table);if(r)throw We(new Error,r,Qe.NOT_FOUND,ws.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw We(new Error,"You cannot drop a hash attribute",Qe.BAD_REQUEST,void 0,void 0,!0);if(ws.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw We(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Qe.BAD_REQUEST,void 0,void 0,!0);try{return await Cs.dropAttribute(e),sV(e),Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw Qx.error(`Got an error deleting attribute ${Xx.inspect(e)}.`),s}}a(rV,"dropAttribute");function sV(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(sV,"dropAttributeFromGlobal");async function nV(e){return await Cs.createAttribute(e),Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(nV,"createAttribute")});var Xp=f((b4,Jp)=>{"use strict";var{OPERATIONS_ENUM:iV}=m(),Oc=class{constructor(t,r,s=void 0,n=void 0){this.operation=iV.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};a(Oc,"ReadAuditLogObject");Jp.exports=Oc});var mE=f((L4,tg)=>{"use strict";var aV=Qt(),C4=Xp(),Ic=b(),bc=m(),oV=B(),{handleHDBError:Zp,hdb_errors:cV}=L(),{HDB_ERROR_MSGS:zp,HTTP_STATUS_CODES:jp}=cV,_V=Object.values(bc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),eg="To use this operation audit log must be enabled in harperdb-config.yaml";tg.exports=uV;async function uV(e){if(Ic.isEmpty(e.schema))throw new Error(zp.SCHEMA_REQUIRED_ERR);if(Ic.isEmpty(e.table))throw new Error(zp.TABLE_REQUIRED_ERR);if(!oV.get(bc.CONFIG_PARAMS.LOGGING_AUDITLOG))throw Zp(new Error,eg,jp.BAD_REQUEST,bc.LOG_LEVELS.ERROR,eg,!0);let t=Ic.checkSchemaTableExist(e.schema,e.table);if(t)throw Zp(new Error,t,jp.NOT_FOUND,bc.LOG_LEVELS.ERROR,t,!0);if(!Ic.isEmpty(e.search_type)&&_V.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await aV.readAuditLog(e)}a(uV,"readAuditLog")});var og=f((U4,ag)=>{var Jr=require("validate.js"),sg=te(),pn=m(),{handleHDBError:lV,hdb_errors:EV}=L(),{HDB_ERROR_MSGS:_e,HTTP_STATUS_CODES:dV}=EV,RE=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),hV={STRUCTURE_USER:"structure_user"},rg=Object.values(pn.ROLE_TYPES_ENUM),fV="attribute_permissions",SV="attribute_name",{PERMS_CRUD_ENUM:gn}=pn,TV=[fV,...Object.values(gn)],ng=[gn.READ,gn.INSERT,gn.UPDATE],mV=[SV,...ng];function RV(e){let t=RE();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,ig(e,t)}a(RV,"addRoleValidation");function AV(e){let t=RE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,ig(e,t)}a(AV,"alterRoleValidation");function pV(e){let t=RE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,sg.validateObject(e,t)}a(pV,"dropRoleValidation");var gV=["operation","role","id","permission","hdb_user","hdb_auth_header"];function ig(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)gV.includes(s[o])||n.push(s[o]);n.length>0&&Ee(_e.INVALID_ROLE_JSON_KEYS(n),r);let i=sg.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Ee(o,r)}),e.permission){let o=NV(e);o&&Ee(o,r),rg.forEach(c=>{e.permission[c]&&!Jr.isBoolean(e.permission[c])&&Ee(_e.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(rg.indexOf(o)<0){if(o===hV.STRUCTURE_USER){let _=e.permission[o];if(typeof _=="boolean")continue;if(Array.isArray(_)){for(let u=0,l=_.length;u<l;u++){let E=_[u];global.hdb_schema[E]||Ee(_e.SCHEMA_NOT_FOUND(E),r)}continue}Ee(_e.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Ee(_e.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let _ in c.tables){let u=c.tables[_];if(!_||!global.hdb_schema[o][_]){Ee(_e.TABLE_NOT_FOUND(o,_),r);continue}if(Object.keys(u).forEach(l=>{TV.includes(l)||Ee(_e.INVALID_PERM_KEY(l),r,o,_)}),Object.values(gn).forEach(l=>{Jr.isDefined(u[l])?Jr.isBoolean(u[l])||Ee(_e.TABLE_PERM_NOT_BOOLEAN(l),r,o,_):Ee(_e.TABLE_PERM_MISSING(l),r,o,_)}),Jr.isDefined(u.attribute_permissions)){if(!Jr.isArray(u.attribute_permissions)){Ee(_e.ATTR_PERMS_NOT_ARRAY,r,o,_);continue}}else{Ee(_e.ATTR_PERMS_ARRAY_MISSING,r,o,_);continue}if(u.attribute_permissions){let l=global.hdb_schema[o][_].attributes.map(({attribute:d})=>d),E={read:!1,insert:!1,update:!1};for(let d in u.attribute_permissions){let h=u.attribute_permissions[d];if(Object.keys(h).forEach(R=>{!mV.includes(R)&&R!==gn.DELETE&&Ee(_e.INVALID_ATTR_PERM_KEY(R),r,o,_)}),!Jr.isDefined(h.attribute_name)){Ee(_e.ATTR_PERM_MISSING_NAME,r,o,_);continue}let T=h.attribute_name;if(!l.includes(T)){Ee(_e.INVALID_ATTRIBUTE_IN_PERMS(T),r,o,_);continue}ng.forEach(R=>{Jr.isDefined(h[R])?Jr.isBoolean(h[R])||Ee(_e.ATTR_PERM_NOT_BOOLEAN(R,T),r,o,_):Ee(_e.ATTR_PERM_MISSING(R,T),r,o,_)}),!E.read&&h.read===!0&&(E.read=!0),!E.insert&&h.insert===!0&&(E.insert=!0),!E.update&&h.update===!0&&(E.update=!0)}if(u.read===!1&&E.read===!0||u.insert===!1&&E.insert===!0||u.update===!1&&E.update===!0){let d=`${o}.${_}`;Ee(_e.MISMATCHED_TABLE_ATTR_PERMS(d),r,o,_)}}}}return OV(r)}a(ig,"customValidate");ag.exports={addRoleValidation:RV,alterRoleValidation:AV,dropRoleValidation:pV};function NV(e){let{operation:t,permission:r}=e;if(t===pn.OPERATIONS_ENUM.ADD_ROLE||t===pn.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return _e.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?pn.ROLE_TYPES_ENUM.SUPER_USER:pn.ROLE_TYPES_ENUM.CLUSTER_USER;return _e.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(NV,"validateNoSUPerms");function OV(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:_e.ROLE_PERMS_ERROR,...e};return lV(new Error,s,dV.BAD_REQUEST)}else return null}a(OV,"generateRolePermResponse");function Ee(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(Ee,"addPermError")});var wE=f((D4,dg)=>{"use strict";var cg=Ot(),_g=It(),IV=Ts(),gE=og(),NE=nn(),bV=require("uuid").v4,OE=require("util"),wV=tn(),mr=m(),ug=b(),IE=OE.promisify(_g.searchByValue),CV=OE.promisify(_g.searchByHash),LV=OE.promisify(IV.delete),yV=Ht(),UV=un(),{hdb_errors:MV,handleHDBError:Gi}=L(),{HDB_ERROR_MSGS:lg,HTTP_STATUS_CODES:AE}=MV,{UserEventMsg:bE}=kr();dg.exports={addRole:DV,alterRole:BV,dropRole:vV,listRoles:Eg};function pE(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(pE,"scrubRoleDetails");async function DV(e){let t=gE.addRoleValidation(e);if(t)throw t;if(!(await wV.getLicense()).enterprise){let o=await Eg();if(PV(e,o))throw new Error(`Your current license only supports ${mr.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} cluster_user role. ${mr.SUPPORT_HELP_MSG}`);if(o.length>=2)throw new Error(`Your current license only supports ${mr.BASIC_LICENSE_MAX_NON_CU_ROLES+mr.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} roles. ${mr.SUPPORT_HELP_MSG}`)}e=pE(e);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await IE(s)||[])}catch(o){throw Gi(o)}if(n&&n.length>0)throw Gi(new Error,lg.ROLE_ALREADY_EXISTS(e.role),AE.CONFLICT,void 0,void 0,!0);e.id||(e.id=bV());let i={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await cg.insert(i),NE.signalUserChange(new bE(process.pid)),e=pE(e),e}a(DV,"addRole");function PV(e,t){let r=!1;if(e.permission.cluster_user===!0)for(let s=0;s<t.length;s++){let i=t[s].permission;if(!ug.isEmpty(i)&&i.cluster_user===!0)return!0}return r}a(PV,"checkClusterUserRole");async function BV(e){let t=gE.alterRoleValidation(e);if(t)throw t;e=pE(e);let r={operation:"update",schema:"system",table:"hdb_role",hash_attribute:"rolename",records:[e]};try{await cg.update(r)}catch(s){throw Gi(s)}return NE.signalUserChange(new bE(process.pid)),e}a(BV,"alterRole");async function vV(e){let t=gE.dropRoleValidation(e);if(t)throw Gi(new Error,t,AE.BAD_REQUEST,void 0,void 0,!0);let r=new UV(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await CV(r));if(s.length===0)throw Gi(new Error,lg.ROLE_NOT_FOUND,AE.NOT_FOUND,void 0,void 0,!0);let n=new yV(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await IE(n)),o=!1;if(ug.isEmptyOrZeroLength(i)===!1){for(let _=0;_<i.length;_++)if(i[_].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await LV(c),NE.signalUserChange(new bE(process.pid)),`${s[0].role} successfully deleted`}a(vV,"dropRole");async function Eg(){return IE({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(Eg,"listRoles")});var Tg=f((B4,Sg)=>{"use strict";var HV=B(),Xr=require("joi"),qV=te(),hg=require("moment"),GV=require("fs-extra"),CE=require("path"),FV=require("lodash"),Fi=m(),{LOG_LEVELS:Ls}=m(),xV="YYYY-MM-DD hh:mm:ss",VV=CE.resolve(__dirname,"../logs");Sg.exports=function(e){return qV.validateBySchema(e,kV)};var kV=Xr.object({from:Xr.custom(fg),until:Xr.custom(fg),level:Xr.valid(Ls.NOTIFY,Ls.FATAL,Ls.ERROR,Ls.WARN,Ls.INFO,Ls.DEBUG,Ls.TRACE),order:Xr.valid("asc","desc"),limit:Xr.number().min(1),start:Xr.number().min(0),log_name:Xr.custom($V)});function fg(e,t){if(hg(e,hg.ISO_8601).format(xV)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(fg,"validateDatetime");function $V(e,t){if(FV.invert(Fi.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=HV.get(Fi.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Fi.LOG_NAMES.HDB:e,i=n===Fi.LOG_NAMES.INSTALL?CE.join(VV,Fi.LOG_NAMES.INSTALL):CE.join(s,n);return GV.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a($V,"validateReadLogPath")});var yE=f((H4,mg)=>{"use strict";var wc=m(),YV=I(),KV=B(),WV=Tg(),LE=require("path"),QV=require("fs-extra"),{once:JV}=require("events"),{handleHDBError:XV,hdb_errors:ZV}=L(),{PACKAGE_ROOT:zV}=m(),jV=LE.join(zV,"logs"),ek=1e3;mg.exports=tk;async function tk(e){let t=WV(e);if(t)throw XV(t,t.message,ZV.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=KV.get(wc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?wc.LOG_NAMES.HDB:e.log_name,n=s===wc.LOG_NAMES.INSTALL?LE.join(jV,wc.LOG_NAMES.INSTALL):LE.join(r,s),i=QV.createReadStream(n);i.on("error",U=>{YV.error(U)});let o=e.level!==void 0,c=o?e.level:void 0,_=e.from!==void 0,u=_?new Date(e.from):void 0,l=e.until!==void 0,E=l?new Date(e.until):void 0,d=e.limit===void 0?ek:e.limit,h=e.order===void 0?void 0:e.order,T=e.start===void 0?0:e.start,R=T+d,g=0,H=[],x="",q;i.on("data",U=>{let $=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;U=x+U;let ue=0,ae;for(;(ae=$.exec(U))&&!i.destroyed;){q&&(q.message=U.slice(ue,ae.index),ye(q));let[qn,as,wr]=ae,Oa=wr.split("] ["),Ow=Oa[0],Iw=Oa[1];Oa.splice(0,2),q={timestamp:as,thread:Ow,level:Iw,tags:Oa,message:""},ue=ae.index+qn.length}x=U.slice(ue)}),i.on("end",U=>{i.destroyed||q&&(q.message=x.trim(),ye(q))}),i.resume();function ye(U){let $,ue,ae;switch(!0){case(o&&_&&l):$=new Date(U.timestamp),ue=new Date(u),ae=new Date(E),U.level===c&&$>=ue&&$<=ae&&g<T?g++:U.level===c&&$>=ue&&$<=ae&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case(o&&_):$=new Date(U.timestamp),ue=new Date(u),U.level===c&&$>=ue&&g<T?g++:U.level===c&&$>=ue&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case(o&&l):$=new Date(U.timestamp),ae=new Date(E),U.level===c&&$<=ae&&g<T?g++:U.level===c&&$<=ae&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case(_&&l):$=new Date(U.timestamp),ue=new Date(u),ae=new Date(E),$>=ue&&$<=ae&&g<T?g++:$>=ue&&$<=ae&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case o:U.level===c&&g<T?g++:U.level===c&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case _:$=new Date(U.timestamp),ue=new Date(u),$>=ue&&g<T?g++:$>=ue&&g>=T&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case l:$=new Date(U.timestamp),ae=new Date(E),$<=ae&&g<T?g++:$<=ae&&g>=T&&(Zr(U,h,H),g++,g===R&&i.destroy());break;default:g<T?g++:(Zr(U,h,H),g++,g===R&&i.destroy())}}return a(ye,"onLogMessage"),await JV(i,"close"),H}a(tk,"readLog");function Zr(e,t,r){t==="desc"?rk(e,r):t==="asc"?sk(e,r):r.push(e)}a(Zr,"pushLineToResult");function rk(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(rk,"insertDescending");function sk(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(sk,"insertAscending")});var Lc=f((x4,pg)=>{"use strict";var UE=require("joi"),{string:Cc,boolean:Rg,date:nk}=UE.types(),ik=te(),{validateSchemaExists:G4,validateTableExists:F4,validateSchemaName:ak}=Wt(),ok=m(),ck=oe(),_k=B(),uk=Cc.invalid(_k.get(ok.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(ck.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(),Ag={operation:Cc.valid("add_node","update_node"),node_name:uk,subscriptions:UE.array().items({table:Cc.required(),schema:Cc.custom(ak).required(),subscribe:Rg.required(),publish:Rg.required().custom(Ek),start_time:nk.iso()}).min(1).required()};function lk(e){return ik.validateBySchema(e,UE.object(Ag))}a(lk,"addUpdateNodeValidator");function Ek(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(Ek,"checkForFalsy");pg.exports={addUpdateNodeValidator:lk,validation_schema:Ag}});var Ng=f((k4,gg)=>{var dk=te(),hk={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};gg.exports=function(e){return dk.validateObject(e,hk)}});var ME=f(($4,Og)=>{"use strict";var fk=m().OPERATIONS_ENUM,yc=class{constructor(t,r,s,n=void 0){this.operation=fk.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(yc,"UpdateObject");Og.exports=yc});var bg=f((K4,Ig)=>{"use strict";var Sk={OPERATION:"operation",REFRESH:"refresh"},Uc=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(Uc,"JWTTokens");var Mc=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(Mc,"JWTRSAKeys");Ig.exports={JWTTokens:Uc,TOKEN_TYPE_ENUM:Sk,JWTRSAKeys:Mc}});var vc=f((Q4,yg)=>{"use strict";var Vi=require("jsonwebtoken"),DE=require("fs-extra"),PE=b(),bt=m(),{handleHDBError:Je,hdb_errors:Tk}=L(),{HTTP_STATUS_CODES:Xe,AUTHENTICATION_ERROR_MSGS:Ze}=Tk,xi=I(),wg=Ao(),HE=Vr(),mk=Ot().update,Rk=ME(),Ak=nn(),{UserEventMsg:pk}=kr(),zr=B();zr.initSync();var BE=require("path"),{JWTTokens:gk,JWTRSAKeys:Nk,TOKEN_TYPE_ENUM:Dc}=bg(),Ok=zr.get(bt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?zr.get(bt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",Ik=zr.get(bt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?zr.get(bt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Pc="RS256",vE;yg.exports={createTokens:bk,validateOperationToken:Ck,refreshOperationToken:wk,validateRefreshToken:Lg};async function bk(e){if(PE.isEmpty(e)||typeof e!="object")throw Je(new Error,Ze.INVALID_AUTH_OBJECT,Xe.BAD_REQUEST,void 0,void 0,!0);if(PE.isEmpty(e.username))throw Je(new Error,Ze.USERNAME_REQUIRED,Xe.BAD_REQUEST,void 0,void 0,!0);if(PE.isEmpty(e.password))throw Je(new Error,Ze.PASSWORD_REQUIRED,Xe.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await HE.findAndValidateUser(e.username,e.password),!t)throw Je(new Error,Ze.INVALID_CREDENTIALS,Xe.UNAUTHORIZED,void 0,void 0,!0)}catch(d){throw xi.error(d),Je(new Error,Ze.INVALID_CREDENTIALS,Xe.UNAUTHORIZED,void 0,void 0,!0)}let r=await Bc(),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 Cg(i,r.private_key,r.passphrase),c=await Vi.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:Ik,algorithm:Pc,subject:Dc.REFRESH}),_=wg.hash(c),u=new Rk(bt.SYSTEM_SCHEMA_NAME,bt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:_}]),l,E;try{l=await mk(u)}catch(d){xi.error(d),E=d}if(E!==void 0||l.skipped_hashes.length>0)throw Je(new Error,Ze.REFRESH_TOKEN_SAVE_FAILED,Xe.INTERNAL_SERVER_ERROR);return Ak.signalUserChange(new pk(process.pid)),new gk(o,c)}a(bk,"createTokens");async function Cg(e,t,r){return await Vi.sign(e,{key:t,passphrase:r},{expiresIn:Ok,algorithm:Pc,subject:Dc.OPERATION})}a(Cg,"signOperationToken");async function Bc(){if(vE===void 0)try{let e=BE.join(zr.getHdbBasePath(),bt.LICENSE_KEY_DIR_NAME,bt.JWT_ENUM.JWT_PASSPHRASE_NAME),t=BE.join(zr.getHdbBasePath(),bt.LICENSE_KEY_DIR_NAME,bt.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=BE.join(zr.getHdbBasePath(),bt.LICENSE_KEY_DIR_NAME,bt.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await DE.readFile(e)).toString(),n=(await DE.readFile(t)).toString(),i=(await DE.readFile(r)).toString();vE=new Nk(i,n,s)}catch(e){throw xi.error(e),Je(new Error,Ze.NO_ENCRYPTION_KEYS,Xe.INTERNAL_SERVER_ERROR)}return vE}a(Bc,"getJWTRSAKeys");async function wk(e){if(!e)throw Je(new Error,Ze.INVALID_BODY,Xe.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Je(new Error,Ze.REFRESH_TOKEN_REQUIRED,Xe.BAD_REQUEST,void 0,void 0,!0);await Lg(e.refresh_token);let t=await Bc(),r=await Vi.decode(e.refresh_token);return{operation_token:await Cg({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(wk,"refreshOperationToken");async function Ck(e){try{let t=await Bc(),r=await Vi.verify(e,t.public_key,{algorithms:Pc,subject:Dc.OPERATION});return await HE.findAndValidateUser(r.username,void 0,!1)}catch(t){throw xi.warn(t),t.name&&t.name==="TokenExpiredError"?Je(new Error,Ze.TOKEN_EXPIRED,Xe.FORBIDDEN):Je(new Error,Ze.INVALID_TOKEN,Xe.UNAUTHORIZED)}}a(Ck,"validateOperationToken");async function Lg(e){let t;try{let r=await Bc(),s=await Vi.verify(e,r.public_key,{algorithms:Pc,subject:Dc.REFRESH});t=await HE.findAndValidateUser(s.username,void 0,!1)}catch(r){throw xi.warn(r),r.name&&r.name==="TokenExpiredError"?Je(new Error,Ze.TOKEN_EXPIRED,Xe.FORBIDDEN):Je(new Error,Ze.INVALID_TOKEN,Xe.UNAUTHORIZED)}if(!wg.validate(t.refresh_token,e))throw Je(new Error,Ze.INVALID_TOKEN,Xe.UNAUTHORIZED);return t}a(Lg,"validateRefreshToken")});var Pg=f((Z4,Dg)=>{"use strict";var Lk=Ng(),Nn=require("passport"),yk=require("passport-local").Strategy,Uk=require("passport-http").BasicStrategy,Mk=require("util"),Dk=Vr(),Mg=Mk.callbackify(Dk.findAndValidateUser),X4=it(),Pk=m(),Ug=vc();Nn.use(new yk(function(e,t,r){Mg(e,t,r)}));Nn.use(new Uk(function(e,t,r){Mg(e,t,r)}));Nn.serializeUser(function(e,t){t(null,e)});Nn.deserializeUser(function(e,t){t(null,e)});function Bk(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,c){return o?r(o):c?r(null,c):r("User not found")}switch(a(i,"handleResponse"),s){case"Basic":Nn.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===Pk.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Ug.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):Ug.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Nn.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(Bk,"authorize");function vk(e,t){let r=Lk(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 c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(vk,"checkPermissions");Dg.exports={authorize:Bk,checkPermissions:vk}});var On=f((j4,Bg)=>{"use strict";var Hc=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(Hc,"Node");var qc=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(qc,"NodeSubscription");Bg.exports={Node:Hc,NodeSubscription:qc}});var Hg=f((t5,vg)=>{"use strict";var Hk=m().OPERATIONS_ENUM,Gc=class{constructor(t,r,s,n=void 0){this.operation=Hk.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Gc,"UpsertObject");vg.exports=Gc});var ki=f((s5,qg)=>{"use strict";var Fc=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(Fc,"RemotePayloadObject");var xc=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(xc,"RemotePayloadSubscription");qg.exports={RemotePayloadObject:Fc,RemotePayloadSubscription:xc}});var Fg=f((i5,Gg)=>{"use strict";var Vc=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(Vc,"TableSizeObject");Gg.exports=Vc});var Vg=f((o5,xg)=>{"use strict";var qk=Fg(),Gk=Ue(),In=X(),Fk=I(),{getSchemaPath:xk,getTransactionAuditStorePath:Vk}=j();xg.exports=kk;async function kk(e){let t=new qk;try{let r=xk(e.schema,e.name),s=await In.openEnvironment(r,e.name),n=In.statDBI(s,e.hash_attribute),i=Vk(e.schema,e.name),o=await In.openEnvironment(i,e.name,!0),c=In.statDBI(o,Gk.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),_=await In.environmentDataSize(r,e.name),u=await In.environmentDataSize(i,e.name);t.schema=e.schema,t.table=e.name,t.table_size=_,t.record_count=n.entryCount,t.transaction_log_size=u,t.transaction_log_record_count=c.entryCount}catch(r){Fk.warn(`unable to stat table dbi due to ${r}`)}return t}a(kk,"lmdbGetTableSize")});var $g=f((_5,kg)=>{"use strict";var kc=class{constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};a(kc,"SystemInformationObject");kg.exports=kc});var bn=f((l5,Wg)=>{"use strict";var He=require("systeminformation"),ys=I(),$k=m(),Yk=Vg(),Kg=Rs(),{getThreadInfo:Yg}=hs(),Kk=B();Kk.initSync();var Wk=$g(),{openEnvironment:Qk}=X(),{getSchemaPath:Jk}=j(),$c;Wg.exports={getHDBProcessInfo:xE,getNetworkInfo:kE,getDiskInfo:VE,getMemoryInfo:FE,getCPUInfo:GE,getTimeInfo:qE,getSystemInformation:$E,systemInformation:Xk,getTableSize:YE,getMetrics:KE};function qE(){return He.time()}a(qE,"getTimeInfo");async function GE(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:_,cache:u,...l}=await He.cpu();l.cpu_speed=await He.cpuCurrentSpeed();let{raw_currentload:E,raw_currentload_idle:d,raw_currentload_irq:h,raw_currentload_nice:T,raw_currentload_system:R,raw_currentload_user:g,cpus:H,...x}=await He.currentLoad();return x.cpus=[],H.forEach(q=>{let{raw_load:ye,raw_load_idle:U,raw_load_irq:$,raw_load_nice:ue,raw_load_system:ae,raw_load_user:qn,...as}=q;x.cpus.push(as)}),l.current_load=x,l}catch(e){return ys.error(`error in getCPUInfo: ${e}`),{}}}a(GE,"getCPUInfo");async function FE(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await He.mem();return Object.assign(n,process.memoryUsage())}catch(e){return ys.error(`error in getMemoryInfo: ${e}`),{}}}a(FE,"getMemoryInfo");async function xE(){let e={core:[],clustering:[]};try{return(await He.processes()).list.forEach(r=>{r.params.includes($k.HDB_PROC_NAME)||r.name.includes("harperdb")?e.core.push(r):r.name==="nats-server"&&e.clustering.push(r)}),e}catch(t){return ys.error(`error in getHDBProcessInfo: ${t}`),e}}a(xE,"getHDBProcessInfo");async function VE(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await He.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:_,...u}=await He.fsStats();return e.read_write=u,e.size=await He.fsSize(),e}catch(t){return ys.error(`error in getDiskInfo: ${t}`),e}}a(VE,"getDiskInfo");async function kE(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await He.networkInterfaceDefault(),e.latency=await He.inetChecksite("google.com"),(await He.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:_,ieee8021xAuth:u,ieee8021xState:l,carrier_changes:E,...d}=s;e.interfaces.push(d)}),(await He.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return ys.error(`error in getNetworkInfo: ${t}`),e}}a(kE,"getNetworkInfo");async function $E(){if($c!==void 0)return $c;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await He.osInfo();e=c;let _=await He.versions("node, npm");return e.node_version=_.node,e.npm_version=_.npm,$c=e,$c}catch(t){return ys.error(`error in getSystemInformation: ${t}`),e}}a($E,"getSystemInformation");async function YE(){let e=[],t=await Kg.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await Yk(s));return e}a(YE,"getTableSize");async function KE(){let e=await Kg.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=Jk(r,n),c=(await Qk(i,n)).getStats();s[n]={puts:c.puts,deletes:c.deletes,txns:c.txns,pageFlushes:c.pageFlushes,writes:c.writes,pagesWritten:c.pagesWritten,timeDuringTxns:c.timeDuringTxns,timeStartTxns:c.timeStartTxns,timePageFlushes:c.timePageFlushes,timeSync:c.timeSync}}catch(i){ys.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(KE,"getMetrics");async function Xk(e){let t=new Wk;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await $E(),t.time=qE(),t.cpu=await GE(),t.memory=await FE(),t.disk=await VE(),t.network=await kE(),t.harperdb_processes=await xE(),t.table_size=await YE(),t.metrics=await KE(),t.threads=await Yg(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await $E();break;case"time":t.time=qE();break;case"cpu":t.cpu=await GE();break;case"memory":t.memory=await FE();break;case"disk":t.disk=await VE();break;case"network":t.network=await kE();break;case"harperdb_processes":t.harperdb_processes=await xE();break;case"table_size":t.table_size=await YE();break;case"database_metrics":t.metrics=await KE();break;case"threads":t.threads=await Yg();break;default:break}return t}a(Xk,"systemInformation")});var WE=f((f5,Qg)=>{"use strict";var d5=require("fs-extra"),h5=I();Qg.exports={version:Zk,printVersion:jk,nodeVersion:zk};var jr=zl();function Zk(){if(jr)return jr.version}a(Zk,"version");function zk(){if(jr&&jr.engines&&jr.engines["preferred-node"])return jr.engines["preferred-node"]}a(zk,"nodeVersion");function jk(){jr&&console.log(`HarperDB Version ${jr.version}`)}a(jk,"printVersion")});var Rr=f((R5,zg)=>{"use strict";var e$=Ot(),QE=b(),JE=require("util"),Us=m(),Jg=B();Jg.initSync();var t$=Pg(),Xg=It(),{Node:T5,NodeSubscription:m5}=On(),r$=un(),s$=Hg(),{RemotePayloadObject:n$,RemotePayloadSubscription:i$}=ki(),{handleHDBError:a$,hdb_errors:o$}=L(),{HTTP_STATUS_CODES:c$,HDB_ERROR_MSGS:_$}=o$,u$=Ht(),l$=bn(),E$=WE(),d$=JE.promisify(t$.authorize),h$=JE.promisify(Xg.searchByHash),f$=JE.promisify(Xg.searchByValue);zg.exports={authHeaderToUser:S$,isEmpty:T$,getNodeRecord:m$,upsertNodeRecord:R$,buildNodePayloads:A$,checkClusteringEnabled:p$,getAllNodeRecords:g$,getSystemInfo:N$,reverseSubscription:Zg};async function S$(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await d$(t,null),e}a(S$,"authHeaderToUser");function T$(e){return e==null}a(T$,"isEmpty");async function m$(e){let t=new r$(Us.SYSTEM_SCHEMA_NAME,Us.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return h$(t)}a(m$,"getNodeRecord");async function R$(e){let t=new s$(Us.SYSTEM_SCHEMA_NAME,Us.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return e$.upsert(t)}a(R$,"upsertNodeRecord");function Zg(e){if(QE.isEmpty(e.subscribe)||QE.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(Zg,"reverseSubscription");function A$(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:_,table:u}=c,l=QE.getTableHashAttribute(_,u),{subscribe:E,publish:d}=Zg(c),h=new i$(_,u,l,d,E,c.start_time);n.push(h)}return new n$(r,t,n,s)}a(A$,"buildNodePayloads");function p$(){if(!Jg.get(Us.CONFIG_PARAMS.CLUSTERING_ENABLED))throw a$(new Error,_$.CLUSTERING_NOT_ENABLED,c$.BAD_REQUEST,void 0,void 0,!0)}a(p$,"checkClusteringEnabled");async function g$(){let e=new u$(Us.SYSTEM_SCHEMA_NAME,Us.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await f$(e))}a(g$,"getAllNodeRecords");async function N$(){let e=await l$.getSystemInformation();return{hdb_version:E$.version(),node_version:e.node_version,platform:e.platform}}a(N$,"getSystemInfo")});var ZE=f((p5,nN)=>{"use strict";var XE=be(),jg=b(),eN=oe(),O$=m(),Yc=I(),tN=Nc(),I$=Hl(),{RemotePayloadObject:b$}=ki(),{handleHDBError:rN,hdb_errors:w$}=L(),{HTTP_STATUS_CODES:sN}=w$,{NodeSubscription:C$}=On();nN.exports=L$;async function L$(e,t){let r;try{r=await XE.request(`${t}.${eN.REQUEST_SUFFIX}`,new b$(O$.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Yc.trace("Response from remote describe all request:",r)}catch(o){Yc.error(`addNode received error from describe all request to remote node: ${o}`);let c=XE.requestErrorHandler(o,"add_node",t);throw rN(new Error,c,sN.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===eN.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw rN(new Error,o,sN.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:_}=o,u=jg.doesSchemaExist(c),l=s[c]!==void 0,E=jg.doesTableExist(c,_),d=s?.[c]?.[_]!==void 0;if(!u&&!l||!E&&!d){n.push(o);continue}if(!u&&l&&(Yc.trace(`addNode creating schema: ${c}`),await tN.createSchema({operation:"create_schema",schema:c})),!E&&d){Yc.trace(`addNode creating table: ${_} in schema: ${c}`);let T=new I$(c,_,s[c][_].hash_attribute);await tN.createTable(T)}await XE.createLocalTableStream(c,_);let h=new C$(c,_,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h)}return{added:i,skipped:n}}a(L$,"reviewSubscriptions")});var Qc=f((N5,oN)=>{"use strict";var{handleHDBError:Kc,hdb_errors:y$}=L(),{HTTP_STATUS_CODES:Wc}=y$,{addUpdateNodeValidator:U$}=Lc(),$i=I(),aN=m(),iN=oe(),M$=b(),zE=be(),Yi=Rr(),D$=B(),P$=ZE(),{Node:B$,NodeSubscription:v$}=On(),H$="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",q$="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",G$=D$.get(aN.CONFIG_PARAMS.CLUSTERING_NODENAME);oN.exports=F$;async function F$(e,t=!1){$i.trace("addNode called with:",e),Yi.checkClusteringEnabled();let r=U$(e);if(r)throw Kc(r,r.message,Wc.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let E=await Yi.getNodeRecord(s);if(!M$.isEmptyOrZeroLength(E))throw Kc(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,Wc.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await P$(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=H$,o;let c=Yi.buildNodePayloads(n,G$,aN.OPERATIONS_ENUM.ADD_NODE,await Yi.getSystemInfo());$i.trace("addNode sending remote payload:",c);let _;try{_=await zE.request(`${s}.${iN.REQUEST_SUFFIX}`,c)}catch(E){$i.error(`addNode received error from request: ${E}`);let d=zE.requestErrorHandler(E,"add_node",s);throw Kc(new Error,d,Wc.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===iN.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let E=`Error returned from remote node ${s}: ${_.message}`;throw Kc(new Error,E,Wc.INTERNAL_SERVER_ERROR,"error",E)}$i.trace(_);let u=[];for(let E=0,d=n.length;E<d;E++){let h=n[E];$i.trace("Add node updating work stream for node:",s,"subscriptions:",h),await zE.updateWorkStream(h,s),n[E].start_time===void 0&&delete n[E].start_time,u.push(new v$(h.schema,h.table,h.publish,h.subscribe))}let l=new B$(s,u,_.system_info);return await Yi.upsertNodeRecord(l),i.length>0?o.message=q$:o.message=`Successfully added '${s}' to manifest`,o}a(F$,"addNode")});var ed=f((I5,uN)=>{"use strict";var{handleHDBError:Jc,hdb_errors:x$}=L(),{HTTP_STATUS_CODES:Xc}=x$,{addUpdateNodeValidator:V$}=Lc(),Ki=I(),_N=m(),cN=oe(),k$=b(),jE=be(),Wi=Rr(),$$=B(),{cloneDeep:Y$}=require("lodash"),K$=ZE(),{NodeSubscription:W$}=On(),Q$="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",J$="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",X$=$$.get(_N.CONFIG_PARAMS.CLUSTERING_NODENAME);uN.exports=Z$;async function Z$(e){Ki.trace("updateNode called with:",e),Wi.checkClusteringEnabled();let t=V$(e);if(t)throw Jc(t,t.message,Xc.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=Y$(await Wi.getNodeRecord(r));if(k$.isEmptyOrZeroLength(s))throw Jc(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,Xc.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await K$(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=Q$,o;let c=Wi.buildNodePayloads(n,X$,_N.OPERATIONS_ENUM.UPDATE_NODE,await Wi.getSystemInfo());Ki.trace("updateNode sending remote payload:",c);let _;try{_=await jE.request(`${r}.${cN.REQUEST_SUFFIX}`,c)}catch(u){Ki.error(`updateNode received error from request: ${u}`);let l=jE.requestErrorHandler(u,"update_node",r);throw Jc(new Error,l,Xc.INTERNAL_SERVER_ERROR,"error",l)}if(_.status===cN.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw Jc(new Error,u,Xc.INTERNAL_SERVER_ERROR,"error",u)}Ki.trace(_);for(let u=0,l=n.length;u<l;u++){let E=n[u];Ki.trace(`updateNode updating work stream for node: ${r} subscription:`,E),await jE.updateWorkStream(E,r),n[u].start_time===void 0&&delete n[u].start_time}return await z$(s[0],n,_.system_info),i.length>0?o.message=J$:o.message=`Successfully updated '${r}'`,o}a(Z$,"updateNode");async function z$(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let _=0,u=e.subscriptions.length;_<u;_++){let l=s.subscriptions[_];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new W$(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Wi.upsertNodeRecord(s)}a(z$,"updateNodeTable")});var fN=f((w5,hN)=>{"use strict";var dN=require("joi"),{string:lN}=dN.types(),j$=te(),EN=m(),eY=B(),tY=oe();hN.exports=rY;function rY(e){let t=lN.invalid(eY.get(EN.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(tY.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=dN.object({operation:lN.valid(EN.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return j$.validateBySchema(e,r)}a(rY,"removeNodeValidator")});var zc=f((L5,pN)=>{"use strict";var{handleHDBError:SN,hdb_errors:sY}=L(),{HTTP_STATUS_CODES:TN}=sY,nY=fN(),Qi=I(),mN=Rr(),iY=b(),Zc=m(),RN=oe(),AN=be(),aY=B(),{RemotePayloadObject:oY}=ki(),{NodeSubscription:cY}=On(),_Y=gi(),uY=Ts(),lY=aY.get(Zc.CONFIG_PARAMS.CLUSTERING_NODENAME);pN.exports=EY;async function EY(e){Qi.trace("removeNode called with:",e),mN.checkClusteringEnabled();let t=nY(e);if(t)throw SN(t,t.message,TN.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await mN.getNodeRecord(r);if(iY.isEmptyOrZeroLength(s))throw SN(new Error,`Node '${r}' was not found.`,TN.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new oY(Zc.OPERATIONS_ENUM.REMOVE_NODE,lY,[]),i,o=!1;try{i=await AN.request(`${r}.${RN.REQUEST_SUFFIX}`,n),Qi.trace("Remove node reply from remote node:",r,i)}catch(_){Qi.error("removeNode received error from request:",_),o=!0}for(let _=0,u=s.subscriptions.length;_<u;_++){let l=s.subscriptions[_];Qi.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let E=new cY(l.schema,l.table,!1,!1);await AN.updateWorkStream(E,r)}let c=new _Y(Zc.SYSTEM_SCHEMA_NAME,Zc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await uY.deleteRecord(c),i?.status===RN.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Qi.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(EY,"removeNode")});var ON=f((U5,NN)=>{"use strict";var gN=require("joi"),{string:dY,array:hY}=gN.types(),fY=te(),SY=Lc();NN.exports=TY;function TY(e){let t=gN.object({operation:dY.valid("configure_cluster").required(),connections:hY.items(SY.validation_schema).required()});return fY.validateBySchema(e,t)}a(TY,"configureClusterValidator")});var td=f((D5,LN)=>{"use strict";var mY=m(),jc=I(),RY=b(),AY=zc(),pY=Qc(),IN=Rr(),gY=ON(),{handleHDBError:bN,hdb_errors:NY}=L(),{HTTP_STATUS_CODES:wN}=NY,OY="Configure cluster complete.",IY="Failed to configure the cluster. Check the logs for more details.",bY="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";LN.exports=wY;async function wY(e){jc.trace("configure cluster called with:",e),IN.checkClusteringEnabled();let t=gY(e);if(t)throw bN(t,t.message,wN.BAD_REQUEST,void 0,void 0,!0);let r=await IN.getAllNodeRecords(),s=[];for(let d=0,h=r.length;d<h;d++)s.push(CN(AY,{operation:mY.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name));let n=await Promise.allSettled(s);jc.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let d=0;d<o;d++){let h=e.connections[d];i.push(CN(pY,h,h.node_name))}let c=await Promise.allSettled(i);jc.trace("All results from configure_cluster add node:",c);let _=[],u=[],l=!1,E=n.concat(c);for(let d=0,h=E.length;d<h;d++){let T=E[d];T.status==="rejected"&&(jc.error(T.reason),_.includes(T.reason.node_name)||_.push(T.reason.node_name)),T.status==="fulfilled"&&(l=!0);let R=T?.value?.result;typeof R=="string"&&R.includes("Successfully removed")||T.status==="rejected"||u.push({node_name:T?.value?.node_name,subscriptions:T?.value?.result})}if(RY.isEmptyOrZeroLength(_))return{message:OY,connections:u};if(l)return{message:bY,failed_nodes:_,connections:u};throw bN(new Error,IY,wN.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(wY,"configureCluster");async function CN(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(CN,"functionWrapper")});var UN=f((B5,yN)=>{"use strict";var e_=require("joi"),CY=te(),{validateSchemaExists:LY,validateTableExists:yY,validateSchemaName:UY}=Wt(),MY=e_.object({operation:e_.string().valid("purge_stream"),schema:e_.string().custom(LY).custom(UY).required(),table:e_.string().custom(yY).required()});function DY(e){return CY.validateBySchema(e,MY)}a(DY,"purgeStreamValidator");yN.exports=DY});var rd=f((H5,MN)=>{"use strict";var{handleHDBError:PY,hdb_errors:BY}=L(),{HTTP_STATUS_CODES:vY}=BY,HY=UN(),qY=be(),GY=Rr();MN.exports=FY;async function FY(e){let t=HY(e);if(t)throw PY(t,t.message,vY.BAD_REQUEST,void 0,void 0,!0);GY.checkClusteringEnabled();let{schema:r,table:s}=e;return await qY.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(FY,"purgeStream")});var id=f((G5,qN)=>{"use strict";var nd=Rr(),xY=be(),BN=B(),t_=m(),Ms=oe(),VY=b(),sd=I(),{RemotePayloadObject:kY}=ki(),{ErrorCode:DN}=require("nats"),PN=BN.get(t_.CONFIG_PARAMS.CLUSTERING_ENABLED),vN=BN.get(t_.CONFIG_PARAMS.CLUSTERING_NODENAME);qN.exports={clusterStatus:$Y,buildNodeStatus:HN};async function $Y(){let e={node_name:vN,is_enabled:PN,connections:[]};if(!PN)return e;let t=await nd.getAllNodeRecords();if(VY.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(HN(t[s],e.connections));return await Promise.allSettled(r),e}a($Y,"clusterStatus");async function HN(e,t){let r=e.name,s=new kY(t_.OPERATIONS_ENUM.CLUSTER_STATUS,vN,void 0,await nd.getSystemInfo()),n,i,o=Ms.CLUSTER_STATUS_STATUSES.OPEN;try{let _=Date.now();n=await xY.request(Ms.REQUEST_SUBJECT(r),s),i=Date.now()-_,n.status===Ms.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Ms.CLUSTER_STATUS_STATUSES.CLOSED,sd.error(`Error getting node status from ${r} `,n))}catch(_){sd.warn(`Error getting node status from ${r}`,_),_.code===DN.NoResponders?o=Ms.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:_.code===DN.Timeout?o=Ms.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Ms.CLUSTER_STATUS_STATUSES.CLOSED}let c=new YY(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let _={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==t_.PRE_4_0_0_VERSION&&await nd.upsertNodeRecord(_)}catch(_){sd.error("Cluster status encountered an error updating system info for node:",r,_)}t.push(c)}a(HN,"buildNodeStatus");function YY(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(YY,"NodeStatusObject")});var od=f((x5,GN)=>{"use strict";var{handleHDBError:KY,hdb_errors:WY}=L(),{HTTP_STATUS_CODES:QY}=WY,JY=be(),XY=Rr(),ad=b(),r_=require("joi"),ZY=te(),zY=2e3,jY=r_.object({timeout:r_.number().min(1),connected_nodes:r_.boolean(),routes:r_.boolean()});GN.exports=eK;async function eK(e){XY.checkClusteringEnabled();let t=ZY.validateBySchema(e,jY);if(t)throw KY(t,t.message,QY.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||ad.autoCastBoolean(s),o=n===void 0||ad.autoCastBoolean(n),c={nodes:[]},_=await JY.getServerList(r??zY),u={};if(i)for(let l=0,E=_.length;l<E;l++){let d=_[l].statsz;d&&(u[_[l].server.name]=d.routes)}for(let l=0,E=_.length;l<E;l++){if(_[l].statsz)continue;let d=_[l].server,h=_[l].data;if(d.name.endsWith("-hub")){let T={name:d.name.slice(0,-4),response_time:_[l].response_time};i&&(T.connected_nodes=u[d.name]?u[d.name].map(R=>R.name.slice(0,-4)):[]),o&&(T.routes=h.cluster?.urls?h.cluster?.urls.map(R=>({host:R.split(":")[0],port:ad.autoCast(R.split(":")[1])})):[]),c.nodes.push(T)}}return c}a(eK,"clusterNetwork")});var kN=f((k5,VN)=>{"use strict";var cd=require("joi"),FN=te(),{route_constraints:xN}=Lu();VN.exports={setRoutesValidator:tK,deleteRoutesValidator:rK};function tK(e){let t=cd.object({server:cd.valid("hub","leaf").required(),routes:xN.required()});return FN.validateBySchema(e,t)}a(tK,"setRoutesValidator");function rK(e){let t=cd.object({routes:xN.required()});return FN.validateBySchema(e,t)}a(rK,"deleteRoutesValidator")});var ud=f((Y5,WN)=>{"use strict";var Ds=lr(),_d=b(),s_=m(),$N=kN(),{handleHDBError:YN,hdb_errors:sK}=L(),{HTTP_STATUS_CODES:KN}=sK,nK="cluster routes successfully set",iK="cluster routes successfully deleted";WN.exports={setRoutes:aK,getRoutes:oK,deleteRoutes:cK};function aK(e){let t=$N.setRoutesValidator(e);if(t)throw YN(t,t.message,KN.BAD_REQUEST,void 0,void 0,!0);let r=Ds.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,_=e.routes.length;c<_;c++){let u=e.routes[c];u.port=_d.autoCast(u.port);let l=s.some(d=>d.host===u.host&&d.port===u.port),E=n.some(d=>d.host===u.host&&d.port===u.port);l||E?i.push(u):(s.push(u),o.push(u))}return e.server==="hub"?Ds.updateConfigValue(s_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Ds.updateConfigValue(s_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:nK,set:o,skipped:i}}a(aK,"setRoutes");function oK(){let e=Ds.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(oK,"getRoutes");function cK(e){let t=$N.deleteRoutesValidator(e);if(t)throw YN(t,t.message,KN.BAD_REQUEST,void 0,void 0,!0);let r=Ds.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,_=!1;for(let u=0,l=e.routes.length;u<l;u++){let E=e.routes[u],d=!1;for(let h=0,T=s.length;h<T;h++){let R=s[h];if(E.host===R.host&&E.port===R.port){s.splice(h,1),d=!0,c=!0,i.push(E);break}}if(!d){let h=!0;for(let T=0,R=n.length;T<R;T++){let g=n[T];if(E.host===g.host&&E.port===g.port){n.splice(T,1),_=!0,h=!1,i.push(E);break}}h&&o.push(E)}}return c&&(s=_d.isEmptyOrZeroLength(s)?null:s,Ds.updateConfigValue(s_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),_&&(n=_d.isEmptyOrZeroLength(n)?null:n,Ds.updateConfigValue(s_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:iK,deleted:i,skipped:o}}a(cK,"deleteRoutes")});var JN=f((W5,QN)=>{"use strict";var Ji=require("alasql"),Ps=require("recursive-iterator"),Ft=I(),_K=b(),Xi=m(),n_=class{constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,lK(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>Xi.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!Xi.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Xi.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=uK(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let _=this.affected_attributes.get(i).get(o).filter(u=>!Xi.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let l=new Ji.yy.Column({columnid:u});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),_.includes(u)||_.push(u)}),this.affected_attributes.get(i).set(o,_)}}),this.ast}};a(n_,"sql_statement_bucket");function uK(e){return e.filter(t=>t[Xi.PERMS_CRUD_ENUM.READ])}a(uK,"filterReadRestrictedAttrs");function lK(e,t,r,s,n){EK(e,t,r,s,n)}a(lK,"interpretAST");function Zi(e,t,r,s,n){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(Zi,"addSchemaTableToMap");function EK(e,t,r,s,n){if(!e){Ft.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Ji.yy.Insert?SK(e,t,r):e instanceof Ji.yy.Select?dK(e,t,r,s,n):e instanceof Ji.yy.Update?hK(e,t,r):e instanceof Ji.yy.Delete?fK(e,t,r):Ft.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(EK,"getRecordAttributesAST");function dK(e,t,r,s,n){if(!e){Ft.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(_K.isEmptyOrZeroLength(i)){Ft.error("No schema specified");return}e.from.forEach(c=>{Zi(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Zi(c.table,t,r,s,n)});let o=new Ps(e.columns);for(let{node:c}of o)if(c&&c.columnid){let _=c.tableid,u=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(u).has(_))if(r.has(_))_=r.get(_);else{Ft.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(c.columnid)<0&&t.get(u).get(_).push(c.columnid)}if(e.where){let c=new Ps(e.where),_=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let l=u.tableid?u.tableid:_;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Ft.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(u.columnid)<0&&t.get(i).get(l).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let _=new Ps(c.on);for(let{node:u}of _)if(u&&u.columnid){let l=u.tableid,E=n.get(l);if(!t.get(E).has(l))if(r.has(l))l=r.get(l);else{Ft.info(`table specified as ${l} not found.`);continue}t.get(E).get(l).indexOf(u.columnid)<0&&t.get(E).get(l).push(u.columnid)}}),e.order){let c=new Ps(e.order);for(let{node:_}of c)if(_&&_.columnid){let u=_.tableid,l=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(l).has(u))if(r.has(u))u=r.get(u);else{Ft.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(_.columnid)<0&&t.get(l).get(u).push(_.columnid)}}}a(dK,"getSelectAttributes");function hK(e,t,r){if(!e){Ft.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Ps(e.columns),n=e.table.databaseid;Zi(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&ld(e.table.tableid,n,i.columnid,t,r)}a(hK,"getUpdateAttributes");function fK(e,t,r){if(!e){Ft.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Ps(e.where),n=e.table.databaseid;Zi(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&ld(e.table.tableid,n,i.columnid,t,r)}a(fK,"getDeleteAttributes");function SK(e,t,r){if(!e){Ft.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Ps(e.columns),n=e.into.databaseid;Zi(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&ld(e.into.tableid,n,i.columnid,t,r)}a(SK,"getInsertAttributes");function ld(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(ld,"pushAttribute");QN.exports=n_});var zN=f((J5,ZN)=>{var TK=require("os"),XN=B();ZN.exports={checkPermission:mK};function mK(){if(TK.userInfo().username!==XN.get("install_user"))throw new Error(`Error: Must execute as ${XN.get("install_user")}`)}a(mK,"checkPermission")});var dd=f((Z5,sO)=>{var a_=tn(),jN=require("chalk"),er=I(),eO=zN(),tO=require("prompt"),{promisify:RK}=require("util"),i_=m(),AK=require("fs-extra"),pK=require("path"),gK=b(),NK=WE(),rO=B();rO.initSync();var OK=require("moment"),IK=RK(tO.get),bK=pK.join(rO.getHdbBasePath(),i_.LICENSE_KEY_DIR_NAME,i_.LICENSE_FILE_NAME,i_.LICENSE_FILE_NAME);sO.exports={getFingerprint:CK,setLicense:wK,parseLicense:Ed,register:LK,getRegistrationInfo:UK};async function wK(e){if(e&&e.key&&e.company){try{er.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await Ed(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw er.error(r),er.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(wK,"setLicense");async function CK(){try{eO.checkPermission()}catch(t){throw er.error(t),new Error("You do not have permission to generate a fingerprint.")}let e={};try{e=await a_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw er.error(r),er.error(t),new Error(r)}return e}a(CK,"getFingerprint");async function Ed(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");console.log("Validating license input...");let r=a_.validateLicense(e,t);if(console.log("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(console.log("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(console.log(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{er.info("writing license to disk"),await AK.writeFile(bK,JSON.stringify({license_key:e,company:t}))}catch(s){throw er.error("Failed to write License"),s}return"Registration successful."}a(Ed,"parseLicense");async function LK(){let e=await yK();return Ed(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(LK,"register");async function yK(){try{eO.checkPermission()}catch(s){return console.error(s.message)}let e=await a_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:jN.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:jN.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{tO.start()}catch(s){er.error(s)}let r;try{r=await IK(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(yK,"promptForRegistration");async function UK(){let e={registered:!1,version:null,storage_type:null,ram_allocation:null,license_expiration_date:null},t;try{t=await a_.getLicense()}catch(r){throw er.error(`There was an error when searching licenses due to: ${r.message}`),r}if(gK.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=NK.version(),e.storage_type=i_.STORAGE_TYPES_ENUM.LMDB,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=OK.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(UK,"getRegistrationInfo")});var iO=f((j5,nO)=>{"use strict";var MK=oe(),o_=class{constructor(t,r,s,n,i,o,c,_,u,l,E,d,h,T){this.port=t,o===null&&(o=void 0),this.server_name=r+MK.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:c,verify:_},this.leafnodes={port:u,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:E,routes:d,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:_}},this.accounts={SYS:{users:h},HDB:{users:T}},this.system_account="SYS"}};a(o_,"HubConfigObject");nO.exports=o_});var cO=f((tj,oO)=>{"use strict";var aO=oe(),c_=class{constructor(t,r,s,n,i,o,c,_,u,l,E){this.port=t,E===null&&(E=void 0),this.server_name=r+aO.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+aO.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:l,ca_file:E,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:E,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:E,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:_,jetstream:"enabled"}},this.system_account="SYS"}};a(c_,"LeafConfigObject");oO.exports=c_});var uO=f((sj,_O)=>{"use strict";var __=class{constructor(t,r){this.user=t,this.password=r}};a(__,"HdbUserObject");_O.exports=__});var EO=f((ij,lO)=>{"use strict";var DK=oe(),u_=class{constructor(t,r){this.user=t+DK.SERVER_SUFFIX.ADMIN,this.password=r}};a(u_,"SysUserObject");lO.exports=u_});var Sd=f((oj,fO)=>{"use strict";var zi=require("path"),h_=require("fs-extra"),PK=iO(),BK=cO(),vK=uO(),HK=EO(),hd=Vr(),wn=b(),ze=lr(),d_=m(),l_=oe(),{CONFIG_PARAMS:de}=d_,ea=I(),f_=B(),dO=xr(),fd=be(),ji="clustering",qK=1e4,hO=5;fO.exports={generateNatsConfig:GK,removeNatsConfig:FK};async function GK(e=!1,t=void 0){f_.initSync();let r=f_.get(de.ROOTPATH),s=zi.join(r,ji,l_.PID_FILES.HUB),n=zi.join(r,ji,l_.PID_FILES.LEAF),i=ze.getConfigFromFile(de.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=zi.join(r,ji,l_.NATS_CONFIG_FILES.HUB_SERVER),c=zi.join(r,ji,l_.NATS_CONFIG_FILES.LEAF_SERVER),_=ze.getConfigFromFile(de.CLUSTERING_TLS_CERTIFICATE),u=ze.getConfigFromFile(de.CLUSTERING_TLS_PRIVATEKEY),l=ze.getConfigFromFile(de.CLUSTERING_TLS_CERT_AUTH),E=ze.getConfigFromFile(de.CLUSTERING_TLS_INSECURE),d=ze.getConfigFromFile(de.CLUSTERING_TLS_VERIFY),h=ze.getConfigFromFile(de.CLUSTERING_NODENAME),T=ze.getConfigFromFile(de.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await fd.checkNATSServerInstalled()||S_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let R=await hd.listUsers(),g=ze.getConfigFromFile(de.CLUSTERING_USER),H=await hd.getClusterUser();(wn.isEmpty(H)||H.active!==!0)&&S_(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await E_(de.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await E_(de.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await E_(de.CLUSTERING_HUBSERVER_NETWORK_PORT),await E_(de.CLUSTERING_LEAFSERVER_NETWORK_PORT));let x=[],q=[];for(let[as,wr]of R.entries())wr.role.role===d_.ROLE_TYPES_ENUM.CLUSTER_USER&&wr.active&&(x.push(new HK(wr.username,dO.decrypt(wr.hash))),q.push(new vK(wr.username,dO.decrypt(wr.hash))));let ye=[],{hub_routes:U}=ze.getClusteringRoutes();if(!wn.isEmptyOrZeroLength(U))for(let as of U)ye.push(`tls://${H.sys_name_encoded}:${H.uri_encoded_d_hash}@${as.host}:${as.port}`);let $=new PK(ze.getConfigFromFile(de.CLUSTERING_HUBSERVER_NETWORK_PORT),h,s,_,u,l,E,d,T,ze.getConfigFromFile(de.CLUSTERING_HUBSERVER_CLUSTER_NAME),ze.getConfigFromFile(de.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),ye,x,q);l==null&&(delete $.tls.ca_file,delete $.leafnodes.tls.ca_file),t=wn.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===d_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await h_.writeJson(o,$),ea.trace(`Hub server config written to ${o}`));let ue=`tls://${H.sys_name_encoded}:${H.uri_encoded_d_hash}@0.0.0.0:${T}`,ae=`tls://${H.uri_encoded_name}:${H.uri_encoded_d_hash}@0.0.0.0:${T}`,qn=new BK(ze.getConfigFromFile(de.CLUSTERING_LEAFSERVER_NETWORK_PORT),h,n,i,[ue],[ae],x,q,_,u,l,E);l==null&&delete qn.tls.ca_file,(t===void 0||t===d_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await h_.writeJson(c,qn),ea.trace(`Leaf server config written to ${c}`))}a(GK,"generateNatsConfig");async function E_(e){let t=f_.get(e);return wn.isEmpty(t)&&S_(`port undefined for '${e}'`),await wn.isPortTaken(t)&&S_(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(E_,"isPortAvailable");function S_(e){let t=`Error generating clustering config: ${e}`;ea.error(t),console.error(t),process.exit(1)}a(S_,"generateNatsConfigError");async function FK(e){let{port:t,config_file:r}=fd.getServerConfig(e),{username:s,decrypt_hash:n}=await hd.getClusterUser(),i=0,o=500;for(;i<hO;){try{let u=await fd.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){ea.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=hO)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 wn.async_set_timeout(o*i)}let c="0".repeat(qK),_=zi.join(f_.get(de.ROOTPATH),ji,r);await h_.writeFile(_,c),await h_.remove(_),ea.notify(e,"started.")}a(FK,"removeNatsConfig")});var pO=f((_j,AO)=>{"use strict";var ht=B(),xK=tn(),F=m(),ta=oe(),Ar=require("path"),{PACKAGE_ROOT:T_}=m(),SO=B(),Cn="/dev/null",VK=Ar.join(T_,"launchServiceScripts"),TO=Ar.join(T_,"utility/scripts"),kK=Ar.join(TO,F.HDB_RESTART_SCRIPT),mO=Ar.resolve(T_,"dependencies",`${process.platform}-${process.arch}`,ta.NATS_BINARY_NAME);function RO(){let t=xK.licenseSearch().ram_allocation||F.RAM_ALLOCATION_ENUM.DEFAULT,r=F.MEM_SETTING_KEY+t;return{name:F.PROCESS_DESCRIPTORS.HDB,script:F.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:{[F.PROCESS_NAME_ENV_PROP]:F.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0},node_args:r,cwd:T_}}a(RO,"generateMainServerConfig");var $K=9930;function YK(){ht.initSync(!0);let e=ht.get(F.CONFIG_PARAMS.ROOTPATH),t=Ar.join(e,"clustering",ta.NATS_CONFIG_FILES.HUB_SERVER),r=Ar.join(ht.get(F.HDB_SETTINGS_NAMES.LOG_PATH_KEY),F.LOG_NAMES.HDB),s=SO.get(F.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=ta.LOG_LEVEL_FLAGS[ht.get(F.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:F.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==$K?"-"+s:""),script:mO,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[F.PROCESS_NAME_ENV_PROP]:F.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return ht.get(F.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Cn,i.error_file=Cn),i}a(YK,"generateNatsHubServerConfig");var KK=9940;function WK(){ht.initSync(!0);let e=ht.get(F.CONFIG_PARAMS.ROOTPATH),t=Ar.join(e,"clustering",ta.NATS_CONFIG_FILES.LEAF_SERVER),r=Ar.join(ht.get(F.HDB_SETTINGS_NAMES.LOG_PATH_KEY),F.LOG_NAMES.HDB),s=SO.get(F.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=ta.LOG_LEVEL_FLAGS[ht.get(F.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:F.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==KK?"-"+s:""),script:mO,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[F.PROCESS_NAME_ENV_PROP]:F.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return ht.get(F.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Cn,i.error_file=Cn),i}a(WK,"generateNatsLeafServerConfig");function QK(){ht.initSync();let e=Ar.join(ht.get(F.CONFIG_PARAMS.LOGGING_ROOT),F.LOG_NAMES.HDB),t={name:F.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:F.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[F.PROCESS_NAME_ENV_PROP]:F.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:VK,autorestart:!1};return ht.get(F.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Cn,t.error_file=Cn),t}a(QK,"generateClusteringUpgradeV4ServiceConfig");function JK(){return{...{name:F.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[F.PROCESS_NAME_ENV_PROP]:F.PROCESS_DESCRIPTORS.RESTART_HDB},instances:1,autorestart:!1,cwd:TO},script:kK}}a(JK,"generateRestart");function XK(){return{apps:[RO()]}}a(XK,"generateAllServiceConfigs");AO.exports={generateAllServiceConfigs:XK,generateMainServerConfig:RO,generateRestart:JK,generateNatsHubServerConfig:YK,generateNatsLeafServerConfig:WK,generateClusteringUpgradeV4ServiceConfig:QK}});var vO=f((Tj,BO)=>{"use strict";var Y=m(),NO=b(),ra=Sd(),m_=be(),tr=oe(),K=require("pm2"),es=pO(),R_=B(),pr=I(),ZK=Rr(),{startWorker:Td,onMessageFromWorkers:zK}=hs(),lj=bn(),jK=require("util"),OO=require("child_process"),{execFile:eW}=OO,Ej=jK.promisify(OO.exec),dj=require("systeminformation");BO.exports={enterPM2Mode:tW,start:Bs,stop:md,reload:IO,restart:bO,list:Rd,describe:Ad,connect:gr,kill:aW,startAllServices:oW,startService:pd,getUniqueServicesList:CO,restartAllServices:cW,isServiceRegistered:LO,reloadStopStart:yO,restartHdb:wO,deleteProcess:nW,startClusteringProcesses:DO,startClusteringThreads:PO,isHdbRestartRunning:iW,isClusteringRunning:uW,stopClustering:_W,reloadClustering:lW};var{PACKAGE_ROOT:hj}=m(),fj=m(),{loggerWithTag:Sj}=pr,sa=!1;zK(e=>{e.type==="restart"&&R_.initSync(!0)});function tW(){sa=!0}a(tW,"enterPM2Mode");function gr(){return new Promise((e,t)=>{K.connect((r,s)=>{pr.setupConsoleLogging(),r&&t(r),e(s)})})}a(gr,"connect");var je,rW=10,gO;function Bs(e){if(sa)return sW(e);let t=eW(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=je.indexOf(t);i>-1&&je.splice(i,1),!gO&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<rW&&Bs(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=R_.get(Y.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,_=0,u;for(;c=o.exec(n);){if(c.index&&tr.LOG_LEVEL_HIERARCHY[i]>=tr.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===tr.LOG_LEVELS.ERR||u===tr.LOG_LEVELS.WRN?pr.OUTPUTS.STDERR:pr.OUTPUTS.STDOUT;pr.logCustomLevel(u||"info",d,r,n.slice(_,c.index).trim())}let[l,E]=c;_=c.index+l.length,u=tr.LOG_LEVELS[E]}if(tr.LOG_LEVEL_HIERARCHY[i]>=tr.LOG_LEVEL_HIERARCHY[u||"info"]){let l=u===tr.LOG_LEVELS.ERR||u===tr.LOG_LEVELS.WRN?pr.OUTPUTS.STDERR:pr.OUTPUTS.STDOUT;pr.logCustomLevel(u||"info",l,r,n.slice(_).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!je){je=[];let n=a(()=>{gO=!0,je&&(je.map(i=>i.kill()),process.exit(0))},"kill_children");process.on("exit",n),process.on("SIGINT",n),process.on("SIGQUIT",n),process.on("SIGTERM",n)}je.push(t)}a(Bs,"start");function sW(e){return new Promise(async(t,r)=>{try{await gr()}catch(s){r(s)}K.start(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(sW,"startWithPM2");function md(e){if(!sa){for(let t of je||[])t.name===e&&(je.splice(je.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await gr()}catch(s){r(s)}K.stop(e,async(s,n)=>{s&&(K.disconnect(),r(s)),K.delete(e,(i,o)=>{i&&(K.disconnect(),r(s)),K.disconnect(),t(o)})})})}a(md,"stop");function IO(e){return new Promise(async(t,r)=>{try{await gr()}catch(s){r(s)}K.reload(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(IO,"reload");function bO(e){if(!sa)for(let t of je||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await gr()}catch(s){r(s)}K.restart(e,(s,n)=>{K.disconnect(),t(n)})})}a(bO,"restart");function nW(e){return new Promise(async(t,r)=>{try{await gr()}catch(s){r(s)}K.delete(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(nW,"deleteProcess");async function wO(){await Bs(es.generateRestart())}a(wO,"restartHdb");async function iW(){let e=await Rd();for(let t in e)if(e[t].name===Y.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(iW,"isHdbRestartRunning");function Rd(){return new Promise(async(e,t)=>{try{await gr()}catch(r){t(r)}K.list((r,s)=>{r&&(K.disconnect(),t(r)),K.disconnect(),e(s)})})}a(Rd,"list");function Ad(e){return new Promise(async(t,r)=>{try{await gr()}catch(s){r(s)}K.describe(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(Ad,"describe");function aW(){if(!sa){for(let e of je||[])e.kill();je=[];return}return new Promise(async(e,t)=>{try{await gr()}catch(r){t(r)}K.killDaemon((r,s)=>{r&&(K.disconnect(),t(r)),K.disconnect(),e(s)})})}a(aW,"kill");async function oW(){try{await DO(),await PO(),await Bs(es.generateAllServiceConfigs())}catch(e){throw K.disconnect(),e}}a(oW,"startAllServices");async function pd(e){try{let t;switch(e=e.toLowerCase(),e){case Y.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=es.generateMainServerConfig();break;case Y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=es.generateNatsIngestServiceConfig();break;case Y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=es.generateNatsReplyServiceConfig();break;case Y.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=es.generateNatsHubServerConfig(),await Bs(t),await ra.removeNatsConfig(e);return;case Y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=es.generateNatsLeafServerConfig(),await Bs(t),await ra.removeNatsConfig(e);return;case Y.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=es.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Bs(t)}catch(t){throw K.disconnect(),t}}a(pd,"startService");async function CO(){try{let e=await Rd(),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 K.disconnect(),e}}a(CO,"getUniqueServicesList");async function cW(e=[]){try{let t=!1,r=await CO();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Y.PROCESS_DESCRIPTORS.HDB?t=!0:await bO(o))}t&&await yO(Y.PROCESS_DESCRIPTORS.HDB)}catch(t){throw K.disconnect(),t}}a(cW,"restartAllServices");async function LO(e){return je?.find(t=>t.name===e)?!0:!NO.isEmptyOrZeroLength(await Ad(e))}a(LO,"isServiceRegistered");async function yO(e){let t=e===Y.PROCESS_DESCRIPTORS.HDB?R_.get(Y.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):R_.get(Y.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await Ad(e),s=NO.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await md(e),await pd(e)):e===Y.PROCESS_DESCRIPTORS.HDB?await wO():await IO(e)}a(yO,"reloadStopStart");var UO,MO;async function DO(){for(let e in Y.CLUSTERING_PROCESSES){let t=Y.CLUSTERING_PROCESSES[e];await pd(t)}}a(DO,"startClusteringProcesses");async function PO(){UO=Td(Y.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,{name:Y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE}),MO=Td(Y.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await m_.createWorkQueueStream(tr.WORK_QUEUE_CONSUMER_NAMES),await m_.updateLocalStreams();let e=await ZK.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Y.PRE_4_0_0_VERSION){pr.info("Starting clustering upgrade 4.0.0 process"),Td(Y.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(PO,"startClusteringThreads");async function _W(){for(let e in Y.CLUSTERING_PROCESSES)if(e===Y.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)await UO.terminate();else if(e===Y.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await MO.terminate();else{let t=Y.CLUSTERING_PROCESSES[e];await md(t)}}a(_W,"stopClustering");async function uW(){for(let e in Y.CLUSTERING_PROCESSES){let t=Y.CLUSTERING_PROCESSES[e];if(await LO(t)===!1)return!1}return!0}a(uW,"isClusteringRunning");async function lW(){await ra.generateNatsConfig(!0),await m_.reloadNATSHub(),await m_.reloadNATSLeaf(),await ra.removeNatsConfig(Y.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ra.removeNatsConfig(Y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(lW,"reloadClustering")});var Cd=f((Rj,VO)=>{"use strict";var EW=require("minimist"),{isMainThread:Od,parentPort:GO}=require("worker_threads"),se=m(),{PROCESS_DESCRIPTORS_VALIDATE:na}=se,rr=I(),Id=b(),A_=Sd(),Ln=be(),gd=oe(),FO=lr(),sr=vO(),HO=bn(),dW=fu(),{restartWorkers:p_,onMessageFromWorkers:hW}=hs(),{handleHDBError:fW,hdb_errors:SW}=L(),{HTTP_STATUS_CODES:TW}=SW,g_=B();g_.initSync();var ia=`Restarting HarperDB. This may take up to ${se.RESTART_TIMEOUT_MS/1e3} seconds.`,mW="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",qO="Clustering is not enabled so cannot be restarted",RW="Invalid service",vs,xt;VO.exports={restart:xO,restartService:bd};Od&&hW(e=>{e.type===se.ITC_EVENT_TYPES.RESTART&&(e.workerType?bd({service:e.workerType}):xO({operation:"restart"}))});async function xO(e){xt=Object.keys(e).length===0,vs=await sr.isServiceRegistered(se.HDB_PROC_DESCRIPTOR);let t=EW(process.argv);if(t.service){await bd(t);return}if(xt&&!vs){console.error(mW);return}if(xt&&console.log(ia),vs){sr.enterPM2Mode(),rr.notify(ia);let r=dW(Object.keys(se.CONFIG_PARAM_MAP),!0);return Id.isEmptyOrZeroLength(Object.keys(r))||FO.updateConfigValue(void 0,void 0,r,!0,!0),pW(),ia}return Od?(rr.notify(ia),await wd(),setTimeout(()=>{p_()},50)):GO.postMessage({type:se.ITC_EVENT_TYPES.RESTART}),ia}a(xO,"restart");async function bd(e){let{service:t}=e;if(se.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw fW(new Error,RW,TW.BAD_REQUEST,void 0,void 0,!0);if(vs=await sr.isServiceRegistered(se.HDB_PROC_DESCRIPTOR),!Od)return GO.postMessage({type:se.ITC_EVENT_TYPES.RESTART,workerType:t}),`Restarting ${t}`;let r;switch(t){case na.clustering:if(!g_.get(se.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=qO;break}xt&&console.log("Restarting clustering"),rr.notify("Restarting clustering"),await wd();break;case na.clustering_config:case na["clustering config"]:if(!g_.get(se.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=qO;break}xt&&console.log("Restarting clustering_config"),rr.notify("Restarting clustering_config"),await sr.reloadClustering();break;case"custom_functions":case"custom functions":case na.harperdb:case na.http_workers:if(xt&&!vs){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}xt&&console.log("Restarting http_workers"),rr.notify("Restarting http_workers"),vs?await sr.restart(se.HDB_PROC_DESCRIPTOR):setTimeout(()=>{p_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(rr.error(r),xt&&console.error(r),r):`Restarting ${t}`}a(bd,"restartService");async function AW(){await Ln.publishToStream(`${gd.SUBJECT_PREFIXES.TXN}.${gd.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,gd.WORK_QUEUE_CONSUMER_NAMES.stream_name,Ln.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(AW,"postDummyNatsMsg");async function pW(){await wd(),await sr.restart(se.HDB_PROC_DESCRIPTOR),await Id.async_set_timeout(2e3),g_.get(se.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await Nd(),xt&&(await Ln.closeConnection(),process.exit(0))}a(pW,"restartPM2Mode");async function wd(){if(!FO.getConfigFromFile(se.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await HO.getHDBProcessInfo()).clustering.length===0)rr.trace("Clustering not running, restart will start clustering services"),await A_.generateNatsConfig(!0),await sr.startClusteringProcesses(),await sr.startClusteringThreads(),await Nd(),xt&&await Ln.closeConnection();else{await AW(),await A_.generateNatsConfig(!0),vs?(rr.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await sr.restart(se.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await sr.restart(se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await HO.getHDBProcessInfo()).clustering.forEach(n=>{rr.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await Id.async_set_timeout(3e3),await Nd(),await Ln.updateLocalStreams(),xt&&await Ln.closeConnection(),rr.trace("Restart clustering restarting ingest and reply service threads");let t=p_(se.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=p_(se.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(wd,"restartClustering");async function Nd(){await A_.removeNatsConfig(se.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await A_.removeNatsConfig(se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(Nd,"removeNatsConfig")});var jO=f((gj,zO)=>{"use strict";var pj=require("lodash"),qe=m(),{handleHDBError:kO,hdb_errors:gW}=L(),{HDB_ERROR_MSGS:NW,HTTP_STATUS_CODES:OW}=gW,Ld=I();zO.exports={getRolePermissions:bW};var Hs=Object.create(null),IW=a(e=>({key:e,perms:{}}),"perms_template_obj"),WO=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),QO=a((e=!1,t=!1,r=!1,s=!1)=>({[qe.PERMS_CRUD_ENUM.READ]:e,[qe.PERMS_CRUD_ENUM.INSERT]:t,[qe.PERMS_CRUD_ENUM.UPDATE]:r,[qe.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),yd=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...QO(t,r,s,n)}),"table_perms_template"),$O=a((e,t=QO())=>({attribute_name:e,describe:ZO(t),[aa]:t[aa],[Ud]:t[Ud],[Md]:t[Md]}),"attr_perms_template"),YO=a((e,t=!1)=>({attribute_name:e,describe:t,[aa]:t}),"timestamp_attr_perms_template"),{READ:aa,INSERT:Ud,UPDATE:Md}=qe.PERMS_CRUD_ENUM,JO=Object.values(qe.PERMS_CRUD_ENUM),XO=[aa,Ud,Md];function bW(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[qe.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(Hs[t]&&Hs[t].key===s)return Hs[t].perms;let n=wW(e,r);return Hs[t]?Hs[t].key=s:Hs[t]=IW(s),Hs[t].perms=n,n}catch(r){if(!e[qe.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[qe.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<qe.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw Ld.error(s),Ld.debug(r),kO(new Error,NW.OUTDATED_PERMS_TRANSLATION_ERROR,OW.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
8
|
-
${r.stack}`;throw Ld.error(s),kO(new Error)}}}a(bW,"getRolePermissions");function wW(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[qe.SYSTEM_SCHEMA_NAME]=s[qe.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=CW(t[i]);return}r[i]=WO(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],_=t[i][o],u=LW(c,_);r[i].describe||JO.forEach(l=>{u[l]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=yd()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=yd()})}),r}a(wW,"translateRolePermissions");function CW(e){let t=WO(!0);return Object.keys(e).forEach(r=>{t.tables[r]=yd(!0,!0,!0,!0,!0)}),t}a(CW,"createStructureUserPermissions");function LW(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((u,l)=>{let{attribute_name:E}=l,d=l;return qe.TIME_STAMP_NAMES.includes(E)&&(d=YO(E,l[aa])),u[E]=d,u},{}),o=t[qe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_HASH_ATTRIBUTE_KEY],c=!!i[o],_=$O(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let l=i[u];l.describe=ZO(l),n.attribute_permissions.push(l),c||yW(l,_)}else if(u!==o){let l;qe.TIME_STAMP_NAMES.includes(u)?l=YO(u):l=$O(u),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(_),n.describe=KO(n),n}else return e.describe=KO(e),e}a(LW,"getTableAttrPerms");function KO(e){return JO.filter(t=>e[t]).length>0}a(KO,"getSchemaTableDescribePerm");function ZO(e){return XO.filter(t=>e[t]).length>0}a(ZO,"getAttributeDescribePerm");function yW(e,t){XO.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(yW,"checkForHashPerms")});var aI=f((Oj,iI)=>{"use strict";var he=require("joi"),eI=require("fs-extra"),tI=require("path"),yn=te(),rI=B(),sI=m(),nI=I(),{hdb_errors:UW}=L(),{HDB_ERROR_MSGS:et}=UW,ts=/^[a-zA-Z0-9-_]+$/;iI.exports={getDropCustomFunctionValidator:DW,setCustomFunctionValidator:PW,addCustomFunctionProjectValidator:BW,dropCustomFunctionProjectValidator:vW,packageCustomFunctionProjectValidator:HW,deployCustomFunctionProjectValidator:qW};function oa(e,t,r){try{let s=rI.get(sI.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=tI.join(s,t);return eI.existsSync(n)?e?t:r.message(et.PROJECT_EXISTS):e?r.message(et.NO_PROJECT):t}catch(s){return nI.error(s),r.message(et.VALIDATION_ERR)}}a(oa,"checkProjectExists");function MW(e,t,r,s){try{let n=rI.get(sI.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=tI.join(n,e,t,r+".js");return eI.existsSync(i)?r:s.message(et.NO_FILE)}catch(n){return nI.error(n),s.message(et.VALIDATION_ERR)}}a(MW,"checkFileExists");function DW(e){let t=he.object({project:he.string().pattern(ts).custom(oa.bind(null,!0)).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().pattern(ts).custom(MW.bind(null,e.project,e.type)).required().messages({"string.pattern.base":et.BAD_FILE_NAME})});return yn.validateBySchema(e,t)}a(DW,"getDropCustomFunctionValidator");function PW(e){let t=he.object({project:he.string().pattern(ts).custom(oa.bind(null,!0)).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().pattern(ts).required().messages({"string.pattern.base":et.BAD_FILE_NAME}),function_content:he.string().required()});return yn.validateBySchema(e,t)}a(PW,"setCustomFunctionValidator");function BW(e){let t=he.object({project:he.string().pattern(ts).custom(oa.bind(null,!1)).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME})});return yn.validateBySchema(e,t)}a(BW,"addCustomFunctionProjectValidator");function vW(e){let t=he.object({project:he.string().pattern(ts).custom(oa.bind(null,!0)).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME})});return yn.validateBySchema(e,t)}a(vW,"dropCustomFunctionProjectValidator");function HW(e){let t=he.object({project:he.string().pattern(ts).custom(oa.bind(null,!0)).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME}),skip_node_modules:he.boolean()});return yn.validateBySchema(e,t)}a(HW,"packageCustomFunctionProjectValidator");function qW(e){let t=he.object({project:he.string().pattern(ts).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME}),payload:he.string().required().messages({"string.pattern.base":et.BAD_PACKAGE})});return yn.validateBySchema(e,t)}a(qW,"deployCustomFunctionProjectValidator")});var Hd=f((bj,_I)=>{"use strict";var we=require("fs-extra"),Dd=require("fast-glob"),ee=require("path"),oI=require("tar-fs"),cI=require("uuid").v4,Pd=require("normalize-path"),qs=aI(),ge=I(),ft=m(),St=B(),{PACKAGE_ROOT:GW}=m(),{handleHDBError:Ge,hdb_errors:FW}=L(),{HDB_ERROR_MSGS:rs,HTTP_STATUS_CODES:Fe}=FW,xW=ee.join(GW,"custom_function_template"),Bd=ee.join(St.get(ft.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function vd(){let e=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw Ge(new Error,rs.NOT_ENABLED,Fe.BAD_REQUEST,void 0,void 0,!0)}a(vd,"isCFEnabled");function VW(){ge.trace("getting custom api status");let e={};try{e={is_enabled:St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw Ge(new Error,rs.FUNCTION_STATUS,Fe.INTERNAL_SERVER_ERROR,ge.ERR,t)}return e}a(VW,"customFunctionsStatus");function kW(){ge.trace("getting custom api endpoints");let e={},t=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{Dd.sync(Pd(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:Dd.sync(Pd(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:Dd.sync(Pd(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Ge(new Error,rs.GET_FUNCTIONS,Fe.INTERNAL_SERVER_ERROR,ge.ERR,r)}return e}a(kW,"getCustomFunctions");function $W(e){e.project&&(e.project=ee.parse(e.project).name),e.file&&(e.file=ee.parse(e.file).name);let t=qs.getDropCustomFunctionValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("getting custom api endpoint file content");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=ee.join(r,s,n,i+".js");try{return we.readFileSync(o,{encoding:"utf8"})}catch(c){throw Ge(new Error,rs.GET_FUNCTION,Fe.INTERNAL_SERVER_ERROR,ge.ERR,c)}}a($W,"getCustomFunction");function YW(e){vd(),e.project&&(e.project=ee.parse(e.project).name),e.file&&(e.file=ee.parse(e.file).name);let t=qs.setCustomFunctionValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("setting custom function file content");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return we.outputFileSync(ee.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Ge(new Error,rs.SET_FUNCTION,Fe.INTERNAL_SERVER_ERROR,ge.ERR,c)}}a(YW,"setCustomFunction");function KW(e){e.project&&(e.project=ee.parse(e.project).name),e.file&&(e.file=ee.parse(e.file).name);let t=qs.getDropCustomFunctionValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("dropping custom function file");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return we.unlinkSync(ee.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Ge(new Error,rs.DROP_FUNCTION,Fe.INTERNAL_SERVER_ERROR,ge.ERR,o)}}a(KW,"dropCustomFunction");function WW(e){vd(),e.project&&(e.project=ee.parse(e.project).name);let t=qs.addCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("adding custom function project");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=ee.join(r,s);return we.mkdirSync(n,{recursive:!0}),we.copySync(xW,n),`Successfully created custom function project: ${s}`}catch(n){throw Ge(new Error,rs.ADD_FUNCTION,Fe.INTERNAL_SERVER_ERROR,ge.ERR,n)}}a(WW,"addCustomFunctionProject");function QW(e){e.project&&(e.project=ee.parse(e.project).name);let t=qs.dropCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("dropping custom function project");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=ee.join(r,s);return we.rmSync(n,{recursive:!0}),`Successfully deleted project: ${s}`}catch(n){throw Ge(new Error,rs.DROP_FUNCTION_PROJECT,Fe.INTERNAL_SERVER_ERROR,ge.ERR,n)}}a(QW,"dropCustomFunctionProject");async function JW(e){e.project&&(e.project=ee.parse(e.project).name);let t=qs.packageCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("packaging custom function project");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=ee.join(r,s),i=cI();if(!we.existsSync(n)){let l=`Unable to locate custom function project: ${s}`;throw ge.error(l),l}we.ensureDirSync(Bd);let c=ee.join(Bd,`${i}.tar`),_={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(_={ignore:l=>l.includes(ee.join(n,"node_modules"))}),oI.pack(n,_).pipe(we.createWriteStream(c)),await new Promise(l=>setTimeout(l,2e3));let u=we.readFileSync(c,{encoding:"base64"});return we.unlinkSync(c),{project:s,payload:u,file:c}}a(JW,"packageCustomFunctionProject");async function XW(e){vd(),e.project&&(e.project=ee.parse(e.project).name);let t=qs.deployCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("deploying custom function project");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n}=e,i=ee.join(r,s);await we.ensureDir(i);let o,c;do o=ee.join(Bd,cI()+".tar"),c=await we.pathExists(o);while(c);await we.outputFile(o,n,{encoding:"base64"});let _=we.createReadStream(o);return _.pipe(oI.extract(i)),await new Promise(u=>_.on("end",u)),await we.unlink(o),`Successfully deployed project: ${s}`}a(XW,"deployCustomFunctionProject");_I.exports={customFunctionsStatus:VW,getCustomFunctions:kW,getCustomFunction:$W,setCustomFunction:YW,dropCustomFunction:KW,addCustomFunctionProject:WW,dropCustomFunctionProject:QW,packageCustomFunctionProject:JW,deployCustomFunctionProject:XW}});var qd=f((Cj,lI)=>{"use strict";var nr=require("joi"),uI=te();lI.exports={readTransactionLogValidator:ZW,deleteTransactionLogsBeforeValidator:zW};function ZW(e){let t=nr.object({schema:nr.string().required(),table:nr.string().required(),from:nr.date().timestamp(),to:nr.date().timestamp(),limit:nr.number().min(1)});return uI.validateBySchema(e,t)}a(ZW,"readTransactionLogValidator");function zW(e){let t=nr.object({schema:nr.string().required(),table:nr.string().required(),timestamp:nr.date().timestamp().required()});return uI.validateBySchema(e,t)}a(zW,"deleteTransactionLogsBeforeValidator")});var O_=f((yj,SI)=>{"use strict";var Gd=m(),N_=be(),EI=b(),dI=B(),hI=xr(),{handleHDBError:Un,hdb_errors:jW}=L(),{HTTP_STATUS_CODES:Mn}=jW,{readTransactionLogValidator:eQ,deleteTransactionLogsBeforeValidator:tQ}=qd(),fI="This operation relies on clustering and cannot run with it disable.",rQ="Logs successfully deleted from transaction log.",sQ="All logs successfully deleted from transaction log.";SI.exports={readTransactionLog:nQ,deleteTransactionLogsBefore:iQ};async function*nQ(e){let t=eQ(e);if(t)throw Un(t,t.message,Mn.BAD_REQUEST,void 0,void 0,!0);if(!dI.get(Gd.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Un(new Error,fI,Mn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=EI.checkSchemaTableExist(r,s);if(n)throw Un(new Error,n,Mn.NOT_FOUND,void 0,void 0,!0);let i=hI.createNatsTableStreamName(r,s),o=await N_.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let _=Math.floor(c?.nats_timestamp/1e6);if(e.to&&_>e.to)break;let u={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:_,records:c?.entry?.records};c?.entry?.operation===Gd.OPERATIONS_ENUM.DELETE&&(u.hash_values=c?.entry?.hash_values),yield u}}a(nQ,"readTransactionLog");async function iQ(e){let t=tQ(e);if(t)throw Un(t,t.message,Mn.BAD_REQUEST,void 0,void 0,!0);if(!dI.get(Gd.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Un(new Error,fI,Mn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=EI.checkSchemaTableExist(r,s);if(i)throw Un(new Error,i,Mn.NOT_FOUND,void 0,void 0,!0);let o=hI.createNatsTableStreamName(r,s),{jsm:c}=await N_.getNATSReferences(),_=await N_.getStreamInfo(o),u=new Date(_.state.first_ts).getTime();if(n<=u)return`No transactions exist before: ${n}`;let l=rQ,E,d=new Date(_.state.last_ts).getTime();return n>d?(E=_.state.last_seq+1,l=sQ):E=(await N_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:E}),l}a(iQ,"deleteTransactionLogsBefore")});var xd=f((Mj,bI)=>{"use strict";var I_=require("joi"),b_=require("path"),TI=require("fs-extra"),{exec:aQ}=require("child_process"),oQ=require("util"),mI=oQ.promisify(aQ),cQ=m(),{handleHDBError:Dn,hdb_errors:_Q}=L(),{HTTP_STATUS_CODES:Pn}=_Q,RI=B(),uQ=te(),w_=I();RI.initSync();var Fd=RI.get(cQ.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),AI="npm install --omit=dev --json",lQ=`${AI} --dry-run`;bI.exports={installModules:EQ,auditModules:dQ};async function pI(e,t=void 0){let{stdout:r,stderr:s}=await mI(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
7
|
+
`,"")}a(Op,"runCommand");async function W0(){try{await U0.access(rE)}catch{return!1}let e=await Op(`${rE} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return M0.eq(t,Y0)}a(W0,"checkNATSServerInstalled");async function oE(e,t,r,s=!0,n="127.0.0.1"){return q0({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:pe.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:pe.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:pe.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}a(oE,"createConnection");async function Q0(){Gt&&(await Gt.drain(),Gt=void 0)}a(Q0,"closeConnection");async function Rc(){if(!Gt){let e=await mp.getClusterUser();if(bs(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);Gt=await oE(t,e.username,e.decrypt_hash)}return Gt}a(Rc,"getConnection");async function vi(){if(Mi)return Mi;bs(Gt)&&await Rc();let{domain:e}=Hi(Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(bs(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Mi=await Gt.jetstreamManager({domain:e}),Mi}a(vi,"getJetStreamManager");async function Ip(){if(Di)return Di;bs(Gt)&&await Rc();let{domain:e}=Hi(Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(bs(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Di=Gt.jetstream({domain:e}),Di}a(Ip,"getJetStream");async function dt(){let e=Gt||await Rc(),t=Mi||await vi(),r=Di||await Ip();return{connection:e,jsm:t,js:r}}a(dt,"getNATSReferences");async function J0(e){let t=pe.get(Q.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await mp.getClusterUser(),n=await oE(t,r,s),i=aE(),o=n.subscribe(i),c=[],_,u=(async()=>{for await(let l of o){let E=Np.decode(l.data);E.response_time=Date.now()-_,c.push(E)}})();return _=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await Tc.async_set_timeout(e),await o.drain(),await n.close(),await u,c}a(J0,"getServerList");async function cE(e,t){let{jsm:r}=await dt(),s=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Ap.File,retention:pp.Limits,subjects:t,discard:G0.Old,duplicate_window:Rp,max_msgs:n,max_bytes:i,max_age:s})}a(cE,"createLocalStream");async function bp(){let{jsm:e}=await dt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(bp,"listStreams");async function X0(e){let{jsm:t}=await dt();await t.streams.delete(e)}a(X0,"deleteLocalStream");async function Z0(e){let{connection:t}=await dt(),r=[],s=aE(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(Np.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(Z0,"listRemoteStreams");async function z0(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await dt(),i=sE(),o=[],c={ack_policy:iE.None,durable_name:i,deliver_subject:i,deliver_policy:Bi.All};t&&(c.deliver_policy=Bi.StartTime,c.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,c);let _={timeout:2e3};r&&(_.max=r);let u=await n.subscribe(i,_);for await(let l of u){let E=gp(l),d=nE(E.data),h={nats_timestamp:E.info.timestampNanos,nats_sequence:E.info.streamSequence,entry:d};E.headers&&(h.origin=E.headers.get(V.MSG_HEADERS.ORIGIN),h.nats_msg_id=E.headers.get(V.MSG_HEADERS.NATS_MSG_ID)),o.push(h),u.getPending()===1&&E.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),o}catch(_){if(await s.consumers.delete(e,i),_.code==="TIMEOUT")return o;throw _}}a(z0,"viewStream");async function*j0(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await dt(),i=sE(),o={ack_policy:iE.None,durable_name:i,deliver_subject:i,deliver_policy:Bi.All};t&&(o.deliver_policy=Bi.StartTime,o.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,o);let c={timeout:2e3};r&&(c.max=r);let _=await n.subscribe(i,c);for await(let u of _){let l=gp(u),E=nE(l.data);E[0]||(E=[E]);for(let d of E){let h={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};l.headers&&(h.origin=l.headers.get(V.MSG_HEADERS.ORIGIN),h.nats_msg_id=l.headers.get(V.MSG_HEADERS.NATS_MSG_ID)),yield h}_.getPending()===1&&l.info.pending===0&&_.stop()}await s.consumers.delete(e,i)}catch(c){if(await s.consumers.delete(e,i),c.code==="TIMEOUT")return[];throw c}}a(j0,"viewStreamIterator");async function ex(e,t,r,s){Wr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s);let n=!0;pe.get(Q.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)===!1&&r&&r.has(V.MSG_HEADERS.NATS_MSG_ID)&&(n=!1),r=wp(s,r);let{js:i}=await dt(),o=await qi(),c=`${e}.${o}`;try{Wr.trace(`publishToStream publishing to subject: ${c}, data:`,s),n&&await i.publish(c,tE(s),{headers:r})}catch(_){if(_.code&&_.code.toString()==="503")Wr.trace(`publishToStream creating stream: ${t}`),await cE(t,[c]),n&&await i.publish(c,tE(s),{headers:r});else throw _}}a(ex,"publishToStream");function wp(e,t){t===void 0&&(t=x0());let r=pe.get(Q.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(V.MSG_HEADERS.NATS_MSG_ID)){let s=Tc.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${sE()}`;t.append(V.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(V.MSG_HEADERS.ORIGIN)||t.append(V.MSG_HEADERS.ORIGIN,r),t}a(wp,"addNatsMsgHeader");function Hi(e){e=e.toLowerCase();let t=Pi.join(pe.get(Q.CONFIG_PARAMS.ROOTPATH),$0);if(e===Q.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return bs(eE)&&(eE={port:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.HUB,config_file:V.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Pi.join(t,V.PID_FILES.HUB),hdb_nats_path:t}),eE;if(e===Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return bs(jl)&&(jl={port:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,config_file:V.NATS_CONFIG_FILES.LEAF_SERVER,domain:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,pid_file_path:Pi.join(t,V.PID_FILES.LEAF),hdb_nats_path:t}),jl;Wr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Hi,"getServerConfig");async function tx(e){let{jsm:t}=await dt(),r=await qi();try{await t.streams.add({name:e.stream_name,storage:Ap.File,retention:pp.Workqueue,duplicate_window:Rp,subjects:[`${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:iE.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:Bi.All,max_ack_pending:1e4,deliver_group:e.deliver_group});else throw s}}a(tx,"createWorkQueueStream");async function Cp(e,t,r){let{jsm:s}=await dt(),n=await s.streams.info(t),i=Lp(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:_}=r,u=mc.createNatsTableStreamName(c,_),l=i===e,E,d,h=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let R=0,g=n.config.sources.length;R<g;R++)if(E=n.config.sources[R],d=R,l&&E.name===u||!l&&E.name===u&&E.external&&E.external.api===`$JS.${e}.API`){h=!0;break}if(h===!0){if(E.opt_start_time===o)return;n.config.sources.splice(d,1),await s.streams.update(t,n.config)}let T={name:u,opt_start_time:o,filter_subject:`${V.SUBJECT_PREFIXES.TXN}.>`};l||(T.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(T),await s.streams.update(t,n.config)}a(Cp,"addSourceToWorkStream");function Lp(e){return e.split(".")[1]}a(Lp,"extractServerName");async function yp(e,t,r){let{schema:s,table:n}=r,i=mc.createNatsTableStreamName(s,n),{jsm:o}=await dt(),c=await o.streams.info(t);if(!Array.isArray(c.config.sources)||c.config.sources.length===0)return;let _=c.config.sources.length,u;for(;_--;)if(u=c.config.sources[_],u.name===i&&u.external.api===`$JS.${e}.API`){c.config.sources.splice(_,1);break}await o.streams.update(t,c.config)}a(yp,"removeSourceFromWorkStream");async function rx(e,t,r=2e3,s=aE()){if(!Tc.isObject(t))throw new Error("data param must be an object");let n=tE(t),{connection:i}=await dt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return nE(c.data)}a(rx,"request");function _E(e){return new Promise(async(t,r)=>{let s=v0(rE,["--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(_E,"reloadNATS");async function sx(){let{pid_file_path:e}=Hi(Q.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await _E(e)}a(sx,"reloadNATSHub");async function nx(){let{pid_file_path:e}=Hi(Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await _E(e)}a(nx,"reloadNATSLeaf");function ix(e,t,r){let s;switch(e.code){case Sp.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case Sp.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(ix,"requestErrorHandler");async function ax(e,t){let r=t+V.SERVER_SUFFIX.LEAF;await H0.writeTransaction(Q.SYSTEM_SCHEMA_NAME,Q.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await Cp(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await yp(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(ax,"updateWorkStream");async function Up(e,t){let r=mc.createNatsTableStreamName(e,t),s=await qi(),n=ux(e,t,s);await cE(r,[n])}a(Up,"createLocalTableStream");async function ox(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await Up(s,n)}}a(ox,"createTableStreams");async function Mp(e,t){if(pe.get(Q.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=mc.createNatsTableStreamName(e,t),{jsm:s}=await dt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Wr.warn(r);else throw r}}a(Mp,"purgeTableStream");async function cx(e,t){if(pe.get(Q.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await Mp(e,t[r])}a(cx,"purgeSchemaTableStreams");async function _x(e){return(await vi()).streams.info(e)}a(_x,"getStreamInfo");function ux(e,t,r){return`${V.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(ux,"createSubjectName");async function qi(){if(Ui)return Ui;if(Ui=(await vi())?.nc?.info?.server_name,Ui===void 0)throw new Error("Unable to get jetstream manager server name");return Ui}a(qi,"getJsmServerName");async function lx(){let e=await vi(),t=await qi(),r=await bp();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=Ex(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===V.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let u=`${V.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Wr.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}else if(n.name===V.WORK_QUEUE_CONSUMER_NAMES.stream_name){let u=`${V.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Wr.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u,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 u=i.split(".");u[u.length-1]=t;let l=u.join(".");Wr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(lx,"updateLocalStreams");function Ex(e){let{config:t}=e,r=!1;if(t.name===V.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===V.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(Ex,"updateStreamLimits")});var uE=f((S4,Pp)=>{"use strict";var Ac=class{constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};a(Ac,"ClusteringOriginObject");Pp.exports=Ac});var Tn=f((m4,Bp)=>{"use strict";var dx=b(),lE=B(),Qr=m(),hx=oe(),fx=be(),jt=I(),Sx=uE(),Tx=xr();lE.initSync();Bp.exports={postOperationHandler:Rx};async function pc(e,t,r,s){if(e.schema===Qr.SYSTEM_SCHEMA_NAME)return;let n=mx(e,t,r);n&&(jt.trace(`sendOperationTransaction publishing to schema ${e.schema} table ${e.table} following transaction:`,n),await fx.publishToStream(`${hx.SUBJECT_PREFIXES.TXN}.${e.schema}.${e.table}`,Tx.createNatsTableStreamName(e.schema,e.table),s,n))}a(pc,"sendOperationTransaction");function mx(e,t,r){if(dx.isEmptyOrZeroLength(t))return null;let s={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===Qr.OPERATIONS_ENUM.DELETE?s.hash_values=t:s.records=e.records,s}a(mx,"convertCRUDOperationToTransaction");async function Rx(e,t,r){if(!lE.get(Qr.CONFIG_PARAMS.CLUSTERING_ENABLED))return;jt.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let s=e.hdb_user?.username,n=lE.get(Qr.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new Sx(t.txn_time,s,n);switch(e.operation){case Qr.OPERATIONS_ENUM.INSERT:try{await pc(e,t.inserted_hashes,i,r)}catch(o){jt.error("There was an error calling clustering postOperationHandler for insert."),jt.error(o)}break;case Qr.OPERATIONS_ENUM.DELETE:try{await pc(e,t.deleted_hashes,i,r)}catch(o){jt.error("There was an error calling clustering postOperationHandler for delete."),jt.error(o)}break;case Qr.OPERATIONS_ENUM.UPDATE:try{await pc(e,t.update_hashes,i,r)}catch(o){jt.error("There was an error calling clustering postOperationHandler for update."),jt.error(o)}break;case Qr.OPERATIONS_ENUM.UPSERT:try{await pc(e,t.upserted_hashes,i,r)}catch(o){jt.error("There was an error calling clustering postOperationHandler for upsert."),jt.error(o)}break;default:break}return t}a(Rx,"postOperationHandler")});var Fp=f((A4,Gp)=>{"use strict";var Ax=It(),px=qr(),vp=I(),Hp=Ot(),gx=Sc(),Nx=require("clone"),dE=require("alasql"),Ox=uc(),qp=require("util"),Ix=qp.promisify(px.getTableSchema),bx=qp.promisify(Ax.search),wx=m(),EE=b(),Cx=Tn();Ox(dE);Gp.exports={update:yx};var Lx="There was a problem performing this update. Please check the logs and try again.";async function yx({statement:e,hdb_user:t}){let r=await Ix(e.table.databaseid,e.table.tableid),s=Ux(e.columns);EE.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=Nx(n),c=EE.isEmpty(i)?"":` WHERE ${i.toString()}`,_=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,u=dE.parse(_).statements[0],l=await gx.writeTransaction(r.schema,r.name,async()=>{let E=await bx(u),d=Mx(s,E);return Dx(o,d,t)});return await Hp.flush({schema:r.schema,table:r.name}),l}a(yx,"update");function Ux(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value:t[r.column.columnid]=dE.compile(`SELECT ${r.expression.toString()} AS [${wx.FUNC_VAL}] FROM ?`)}),t}catch(t){throw vp.error(t),new Error(Lx)}}a(Ux,"createUpdateRecord");function Mx(e,t){return EE.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Mx,"buildUpdateRecords");async function Dx(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await Hp.update(s);await Cx.postOperationHandler(s,n);try{delete n.new_attributes,delete n.txn_time}catch(i){vp.error(`Error delete new_attributes from update response: ${i}`)}return n}a(Dx,"updateRecords")});var Vp=f((g4,xp)=>{var Px=require("alasql"),Bx=It(),vx=I(),Hx=Qt(),fE=require("util"),hE=b(),qx=m(),Gx=qr(),Fx=Sc(),xx=Tn(),Vx=Ot(),kx="record",$x="successfully deleted",Yx=fE.callbackify(Jx),Kx=fE.promisify(Bx.search),Wx=fE.promisify(Gx.getTableSchema);xp.exports={convertDelete:Yx};function Qx(e){return`${e.deleted_hashes.length} ${kx}${e.deleted_hashes.length===1?"":"s"} ${$x}`}a(Qx,"generateReturnMessage");async function Jx({statement:e,hdb_user:t}){let r=await Wx(e.table.databaseid,e.table.tableid);hE.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=hE.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=Px.parse(o).statements[0],_={operation:qx.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{let u=await Fx.writeTransaction(r.schema,r.name,async()=>(_.records=await Kx(c),Hx.deleteRecords(_)));return await Vx.flush({schema:r.schema,table:r.name}),u.deleted_hashes.length>0&&await xx.postOperationHandler(_,u),hE.isEmptyOrZeroLength(u.message)&&(u.message=Qx(u)),delete u.txn_time,u}catch(u){throw vx.error(u),u.hdb_code?u.message:u}}a(Jx,"convertDelete")});var Yp=f((O4,$p)=>{"use strict";var TE=As(),{hdb_errors:SE}=L();$p.exports={checkSchemaExists:kp,checkSchemaTableExists:Xx,schema_describe:TE};async function kp(e){if(!global.hdb_schema[e])try{let t=await TE.describeSchema({schema:e});global.hdb_schema[e]=t}catch{return SE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}}a(kp,"checkSchemaExists");async function Xx(e,t){let r=await kp(e);if(r)return r;if(!global.hdb_schema[e][t])try{let s=await TE.describeTable({schema:e,table:t});if(!s||Object.keys(s).length===0)return SE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t);global.hdb_schema[e][t]=s}catch{return SE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}}a(Xx,"checkSchemaTableExists")});var Nc=f((w4,Jp)=>{"use strict";var mn=_o(),ws=Yp(),Zx=I(),zx=require("uuid").v4,b4=require("clone"),Rn=nn(),Cs=m(),jx=require("util"),Ls=Qt(),{handleHDBError:We,hdb_errors:eV}=L(),{HDB_ERROR_MSGS:gc,HTTP_STATUS_CODES:Qe}=eV,{SchemaEventMsg:An}=kr(),Kp=be();Jp.exports={createSchema:tV,createSchemaStructure:Wp,createTable:rV,createTableStructure:Qp,createAttribute:oV,dropSchema:sV,dropTable:nV,dropAttribute:iV};async function tV(e){try{let t=await Wp(e);return Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema)),t}catch(t){throw t}}a(tV,"createSchema");async function Wp(e){let t=mn.schema_object(e);if(t)throw We(t,t.message,Qe.BAD_REQUEST,void 0,void 0,!0);if(!await ws.checkSchemaExists(e.schema))throw We(new Error,gc.SCHEMA_EXISTS_ERR(e.schema),Qe.BAD_REQUEST,Cs.LOG_LEVELS.ERROR,gc.SCHEMA_EXISTS_ERR(e.schema),!0);return await Ls.createSchema(e),`schema '${e.schema}' successfully created`}a(Wp,"createSchemaStructure");async function rV(e){let t=await Qp(e);return Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema,e.table)),t}a(rV,"createTable");async function Qp(e){let t=mn.create_table_object(e);if(t)throw We(t,t.message,Qe.BAD_REQUEST,void 0,void 0,!0);mn.validateTableResidence(e.residence);let r=await ws.checkSchemaExists(e.schema);if(r)throw We(new Error,r,Qe.NOT_FOUND,Cs.LOG_LEVELS.ERROR,r,!0);if(!await ws.checkSchemaTableExists(e.schema,e.table))throw We(new Error,gc.TABLE_EXISTS_ERR(e.schema,e.table),Qe.BAD_REQUEST,Cs.LOG_LEVELS.ERROR,gc.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:zx(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Ls.createTable(n,e);else throw We(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Qe.BAD_REQUEST);else await Ls.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(i){throw i}}a(Qp,"createTableStructure");async function sV(e){let t=mn.schema_object(e);if(t)throw We(t,t.message,Qe.BAD_REQUEST,void 0,void 0,!0);let r=await ws.checkSchemaExists(e.schema);if(r)throw We(new Error,r,Qe.NOT_FOUND,Cs.LOG_LEVELS.ERROR,r,!0);let s=await ws.schema_describe.describeSchema({schema:e.schema});global.hdb_schema[e.schema]=s;let n=Object.keys(global.hdb_schema[e.schema]);return await Ls.dropSchema(e),Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema)),delete global.hdb_schema[e.schema],await Kp.purgeSchemaTableStreams(e.schema,n),`successfully deleted schema '${e.schema}'`}a(sV,"dropSchema");async function nV(e){let t=mn.table_object(e);if(t)throw We(t,t.message,Qe.BAD_REQUEST,void 0,void 0,!0);let r=await ws.checkSchemaTableExists(e.schema,e.table);if(r)throw We(new Error,r,Qe.NOT_FOUND,Cs.LOG_LEVELS.ERROR,r,!0);return await Ls.dropTable(e),Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema,e.table)),await Kp.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(nV,"dropTable");async function iV(e){let t=mn.attribute_object(e);if(t)throw We(t,t.message,Qe.BAD_REQUEST,void 0,void 0,!0);let r=await ws.checkSchemaTableExists(e.schema,e.table);if(r)throw We(new Error,r,Qe.NOT_FOUND,Cs.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw We(new Error,"You cannot drop a hash attribute",Qe.BAD_REQUEST,void 0,void 0,!0);if(Cs.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw We(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Qe.BAD_REQUEST,void 0,void 0,!0);try{return await Ls.dropAttribute(e),aV(e),Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw Zx.error(`Got an error deleting attribute ${jx.inspect(e)}.`),s}}a(iV,"dropAttribute");function aV(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(aV,"dropAttributeFromGlobal");async function oV(e){return await Ls.createAttribute(e),Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(oV,"createAttribute")});var Zp=f((L4,Xp)=>{"use strict";var{OPERATIONS_ENUM:cV}=m(),Oc=class{constructor(t,r,s=void 0,n=void 0){this.operation=cV.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};a(Oc,"ReadAuditLogObject");Xp.exports=Oc});var mE=f((M4,rg)=>{"use strict";var _V=Qt(),U4=Zp(),Ic=b(),bc=m(),uV=B(),{handleHDBError:zp,hdb_errors:lV}=L(),{HDB_ERROR_MSGS:jp,HTTP_STATUS_CODES:eg}=lV,EV=Object.values(bc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),tg="To use this operation audit log must be enabled in harperdb-config.yaml";rg.exports=dV;async function dV(e){if(Ic.isEmpty(e.schema))throw new Error(jp.SCHEMA_REQUIRED_ERR);if(Ic.isEmpty(e.table))throw new Error(jp.TABLE_REQUIRED_ERR);if(!uV.get(bc.CONFIG_PARAMS.LOGGING_AUDITLOG))throw zp(new Error,tg,eg.BAD_REQUEST,bc.LOG_LEVELS.ERROR,tg,!0);let t=Ic.checkSchemaTableExist(e.schema,e.table);if(t)throw zp(new Error,t,eg.NOT_FOUND,bc.LOG_LEVELS.ERROR,t,!0);if(!Ic.isEmpty(e.search_type)&&EV.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await _V.readAuditLog(e)}a(dV,"readAuditLog")});var cg=f((P4,og)=>{var Jr=require("validate.js"),ng=te(),pn=m(),{handleHDBError:hV,hdb_errors:fV}=L(),{HDB_ERROR_MSGS:_e,HTTP_STATUS_CODES:SV}=fV,RE=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),TV={STRUCTURE_USER:"structure_user"},sg=Object.values(pn.ROLE_TYPES_ENUM),mV="attribute_permissions",RV="attribute_name",{PERMS_CRUD_ENUM:gn}=pn,AV=[mV,...Object.values(gn)],ig=[gn.READ,gn.INSERT,gn.UPDATE],pV=[RV,...ig];function gV(e){let t=RE();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,ag(e,t)}a(gV,"addRoleValidation");function NV(e){let t=RE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,ag(e,t)}a(NV,"alterRoleValidation");function OV(e){let t=RE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,ng.validateObject(e,t)}a(OV,"dropRoleValidation");var IV=["operation","role","id","permission","hdb_user","hdb_auth_header"];function ag(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)IV.includes(s[o])||n.push(s[o]);n.length>0&&Ee(_e.INVALID_ROLE_JSON_KEYS(n),r);let i=ng.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Ee(o,r)}),e.permission){let o=bV(e);o&&Ee(o,r),sg.forEach(c=>{e.permission[c]&&!Jr.isBoolean(e.permission[c])&&Ee(_e.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(sg.indexOf(o)<0){if(o===TV.STRUCTURE_USER){let _=e.permission[o];if(typeof _=="boolean")continue;if(Array.isArray(_)){for(let u=0,l=_.length;u<l;u++){let E=_[u];global.hdb_schema[E]||Ee(_e.SCHEMA_NOT_FOUND(E),r)}continue}Ee(_e.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Ee(_e.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let _ in c.tables){let u=c.tables[_];if(!_||!global.hdb_schema[o][_]){Ee(_e.TABLE_NOT_FOUND(o,_),r);continue}if(Object.keys(u).forEach(l=>{AV.includes(l)||Ee(_e.INVALID_PERM_KEY(l),r,o,_)}),Object.values(gn).forEach(l=>{Jr.isDefined(u[l])?Jr.isBoolean(u[l])||Ee(_e.TABLE_PERM_NOT_BOOLEAN(l),r,o,_):Ee(_e.TABLE_PERM_MISSING(l),r,o,_)}),Jr.isDefined(u.attribute_permissions)){if(!Jr.isArray(u.attribute_permissions)){Ee(_e.ATTR_PERMS_NOT_ARRAY,r,o,_);continue}}else{Ee(_e.ATTR_PERMS_ARRAY_MISSING,r,o,_);continue}if(u.attribute_permissions){let l=global.hdb_schema[o][_].attributes.map(({attribute:d})=>d),E={read:!1,insert:!1,update:!1};for(let d in u.attribute_permissions){let h=u.attribute_permissions[d];if(Object.keys(h).forEach(R=>{!pV.includes(R)&&R!==gn.DELETE&&Ee(_e.INVALID_ATTR_PERM_KEY(R),r,o,_)}),!Jr.isDefined(h.attribute_name)){Ee(_e.ATTR_PERM_MISSING_NAME,r,o,_);continue}let T=h.attribute_name;if(!l.includes(T)){Ee(_e.INVALID_ATTRIBUTE_IN_PERMS(T),r,o,_);continue}ig.forEach(R=>{Jr.isDefined(h[R])?Jr.isBoolean(h[R])||Ee(_e.ATTR_PERM_NOT_BOOLEAN(R,T),r,o,_):Ee(_e.ATTR_PERM_MISSING(R,T),r,o,_)}),!E.read&&h.read===!0&&(E.read=!0),!E.insert&&h.insert===!0&&(E.insert=!0),!E.update&&h.update===!0&&(E.update=!0)}if(u.read===!1&&E.read===!0||u.insert===!1&&E.insert===!0||u.update===!1&&E.update===!0){let d=`${o}.${_}`;Ee(_e.MISMATCHED_TABLE_ATTR_PERMS(d),r,o,_)}}}}return wV(r)}a(ag,"customValidate");og.exports={addRoleValidation:gV,alterRoleValidation:NV,dropRoleValidation:OV};function bV(e){let{operation:t,permission:r}=e;if(t===pn.OPERATIONS_ENUM.ADD_ROLE||t===pn.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return _e.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?pn.ROLE_TYPES_ENUM.SUPER_USER:pn.ROLE_TYPES_ENUM.CLUSTER_USER;return _e.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(bV,"validateNoSUPerms");function wV(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:_e.ROLE_PERMS_ERROR,...e};return hV(new Error,s,SV.BAD_REQUEST)}else return null}a(wV,"generateRolePermResponse");function Ee(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(Ee,"addPermError")});var wE=f((v4,hg)=>{"use strict";var _g=Ot(),ug=It(),CV=ms(),gE=cg(),NE=nn(),LV=require("uuid").v4,OE=require("util"),yV=tn(),mr=m(),lg=b(),IE=OE.promisify(ug.searchByValue),UV=OE.promisify(ug.searchByHash),MV=OE.promisify(CV.delete),DV=Ht(),PV=un(),{hdb_errors:BV,handleHDBError:Gi}=L(),{HDB_ERROR_MSGS:Eg,HTTP_STATUS_CODES:AE}=BV,{UserEventMsg:bE}=kr();hg.exports={addRole:vV,alterRole:qV,dropRole:GV,listRoles:dg};function pE(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(pE,"scrubRoleDetails");async function vV(e){let t=gE.addRoleValidation(e);if(t)throw t;if(!(await yV.getLicense()).enterprise){let o=await dg();if(HV(e,o))throw new Error(`Your current license only supports ${mr.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} cluster_user role. ${mr.SUPPORT_HELP_MSG}`);if(o.length>=2)throw new Error(`Your current license only supports ${mr.BASIC_LICENSE_MAX_NON_CU_ROLES+mr.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} roles. ${mr.SUPPORT_HELP_MSG}`)}e=pE(e);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await IE(s)||[])}catch(o){throw Gi(o)}if(n&&n.length>0)throw Gi(new Error,Eg.ROLE_ALREADY_EXISTS(e.role),AE.CONFLICT,void 0,void 0,!0);e.id||(e.id=LV());let i={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await _g.insert(i),NE.signalUserChange(new bE(process.pid)),e=pE(e),e}a(vV,"addRole");function HV(e,t){let r=!1;if(e.permission.cluster_user===!0)for(let s=0;s<t.length;s++){let i=t[s].permission;if(!lg.isEmpty(i)&&i.cluster_user===!0)return!0}return r}a(HV,"checkClusterUserRole");async function qV(e){let t=gE.alterRoleValidation(e);if(t)throw t;e=pE(e);let r={operation:"update",schema:"system",table:"hdb_role",hash_attribute:"rolename",records:[e]};try{await _g.update(r)}catch(s){throw Gi(s)}return NE.signalUserChange(new bE(process.pid)),e}a(qV,"alterRole");async function GV(e){let t=gE.dropRoleValidation(e);if(t)throw Gi(new Error,t,AE.BAD_REQUEST,void 0,void 0,!0);let r=new PV(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await UV(r));if(s.length===0)throw Gi(new Error,Eg.ROLE_NOT_FOUND,AE.NOT_FOUND,void 0,void 0,!0);let n=new DV(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await IE(n)),o=!1;if(lg.isEmptyOrZeroLength(i)===!1){for(let _=0;_<i.length;_++)if(i[_].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await MV(c),NE.signalUserChange(new bE(process.pid)),`${s[0].role} successfully deleted`}a(GV,"dropRole");async function dg(){return IE({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(dg,"listRoles")});var mg=f((q4,Tg)=>{"use strict";var FV=B(),Xr=require("joi"),xV=te(),fg=require("moment"),VV=require("fs-extra"),CE=require("path"),kV=require("lodash"),Fi=m(),{LOG_LEVELS:ys}=m(),$V="YYYY-MM-DD hh:mm:ss",YV=CE.resolve(__dirname,"../logs");Tg.exports=function(e){return xV.validateBySchema(e,KV)};var KV=Xr.object({from:Xr.custom(Sg),until:Xr.custom(Sg),level:Xr.valid(ys.NOTIFY,ys.FATAL,ys.ERROR,ys.WARN,ys.INFO,ys.DEBUG,ys.TRACE),order:Xr.valid("asc","desc"),limit:Xr.number().min(1),start:Xr.number().min(0),log_name:Xr.custom(WV)});function Sg(e,t){if(fg(e,fg.ISO_8601).format($V)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(Sg,"validateDatetime");function WV(e,t){if(kV.invert(Fi.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=FV.get(Fi.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Fi.LOG_NAMES.HDB:e,i=n===Fi.LOG_NAMES.INSTALL?CE.join(YV,Fi.LOG_NAMES.INSTALL):CE.join(s,n);return VV.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(WV,"validateReadLogPath")});var yE=f((F4,Rg)=>{"use strict";var wc=m(),QV=I(),JV=B(),XV=mg(),LE=require("path"),ZV=require("fs-extra"),{once:zV}=require("events"),{handleHDBError:jV,hdb_errors:ek}=L(),{PACKAGE_ROOT:tk}=m(),rk=LE.join(tk,"logs"),sk=1e3;Rg.exports=nk;async function nk(e){let t=XV(e);if(t)throw jV(t,t.message,ek.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=JV.get(wc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?wc.LOG_NAMES.HDB:e.log_name,n=s===wc.LOG_NAMES.INSTALL?LE.join(rk,wc.LOG_NAMES.INSTALL):LE.join(r,s),i=ZV.createReadStream(n);i.on("error",U=>{QV.error(U)});let o=e.level!==void 0,c=o?e.level:void 0,_=e.from!==void 0,u=_?new Date(e.from):void 0,l=e.until!==void 0,E=l?new Date(e.until):void 0,d=e.limit===void 0?sk:e.limit,h=e.order===void 0?void 0:e.order,T=e.start===void 0?0:e.start,R=T+d,g=0,H=[],x="",q;i.on("data",U=>{let $=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;U=x+U;let ue=0,ae;for(;(ae=$.exec(U))&&!i.destroyed;){q&&(q.message=U.slice(ue,ae.index),ye(q));let[qn,os,wr]=ae,Oa=wr.split("] ["),bw=Oa[0],ww=Oa[1];Oa.splice(0,2),q={timestamp:os,thread:bw,level:ww,tags:Oa,message:""},ue=ae.index+qn.length}x=U.slice(ue)}),i.on("end",U=>{i.destroyed||q&&(q.message=x.trim(),ye(q))}),i.resume();function ye(U){let $,ue,ae;switch(!0){case(o&&_&&l):$=new Date(U.timestamp),ue=new Date(u),ae=new Date(E),U.level===c&&$>=ue&&$<=ae&&g<T?g++:U.level===c&&$>=ue&&$<=ae&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case(o&&_):$=new Date(U.timestamp),ue=new Date(u),U.level===c&&$>=ue&&g<T?g++:U.level===c&&$>=ue&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case(o&&l):$=new Date(U.timestamp),ae=new Date(E),U.level===c&&$<=ae&&g<T?g++:U.level===c&&$<=ae&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case(_&&l):$=new Date(U.timestamp),ue=new Date(u),ae=new Date(E),$>=ue&&$<=ae&&g<T?g++:$>=ue&&$<=ae&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case o:U.level===c&&g<T?g++:U.level===c&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case _:$=new Date(U.timestamp),ue=new Date(u),$>=ue&&g<T?g++:$>=ue&&g>=T&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case l:$=new Date(U.timestamp),ae=new Date(E),$<=ae&&g<T?g++:$<=ae&&g>=T&&(Zr(U,h,H),g++,g===R&&i.destroy());break;default:g<T?g++:(Zr(U,h,H),g++,g===R&&i.destroy())}}return a(ye,"onLogMessage"),await zV(i,"close"),H}a(nk,"readLog");function Zr(e,t,r){t==="desc"?ik(e,r):t==="asc"?ak(e,r):r.push(e)}a(Zr,"pushLineToResult");function ik(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(ik,"insertDescending");function ak(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(ak,"insertAscending")});var Lc=f(($4,gg)=>{"use strict";var UE=require("joi"),{string:Cc,boolean:Ag,date:ok}=UE.types(),ck=te(),{validateSchemaExists:V4,validateTableExists:k4,validateSchemaName:_k}=Wt(),uk=m(),lk=oe(),Ek=B(),dk=Cc.invalid(Ek.get(uk.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(lk.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(),pg={operation:Cc.valid("add_node","update_node"),node_name:dk,subscriptions:UE.array().items({table:Cc.required(),schema:Cc.custom(_k).required(),subscribe:Ag.required(),publish:Ag.required().custom(fk),start_time:ok.iso()}).min(1).required()};function hk(e){return ck.validateBySchema(e,UE.object(pg))}a(hk,"addUpdateNodeValidator");function fk(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(fk,"checkForFalsy");gg.exports={addUpdateNodeValidator:hk,validation_schema:pg}});var Og=f((K4,Ng)=>{var Sk=te(),Tk={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Ng.exports=function(e){return Sk.validateObject(e,Tk)}});var ME=f((W4,Ig)=>{"use strict";var mk=m().OPERATIONS_ENUM,yc=class{constructor(t,r,s,n=void 0){this.operation=mk.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(yc,"UpdateObject");Ig.exports=yc});var wg=f((J4,bg)=>{"use strict";var Rk={OPERATION:"operation",REFRESH:"refresh"},Uc=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(Uc,"JWTTokens");var Mc=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(Mc,"JWTRSAKeys");bg.exports={JWTTokens:Uc,TOKEN_TYPE_ENUM:Rk,JWTRSAKeys:Mc}});var vc=f((Z4,Ug)=>{"use strict";var Vi=require("jsonwebtoken"),DE=require("fs-extra"),PE=b(),bt=m(),{handleHDBError:Je,hdb_errors:Ak}=L(),{HTTP_STATUS_CODES:Xe,AUTHENTICATION_ERROR_MSGS:Ze}=Ak,xi=I(),Cg=Ao(),HE=Vr(),pk=Ot().update,gk=ME(),Nk=nn(),{UserEventMsg:Ok}=kr(),zr=B();zr.initSync();var BE=require("path"),{JWTTokens:Ik,JWTRSAKeys:bk,TOKEN_TYPE_ENUM:Dc}=wg(),wk=zr.get(bt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?zr.get(bt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",Ck=zr.get(bt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?zr.get(bt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Pc="RS256",vE;Ug.exports={createTokens:Lk,validateOperationToken:Uk,refreshOperationToken:yk,validateRefreshToken:yg};async function Lk(e){if(PE.isEmpty(e)||typeof e!="object")throw Je(new Error,Ze.INVALID_AUTH_OBJECT,Xe.BAD_REQUEST,void 0,void 0,!0);if(PE.isEmpty(e.username))throw Je(new Error,Ze.USERNAME_REQUIRED,Xe.BAD_REQUEST,void 0,void 0,!0);if(PE.isEmpty(e.password))throw Je(new Error,Ze.PASSWORD_REQUIRED,Xe.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await HE.findAndValidateUser(e.username,e.password),!t)throw Je(new Error,Ze.INVALID_CREDENTIALS,Xe.UNAUTHORIZED,void 0,void 0,!0)}catch(d){throw xi.error(d),Je(new Error,Ze.INVALID_CREDENTIALS,Xe.UNAUTHORIZED,void 0,void 0,!0)}let r=await Bc(),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 Lg(i,r.private_key,r.passphrase),c=await Vi.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:Ck,algorithm:Pc,subject:Dc.REFRESH}),_=Cg.hash(c),u=new gk(bt.SYSTEM_SCHEMA_NAME,bt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:_}]),l,E;try{l=await pk(u)}catch(d){xi.error(d),E=d}if(E!==void 0||l.skipped_hashes.length>0)throw Je(new Error,Ze.REFRESH_TOKEN_SAVE_FAILED,Xe.INTERNAL_SERVER_ERROR);return Nk.signalUserChange(new Ok(process.pid)),new Ik(o,c)}a(Lk,"createTokens");async function Lg(e,t,r){return await Vi.sign(e,{key:t,passphrase:r},{expiresIn:wk,algorithm:Pc,subject:Dc.OPERATION})}a(Lg,"signOperationToken");async function Bc(){if(vE===void 0)try{let e=BE.join(zr.getHdbBasePath(),bt.LICENSE_KEY_DIR_NAME,bt.JWT_ENUM.JWT_PASSPHRASE_NAME),t=BE.join(zr.getHdbBasePath(),bt.LICENSE_KEY_DIR_NAME,bt.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=BE.join(zr.getHdbBasePath(),bt.LICENSE_KEY_DIR_NAME,bt.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await DE.readFile(e)).toString(),n=(await DE.readFile(t)).toString(),i=(await DE.readFile(r)).toString();vE=new bk(i,n,s)}catch(e){throw xi.error(e),Je(new Error,Ze.NO_ENCRYPTION_KEYS,Xe.INTERNAL_SERVER_ERROR)}return vE}a(Bc,"getJWTRSAKeys");async function yk(e){if(!e)throw Je(new Error,Ze.INVALID_BODY,Xe.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Je(new Error,Ze.REFRESH_TOKEN_REQUIRED,Xe.BAD_REQUEST,void 0,void 0,!0);await yg(e.refresh_token);let t=await Bc(),r=await Vi.decode(e.refresh_token);return{operation_token:await Lg({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(yk,"refreshOperationToken");async function Uk(e){try{let t=await Bc(),r=await Vi.verify(e,t.public_key,{algorithms:Pc,subject:Dc.OPERATION});return await HE.findAndValidateUser(r.username,void 0,!1)}catch(t){throw xi.warn(t),t.name&&t.name==="TokenExpiredError"?Je(new Error,Ze.TOKEN_EXPIRED,Xe.FORBIDDEN):Je(new Error,Ze.INVALID_TOKEN,Xe.UNAUTHORIZED)}}a(Uk,"validateOperationToken");async function yg(e){let t;try{let r=await Bc(),s=await Vi.verify(e,r.public_key,{algorithms:Pc,subject:Dc.REFRESH});t=await HE.findAndValidateUser(s.username,void 0,!1)}catch(r){throw xi.warn(r),r.name&&r.name==="TokenExpiredError"?Je(new Error,Ze.TOKEN_EXPIRED,Xe.FORBIDDEN):Je(new Error,Ze.INVALID_TOKEN,Xe.UNAUTHORIZED)}if(!Cg.validate(t.refresh_token,e))throw Je(new Error,Ze.INVALID_TOKEN,Xe.UNAUTHORIZED);return t}a(yg,"validateRefreshToken")});var Bg=f((e5,Pg)=>{"use strict";var Mk=Og(),Nn=require("passport"),Dk=require("passport-local").Strategy,Pk=require("passport-http").BasicStrategy,Bk=require("util"),vk=Vr(),Dg=Bk.callbackify(vk.findAndValidateUser),j4=it(),Hk=m(),Mg=vc();Nn.use(new Dk(function(e,t,r){Dg(e,t,r)}));Nn.use(new Pk(function(e,t,r){Dg(e,t,r)}));Nn.serializeUser(function(e,t){t(null,e)});Nn.deserializeUser(function(e,t){t(null,e)});function qk(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,c){return o?r(o):c?r(null,c):r("User not found")}switch(a(i,"handleResponse"),s){case"Basic":Nn.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===Hk.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Mg.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):Mg.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Nn.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(qk,"authorize");function Gk(e,t){let r=Mk(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 c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(Gk,"checkPermissions");Pg.exports={authorize:qk,checkPermissions:Gk}});var On=f((r5,vg)=>{"use strict";var Hc=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(Hc,"Node");var qc=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(qc,"NodeSubscription");vg.exports={Node:Hc,NodeSubscription:qc}});var qg=f((n5,Hg)=>{"use strict";var Fk=m().OPERATIONS_ENUM,Gc=class{constructor(t,r,s,n=void 0){this.operation=Fk.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Gc,"UpsertObject");Hg.exports=Gc});var ki=f((a5,Gg)=>{"use strict";var Fc=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(Fc,"RemotePayloadObject");var xc=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(xc,"RemotePayloadSubscription");Gg.exports={RemotePayloadObject:Fc,RemotePayloadSubscription:xc}});var xg=f((c5,Fg)=>{"use strict";var Vc=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(Vc,"TableSizeObject");Fg.exports=Vc});var kg=f((u5,Vg)=>{"use strict";var xk=xg(),Vk=Ue(),In=X(),kk=I(),{getSchemaPath:$k,getTransactionAuditStorePath:Yk}=j();Vg.exports=Kk;async function Kk(e){let t=new xk;try{let r=$k(e.schema,e.name),s=await In.openEnvironment(r,e.name),n=In.statDBI(s,e.hash_attribute),i=Yk(e.schema,e.name),o=await In.openEnvironment(i,e.name,!0),c=In.statDBI(o,Vk.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),_=await In.environmentDataSize(r,e.name),u=await In.environmentDataSize(i,e.name);t.schema=e.schema,t.table=e.name,t.table_size=_,t.record_count=n.entryCount,t.transaction_log_size=u,t.transaction_log_record_count=c.entryCount}catch(r){kk.warn(`unable to stat table dbi due to ${r}`)}return t}a(Kk,"lmdbGetTableSize")});var Yg=f((E5,$g)=>{"use strict";var kc=class{constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};a(kc,"SystemInformationObject");$g.exports=kc});var bn=f((h5,Jg)=>{"use strict";var Wk=require("fs-extra"),Qk=require("path"),He=require("systeminformation"),jr=I(),qE=m(),Jk=kg(),Wg=As(),{getThreadInfo:Kg}=fs(),Qg=B();Qg.initSync();var Xk=Yg(),{openEnvironment:Zk}=X(),{getSchemaPath:zk}=j(),$c;Jg.exports={getHDBProcessInfo:VE,getNetworkInfo:$E,getDiskInfo:kE,getMemoryInfo:xE,getCPUInfo:FE,getTimeInfo:GE,getSystemInformation:YE,systemInformation:jk,getTableSize:KE,getMetrics:WE};function GE(){return He.time()}a(GE,"getTimeInfo");async function FE(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:_,cache:u,...l}=await He.cpu();l.cpu_speed=await He.cpuCurrentSpeed();let{raw_currentload:E,raw_currentload_idle:d,raw_currentload_irq:h,raw_currentload_nice:T,raw_currentload_system:R,raw_currentload_user:g,cpus:H,...x}=await He.currentLoad();return x.cpus=[],H.forEach(q=>{let{raw_load:ye,raw_load_idle:U,raw_load_irq:$,raw_load_nice:ue,raw_load_system:ae,raw_load_user:qn,...os}=q;x.cpus.push(os)}),l.current_load=x,l}catch(e){return jr.error(`error in getCPUInfo: ${e}`),{}}}a(FE,"getCPUInfo");async function xE(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await He.mem();return Object.assign(n,process.memoryUsage())}catch(e){return jr.error(`error in getMemoryInfo: ${e}`),{}}}a(xE,"getMemoryInfo");async function VE(){let e={core:[],clustering:[]};try{let t=await He.processes(),r;try{r=Number.parseInt(await Wk.readFile(Qk.join(Qg.get(qE.CONFIG_PARAMS.ROOTPATH),qE.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===qE.NODE_ERROR_CODES.ENOENT)jr.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}return t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)}),e}catch(t){return jr.error(`error in getHDBProcessInfo: ${t}`),e}}a(VE,"getHDBProcessInfo");async function kE(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await He.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:_,...u}=await He.fsStats();return e.read_write=u,e.size=await He.fsSize(),e}catch(t){return jr.error(`error in getDiskInfo: ${t}`),e}}a(kE,"getDiskInfo");async function $E(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await He.networkInterfaceDefault(),e.latency=await He.inetChecksite("google.com"),(await He.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:_,ieee8021xAuth:u,ieee8021xState:l,carrier_changes:E,...d}=s;e.interfaces.push(d)}),(await He.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return jr.error(`error in getNetworkInfo: ${t}`),e}}a($E,"getNetworkInfo");async function YE(){if($c!==void 0)return $c;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await He.osInfo();e=c;let _=await He.versions("node, npm");return e.node_version=_.node,e.npm_version=_.npm,$c=e,$c}catch(t){return jr.error(`error in getSystemInformation: ${t}`),e}}a(YE,"getSystemInformation");async function KE(){let e=[],t=await Wg.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await Jk(s));return e}a(KE,"getTableSize");async function WE(){let e=await Wg.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=zk(r,n),c=(await Zk(i,n)).getStats();s[n]={puts:c.puts,deletes:c.deletes,txns:c.txns,pageFlushes:c.pageFlushes,writes:c.writes,pagesWritten:c.pagesWritten,timeDuringTxns:c.timeDuringTxns,timeStartTxns:c.timeStartTxns,timePageFlushes:c.timePageFlushes,timeSync:c.timeSync}}catch(i){jr.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(WE,"getMetrics");async function jk(e){let t=new Xk;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await YE(),t.time=GE(),t.cpu=await FE(),t.memory=await xE(),t.disk=await kE(),t.network=await $E(),t.harperdb_processes=await VE(),t.table_size=await KE(),t.metrics=await WE(),t.threads=await Kg(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await YE();break;case"time":t.time=GE();break;case"cpu":t.cpu=await FE();break;case"memory":t.memory=await xE();break;case"disk":t.disk=await kE();break;case"network":t.network=await $E();break;case"harperdb_processes":t.harperdb_processes=await VE();break;case"table_size":t.table_size=await KE();break;case"database_metrics":case"metrics":t.metrics=await WE();break;case"threads":t.threads=await Kg();break;default:break}return t}a(jk,"systemInformation")});var QE=f((m5,Xg)=>{"use strict";var S5=require("fs-extra"),T5=I();Xg.exports={version:e$,printVersion:r$,nodeVersion:t$};var es=zl();function e$(){if(es)return es.version}a(e$,"version");function t$(){if(es&&es.engines&&es.engines["preferred-node"])return es.engines["preferred-node"]}a(t$,"nodeVersion");function r$(){es&&console.log(`HarperDB Version ${es.version}`)}a(r$,"printVersion")});var Rr=f((g5,eN)=>{"use strict";var s$=Ot(),JE=b(),XE=require("util"),Us=m(),Zg=B();Zg.initSync();var n$=Bg(),zg=It(),{Node:A5,NodeSubscription:p5}=On(),i$=un(),a$=qg(),{RemotePayloadObject:o$,RemotePayloadSubscription:c$}=ki(),{handleHDBError:_$,hdb_errors:u$}=L(),{HTTP_STATUS_CODES:l$,HDB_ERROR_MSGS:E$}=u$,d$=Ht(),h$=bn(),f$=QE(),S$=XE.promisify(n$.authorize),T$=XE.promisify(zg.searchByHash),m$=XE.promisify(zg.searchByValue);eN.exports={authHeaderToUser:R$,isEmpty:A$,getNodeRecord:p$,upsertNodeRecord:g$,buildNodePayloads:N$,checkClusteringEnabled:O$,getAllNodeRecords:I$,getSystemInfo:b$,reverseSubscription:jg};async function R$(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await S$(t,null),e}a(R$,"authHeaderToUser");function A$(e){return e==null}a(A$,"isEmpty");async function p$(e){let t=new i$(Us.SYSTEM_SCHEMA_NAME,Us.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return T$(t)}a(p$,"getNodeRecord");async function g$(e){let t=new a$(Us.SYSTEM_SCHEMA_NAME,Us.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return s$.upsert(t)}a(g$,"upsertNodeRecord");function jg(e){if(JE.isEmpty(e.subscribe)||JE.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(jg,"reverseSubscription");function N$(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:_,table:u}=c,l=JE.getTableHashAttribute(_,u),{subscribe:E,publish:d}=jg(c),h=new c$(_,u,l,d,E,c.start_time);n.push(h)}return new o$(r,t,n,s)}a(N$,"buildNodePayloads");function O$(){if(!Zg.get(Us.CONFIG_PARAMS.CLUSTERING_ENABLED))throw _$(new Error,E$.CLUSTERING_NOT_ENABLED,l$.BAD_REQUEST,void 0,void 0,!0)}a(O$,"checkClusteringEnabled");async function I$(){let e=new d$(Us.SYSTEM_SCHEMA_NAME,Us.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await m$(e))}a(I$,"getAllNodeRecords");async function b$(){let e=await h$.getSystemInformation();return{hdb_version:f$.version(),node_version:e.node_version,platform:e.platform}}a(b$,"getSystemInfo")});var zE=f((O5,aN)=>{"use strict";var ZE=be(),tN=b(),rN=oe(),w$=m(),Yc=I(),sN=Nc(),C$=Hl(),{RemotePayloadObject:L$}=ki(),{handleHDBError:nN,hdb_errors:y$}=L(),{HTTP_STATUS_CODES:iN}=y$,{NodeSubscription:U$}=On();aN.exports=M$;async function M$(e,t){let r;try{r=await ZE.request(`${t}.${rN.REQUEST_SUFFIX}`,new L$(w$.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Yc.trace("Response from remote describe all request:",r)}catch(o){Yc.error(`addNode received error from describe all request to remote node: ${o}`);let c=ZE.requestErrorHandler(o,"add_node",t);throw nN(new Error,c,iN.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===rN.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw nN(new Error,o,iN.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:_}=o,u=tN.doesSchemaExist(c),l=s[c]!==void 0,E=tN.doesTableExist(c,_),d=s?.[c]?.[_]!==void 0;if(!u&&!l||!E&&!d){n.push(o);continue}if(!u&&l&&(Yc.trace(`addNode creating schema: ${c}`),await sN.createSchema({operation:"create_schema",schema:c})),!E&&d){Yc.trace(`addNode creating table: ${_} in schema: ${c}`);let T=new C$(c,_,s[c][_].hash_attribute);await sN.createTable(T)}await ZE.createLocalTableStream(c,_);let h=new U$(c,_,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h)}return{added:i,skipped:n}}a(M$,"reviewSubscriptions")});var Qc=f((b5,_N)=>{"use strict";var{handleHDBError:Kc,hdb_errors:D$}=L(),{HTTP_STATUS_CODES:Wc}=D$,{addUpdateNodeValidator:P$}=Lc(),$i=I(),cN=m(),oN=oe(),B$=b(),jE=be(),Yi=Rr(),v$=B(),H$=zE(),{Node:q$,NodeSubscription:G$}=On(),F$="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",x$="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",V$=v$.get(cN.CONFIG_PARAMS.CLUSTERING_NODENAME);_N.exports=k$;async function k$(e,t=!1){$i.trace("addNode called with:",e),Yi.checkClusteringEnabled();let r=P$(e);if(r)throw Kc(r,r.message,Wc.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let E=await Yi.getNodeRecord(s);if(!B$.isEmptyOrZeroLength(E))throw Kc(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,Wc.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await H$(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=F$,o;let c=Yi.buildNodePayloads(n,V$,cN.OPERATIONS_ENUM.ADD_NODE,await Yi.getSystemInfo());$i.trace("addNode sending remote payload:",c);let _;try{_=await jE.request(`${s}.${oN.REQUEST_SUFFIX}`,c)}catch(E){$i.error(`addNode received error from request: ${E}`);let d=jE.requestErrorHandler(E,"add_node",s);throw Kc(new Error,d,Wc.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===oN.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let E=`Error returned from remote node ${s}: ${_.message}`;throw Kc(new Error,E,Wc.INTERNAL_SERVER_ERROR,"error",E)}$i.trace(_);let u=[];for(let E=0,d=n.length;E<d;E++){let h=n[E];$i.trace("Add node updating work stream for node:",s,"subscriptions:",h),await jE.updateWorkStream(h,s),n[E].start_time===void 0&&delete n[E].start_time,u.push(new G$(h.schema,h.table,h.publish,h.subscribe))}let l=new q$(s,u,_.system_info);return await Yi.upsertNodeRecord(l),i.length>0?o.message=x$:o.message=`Successfully added '${s}' to manifest`,o}a(k$,"addNode")});var td=f((C5,EN)=>{"use strict";var{handleHDBError:Jc,hdb_errors:$$}=L(),{HTTP_STATUS_CODES:Xc}=$$,{addUpdateNodeValidator:Y$}=Lc(),Ki=I(),lN=m(),uN=oe(),K$=b(),ed=be(),Wi=Rr(),W$=B(),{cloneDeep:Q$}=require("lodash"),J$=zE(),{NodeSubscription:X$}=On(),Z$="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",z$="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",j$=W$.get(lN.CONFIG_PARAMS.CLUSTERING_NODENAME);EN.exports=eY;async function eY(e){Ki.trace("updateNode called with:",e),Wi.checkClusteringEnabled();let t=Y$(e);if(t)throw Jc(t,t.message,Xc.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=Q$(await Wi.getNodeRecord(r));if(K$.isEmptyOrZeroLength(s))throw Jc(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,Xc.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await J$(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=Z$,o;let c=Wi.buildNodePayloads(n,j$,lN.OPERATIONS_ENUM.UPDATE_NODE,await Wi.getSystemInfo());Ki.trace("updateNode sending remote payload:",c);let _;try{_=await ed.request(`${r}.${uN.REQUEST_SUFFIX}`,c)}catch(u){Ki.error(`updateNode received error from request: ${u}`);let l=ed.requestErrorHandler(u,"update_node",r);throw Jc(new Error,l,Xc.INTERNAL_SERVER_ERROR,"error",l)}if(_.status===uN.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw Jc(new Error,u,Xc.INTERNAL_SERVER_ERROR,"error",u)}Ki.trace(_);for(let u=0,l=n.length;u<l;u++){let E=n[u];Ki.trace(`updateNode updating work stream for node: ${r} subscription:`,E),await ed.updateWorkStream(E,r),n[u].start_time===void 0&&delete n[u].start_time}return await tY(s[0],n,_.system_info),i.length>0?o.message=z$:o.message=`Successfully updated '${r}'`,o}a(eY,"updateNode");async function tY(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let _=0,u=e.subscriptions.length;_<u;_++){let l=s.subscriptions[_];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new X$(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Wi.upsertNodeRecord(s)}a(tY,"updateNodeTable")});var TN=f((y5,SN)=>{"use strict";var fN=require("joi"),{string:dN}=fN.types(),rY=te(),hN=m(),sY=B(),nY=oe();SN.exports=iY;function iY(e){let t=dN.invalid(sY.get(hN.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(nY.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=fN.object({operation:dN.valid(hN.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return rY.validateBySchema(e,r)}a(iY,"removeNodeValidator")});var zc=f((M5,NN)=>{"use strict";var{handleHDBError:mN,hdb_errors:aY}=L(),{HTTP_STATUS_CODES:RN}=aY,oY=TN(),Qi=I(),AN=Rr(),cY=b(),Zc=m(),pN=oe(),gN=be(),_Y=B(),{RemotePayloadObject:uY}=ki(),{NodeSubscription:lY}=On(),EY=gi(),dY=ms(),hY=_Y.get(Zc.CONFIG_PARAMS.CLUSTERING_NODENAME);NN.exports=fY;async function fY(e){Qi.trace("removeNode called with:",e),AN.checkClusteringEnabled();let t=oY(e);if(t)throw mN(t,t.message,RN.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await AN.getNodeRecord(r);if(cY.isEmptyOrZeroLength(s))throw mN(new Error,`Node '${r}' was not found.`,RN.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new uY(Zc.OPERATIONS_ENUM.REMOVE_NODE,hY,[]),i,o=!1;try{i=await gN.request(`${r}.${pN.REQUEST_SUFFIX}`,n),Qi.trace("Remove node reply from remote node:",r,i)}catch(_){Qi.error("removeNode received error from request:",_),o=!0}for(let _=0,u=s.subscriptions.length;_<u;_++){let l=s.subscriptions[_];Qi.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let E=new lY(l.schema,l.table,!1,!1);await gN.updateWorkStream(E,r)}let c=new EY(Zc.SYSTEM_SCHEMA_NAME,Zc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await dY.deleteRecord(c),i?.status===pN.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Qi.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(fY,"removeNode")});var bN=f((P5,IN)=>{"use strict";var ON=require("joi"),{string:SY,array:TY}=ON.types(),mY=te(),RY=Lc();IN.exports=AY;function AY(e){let t=ON.object({operation:SY.valid("configure_cluster").required(),connections:TY.items(RY.validation_schema).required()});return mY.validateBySchema(e,t)}a(AY,"configureClusterValidator")});var rd=f((v5,UN)=>{"use strict";var pY=m(),jc=I(),gY=b(),NY=zc(),OY=Qc(),wN=Rr(),IY=bN(),{handleHDBError:CN,hdb_errors:bY}=L(),{HTTP_STATUS_CODES:LN}=bY,wY="Configure cluster complete.",CY="Failed to configure the cluster. Check the logs for more details.",LY="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";UN.exports=yY;async function yY(e){jc.trace("configure cluster called with:",e),wN.checkClusteringEnabled();let t=IY(e);if(t)throw CN(t,t.message,LN.BAD_REQUEST,void 0,void 0,!0);let r=await wN.getAllNodeRecords(),s=[];for(let d=0,h=r.length;d<h;d++)s.push(yN(NY,{operation:pY.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name));let n=await Promise.allSettled(s);jc.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let d=0;d<o;d++){let h=e.connections[d];i.push(yN(OY,h,h.node_name))}let c=await Promise.allSettled(i);jc.trace("All results from configure_cluster add node:",c);let _=[],u=[],l=!1,E=n.concat(c);for(let d=0,h=E.length;d<h;d++){let T=E[d];T.status==="rejected"&&(jc.error(T.reason),_.includes(T.reason.node_name)||_.push(T.reason.node_name)),T.status==="fulfilled"&&(l=!0);let R=T?.value?.result;typeof R=="string"&&R.includes("Successfully removed")||T.status==="rejected"||u.push({node_name:T?.value?.node_name,subscriptions:T?.value?.result})}if(gY.isEmptyOrZeroLength(_))return{message:wY,connections:u};if(l)return{message:LY,failed_nodes:_,connections:u};throw CN(new Error,CY,LN.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(yY,"configureCluster");async function yN(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(yN,"functionWrapper")});var DN=f((q5,MN)=>{"use strict";var e_=require("joi"),UY=te(),{validateSchemaExists:MY,validateTableExists:DY,validateSchemaName:PY}=Wt(),BY=e_.object({operation:e_.string().valid("purge_stream"),schema:e_.string().custom(MY).custom(PY).required(),table:e_.string().custom(DY).required()});function vY(e){return UY.validateBySchema(e,BY)}a(vY,"purgeStreamValidator");MN.exports=vY});var sd=f((F5,PN)=>{"use strict";var{handleHDBError:HY,hdb_errors:qY}=L(),{HTTP_STATUS_CODES:GY}=qY,FY=DN(),xY=be(),VY=Rr();PN.exports=kY;async function kY(e){let t=FY(e);if(t)throw HY(t,t.message,GY.BAD_REQUEST,void 0,void 0,!0);VY.checkClusteringEnabled();let{schema:r,table:s}=e;return await xY.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(kY,"purgeStream")});var ad=f((V5,FN)=>{"use strict";var id=Rr(),$Y=be(),HN=B(),t_=m(),Ms=oe(),YY=b(),nd=I(),{RemotePayloadObject:KY}=ki(),{ErrorCode:BN}=require("nats"),vN=HN.get(t_.CONFIG_PARAMS.CLUSTERING_ENABLED),qN=HN.get(t_.CONFIG_PARAMS.CLUSTERING_NODENAME);FN.exports={clusterStatus:WY,buildNodeStatus:GN};async function WY(){let e={node_name:qN,is_enabled:vN,connections:[]};if(!vN)return e;let t=await id.getAllNodeRecords();if(YY.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(GN(t[s],e.connections));return await Promise.allSettled(r),e}a(WY,"clusterStatus");async function GN(e,t){let r=e.name,s=new KY(t_.OPERATIONS_ENUM.CLUSTER_STATUS,qN,void 0,await id.getSystemInfo()),n,i,o=Ms.CLUSTER_STATUS_STATUSES.OPEN;try{let _=Date.now();n=await $Y.request(Ms.REQUEST_SUBJECT(r),s),i=Date.now()-_,n.status===Ms.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Ms.CLUSTER_STATUS_STATUSES.CLOSED,nd.error(`Error getting node status from ${r} `,n))}catch(_){nd.warn(`Error getting node status from ${r}`,_),_.code===BN.NoResponders?o=Ms.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:_.code===BN.Timeout?o=Ms.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Ms.CLUSTER_STATUS_STATUSES.CLOSED}let c=new QY(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let _={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==t_.PRE_4_0_0_VERSION&&await id.upsertNodeRecord(_)}catch(_){nd.error("Cluster status encountered an error updating system info for node:",r,_)}t.push(c)}a(GN,"buildNodeStatus");function QY(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(QY,"NodeStatusObject")});var cd=f(($5,xN)=>{"use strict";var{handleHDBError:JY,hdb_errors:XY}=L(),{HTTP_STATUS_CODES:ZY}=XY,zY=be(),jY=Rr(),od=b(),r_=require("joi"),eK=te(),tK=2e3,rK=r_.object({timeout:r_.number().min(1),connected_nodes:r_.boolean(),routes:r_.boolean()});xN.exports=sK;async function sK(e){jY.checkClusteringEnabled();let t=eK.validateBySchema(e,rK);if(t)throw JY(t,t.message,ZY.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||od.autoCastBoolean(s),o=n===void 0||od.autoCastBoolean(n),c={nodes:[]},_=await zY.getServerList(r??tK),u={};if(i)for(let l=0,E=_.length;l<E;l++){let d=_[l].statsz;d&&(u[_[l].server.name]=d.routes)}for(let l=0,E=_.length;l<E;l++){if(_[l].statsz)continue;let d=_[l].server,h=_[l].data;if(d.name.endsWith("-hub")){let T={name:d.name.slice(0,-4),response_time:_[l].response_time};i&&(T.connected_nodes=u[d.name]?u[d.name].map(R=>R.name.slice(0,-4)):[]),o&&(T.routes=h.cluster?.urls?h.cluster?.urls.map(R=>({host:R.split(":")[0],port:od.autoCast(R.split(":")[1])})):[]),c.nodes.push(T)}}return c}a(sK,"clusterNetwork")});var YN=f((K5,$N)=>{"use strict";var _d=require("joi"),VN=te(),{route_constraints:kN}=Lu();$N.exports={setRoutesValidator:nK,deleteRoutesValidator:iK};function nK(e){let t=_d.object({server:_d.valid("hub","leaf").required(),routes:kN.required()});return VN.validateBySchema(e,t)}a(nK,"setRoutesValidator");function iK(e){let t=_d.object({routes:kN.required()});return VN.validateBySchema(e,t)}a(iK,"deleteRoutesValidator")});var ld=f((Q5,JN)=>{"use strict";var Ds=lr(),ud=b(),s_=m(),KN=YN(),{handleHDBError:WN,hdb_errors:aK}=L(),{HTTP_STATUS_CODES:QN}=aK,oK="cluster routes successfully set",cK="cluster routes successfully deleted";JN.exports={setRoutes:_K,getRoutes:uK,deleteRoutes:lK};function _K(e){let t=KN.setRoutesValidator(e);if(t)throw WN(t,t.message,QN.BAD_REQUEST,void 0,void 0,!0);let r=Ds.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,_=e.routes.length;c<_;c++){let u=e.routes[c];u.port=ud.autoCast(u.port);let l=s.some(d=>d.host===u.host&&d.port===u.port),E=n.some(d=>d.host===u.host&&d.port===u.port);l||E?i.push(u):(s.push(u),o.push(u))}return e.server==="hub"?Ds.updateConfigValue(s_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Ds.updateConfigValue(s_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:oK,set:o,skipped:i}}a(_K,"setRoutes");function uK(){let e=Ds.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(uK,"getRoutes");function lK(e){let t=KN.deleteRoutesValidator(e);if(t)throw WN(t,t.message,QN.BAD_REQUEST,void 0,void 0,!0);let r=Ds.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,_=!1;for(let u=0,l=e.routes.length;u<l;u++){let E=e.routes[u],d=!1;for(let h=0,T=s.length;h<T;h++){let R=s[h];if(E.host===R.host&&E.port===R.port){s.splice(h,1),d=!0,c=!0,i.push(E);break}}if(!d){let h=!0;for(let T=0,R=n.length;T<R;T++){let g=n[T];if(E.host===g.host&&E.port===g.port){n.splice(T,1),_=!0,h=!1,i.push(E);break}}h&&o.push(E)}}return c&&(s=ud.isEmptyOrZeroLength(s)?null:s,Ds.updateConfigValue(s_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),_&&(n=ud.isEmptyOrZeroLength(n)?null:n,Ds.updateConfigValue(s_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:cK,deleted:i,skipped:o}}a(lK,"deleteRoutes")});var ZN=f((X5,XN)=>{"use strict";var Ji=require("alasql"),Ps=require("recursive-iterator"),Ft=I(),EK=b(),Xi=m(),n_=class{constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,hK(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>Xi.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!Xi.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Xi.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=dK(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let _=this.affected_attributes.get(i).get(o).filter(u=>!Xi.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let l=new Ji.yy.Column({columnid:u});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),_.includes(u)||_.push(u)}),this.affected_attributes.get(i).set(o,_)}}),this.ast}};a(n_,"sql_statement_bucket");function dK(e){return e.filter(t=>t[Xi.PERMS_CRUD_ENUM.READ])}a(dK,"filterReadRestrictedAttrs");function hK(e,t,r,s,n){fK(e,t,r,s,n)}a(hK,"interpretAST");function Zi(e,t,r,s,n){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(Zi,"addSchemaTableToMap");function fK(e,t,r,s,n){if(!e){Ft.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Ji.yy.Insert?RK(e,t,r):e instanceof Ji.yy.Select?SK(e,t,r,s,n):e instanceof Ji.yy.Update?TK(e,t,r):e instanceof Ji.yy.Delete?mK(e,t,r):Ft.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(fK,"getRecordAttributesAST");function SK(e,t,r,s,n){if(!e){Ft.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(EK.isEmptyOrZeroLength(i)){Ft.error("No schema specified");return}e.from.forEach(c=>{Zi(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Zi(c.table,t,r,s,n)});let o=new Ps(e.columns);for(let{node:c}of o)if(c&&c.columnid){let _=c.tableid,u=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(u).has(_))if(r.has(_))_=r.get(_);else{Ft.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(c.columnid)<0&&t.get(u).get(_).push(c.columnid)}if(e.where){let c=new Ps(e.where),_=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let l=u.tableid?u.tableid:_;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Ft.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(u.columnid)<0&&t.get(i).get(l).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let _=new Ps(c.on);for(let{node:u}of _)if(u&&u.columnid){let l=u.tableid,E=n.get(l);if(!t.get(E).has(l))if(r.has(l))l=r.get(l);else{Ft.info(`table specified as ${l} not found.`);continue}t.get(E).get(l).indexOf(u.columnid)<0&&t.get(E).get(l).push(u.columnid)}}),e.order){let c=new Ps(e.order);for(let{node:_}of c)if(_&&_.columnid){let u=_.tableid,l=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(l).has(u))if(r.has(u))u=r.get(u);else{Ft.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(_.columnid)<0&&t.get(l).get(u).push(_.columnid)}}}a(SK,"getSelectAttributes");function TK(e,t,r){if(!e){Ft.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Ps(e.columns),n=e.table.databaseid;Zi(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&Ed(e.table.tableid,n,i.columnid,t,r)}a(TK,"getUpdateAttributes");function mK(e,t,r){if(!e){Ft.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Ps(e.where),n=e.table.databaseid;Zi(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&Ed(e.table.tableid,n,i.columnid,t,r)}a(mK,"getDeleteAttributes");function RK(e,t,r){if(!e){Ft.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Ps(e.columns),n=e.into.databaseid;Zi(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&Ed(e.into.tableid,n,i.columnid,t,r)}a(RK,"getInsertAttributes");function Ed(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(Ed,"pushAttribute");XN.exports=n_});var eO=f((z5,jN)=>{var AK=require("os"),zN=B();jN.exports={checkPermission:pK};function pK(){if(AK.userInfo().username!==zN.get("install_user"))throw new Error(`Error: Must execute as ${zN.get("install_user")}`)}a(pK,"checkPermission")});var hd=f((ej,iO)=>{var a_=tn(),tO=require("chalk"),er=I(),rO=eO(),sO=require("prompt"),{promisify:gK}=require("util"),i_=m(),NK=require("fs-extra"),OK=require("path"),IK=b(),bK=QE(),nO=B();nO.initSync();var wK=require("moment"),CK=gK(sO.get),LK=OK.join(nO.getHdbBasePath(),i_.LICENSE_KEY_DIR_NAME,i_.LICENSE_FILE_NAME,i_.LICENSE_FILE_NAME);iO.exports={getFingerprint:UK,setLicense:yK,parseLicense:dd,register:MK,getRegistrationInfo:PK};async function yK(e){if(e&&e.key&&e.company){try{er.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await dd(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw er.error(r),er.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(yK,"setLicense");async function UK(){try{rO.checkPermission()}catch(t){throw er.error(t),new Error("You do not have permission to generate a fingerprint.")}let e={};try{e=await a_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw er.error(r),er.error(t),new Error(r)}return e}a(UK,"getFingerprint");async function dd(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");console.log("Validating license input...");let r=a_.validateLicense(e,t);if(console.log("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(console.log("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(console.log(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{er.info("writing license to disk"),await NK.writeFile(LK,JSON.stringify({license_key:e,company:t}))}catch(s){throw er.error("Failed to write License"),s}return"Registration successful."}a(dd,"parseLicense");async function MK(){let e=await DK();return dd(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(MK,"register");async function DK(){try{rO.checkPermission()}catch(s){return console.error(s.message)}let e=await a_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:tO.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:tO.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{sO.start()}catch(s){er.error(s)}let r;try{r=await CK(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(DK,"promptForRegistration");async function PK(){let e={registered:!1,version:null,storage_type:null,ram_allocation:null,license_expiration_date:null},t;try{t=await a_.getLicense()}catch(r){throw er.error(`There was an error when searching licenses due to: ${r.message}`),r}if(IK.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=bK.version(),e.storage_type=i_.STORAGE_TYPES_ENUM.LMDB,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=wK.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(PK,"getRegistrationInfo")});var oO=f((rj,aO)=>{"use strict";var BK=oe(),o_=class{constructor(t,r,s,n,i,o,c,_,u,l,E,d,h,T){this.port=t,o===null&&(o=void 0),this.server_name=r+BK.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:c,verify:_},this.leafnodes={port:u,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:E,routes:d,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:_}},this.accounts={SYS:{users:h},HDB:{users:T}},this.system_account="SYS"}};a(o_,"HubConfigObject");aO.exports=o_});var uO=f((nj,_O)=>{"use strict";var cO=oe(),c_=class{constructor(t,r,s,n,i,o,c,_,u,l,E){this.port=t,E===null&&(E=void 0),this.server_name=r+cO.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+cO.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:l,ca_file:E,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:E,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:E,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:_,jetstream:"enabled"}},this.system_account="SYS"}};a(c_,"LeafConfigObject");_O.exports=c_});var EO=f((aj,lO)=>{"use strict";var __=class{constructor(t,r){this.user=t,this.password=r}};a(__,"HdbUserObject");lO.exports=__});var hO=f((cj,dO)=>{"use strict";var vK=oe(),u_=class{constructor(t,r){this.user=t+vK.SERVER_SUFFIX.ADMIN,this.password=r}};a(u_,"SysUserObject");dO.exports=u_});var Td=f((uj,TO)=>{"use strict";var zi=require("path"),h_=require("fs-extra"),HK=oO(),qK=uO(),GK=EO(),FK=hO(),fd=Vr(),wn=b(),ze=lr(),d_=m(),l_=oe(),{CONFIG_PARAMS:de}=d_,ea=I(),f_=B(),fO=xr(),Sd=be(),ji="clustering",xK=1e4,SO=5;TO.exports={generateNatsConfig:VK,removeNatsConfig:kK};async function VK(e=!1,t=void 0){f_.initSync();let r=f_.get(de.ROOTPATH),s=zi.join(r,ji,l_.PID_FILES.HUB),n=zi.join(r,ji,l_.PID_FILES.LEAF),i=ze.getConfigFromFile(de.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=zi.join(r,ji,l_.NATS_CONFIG_FILES.HUB_SERVER),c=zi.join(r,ji,l_.NATS_CONFIG_FILES.LEAF_SERVER),_=ze.getConfigFromFile(de.CLUSTERING_TLS_CERTIFICATE),u=ze.getConfigFromFile(de.CLUSTERING_TLS_PRIVATEKEY),l=ze.getConfigFromFile(de.CLUSTERING_TLS_CERT_AUTH),E=ze.getConfigFromFile(de.CLUSTERING_TLS_INSECURE),d=ze.getConfigFromFile(de.CLUSTERING_TLS_VERIFY),h=ze.getConfigFromFile(de.CLUSTERING_NODENAME),T=ze.getConfigFromFile(de.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await Sd.checkNATSServerInstalled()||S_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let R=await fd.listUsers(),g=ze.getConfigFromFile(de.CLUSTERING_USER),H=await fd.getClusterUser();(wn.isEmpty(H)||H.active!==!0)&&S_(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await E_(de.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await E_(de.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await E_(de.CLUSTERING_HUBSERVER_NETWORK_PORT),await E_(de.CLUSTERING_LEAFSERVER_NETWORK_PORT));let x=[],q=[];for(let[os,wr]of R.entries())wr.role.role===d_.ROLE_TYPES_ENUM.CLUSTER_USER&&wr.active&&(x.push(new FK(wr.username,fO.decrypt(wr.hash))),q.push(new GK(wr.username,fO.decrypt(wr.hash))));let ye=[],{hub_routes:U}=ze.getClusteringRoutes();if(!wn.isEmptyOrZeroLength(U))for(let os of U)ye.push(`tls://${H.sys_name_encoded}:${H.uri_encoded_d_hash}@${os.host}:${os.port}`);let $=new HK(ze.getConfigFromFile(de.CLUSTERING_HUBSERVER_NETWORK_PORT),h,s,_,u,l,E,d,T,ze.getConfigFromFile(de.CLUSTERING_HUBSERVER_CLUSTER_NAME),ze.getConfigFromFile(de.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),ye,x,q);l==null&&(delete $.tls.ca_file,delete $.leafnodes.tls.ca_file),t=wn.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===d_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await h_.writeJson(o,$),ea.trace(`Hub server config written to ${o}`));let ue=`tls://${H.sys_name_encoded}:${H.uri_encoded_d_hash}@0.0.0.0:${T}`,ae=`tls://${H.uri_encoded_name}:${H.uri_encoded_d_hash}@0.0.0.0:${T}`,qn=new qK(ze.getConfigFromFile(de.CLUSTERING_LEAFSERVER_NETWORK_PORT),h,n,i,[ue],[ae],x,q,_,u,l,E);l==null&&delete qn.tls.ca_file,(t===void 0||t===d_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await h_.writeJson(c,qn),ea.trace(`Leaf server config written to ${c}`))}a(VK,"generateNatsConfig");async function E_(e){let t=f_.get(e);return wn.isEmpty(t)&&S_(`port undefined for '${e}'`),await wn.isPortTaken(t)&&S_(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(E_,"isPortAvailable");function S_(e){let t=`Error generating clustering config: ${e}`;ea.error(t),console.error(t),process.exit(1)}a(S_,"generateNatsConfigError");async function kK(e){let{port:t,config_file:r}=Sd.getServerConfig(e),{username:s,decrypt_hash:n}=await fd.getClusterUser(),i=0,o=500;for(;i<SO;){try{let u=await Sd.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){ea.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=SO)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 wn.async_set_timeout(o*i)}let c="0".repeat(xK),_=zi.join(f_.get(de.ROOTPATH),ji,r);await h_.writeFile(_,c),await h_.remove(_),ea.notify(e,"started.")}a(kK,"removeNatsConfig")});var NO=f((Ej,gO)=>{"use strict";var ht=B(),$K=tn(),F=m(),ta=oe(),Ar=require("path"),{PACKAGE_ROOT:T_}=m(),mO=B(),Cn="/dev/null",YK=Ar.join(T_,"launchServiceScripts"),RO=Ar.join(T_,"utility/scripts"),KK=Ar.join(RO,F.HDB_RESTART_SCRIPT),AO=Ar.resolve(T_,"dependencies",`${process.platform}-${process.arch}`,ta.NATS_BINARY_NAME);function pO(){let t=$K.licenseSearch().ram_allocation||F.RAM_ALLOCATION_ENUM.DEFAULT,r=F.MEM_SETTING_KEY+t;return{name:F.PROCESS_DESCRIPTORS.HDB,script:F.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:{[F.PROCESS_NAME_ENV_PROP]:F.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0},node_args:r,cwd:T_}}a(pO,"generateMainServerConfig");var WK=9930;function QK(){ht.initSync(!0);let e=ht.get(F.CONFIG_PARAMS.ROOTPATH),t=Ar.join(e,"clustering",ta.NATS_CONFIG_FILES.HUB_SERVER),r=Ar.join(ht.get(F.HDB_SETTINGS_NAMES.LOG_PATH_KEY),F.LOG_NAMES.HDB),s=mO.get(F.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=ta.LOG_LEVEL_FLAGS[ht.get(F.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:F.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==WK?"-"+s:""),script:AO,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[F.PROCESS_NAME_ENV_PROP]:F.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return ht.get(F.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Cn,i.error_file=Cn),i}a(QK,"generateNatsHubServerConfig");var JK=9940;function XK(){ht.initSync(!0);let e=ht.get(F.CONFIG_PARAMS.ROOTPATH),t=Ar.join(e,"clustering",ta.NATS_CONFIG_FILES.LEAF_SERVER),r=Ar.join(ht.get(F.HDB_SETTINGS_NAMES.LOG_PATH_KEY),F.LOG_NAMES.HDB),s=mO.get(F.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=ta.LOG_LEVEL_FLAGS[ht.get(F.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:F.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==JK?"-"+s:""),script:AO,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[F.PROCESS_NAME_ENV_PROP]:F.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return ht.get(F.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Cn,i.error_file=Cn),i}a(XK,"generateNatsLeafServerConfig");function ZK(){ht.initSync();let e=Ar.join(ht.get(F.CONFIG_PARAMS.LOGGING_ROOT),F.LOG_NAMES.HDB),t={name:F.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:F.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[F.PROCESS_NAME_ENV_PROP]:F.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:YK,autorestart:!1};return ht.get(F.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Cn,t.error_file=Cn),t}a(ZK,"generateClusteringUpgradeV4ServiceConfig");function zK(){return{...{name:F.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[F.PROCESS_NAME_ENV_PROP]:F.PROCESS_DESCRIPTORS.RESTART_HDB},instances:1,autorestart:!1,cwd:RO},script:KK}}a(zK,"generateRestart");function jK(){return{apps:[pO()]}}a(jK,"generateAllServiceConfigs");gO.exports={generateAllServiceConfigs:jK,generateMainServerConfig:pO,generateRestart:zK,generateNatsHubServerConfig:QK,generateNatsLeafServerConfig:XK,generateClusteringUpgradeV4ServiceConfig:ZK}});var qO=f((Aj,HO)=>{"use strict";var Y=m(),IO=b(),ra=Td(),m_=be(),tr=oe(),K=require("pm2"),ts=NO(),R_=B(),pr=I(),eW=Rr(),{startWorker:md,onMessageFromWorkers:tW}=fs(),hj=bn(),rW=require("util"),bO=require("child_process"),{execFile:sW}=bO,fj=rW.promisify(bO.exec),Sj=require("systeminformation");HO.exports={enterPM2Mode:nW,start:Bs,stop:Rd,reload:wO,restart:CO,list:Ad,describe:pd,connect:gr,kill:_W,startAllServices:uW,startService:gd,getUniqueServicesList:yO,restartAllServices:lW,isServiceRegistered:UO,reloadStopStart:MO,restartHdb:LO,deleteProcess:oW,startClusteringProcesses:BO,startClusteringThreads:vO,isHdbRestartRunning:cW,isClusteringRunning:dW,stopClustering:EW,reloadClustering:hW};var{PACKAGE_ROOT:Tj}=m(),mj=m(),{loggerWithTag:Rj}=pr,sa=!1;tW(e=>{e.type==="restart"&&R_.initSync(!0)});function nW(){sa=!0}a(nW,"enterPM2Mode");function gr(){return new Promise((e,t)=>{K.connect((r,s)=>{pr.setupConsoleLogging(),r&&t(r),e(s)})})}a(gr,"connect");var je,iW=10,OO;function Bs(e){if(sa)return aW(e);let t=sW(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=je.indexOf(t);i>-1&&je.splice(i,1),!OO&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<iW&&Bs(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=R_.get(Y.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,_=0,u;for(;c=o.exec(n);){if(c.index&&tr.LOG_LEVEL_HIERARCHY[i]>=tr.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===tr.LOG_LEVELS.ERR||u===tr.LOG_LEVELS.WRN?pr.OUTPUTS.STDERR:pr.OUTPUTS.STDOUT;pr.logCustomLevel(u||"info",d,r,n.slice(_,c.index).trim())}let[l,E]=c;_=c.index+l.length,u=tr.LOG_LEVELS[E]}if(tr.LOG_LEVEL_HIERARCHY[i]>=tr.LOG_LEVEL_HIERARCHY[u||"info"]){let l=u===tr.LOG_LEVELS.ERR||u===tr.LOG_LEVELS.WRN?pr.OUTPUTS.STDERR:pr.OUTPUTS.STDOUT;pr.logCustomLevel(u||"info",l,r,n.slice(_).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!je){je=[];let n=a(()=>{OO=!0,je&&(je.map(i=>i.kill()),process.exit(0))},"kill_children");process.on("exit",n),process.on("SIGINT",n),process.on("SIGQUIT",n),process.on("SIGTERM",n)}je.push(t)}a(Bs,"start");function aW(e){return new Promise(async(t,r)=>{try{await gr()}catch(s){r(s)}K.start(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(aW,"startWithPM2");function Rd(e){if(!sa){for(let t of je||[])t.name===e&&(je.splice(je.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await gr()}catch(s){r(s)}K.stop(e,async(s,n)=>{s&&(K.disconnect(),r(s)),K.delete(e,(i,o)=>{i&&(K.disconnect(),r(s)),K.disconnect(),t(o)})})})}a(Rd,"stop");function wO(e){return new Promise(async(t,r)=>{try{await gr()}catch(s){r(s)}K.reload(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(wO,"reload");function CO(e){if(!sa)for(let t of je||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await gr()}catch(s){r(s)}K.restart(e,(s,n)=>{K.disconnect(),t(n)})})}a(CO,"restart");function oW(e){return new Promise(async(t,r)=>{try{await gr()}catch(s){r(s)}K.delete(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(oW,"deleteProcess");async function LO(){await Bs(ts.generateRestart())}a(LO,"restartHdb");async function cW(){let e=await Ad();for(let t in e)if(e[t].name===Y.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(cW,"isHdbRestartRunning");function Ad(){return new Promise(async(e,t)=>{try{await gr()}catch(r){t(r)}K.list((r,s)=>{r&&(K.disconnect(),t(r)),K.disconnect(),e(s)})})}a(Ad,"list");function pd(e){return new Promise(async(t,r)=>{try{await gr()}catch(s){r(s)}K.describe(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(pd,"describe");function _W(){if(!sa){for(let e of je||[])e.kill();je=[];return}return new Promise(async(e,t)=>{try{await gr()}catch(r){t(r)}K.killDaemon((r,s)=>{r&&(K.disconnect(),t(r)),K.disconnect(),e(s)})})}a(_W,"kill");async function uW(){try{await BO(),await vO(),await Bs(ts.generateAllServiceConfigs())}catch(e){throw K.disconnect(),e}}a(uW,"startAllServices");async function gd(e){try{let t;switch(e=e.toLowerCase(),e){case Y.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=ts.generateMainServerConfig();break;case Y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=ts.generateNatsIngestServiceConfig();break;case Y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=ts.generateNatsReplyServiceConfig();break;case Y.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=ts.generateNatsHubServerConfig(),await Bs(t),await ra.removeNatsConfig(e);return;case Y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=ts.generateNatsLeafServerConfig(),await Bs(t),await ra.removeNatsConfig(e);return;case Y.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=ts.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Bs(t)}catch(t){throw K.disconnect(),t}}a(gd,"startService");async function yO(){try{let e=await Ad(),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 K.disconnect(),e}}a(yO,"getUniqueServicesList");async function lW(e=[]){try{let t=!1,r=await yO();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Y.PROCESS_DESCRIPTORS.HDB?t=!0:await CO(o))}t&&await MO(Y.PROCESS_DESCRIPTORS.HDB)}catch(t){throw K.disconnect(),t}}a(lW,"restartAllServices");async function UO(e){return je?.find(t=>t.name===e)?!0:!IO.isEmptyOrZeroLength(await pd(e))}a(UO,"isServiceRegistered");async function MO(e){let t=e===Y.PROCESS_DESCRIPTORS.HDB?R_.get(Y.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):R_.get(Y.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await pd(e),s=IO.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await Rd(e),await gd(e)):e===Y.PROCESS_DESCRIPTORS.HDB?await LO():await wO(e)}a(MO,"reloadStopStart");var DO,PO;async function BO(){for(let e in Y.CLUSTERING_PROCESSES){let t=Y.CLUSTERING_PROCESSES[e];await gd(t)}}a(BO,"startClusteringProcesses");async function vO(){DO=md(Y.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,{name:Y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE}),PO=md(Y.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await m_.createWorkQueueStream(tr.WORK_QUEUE_CONSUMER_NAMES),await m_.updateLocalStreams();let e=await eW.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Y.PRE_4_0_0_VERSION){pr.info("Starting clustering upgrade 4.0.0 process"),md(Y.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(vO,"startClusteringThreads");async function EW(){for(let e in Y.CLUSTERING_PROCESSES)if(e===Y.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)await DO.terminate();else if(e===Y.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await PO.terminate();else{let t=Y.CLUSTERING_PROCESSES[e];await Rd(t)}}a(EW,"stopClustering");async function dW(){for(let e in Y.CLUSTERING_PROCESSES){let t=Y.CLUSTERING_PROCESSES[e];if(await UO(t)===!1)return!1}return!0}a(dW,"isClusteringRunning");async function hW(){await ra.generateNatsConfig(!0),await m_.reloadNATSHub(),await m_.reloadNATSLeaf(),await ra.removeNatsConfig(Y.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ra.removeNatsConfig(Y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(hW,"reloadClustering")});var Ld=f((gj,$O)=>{"use strict";var fW=require("minimist"),{isMainThread:Id,parentPort:xO}=require("worker_threads"),se=m(),{PROCESS_DESCRIPTORS_VALIDATE:na}=se,rr=I(),bd=b(),A_=Td(),Ln=be(),Nd=oe(),VO=lr(),sr=qO(),GO=bn(),SW=fu(),{restartWorkers:p_,onMessageFromWorkers:TW}=fs(),{handleHDBError:mW,hdb_errors:RW}=L(),{HTTP_STATUS_CODES:AW}=RW,g_=B();g_.initSync();var ia=`Restarting HarperDB. This may take up to ${se.RESTART_TIMEOUT_MS/1e3} seconds.`,pW="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",FO="Clustering is not enabled so cannot be restarted",gW="Invalid service",vs,xt;$O.exports={restart:kO,restartService:wd};Id&&TW(e=>{e.type===se.ITC_EVENT_TYPES.RESTART&&(e.workerType?wd({service:e.workerType}):kO({operation:"restart"}))});async function kO(e){xt=Object.keys(e).length===0,vs=await sr.isServiceRegistered(se.HDB_PROC_DESCRIPTOR);let t=fW(process.argv);if(t.service){await wd(t);return}if(xt&&!vs){console.error(pW);return}if(xt&&console.log(ia),vs){sr.enterPM2Mode(),rr.notify(ia);let r=SW(Object.keys(se.CONFIG_PARAM_MAP),!0);return bd.isEmptyOrZeroLength(Object.keys(r))||VO.updateConfigValue(void 0,void 0,r,!0,!0),OW(),ia}return Id?(rr.notify(ia),await Cd(),setTimeout(()=>{p_()},50)):xO.postMessage({type:se.ITC_EVENT_TYPES.RESTART}),ia}a(kO,"restart");async function wd(e){let{service:t}=e;if(se.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw mW(new Error,gW,AW.BAD_REQUEST,void 0,void 0,!0);if(vs=await sr.isServiceRegistered(se.HDB_PROC_DESCRIPTOR),!Id)return xO.postMessage({type:se.ITC_EVENT_TYPES.RESTART,workerType:t}),`Restarting ${t}`;let r;switch(t){case na.clustering:if(!g_.get(se.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=FO;break}xt&&console.log("Restarting clustering"),rr.notify("Restarting clustering"),await Cd();break;case na.clustering_config:case na["clustering config"]:if(!g_.get(se.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=FO;break}xt&&console.log("Restarting clustering_config"),rr.notify("Restarting clustering_config"),await sr.reloadClustering();break;case"custom_functions":case"custom functions":case na.harperdb:case na.http_workers:if(xt&&!vs){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}xt&&console.log("Restarting http_workers"),rr.notify("Restarting http_workers"),vs?await sr.restart(se.HDB_PROC_DESCRIPTOR):setTimeout(()=>{p_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(rr.error(r),xt&&console.error(r),r):`Restarting ${t}`}a(wd,"restartService");async function NW(){await Ln.publishToStream(`${Nd.SUBJECT_PREFIXES.TXN}.${Nd.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,Nd.WORK_QUEUE_CONSUMER_NAMES.stream_name,Ln.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(NW,"postDummyNatsMsg");async function OW(){await Cd(),await sr.restart(se.HDB_PROC_DESCRIPTOR),await bd.async_set_timeout(2e3),g_.get(se.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await Od(),xt&&(await Ln.closeConnection(),process.exit(0))}a(OW,"restartPM2Mode");async function Cd(){if(!VO.getConfigFromFile(se.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await GO.getHDBProcessInfo()).clustering.length===0)rr.trace("Clustering not running, restart will start clustering services"),await A_.generateNatsConfig(!0),await sr.startClusteringProcesses(),await sr.startClusteringThreads(),await Od(),xt&&await Ln.closeConnection();else{await NW(),await A_.generateNatsConfig(!0),vs?(rr.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await sr.restart(se.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await sr.restart(se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await GO.getHDBProcessInfo()).clustering.forEach(n=>{rr.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await bd.async_set_timeout(3e3),await Od(),await Ln.updateLocalStreams(),xt&&await Ln.closeConnection(),rr.trace("Restart clustering restarting ingest and reply service threads");let t=p_(se.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=p_(se.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(Cd,"restartClustering");async function Od(){await A_.removeNatsConfig(se.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await A_.removeNatsConfig(se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(Od,"removeNatsConfig")});var tI=f((Ij,eI)=>{"use strict";var Oj=require("lodash"),qe=m(),{handleHDBError:YO,hdb_errors:IW}=L(),{HDB_ERROR_MSGS:bW,HTTP_STATUS_CODES:wW}=IW,yd=I();eI.exports={getRolePermissions:LW};var Hs=Object.create(null),CW=a(e=>({key:e,perms:{}}),"perms_template_obj"),JO=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),XO=a((e=!1,t=!1,r=!1,s=!1)=>({[qe.PERMS_CRUD_ENUM.READ]:e,[qe.PERMS_CRUD_ENUM.INSERT]:t,[qe.PERMS_CRUD_ENUM.UPDATE]:r,[qe.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),Ud=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...XO(t,r,s,n)}),"table_perms_template"),KO=a((e,t=XO())=>({attribute_name:e,describe:jO(t),[aa]:t[aa],[Md]:t[Md],[Dd]:t[Dd]}),"attr_perms_template"),WO=a((e,t=!1)=>({attribute_name:e,describe:t,[aa]:t}),"timestamp_attr_perms_template"),{READ:aa,INSERT:Md,UPDATE:Dd}=qe.PERMS_CRUD_ENUM,ZO=Object.values(qe.PERMS_CRUD_ENUM),zO=[aa,Md,Dd];function LW(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[qe.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(Hs[t]&&Hs[t].key===s)return Hs[t].perms;let n=yW(e,r);return Hs[t]?Hs[t].key=s:Hs[t]=CW(s),Hs[t].perms=n,n}catch(r){if(!e[qe.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[qe.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<qe.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw yd.error(s),yd.debug(r),YO(new Error,bW.OUTDATED_PERMS_TRANSLATION_ERROR,wW.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
8
|
+
${r.stack}`;throw yd.error(s),YO(new Error)}}}a(LW,"getRolePermissions");function yW(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[qe.SYSTEM_SCHEMA_NAME]=s[qe.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=UW(t[i]);return}r[i]=JO(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],_=t[i][o],u=MW(c,_);r[i].describe||ZO.forEach(l=>{u[l]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=Ud()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=Ud()})}),r}a(yW,"translateRolePermissions");function UW(e){let t=JO(!0);return Object.keys(e).forEach(r=>{t.tables[r]=Ud(!0,!0,!0,!0,!0)}),t}a(UW,"createStructureUserPermissions");function MW(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((u,l)=>{let{attribute_name:E}=l,d=l;return qe.TIME_STAMP_NAMES.includes(E)&&(d=WO(E,l[aa])),u[E]=d,u},{}),o=t[qe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_HASH_ATTRIBUTE_KEY],c=!!i[o],_=KO(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let l=i[u];l.describe=jO(l),n.attribute_permissions.push(l),c||DW(l,_)}else if(u!==o){let l;qe.TIME_STAMP_NAMES.includes(u)?l=WO(u):l=KO(u),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(_),n.describe=QO(n),n}else return e.describe=QO(e),e}a(MW,"getTableAttrPerms");function QO(e){return ZO.filter(t=>e[t]).length>0}a(QO,"getSchemaTableDescribePerm");function jO(e){return zO.filter(t=>e[t]).length>0}a(jO,"getAttributeDescribePerm");function DW(e,t){zO.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(DW,"checkForHashPerms")});var cI=f((wj,oI)=>{"use strict";var he=require("joi"),rI=require("fs-extra"),sI=require("path"),yn=te(),nI=B(),iI=m(),aI=I(),{hdb_errors:PW}=L(),{HDB_ERROR_MSGS:et}=PW,rs=/^[a-zA-Z0-9-_]+$/;oI.exports={getDropCustomFunctionValidator:vW,setCustomFunctionValidator:HW,addCustomFunctionProjectValidator:qW,dropCustomFunctionProjectValidator:GW,packageCustomFunctionProjectValidator:FW,deployCustomFunctionProjectValidator:xW};function oa(e,t,r){try{let s=nI.get(iI.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=sI.join(s,t);return rI.existsSync(n)?e?t:r.message(et.PROJECT_EXISTS):e?r.message(et.NO_PROJECT):t}catch(s){return aI.error(s),r.message(et.VALIDATION_ERR)}}a(oa,"checkProjectExists");function BW(e,t,r,s){try{let n=nI.get(iI.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=sI.join(n,e,t,r+".js");return rI.existsSync(i)?r:s.message(et.NO_FILE)}catch(n){return aI.error(n),s.message(et.VALIDATION_ERR)}}a(BW,"checkFileExists");function vW(e){let t=he.object({project:he.string().pattern(rs).custom(oa.bind(null,!0)).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().pattern(rs).custom(BW.bind(null,e.project,e.type)).required().messages({"string.pattern.base":et.BAD_FILE_NAME})});return yn.validateBySchema(e,t)}a(vW,"getDropCustomFunctionValidator");function HW(e){let t=he.object({project:he.string().pattern(rs).custom(oa.bind(null,!0)).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().pattern(rs).required().messages({"string.pattern.base":et.BAD_FILE_NAME}),function_content:he.string().required()});return yn.validateBySchema(e,t)}a(HW,"setCustomFunctionValidator");function qW(e){let t=he.object({project:he.string().pattern(rs).custom(oa.bind(null,!1)).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME})});return yn.validateBySchema(e,t)}a(qW,"addCustomFunctionProjectValidator");function GW(e){let t=he.object({project:he.string().pattern(rs).custom(oa.bind(null,!0)).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME})});return yn.validateBySchema(e,t)}a(GW,"dropCustomFunctionProjectValidator");function FW(e){let t=he.object({project:he.string().pattern(rs).custom(oa.bind(null,!0)).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME}),skip_node_modules:he.boolean()});return yn.validateBySchema(e,t)}a(FW,"packageCustomFunctionProjectValidator");function xW(e){let t=he.object({project:he.string().pattern(rs).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME}),payload:he.string().required().messages({"string.pattern.base":et.BAD_PACKAGE})});return yn.validateBySchema(e,t)}a(xW,"deployCustomFunctionProjectValidator")});var qd=f((Lj,lI)=>{"use strict";var we=require("fs-extra"),Pd=require("fast-glob"),ee=require("path"),_I=require("tar-fs"),uI=require("uuid").v4,Bd=require("normalize-path"),qs=cI(),ge=I(),ft=m(),St=B(),{PACKAGE_ROOT:VW}=m(),{handleHDBError:Ge,hdb_errors:kW}=L(),{HDB_ERROR_MSGS:ss,HTTP_STATUS_CODES:Fe}=kW,$W=ee.join(VW,"custom_function_template"),vd=ee.join(St.get(ft.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function Hd(){let e=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw Ge(new Error,ss.NOT_ENABLED,Fe.BAD_REQUEST,void 0,void 0,!0)}a(Hd,"isCFEnabled");function YW(){ge.trace("getting custom api status");let e={};try{e={is_enabled:St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw Ge(new Error,ss.FUNCTION_STATUS,Fe.INTERNAL_SERVER_ERROR,ge.ERR,t)}return e}a(YW,"customFunctionsStatus");function KW(){ge.trace("getting custom api endpoints");let e={},t=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{Pd.sync(Bd(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:Pd.sync(Bd(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:Pd.sync(Bd(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Ge(new Error,ss.GET_FUNCTIONS,Fe.INTERNAL_SERVER_ERROR,ge.ERR,r)}return e}a(KW,"getCustomFunctions");function WW(e){e.project&&(e.project=ee.parse(e.project).name),e.file&&(e.file=ee.parse(e.file).name);let t=qs.getDropCustomFunctionValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("getting custom api endpoint file content");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=ee.join(r,s,n,i+".js");try{return we.readFileSync(o,{encoding:"utf8"})}catch(c){throw Ge(new Error,ss.GET_FUNCTION,Fe.INTERNAL_SERVER_ERROR,ge.ERR,c)}}a(WW,"getCustomFunction");function QW(e){Hd(),e.project&&(e.project=ee.parse(e.project).name),e.file&&(e.file=ee.parse(e.file).name);let t=qs.setCustomFunctionValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("setting custom function file content");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return we.outputFileSync(ee.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Ge(new Error,ss.SET_FUNCTION,Fe.INTERNAL_SERVER_ERROR,ge.ERR,c)}}a(QW,"setCustomFunction");function JW(e){e.project&&(e.project=ee.parse(e.project).name),e.file&&(e.file=ee.parse(e.file).name);let t=qs.getDropCustomFunctionValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("dropping custom function file");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return we.unlinkSync(ee.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Ge(new Error,ss.DROP_FUNCTION,Fe.INTERNAL_SERVER_ERROR,ge.ERR,o)}}a(JW,"dropCustomFunction");function XW(e){Hd(),e.project&&(e.project=ee.parse(e.project).name);let t=qs.addCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("adding custom function project");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=ee.join(r,s);return we.mkdirSync(n,{recursive:!0}),we.copySync($W,n),`Successfully created custom function project: ${s}`}catch(n){throw Ge(new Error,ss.ADD_FUNCTION,Fe.INTERNAL_SERVER_ERROR,ge.ERR,n)}}a(XW,"addCustomFunctionProject");function ZW(e){e.project&&(e.project=ee.parse(e.project).name);let t=qs.dropCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("dropping custom function project");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=ee.join(r,s);return we.rmSync(n,{recursive:!0}),`Successfully deleted project: ${s}`}catch(n){throw Ge(new Error,ss.DROP_FUNCTION_PROJECT,Fe.INTERNAL_SERVER_ERROR,ge.ERR,n)}}a(ZW,"dropCustomFunctionProject");async function zW(e){e.project&&(e.project=ee.parse(e.project).name);let t=qs.packageCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("packaging custom function project");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=ee.join(r,s),i=uI();if(!we.existsSync(n)){let l=`Unable to locate custom function project: ${s}`;throw ge.error(l),l}we.ensureDirSync(vd);let c=ee.join(vd,`${i}.tar`),_={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(_={ignore:l=>l.includes(ee.join(n,"node_modules"))}),_I.pack(n,_).pipe(we.createWriteStream(c)),await new Promise(l=>setTimeout(l,2e3));let u=we.readFileSync(c,{encoding:"base64"});return we.unlinkSync(c),{project:s,payload:u,file:c}}a(zW,"packageCustomFunctionProject");async function jW(e){Hd(),e.project&&(e.project=ee.parse(e.project).name);let t=qs.deployCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("deploying custom function project");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n}=e,i=ee.join(r,s);await we.ensureDir(i);let o,c;do o=ee.join(vd,uI()+".tar"),c=await we.pathExists(o);while(c);await we.outputFile(o,n,{encoding:"base64"});let _=we.createReadStream(o);return _.pipe(_I.extract(i)),await new Promise(u=>_.on("end",u)),await we.unlink(o),`Successfully deployed project: ${s}`}a(jW,"deployCustomFunctionProject");lI.exports={customFunctionsStatus:YW,getCustomFunctions:KW,getCustomFunction:WW,setCustomFunction:QW,dropCustomFunction:JW,addCustomFunctionProject:XW,dropCustomFunctionProject:ZW,packageCustomFunctionProject:zW,deployCustomFunctionProject:jW}});var Gd=f((Uj,dI)=>{"use strict";var nr=require("joi"),EI=te();dI.exports={readTransactionLogValidator:eQ,deleteTransactionLogsBeforeValidator:tQ};function eQ(e){let t=nr.object({schema:nr.string().required(),table:nr.string().required(),from:nr.date().timestamp(),to:nr.date().timestamp(),limit:nr.number().min(1)});return EI.validateBySchema(e,t)}a(eQ,"readTransactionLogValidator");function tQ(e){let t=nr.object({schema:nr.string().required(),table:nr.string().required(),timestamp:nr.date().timestamp().required()});return EI.validateBySchema(e,t)}a(tQ,"deleteTransactionLogsBeforeValidator")});var O_=f((Dj,mI)=>{"use strict";var Fd=m(),N_=be(),hI=b(),fI=B(),SI=xr(),{handleHDBError:Un,hdb_errors:rQ}=L(),{HTTP_STATUS_CODES:Mn}=rQ,{readTransactionLogValidator:sQ,deleteTransactionLogsBeforeValidator:nQ}=Gd(),TI="This operation relies on clustering and cannot run with it disable.",iQ="Logs successfully deleted from transaction log.",aQ="All logs successfully deleted from transaction log.";mI.exports={readTransactionLog:oQ,deleteTransactionLogsBefore:cQ};async function*oQ(e){let t=sQ(e);if(t)throw Un(t,t.message,Mn.BAD_REQUEST,void 0,void 0,!0);if(!fI.get(Fd.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Un(new Error,TI,Mn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=hI.checkSchemaTableExist(r,s);if(n)throw Un(new Error,n,Mn.NOT_FOUND,void 0,void 0,!0);let i=SI.createNatsTableStreamName(r,s),o=await N_.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let _=Math.floor(c?.nats_timestamp/1e6);if(e.to&&_>e.to)break;let u={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:_,records:c?.entry?.records};c?.entry?.operation===Fd.OPERATIONS_ENUM.DELETE&&(u.hash_values=c?.entry?.hash_values),yield u}}a(oQ,"readTransactionLog");async function cQ(e){let t=nQ(e);if(t)throw Un(t,t.message,Mn.BAD_REQUEST,void 0,void 0,!0);if(!fI.get(Fd.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Un(new Error,TI,Mn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=hI.checkSchemaTableExist(r,s);if(i)throw Un(new Error,i,Mn.NOT_FOUND,void 0,void 0,!0);let o=SI.createNatsTableStreamName(r,s),{jsm:c}=await N_.getNATSReferences(),_=await N_.getStreamInfo(o),u=new Date(_.state.first_ts).getTime();if(n<=u)return`No transactions exist before: ${n}`;let l=iQ,E,d=new Date(_.state.last_ts).getTime();return n>d?(E=_.state.last_seq+1,l=aQ):E=(await N_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:E}),l}a(cQ,"deleteTransactionLogsBefore")});var Vd=f((Bj,CI)=>{"use strict";var I_=require("joi"),b_=require("path"),RI=require("fs-extra"),{exec:_Q}=require("child_process"),uQ=require("util"),AI=uQ.promisify(_Q),lQ=m(),{handleHDBError:Dn,hdb_errors:EQ}=L(),{HTTP_STATUS_CODES:Pn}=EQ,pI=B(),dQ=te(),w_=I();pI.initSync();var xd=pI.get(lQ.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),gI="npm install --omit=dev --json",hQ=`${gI} --dry-run`;CI.exports={installModules:fQ,auditModules:SQ};async function NI(e,t=void 0){let{stdout:r,stderr:s}=await AI(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
9
9
|
`,""));return r.replace(`
|
|
10
|
-
`,"")}a(
|
|
10
|
+
`,"")}a(NI,"runCommand");async function fQ(e){w_.info(`starting installModules for request: ${e}`);let t=wI(e);if(t)throw Dn(t,t.message,Pn.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?hQ:gI;await II(),await bI(r);let i={};for(let o=0,c=r.length;o<c;o++){let _=r[o];i[_]={npm_output:null,npm_error:null};let u=b_.join(xd,_),l,E=null;try{let{stdout:d,stderr:h}=await AI(n,{cwd:u});l=d?d.replace(`
|
|
11
11
|
`,""):null,E=h?h.replace(`
|
|
12
|
-
`,""):null}catch(d){d.stderr?i[_].npm_error=
|
|
13
|
-
`);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(gI,"parseNPMStdErr");async function dQ(e){w_.info(`starting auditModules for request: ${e}`);let t=II(e);if(t)throw Dn(t,t.message,Pn.BAD_REQUEST);let{projects:r}=e;await NI(),await OI(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=b_.join(Fd,o);s[o]={npm_output:null,npm_error:null};try{let _=await pI("npm audit --json",c);s[o].npm_output=JSON.parse(_)}catch(_){s[o].npm_error=gI(_.stderr)}}return w_.info(`finished auditModules with response ${s}`),s}a(dQ,"auditModules");async function NI(){try{return await pI("npm -v"),!0}catch{throw Dn(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Pn.BAD_REQUEST,void 0,void 0,!0)}}a(NI,"checkNPMInstalled");async function OI(e){if(!Array.isArray(e)||e.length===0)throw Dn(new Error,"projects argument must be an array with at least 1 element",Pn.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=b_.join(Fd,i.toString());if(!await TI.pathExists(o)){t.push(i);continue}let _=b_.join(o,"package.json");await TI.pathExists(_)||r.push(i)}if(t.length>0)throw Dn(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Pn.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Dn(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Pn.BAD_REQUEST,void 0,void 0,!0)}a(OI,"checkProjectPaths");function II(e){let t=I_.object({projects:I_.array().min(1).items(I_.string()).required(),dry_run:I_.boolean().default(!1)});return uQ.validateBySchema(e,t)}a(II,"modulesValidator")});var CI=f((Pj,wI)=>{"use strict";var C_=class{constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};a(C_,"PermissionTableResponseObject");wI.exports=C_});var yI=f((vj,LI)=>{"use strict";var L_=class{constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};a(L_,"PermissionAttributeResponseObject");LI.exports=L_});var Vd=f((qj,MI)=>{"use strict";var UI=CI(),hQ=yI(),{HDB_ERROR_MSGS:fQ}=it(),y_=class{constructor(){this.error=fQ.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new UI(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let _=new hQ(c,n[c]);i.push(_)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new UI(r,s,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};a(y_,"PermissionResponseObject");MI.exports=y_});var P_=f((Fj,WI)=>{"use strict";var kd=Ot(),U_=It(),Ct=Nc(),ua=Rs(),$d=Ts(),SQ=mE(),la=Vr(),M_=wE(),me=I(),TQ=yE(),mQ=Qc(),RQ=ed(),AQ=zc(),pQ=td(),gQ=rd(),NQ=id(),OQ=od(),Yd=ud(),Nr=b(),IQ=JN(),Kd=dd(),BI=Cd(),wt=m(),vI=jO(),bQ=bn(),HI=vc(),qI=lr(),Or=Hd(),wQ=require("alasql"),GI=O_(),FI=xd(),xI=Vd(),{handleHDBError:tt,hdb_errors:VI}=L(),{HDB_ERROR_MSGS:Ce,HTTP_STATUS_CODES:ca}=VI,p=new Map,kI="delete",ss="insert",ns="read",Gs="update",_a="describe",DI=ua.describeSchema.name,PI=ua.describeTable.name,$I={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},CQ="catchup",LQ="handleGetJob",yQ="handleGetJobsByStartDate",D_={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},UQ=[Ct.createTable.name,Ct.createAttribute.name,Ct.dropTable.name,Ct.dropAttribute.name],YI={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},N=class{constructor(t,r){this.requires_su=t,this.perms=r}};a(N,"permission");p.set(kd.insert.name,new N(!1,[ss]));p.set(kd.update.name,new N(!1,[Gs]));p.set(kd.upsert.name,new N(!1,[ss,Gs]));p.set(U_.searchByConditions.name,new N(!1,[ns]));p.set(U_.searchByHash.name,new N(!1,[ns]));p.set(U_.searchByValue.name,new N(!1,[ns]));p.set(U_.search.name,new N(!1,[ns]));p.set(Ct.createSchema.name,new N(!0,[]));p.set(Ct.createTable.name,new N(!0,[]));p.set(Ct.createAttribute.name,new N(!1,[ss]));p.set(Ct.dropSchema.name,new N(!0,[]));p.set(Ct.dropTable.name,new N(!0,[]));p.set(Ct.dropAttribute.name,new N(!0,[]));p.set(ua.describeSchema.name,new N(!1,[ns]));p.set(ua.describeTable.name,new N(!1,[ns]));p.set($d.deleteRecord.name,new N(!1,[kI]));p.set(la.addUser.name,new N(!0,[]));p.set(la.alterUser.name,new N(!0,[]));p.set(la.dropUser.name,new N(!0,[]));p.set(la.listUsersExternal.name,new N(!0,[]));p.set(M_.listRoles.name,new N(!0,[]));p.set(M_.addRole.name,new N(!0,[]));p.set(M_.alterRole.name,new N(!0,[]));p.set(M_.dropRole.name,new N(!0,[]));p.set(TQ.name,new N(!0,[]));p.set(mQ.name,new N(!0,[]));p.set(RQ.name,new N(!0,[]));p.set(AQ.name,new N(!0,[]));p.set(pQ.name,new N(!0,[]));p.set(gQ.name,new N(!0,[]));p.set(Yd.setRoutes.name,new N(!0,[]));p.set(Yd.getRoutes.name,new N(!0,[]));p.set(Yd.deleteRoutes.name,new N(!0,[]));p.set(qI.setConfiguration.name,new N(!0,[]));p.set(NQ.clusterStatus.name,new N(!0,[]));p.set(OQ.name,new N(!0,[]));p.set(Kd.getFingerprint.name,new N(!0,[]));p.set(Kd.setLicense.name,new N(!0,[]));p.set($d.deleteFilesBefore.name,new N(!0,[]));p.set($d.deleteAuditLogsBefore.name,new N(!0,[]));p.set(BI.restart.name,new N(!0,[]));p.set(BI.restartService.name,new N(!0,[]));p.set(SQ.name,new N(!0,[]));p.set(bQ.systemInformation.name,new N(!0,[]));p.set(qI.getConfiguration.name,new N(!0,[]));p.set(GI.readTransactionLog.name,new N(!0,[]));p.set(GI.deleteTransactionLogsBefore.name,new N(!0,[]));p.set(FI.installModules.name,new N(!0,[]));p.set(FI.auditModules.name,new N(!0,[]));p.set(HI.createTokens.name,new N(!1,[]));p.set(HI.refreshOperationToken.name,new N(!1,[]));p.set(Or.customFunctionsStatus.name,new N(!0,[]));p.set(Or.getCustomFunctions.name,new N(!0,[]));p.set(Or.getCustomFunction.name,new N(!0,[]));p.set(Or.setCustomFunction.name,new N(!0,[]));p.set(Or.dropCustomFunction.name,new N(!0,[]));p.set(Or.addCustomFunctionProject.name,new N(!0,[]));p.set(Or.dropCustomFunctionProject.name,new N(!0,[]));p.set(Or.packageCustomFunctionProject.name,new N(!0,[]));p.set(Or.deployCustomFunctionProject.name,new N(!0,[]));p.set(Kd.getRegistrationInfo.name,new N(!1,[]));p.set(la.userInfo.name,new N(!1,[]));p.set(ua.describeAll.name,new N(!1,[]));p.set(LQ,new N(!1,[]));p.set(yQ,new N(!0,[]));p.set(CQ,new N(!0,[]));p.set(D_.CSV_DATA_LOAD,new N(!1,[ss,Gs]));p.set(D_.CSV_URL_LOAD,new N(!1,[ss,Gs]));p.set(D_.CSV_FILE_LOAD,new N(!1,[ss,Gs]));p.set(D_.IMPORT_FROM_S3,new N(!1,[ss,Gs]));p.set(YI.EXPORT_TO_S3,new N(!0,[]));p.set(YI.EXPORT_LOCAL,new N(!0,[]));p.set(wt.VALID_SQL_OPS_ENUM.DELETE,new N(!1,[kI]));p.set(wt.VALID_SQL_OPS_ENUM.SELECT,new N(!1,[ns]));p.set(wt.VALID_SQL_OPS_ENUM.INSERT,new N(!1,[ss]));p.set(wt.VALID_SQL_OPS_ENUM.UPDATE,new N(!1,[Gs]));WI.exports={verifyPerms:DQ,verifyPermsAst:MQ,verifyBulkLoadAttributePerms:BQ};function MQ(e,t,r){if(Nr.isEmptyOrZeroLength(e))throw me.info("verify_perms_ast has an empty user parameter"),tt(new Error);if(Nr.isEmptyOrZeroLength(t))throw me.info("verify_perms_ast has an empty user parameter"),tt(new Error);if(Nr.isEmptyOrZeroLength(r))throw me.info("verify_perms_ast has a null operation parameter"),tt(new Error);try{let s=new xI,n=new IQ(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw me.info("No schemas defined in verifyPermsAst(), will not continue."),tt(new Error);let c=!!t.role.permission.super_user,_=i.includes("system");if(_&&$I[r])throw tt(new Error,Ce.DROP_SYSTEM,ca.FORBIDDEN);if(c&&!_)return null;let u=vI.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof wQ.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(u));for(let E=0;E<i.length;E++){let d=n.getTablesBySchemaName(i[E]);d&&o.set(i[E],d)}let l=KI(t,r,o,s);return l||(o.forEach((E,d)=>{for(let h=0;h<E.length;h++){let T=n.getAttributesBySchemaTableName(d,E[h]),R=Qd(t.role.permission,d,E[h]);Wd(T,R,r,E[h],d,s)}}),s.getPermsResponse())}catch(s){throw tt(s)}}a(MQ,"verifyPermsAst");function DQ(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw me.info("null required parameter in verifyPerms"),tt(new Error,Ce.DEFAULT_INVALID_REQUEST,ca.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new xI;if(Nr.isEmptyOrZeroLength(e.hdb_user.role)||Nr.isEmptyOrZeroLength(e.hdb_user.role.permission))return me.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Ce.USER_HAS_NO_PERMS(e.hdb_user.username));let _=!!e.hdb_user.role.permission.super_user,u=e.hdb_user.role.permission.structure_user,l=o.has(wt.SYSTEM_SCHEMA_NAME)||n===wt.SYSTEM_SCHEMA_NAME;if(l&&$I[r])throw tt(new Error,Ce.DROP_SYSTEM,ca.FORBIDDEN);if(_&&!l||u===!0&&(r===Ct.createSchema.name||r===Ct.dropSchema.name))return null;if(UQ.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let E=vI.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=E,r===DI||r===PI){if(n===wt.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ce.SCHEMA_PERM_ERROR(n));if(!E.super_user){if(r===DI&&(!E[n]||!E[n][_a]))return c.handleInvalidItem(Ce.SCHEMA_NOT_FOUND(n));if(r===PI&&(!E[n]||!E[n].tables[i]||!E[n].tables[i][_a]))return c.handleInvalidItem(Ce.TABLE_NOT_FOUND(n,i))}}let d=KI(e.hdb_user,r,o,c,s);if(d)return d;if(p.get(r)&&p.get(r).perms.length===0)return null;if(!_&&e.get_attributes&&wt.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let R=[],g=E[n].tables[i];g[wt.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(x=>x[wt.PERMS_CRUD_ENUM.READ]).forEach(x=>{R.push(x.attribute_name)}):R=global.hdb_schema[n][i].attributes.map(H=>H.attribute),e.get_attributes=R)}let h=PQ(e),T=Qd(e.hdb_user.role.permission,n,i);return Wd(h,T,r,i,n,c,s),c.getPermsResponse()}a(DQ,"verifyPerms");function KI(e,t,r,s,n){if(Nr.arrayHasEmptyValues([e,t,r]))throw me.info("hasPermissions has an invalid parameter"),tt(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&!i)return null;if(!p.get(t))throw me.info(`operation ${t} not found.`),tt(new Error,Ce.OP_NOT_FOUND(t),ca.BAD_REQUEST);if(p.get(t)&&p.get(t).requires_su)return me.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Ce.OP_IS_SU_ONLY(t));let c=r.keys();for(let _ of c){try{if(_&&!o[_]||o[_][_a]===!1){s.addInvalidItem(Ce.SCHEMA_NOT_FOUND(_));continue}}catch{s.addInvalidItem(Ce.SCHEMA_NOT_FOUND(_));continue}let u=r.get(_);for(let l of u){let E=o[_].tables[l];if(!E||E[_a]===!1)s.addInvalidItem(Ce.TABLE_NOT_FOUND(_,l));else try{let d=[],h=p.get(t).perms;!Nr.isEmpty(n)&&h.includes(n)&&(h=[n]);for(let T=0;T<h.length;T++){let R=h[T],g=E[R];(g==null||g===!1)&&(me.info(`Required ${R} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),d.push(R))}d.length>0&&s.addUnauthorizedTable(_,l,d)}catch(d){let h=Ce.UNKNOWN_OP_AUTH_ERROR(t,_,l);throw me.error(h),me.error(d),tt(VI.CHECK_LOGS_WRAPPER(h))}}}return r.size<2?s.getPermsResponse():null}a(KI,"hasPermissions");function Wd(e,t,r,s,n,i,o){if(!e||!t)throw me.info("no attributes specified in checkAttributePerms."),tt(new Error);let c=p.get(r).perms;if(!c||c==="")throw me.info(`no permissions found for ${r} in checkAttributePerms().`),tt(new Error);if(Nr.isEmptyOrZeroLength(t))return me.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let _={};for(let l of e){let E=t.get(l);if(E){if(E[_a]===!1){i.addInvalidItem(Ce.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let d of c){if(wt.TIME_STAMP_NAMES.includes(E.attribute_name)&&d!==ns)throw tt(new Error,Ce.SYSTEM_TIMESTAMP_PERMS_ERR,ca.FORBIDDEN);E[d]===!1&&(_[E.attribute_name]?_[E.attribute_name].push(d):_[E.attribute_name]=[d])}}else i.addInvalidItem(Ce.ATTR_NOT_FOUND(n,s,l),n,s)}let u=Object.keys(_);u.length>0&&i.addUnauthorizedAttributes(u,n,s,_)}a(Wd,"checkAttributePerms");function PQ(e){let t=new Set;try{if(e.action)return t;if(e.operation===wt.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){me.info(r)}return t}a(PQ,"getRecordAttributes");function Qd(e,t,r){let s=new Map;if(Nr.isEmpty(e))return me.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{me.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(Qd,"getAttributePermissions");function BQ(e,t,r,s,n,i,o){let c=new Set(i),_=Qd(e,s,n);Wd(c,_,t,n,s,o,r)}a(BQ,"verifyBulkLoadAttributePerms")});var v_=f((Vj,zI)=>{"use strict";zI.exports={evaluateSQL:XQ,processAST:ZI,convertSQLToAST:XI,checkASTPermissions:JI};var QI=Ot(),Zd=require("util"),vQ=Zd.callbackify(QI.insert),HQ=It().search,qQ=Gp().update,GQ=Zd.callbackify(qQ),FQ=xp().convertDelete,is=require("alasql"),xQ=P_(),da=I(),VQ=uc(),kQ=b(),Ea=m(),{hdb_errors:$Q,handleHDBError:Jd}=L(),{HTTP_STATUS_CODES:Xd}=$Q,YQ=Tn();function KQ(e,t){return Promise.all([YQ.postOperationHandler(e,t,void 0),QI.flush(e)])}a(KQ,"postWrite");var WQ=Zd.callbackify(KQ);VQ(is);var QQ=403,JQ="There was a problem performing this insert. Please check the logs and try again.",B_=class{constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};a(B_,"ParsedSQLObject");function XQ(e,t){let r=e.parsed_sql_object;if(!r){r=XI(e.sql);let s,n=r.ast.statements[0];if(n instanceof is.yy.Insert?s=n.into.databaseid:n instanceof is.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof is.yy.Update||n instanceof is.yy.Delete?s=n.table.databaseid:da.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof is.yy.Select)&&kQ.isEmptyOrZeroLength(s))return t("No schema specified",null)}ZI(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(XQ,"evaluateSQL");function JI(e,t){let r;try{r=xQ.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(JI,"checkASTPermissions");function XI(e){let t=new B_;if(!e)throw Jd(new Error,"The 'sql' parameter is missing from the request body",Xd.BAD_REQUEST);try{let r=e.trim(),s=is.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
|
|
14
|
-
`);throw s[1]?Jd(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,Xd.BAD_REQUEST):Jd(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",Xd.BAD_REQUEST)}return t}a(XI,"convertSQLToAST");function ZI(e,t,r){try{let s=ZQ;if(!e.bypass_auth&&!t.permissions_checked){let i=JI(e,t);if(i&&i.length>0)return r(QQ,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Ea.VALID_SQL_OPS_ENUM.SELECT:s=HQ,n=t.ast.statements[0];break;case Ea.VALID_SQL_OPS_ENUM.INSERT:s=zQ;break;case Ea.VALID_SQL_OPS_ENUM.UPDATE:s=GQ;break;case Ea.VALID_SQL_OPS_ENUM.DELETE:s=FQ;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(ZI,"processAST");function ZQ(e,t){da.info(e),t("unknown sql statement")}a(ZQ,"nullFunction");function zQ({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=jQ(i,e.values)}catch(o){return r(o)}vQ(n,(o,c)=>{if(o)return r(o);WQ(n,c,_=>{_&&da.error(_)});try{delete c.new_attributes,delete c.txn_time}catch(_){da.error(`Error delete new_attributes from insert response: ${_}`)}r(null,c)})}a(zQ,"convertInsert");function jQ(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=is.compile(`SELECT ${n.toString()} AS [${Ea.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw da.error(r),new Error(JQ)}}a(jQ,"createDataObjects")});var th=f(($j,sb)=>{var V_=require("clone"),k_=te(),e1=b(),F_=m(),t1=I(),H_=require("fs"),zd=require("joi"),{string:x_}=zd.types(),{hdb_errors:r1,handleHDBError:ha}=L(),{HDB_ERROR_MSGS:s1,HTTP_STATUS_CODES:q_}=r1,{common_validators:G_}=Wt(),jI=1e9,eb=" is required",n1=["insert","update","upsert"],jd={schema:{presence:!0,format:G_.schema_format,length:G_.schema_length},table:{presence:!0,format:G_.schema_format,length:G_.schema_length},action:{inclusion:{within:n1,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},i1={schema:x_.required(),table:x_.required(),action:x_.valid("insert","update","upsert")},{AWS_ACCESS_KEY:a1,AWS_SECRET:o1,AWS_BUCKET:c1,AWS_FILE_KEY:_1,REGION:u1}=F_.S3_BUCKET_AUTH_KEYS,l1={s3:{presence:!0},[`s3.${a1}`]:{presence:!0,type:"String"},[`s3.${o1}`]:{presence:!0,type:"String"},[`s3.${c1}`]:{presence:!0,type:"String"},[`s3.${_1}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${u1}`]:{presence:!0,type:"String"}},tb=V_(jd);tb.data.presence={message:eb};var rb=V_(jd);rb.file_path.presence={message:eb};var E1=Object.assign(V_(jd),l1),eh=V_(i1);eh.csv_url=x_.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();eh.passthrough_headers=zd.object();function d1(e){let t=k_.validateObject(e,tb);return $_(e,t)}a(d1,"dataObject");function h1(e){let t=k_.validateBySchema(e,zd.object(eh));return $_(e,t)}a(h1,"urlObject");function f1(e){let t=k_.validateObject(e,rb);return $_(e,t)}a(f1,"fileObject");function S1(e){let t=k_.validateObject(e,E1);return $_(e,t)}a(S1,"s3FileObject");function $_(e,t){if(!t){let r=e1.checkGlobalSchemaTable(e.schema,e.table);if(r)return ha(new Error,r,q_.BAD_REQUEST);if(e.operation===F_.OPERATIONS_ENUM.CSV_FILE_LOAD){try{H_.accessSync(e.file_path,H_.constants.R_OK|H_.constants.F_OK)}catch(s){return s.code===F_.NODE_ERROR_CODES.ENOENT?ha(s,`No such file or directory ${s.path}`,q_.BAD_REQUEST):s.code===F_.NODE_ERROR_CODES.EACCES?ha(s,`Permission denied ${s.path}`,q_.BAD_REQUEST):ha(s)}try{let s=H_.statSync(e.file_path).size;if(s>jI)return ha(new Error,s1.MAX_FILE_SIZE_ERR(s,jI),q_.BAD_REQUEST)}catch(s){t1.error(s),console.error(s)}}}return t}a($_,"postValidateChecks");sb.exports={dataObject:d1,urlObject:h1,fileObject:f1,s3FileObject:S1}});var K_=f((Kj,nb)=>{"use strict";var fa=I(),Y_=m();async function T1(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===Y_.OPERATIONS_ENUM.INSERT||t.operation===Y_.OPERATIONS_ENUM.UPDATE||t.operation===Y_.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===Y_.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(fa.info(i.message),i):i.http_resp_msg?(fa.error(`Error calling operation: ${e.name}`),fa.error(i.http_resp_msg),i):(fa.error(`Error calling operation: ${e.name}`),fa.error(i),i)}}a(T1,"callOperationFunctionAsAwait");nb.exports={callOperationFunctionAsAwait:T1}});var rh=f((Qj,ab)=>{"use strict";var{S3:m1,GetObjectCommand:R1}=require("@aws-sdk/client-s3");ab.exports={getFileStreamFromS3:A1,getS3AuthObj:ib};async function A1(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await ib(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new R1(r))).Body}a(A1,"getFileStreamFromS3");function ib(e,t,r){return new m1({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(ib,"getS3AuthObj")});var cb=f((Xj,ob)=>{"use strict";var W_=class{constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}};a(W_,"BulkLoadFileObject");var Q_=class{constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};a(Q_,"BulkLoadDataObject");ob.exports={BulkLoadFileObject:W_,BulkLoadDataObject:Q_}});var oh=f((zj,Ib)=>{"use strict";var J_=Ot(),z_=th(),p1=require("needle"),Tt=m(),g1=oe(),Sa=b(),{handleHDBError:ne,hdb_errors:Tb}=L(),{HTTP_STATUS_CODES:Le,HDB_ERROR_MSGS:Re,CHECK_LOGS_WRAPPER:Vs}=Tb,xs=I(),X_=require("papaparse");Sa.promisifyPapaParse();var Vt=require("fs-extra"),N1=require("path"),{chain:_b}=require("stream-chain"),ub=require("stream-json/streamers/StreamArray"),lb=require("stream-json/utils/Batch"),Eb=require("stream-chain/utils/comp"),{finished:db}=require("stream"),sh=B(),mb=K_(),O1=rh(),{BulkLoadFileObject:nh,BulkLoadDataObject:I1}=cb(),ih=Vd(),{verifyBulkLoadAttributePerms:Rb}=P_(),b1=uE(),w1=be(),C1=xr(),hb="No records parsed from csv file.",Fs=`${sh.get("HDB_ROOT")}/tmp`,{schema_regex:L1}=Wt(),fb=1024*1024*5,Sb=5e3,y1={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};Ib.exports={csvDataLoad:U1,csvURLLoad:M1,csvFileLoad:D1,importFromS3:P1};async function U1(e,t){let r=z_.dataObject(e);if(r)throw ne(r,r.message,Le.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=X_.parse(e.data,{header:!0,skipEmptyLines:!0,dynamicTyping:!0}),i=new ih;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&Rb(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,n.meta.fields,i);let o=i.getPermsResponse();if(o)throw ne(new Error,o,Le.BAD_REQUEST,void 0,void 0,!0);let c=new I1(e.action,e.schema,e.table,n.data);return s=await mb.callOperationFunctionAsAwait(gb,c,Nb.bind(null,n.meta.fields),t),s.message===hb?hb:Ob(s.records,s.number_written)}catch(n){throw ks(n)}}a(U1,"csvDataLoad");async function M1(e){let t=z_.urlObject(e);if(t)throw ne(t,t.message,Le.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Fs}/${r}`;try{await B1(e,r)}catch(n){throw xs.error(Re.DOWNLOAD_FILE_ERR(r)+" - "+n),ne(n,Vs(Re.DOWNLOAD_FILE_ERR(r)))}try{let n=new nh(this.job_operation_function.name,e.action,e.schema,e.table,s,Tt.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await ah(n);return await Z_(s),i}catch(n){throw await Z_(s),ks(n)}}a(M1,"csvURLLoad");async function D1(e){let t=z_.fileObject(e);if(t)throw ne(t,t.message,Le.BAD_REQUEST,void 0,void 0,!0);let r=new nh(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Tt.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await ah(r)}catch(s){throw ks(s)}}a(D1,"csvFileLoad");async function P1(e){let t=z_.s3FileObject(e);if(t)throw ne(t,t.message,Le.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=N1.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Fs}/${n}`;let i=new nh(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await v1(n,e);let o=await ah(i);return await Z_(r),o}catch(s){throw await Z_(r),ks(s)}}a(P1,"importFromS3");async function B1(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await p1("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw ne(s,n,s.statusCode,Tt.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}q1(r,e.csv_url),await H1(t,r.raw)}a(B1,"downloadCSVFile");async function v1(e,t){try{let r=`${Fs}/${e}`;await Vt.mkdirp(Fs),await Vt.writeFile(`${Fs}/${e}`,"",{flag:"a+"});let s=await Vt.createWriteStream(r),n=await O1.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){xs.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw xs.error(Re.S3_DOWNLOAD_ERR+" - "+r),ne(r,Vs(Re.S3_DOWNLOAD_ERR))}}a(v1,"downloadFileFromS3");async function H1(e,t){try{await Vt.mkdirp(Fs),await Vt.writeFile(`${Fs}/${e}`,t)}catch(r){throw xs.error(Re.WRITE_TEMP_FILE_ERR),ne(r,Vs(Re.DEFAULT_BULK_LOAD_ERR))}}a(H1,"writeFileToTempFolder");async function Z_(e){if(e)try{await Vt.access(e),await Vt.unlink(e)}catch{xs.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Z_,"deleteTempFile");function q1(e,t){if(e.statusCode!==Tb.HTTP_STATUS_CODES.OK)throw ne(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Le.BAD_REQUEST);if(!y1[e.headers["content-type"]])throw ne(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Le.BAD_REQUEST);if(!e.raw)throw ne(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Le.BAD_REQUEST)}a(q1,"validateURLResponse");async function ah(e){try{let t;switch(e.file_type){case Tt.VALID_S3_FILE_TYPES.CSV:t=await G1(e);break;case Tt.VALID_S3_FILE_TYPES.JSON:t=await F1(e);break;default:throw ne(new Error,Re.DEFAULT_BULK_LOAD_ERR,Le.BAD_REQUEST,Tt.LOG_LEVELS.ERROR,Re.INVALID_FILE_EXT_ERR(e))}return Ob(t.records,t.number_written)}catch(t){throw ks(t)}}a(ah,"fileLoad");async function Ab(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await J_.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&Rb(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let _=ne(c);r(_)}}a(Ab,"validateChunk");async function pb(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;Sa.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!Sa.isEmpty(c)&&!Sa.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(_=>{Object.keys(_).forEach(u=>c.add(u))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},_=await mb.callOperationFunctionAsAwait(gb,c,Nb.bind(null,o));t.records+=_.records,t.number_written+=_.number_written,n&&n.resume()}catch(c){let _=ne(c,Vs(Re.INSERT_CSV_ERR),Le.INTERNAL_SERVER_ERROR,Tt.LOG_LEVELS.ERROR,Re.INSERT_CSV_ERR+" - "+c);r(_)}}a(pb,"insertChunk");async function G1(e){let t={records:0,number_written:0};try{let r=new ih,s=Vt.createReadStream(e.file_path,{highWaterMark:fb});s.setEncoding("utf8"),await X_.parsePromise(s,Ab.bind(null,e,r));let n=r.getPermsResponse();if(n)throw ne(new Error,n,Le.BAD_REQUEST);return s=Vt.createReadStream(e.file_path,{highWaterMark:fb}),s.setEncoding("utf8"),await X_.parsePromise(s,pb.bind(null,e,t)),s.destroy(),t}catch(r){throw ne(r,Vs(Re.PAPA_PARSE_ERR),Le.INTERNAL_SERVER_ERROR,Tt.LOG_LEVELS.ERROR,Re.PAPA_PARSE_ERR+r)}}a(G1,"callPapaParse");async function F1(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new ih,n=_b([Vt.createReadStream(e.file_path,{encoding:"utf-8"}),ub.withParser(),c=>c.value,new lb({batchSize:Sb}),Eb(async c=>{await Ab(e,s,r,c)})]);await new Promise((c,_)=>{db(n,u=>{u?_(u):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw ne(new Error,i,Le.BAD_REQUEST);let o=_b([Vt.createReadStream(e.file_path,{encoding:"utf-8"}),ub.withParser(),c=>c.value,new lb({batchSize:Sb}),Eb(async c=>{await pb(e,t,r,c)})]);return await new Promise((c,_)=>{db(o,u=>{u?_(u):c()}),o.resume()}),t}catch(s){throw ne(s,Vs(Re.INSERT_JSON_ERR),Le.INTERNAL_SERVER_ERROR,Tt.LOG_LEVELS.ERROR,Re.INSERT_JSON_ERR+s)}}a(F1,"insertJson");async function gb(e){let t={};try{e.data&&e.data.length>0&&x1(e.data[0])?t=await V1(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",xs.info(t.message))}catch(r){throw ks(r)}return t}a(gb,"callBulkFileLoad");function x1(e){let t=Object.keys(e);for(let r of t)if(!L1.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(x1,"validateColumnNames");async function V1(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=J_.insert;break;case"update":i=J_.update;break;case"upsert":i=J_.upsert;break;default:throw ne(new Error,Re.INVALID_ACTION_PARAM_ERR(s),Le.BAD_REQUEST,Tt.LOG_LEVELS.ERROR,Re.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let l=global.hdb_schema[t][r].hash_attribute,E=e.length;for(;E--;)o.skipped_hashes.indexOf(e[E][l])>=0&&e.splice(E,1)}let _=Sa.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:_,new_attributes:o.new_attributes}}catch(o){throw ks(o)}}a(V1,"bulkFileLoad");async function Nb(e,t,r,s){try{if(t.data.length===0||!sh.get(Tt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;let n=X_.unparse(t.data,{header:!0,skipEmptyLines:!0,columns:e}),i;t.hdb_user&&t.hdb_user.username&&(i=t.hdb_user.username);let o={operation:"csv_data_load",action:t.action?t.action:"insert",schema:t.schema,table:t.table,data:n,__origin:new b1(r.txn_time,i,sh.get(Tt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY))};await w1.publishToStream(`${g1.SUBJECT_PREFIXES.TXN}.${t.schema}.${t.table}`,C1.createNatsTableStreamName(t.schema,t.table),s,o),delete r.new_attributes}catch(n){xs.error(n)}}a(Nb,"postCSVLoadFunction");function Ob(e,t){return`successfully loaded ${t} of ${e} records`}a(Ob,"buildResponseMsg");function ks(e){return ne(e,Vs(Re.DEFAULT_BULK_LOAD_ERR),Le.INTERNAL_SERVER_ERROR,Tt.LOG_LEVELS.ERROR,Re.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(ks,"buildTopLevelErrMsg")});var Lb=f((e8,Cb)=>{"use strict";var{Readable:k1}=require("stream"),$1=1e4;Cb.exports={streamAsJSON(e){return new j_({value:e})}};var j_=class extends k1{constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0)}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator](),o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){yield"]";return}else n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),bb)}catch(n){yield bb(n)}else yield JSON.stringify(t)}else yield JSON.stringify(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);wb(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>$1?this.flush():!0)}flush(){let t=super.push(this.buffer.join(""));return this.buffer=[],this.bufferSize=0,t}readIterator(t){try{let r;if(t.childIterator)return wb(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}};a(j_,"JSONStream");function bb(e){return console.error(e),JSON.stringify(e.toString())}a(bb,"handleError");function wb(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(wb,"when")});var _h=f((r8,qb)=>{"use strict";var Mb=It(),Y1=v_(),K1=rh(),{AsyncParser:W1,Transform:Q1}=require("json2csv"),ma=require("stream"),mt=b(),ch=require("fs-extra"),J1=require("path"),Lt=I(),{promisify:eu}=require("util"),Ta=b(),{handleHDBError:fe,hdb_errors:X1}=L(),{HDB_ERROR_MSGS:rt,HTTP_STATUS_CODES:Se}=X1,{streamAsJSON:Z1}=Lb(),{Upload:z1}=require("@aws-sdk/lib-storage"),yb=["search_by_value","search_by_hash","sql"],Ub=["json","csv"],Db="json",Pb="csv",j1="Successfully exported JSON locally.",eJ="Successfully exported CSV locally.",tJ=1e3,rJ=eu(Mb.searchByHash),sJ=eu(Mb.searchByValue),nJ=eu(Y1.evaluateSQL),iJ=eu(ma.finished);qb.exports={export_to_s3:_J,export_local:aJ,toCsvStream:Bb};async function aJ(e){Lt.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=vb(e);if(!mt.isEmpty(t))throw Lt.error(t),fe(new Error,t,Se.BAD_REQUEST,void 0,void 0,!0);if(mt.isEmpty(e.path))throw Lt.error(rt.MISSING_VALUE("path")),fe(new Error,rt.MISSING_VALUE("path"),Se.BAD_REQUEST,void 0,void 0,!0);let r=(mt.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(J1.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=mt.buildFolderPath(e.path,r);await oJ(e.path);let n=await Hb(e);return await cJ(s,e.format,n)}a(aJ,"export_local");async function oJ(e){if(Lt.trace("in confirmPath"),mt.isEmptyOrZeroLength(e))throw fe(new Error,`Invalid path: ${e}`,Se.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await ch.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,Lt.error(s),fe(new Error,s,Se.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw Lt.error(r),fe(new Error,r,Se.BAD_REQUEST,void 0,void 0,!0)}return!0}a(oJ,"confirmPath");async function cJ(e,t,r){if(Lt.trace("in saveToLocal"),Ta.isEmptyOrZeroLength(e))throw fe(new Error,rt.INVALID_VALUE("file_path"),Se.BAD_REQUEST,void 0,void 0,!0);if(Ta.isEmptyOrZeroLength(t))throw fe(new Error,rt.INVALID_VALUE("Source format"),Se.BAD_REQUEST,void 0,void 0,!0);if(Ta.isEmpty(r))throw fe(new Error,rt.NOT_FOUND("Data"),Se.BAD_REQUEST,void 0,void 0,!0);if(t===Db){let s=ch.createWriteStream(e);return Z1(r).pipe(s),await iJ(s),{message:j1,path:e}}else if(t===Pb){let s=ch.createWriteStream(e),n=ma.Readable.from(r),i={},o={objectMode:!0};return await new W1(i,o).fromInput(n).toOutput(s).promise(!1),{message:eJ,path:e}}throw fe(new Error,rt.INVALID_VALUE("format"),Se.BAD_REQUEST)}a(cJ,"saveToLocal");async function _J(e){if(!e.s3||Object.keys(e.s3).length===0)throw fe(new Error,rt.MISSING_VALUE("S3 object"),Se.BAD_REQUEST);if(mt.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw fe(new Error,rt.MISSING_VALUE("aws_access_key_id"),Se.BAD_REQUEST);if(mt.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw fe(new Error,rt.MISSING_VALUE("aws_secret_access_key"),Se.BAD_REQUEST);if(mt.isEmptyOrZeroLength(e.s3.bucket))throw fe(new Error,rt.MISSING_VALUE("bucket"),Se.BAD_REQUEST);if(mt.isEmptyOrZeroLength(e.s3.key))throw fe(new Error,rt.MISSING_VALUE("key"),Se.BAD_REQUEST);if(mt.isEmptyOrZeroLength(e.s3.region))throw fe(new Error,rt.MISSING_VALUE("region"),Se.BAD_REQUEST);let t=vb(e);if(!mt.isEmpty(t))throw fe(new Error,t,Se.BAD_REQUEST);Lt.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await Hb(e)}catch(_){throw Lt.error(_),_}let s,n=await K1.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new ma.PassThrough;if(e.format===Pb){i=e.s3.key+".csv";let _=Bb(r);_.on("error",u=>{throw u}),_.pipe(o)}else if(e.format===Db){i=e.s3.key+".json";let _=new ma.Readable;_.pipe(o),_.on("error",E=>{throw E}),_.push("[");let u=r.length,l="";for(let[E,d]of r.entries()){let h=E===u-1?JSON.stringify(d):JSON.stringify(d)+",";l+=h,E!==0&&E%tJ===0&&(_.push(l),l="")}l.length!==0&&_.push(l),_.push("]"),_.push(null)}else throw fe(new Error,rt.INVALID_VALUE("format"),Se.BAD_REQUEST);return new z1({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(_J,"export_to_s3");function Bb(e){let t=ma.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new Q1(r,s);return t.pipe(n)}a(Bb,"toCsvStream");function vb(e){if(Lt.trace("in exportCoreValidation"),mt.isEmpty(e.format))return"format missing";if(Ub.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${Ub.join(", ")}`;let t=e.search_operation.operation;if(mt.isEmpty(t))return"search_operation.operation missing";if(yb.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${yb.join(", ")}`}a(vb,"exportCoreValidation");async function Hb(e){Lt.trace("in getRecords");let t,r;if(Ta.isEmpty(e.search_operation)||Ta.isEmptyOrZeroLength(e.search_operation.operation))throw fe(new Error,rt.INVALID_VALUE("Search operation"),Se.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=sJ;break;case"search_by_hash":t=rJ;break;case"sql":t=nJ;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Lt.error(r),fe(new Error,r,Se.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(Hb,"getRecords")});var Fb=f((n8,Gb)=>{"use strict";var tu=class{constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};a(tu,"SqlSearchObject");Gb.exports=tu});var kb=f((a8,Vb)=>{"use strict";var uJ=m(),xb=require("moment"),lJ=require("uuid").v4,ru=class{constructor(){this.id=lJ(),this.type=void 0,this.start_datetime=xb().valueOf(),this.created_datetime=xb().valueOf(),this.end_datetime=void 0,this.status=uJ.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};a(ru,"JobObject");Vb.exports=ru});var lh=f((c8,Jb)=>{"use strict";var EJ=require("uuid").v4,Kb=Ot(),Wb=It(),dJ=Ht(),hJ=un(),fJ=Fb(),ie=m(),SJ=kb(),TJ=ME(),yt=I(),mJ=oi(),Bn=b(),{promisify:uh}=require("util"),$s=require("moment"),RJ=v_(),su=th(),$b=dl(),{deleteTransactionLogsBeforeValidator:AJ}=qd(),{handleHDBError:pJ,hdb_errors:gJ}=L(),{HTTP_STATUS_CODES:NJ}=gJ,Yb=uh(Wb.searchByValue),OJ=uh(Wb.searchByHash),IJ=Kb.insert,bJ=uh(RJ.evaluateSQL),wJ=Kb.update;Jb.exports={addJob:yJ,updateJob:MJ,handleGetJob:CJ,handleGetJobsByStartDate:LJ,getJobById:Qb};async function CJ(e){try{let t=await Qb(e.id);return Bn.isEmptyOrZeroLength(t)||(t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw yt.error(r),new Error(r)}}a(CJ,"handleGetJob");async function LJ(e){try{let t=await UJ(e);if(yt.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=$s(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=$s(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw yt.error(r),new Error(r)}}a(LJ,"handleGetJobsByStartDate");async function yJ(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Bn.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return yt.info(l),t.error=l,t}if(!ie.JOB_TYPE_ENUM[e.operation])return yt.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case ie.OPERATIONS_ENUM.CSV_FILE_LOAD:s=su.fileObject(e);break;case ie.OPERATIONS_ENUM.CSV_URL_LOAD:s=su.urlObject(e);break;case ie.OPERATIONS_ENUM.CSV_DATA_LOAD:s=su.dataObject(e);break;case ie.OPERATIONS_ENUM.IMPORT_FROM_S3:s=su.s3FileObject(e);break;case ie.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case ie.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=$b(e,"date");break;case ie.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=$b(e,"timestamp");break;case ie.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=AJ(e);break;default:break}if(s)throw pJ(s,s.message,NJ.BAD_REQUEST,void 0,void 0,!0);let n=new SJ;n.type=e.operation===ie.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?ie.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new dJ(ie.SYSTEM_SCHEMA_NAME,ie.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=await Yb(i)}catch(l){let E=`There was an error inserting a new job: ${l}`;return yt.error(E),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=EJ();try{o=await Yb(i)}catch(l){let E=`There was an error inserting a new job: ${l}`;return yt.error(E),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return yt.error("Error creating a job, could not find a unique job id."),t}n.request=e;let _=new mJ(ie.SYSTEM_SCHEMA_NAME,ie.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),u;try{u=await IJ(_)}catch(l){return yt.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${n.operation} and id ${n.id}`;else{let l=`Created a job with type ${n.type} and id ${n.id}`;t.message=l,t.createdJob=n,t.success=!0,yt.trace(l)}return t}a(yJ,"addJob");async function UJ(e){let t=$s(e.from_date,$s.ISO_8601),r=$s(e.to_date,$s.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new fJ(s,e.hdb_user);try{return await bJ(n)}catch(i){throw yt.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(UJ,"getJobsInDateRange");async function Qb(e){if(Bn.isEmptyOrZeroLength(e))return Bn.errorizeMessage("Invalid job ID specified.");let t=new hJ(ie.SYSTEM_SCHEMA_NAME,ie.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await OJ(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return yt.error(s),Bn.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(Qb,"getJobById");async function MJ(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Bn.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===ie.JOB_STATUS_ENUM.COMPLETE||e.status===ie.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=$s().valueOf());let t=new TJ(ie.SYSTEM_SCHEMA_NAME,ie.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;try{r=await wJ(t)}catch(s){throw new Error(s)}return r}a(MJ,"updateJob")});var tw=f((u8,ew)=>{"use strict";var Xb=b(),st=m(),DJ=require("moment"),nu=oh(),iu=I(),Zb=lh(),zb=_h(),jb=Ts(),PJ=hs(),BJ=O_(),au=class{constructor(t,r){this.job=t,this.json=r}};a(au,"RunnerMessage");async function vJ(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if(Xb.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Xb.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case st.JOB_TYPE_ENUM.csv_file_load:await Ir(e,nu.csvFileLoad);break;case st.JOB_TYPE_ENUM.csv_url_load:await Ir(e,nu.csvURLLoad);break;case st.JOB_TYPE_ENUM.csv_data_load:await Ir(e,nu.csvDataLoad);break;case st.JOB_TYPE_ENUM.import_from_s3:await Ir(e,nu.importFromS3);break;case st.JOB_TYPE_ENUM.empty_trash:break;case st.JOB_TYPE_ENUM.export_local:await Ir(e,zb.export_local);break;case st.JOB_TYPE_ENUM.export_to_s3:await Ir(e,zb.export_to_s3);break;case st.JOB_TYPE_ENUM.delete_files_before:case st.JOB_TYPE_ENUM.delete_records_before:await Ir(e,jb.deleteFilesBefore);break;case st.JOB_TYPE_ENUM.delete_audit_logs_before:await Ir(e,jb.deleteAuditLogsBefore);break;case st.JOB_TYPE_ENUM.delete_transaction_logs_before:await Ir(e,BJ.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(vJ,"parseMessage");async function Ir(e,t){try{e.job.status=st.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=DJ().valueOf(),await Zb.updateJob(e.job),await HJ(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):iu.error(`There was an error running ${t.name} job with id ${e.job.id}`),iu.error(s),e.job.message=s,e.job.status=st.JOB_STATUS_ENUM.ERROR;try{await Zb.updateJob(e.job)}catch(n){throw iu.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Ir,"runJob");async function HJ(e){iu.trace("launching job thread:",e),PJ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[st.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(HJ,"launchJobThread");ew.exports={parseMessage:vJ,RunnerMessage:au}});var sw=f((E8,rw)=>{"use strict";var ou=class{constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};a(ou,"OperationFunctionObject");rw.exports=ou});var Sw=f((h8,fw)=>{"use strict";var uu=It(),fh=v_(),cu=oh(),vn=Nc(),Eh=Rs(),Aa=Ts(),qJ=mE(),Ra=Vr(),_u=wE(),br=Hd(),xe=I(),GJ=yE(),FJ=Qc(),xJ=ed(),VJ=zc(),kJ=td(),$J=rd(),YJ=id(),KJ=od(),dh=ud(),nw=_h(),WJ=P_(),Sh=lh(),A=m(),{hdb_errors:ga,handleHDBError:pa}=L(),{HTTP_STATUS_CODES:iw}=ga,hh=dd(),aw=Cd(),lu=require("util"),Ys=Ot(),QJ=qr(),JJ=bn(),dw=Tn(),ow=tw(),cw=vc(),_w=lr(),uw=O_(),lw=xd(),XJ=K_(),ZJ=lu.promisify(uu.searchByHash),zJ=lu.promisify(uu.searchByValue),jJ=lu.promisify(uu.search),eX=lu.promisify(fh.evaluateSQL),tX={[A.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[A.OPERATIONS_ENUM.CREATE_TABLE]:!0,[A.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[A.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[A.OPERATIONS_ENUM.DROP_TABLE]:!0,[A.OPERATIONS_ENUM.DROP_SCHEMA]:!0},O=sw();function rX(e,t,r){return Promise.all([dw.postOperationHandler(e,t,r),e.table?Ys.flush(e):null])}a(rX,"postWrite");async function sX(e,t){try{if(e.body.operation!=="read_log"&&(xe.log_level===A.LOG_LEVELS.INFO||xe.log_level===A.LOG_LEVELS.DEBUG||xe.log_level===A.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:i,password:o,...c}=e.body;xe.info(c)}}catch(n){xe.error(n)}let r=A.CLUSTER_OPERATIONS[e.body.operation]===void 0?null:rX,s=await XJ.callOperationFunctionAsAwait(t,e.body,r);if(typeof s!="object"&&(s={message:s}),s instanceof Error)throw s;return tX[e.body.operation]&&QJ.setSchemaDataToGlobal(n=>{n&&xe.error(n)}),s}a(sX,"processLocalTransaction");var Ew=aX();fw.exports={chooseOperation:nX,getOperationFunction:hw,processLocalTransaction:sX};function nX(e){let t;try{t=hw(e)}catch(n){throw xe.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=fh.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=fh.checkASTPermissions(e,i);if(o)throw xe.error(`${iw.FORBIDDEN} from operation ${e.search_operation}`),pa(new Error,o,ga.HTTP_STATUS_CODES.FORBIDDEN)}}else if(!e.bypass_auth&&e.operation!==A.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=WJ.verifyPerms(i,n);if(o)throw xe.error(`${iw.FORBIDDEN} from operation ${e.operation}`),pa(new Error,o,ga.HTTP_STATUS_CODES.FORBIDDEN)}}catch(n){throw pa(n,"There was an error when trying to choose an operation path")}return r}a(nX,"chooseOperation");function hw(e){if(xe.trace(`getOperationFunction with operation: ${e.operation}`),Ew.has(e.operation))return Ew.get(e.operation);throw pa(new Error,ga.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),ga.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(hw,"getOperationFunction");async function iX(e){xe.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[A.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case A.OPERATIONS_ENUM.INSERT:o=await Ys.insert(i);break;case A.OPERATIONS_ENUM.UPDATE:o=await Ys.update(i);break;case A.OPERATIONS_ENUM.UPSERT:o=await Ys.upsert(i);break;case A.OPERATIONS_ENUM.DELETE:o=await Aa.deleteRecord(i);break;default:xe.warn("invalid operation in catchup");break}await dw.postOperationHandler(i,o,e)}catch(o){xe.info("Invalid operation in transaction"),xe.error(o)}}a(iX,"catchup");async function ir(e){let t,r;try{r=await Sh.addJob(e),t=r.createdJob;let s=new ow.RunnerMessage(t,e);return await ow.parseMessage(s),`Starting job with id ${t.id}`}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw xe.error(n),pa(s,n)}}a(ir,"executeJob");function aX(){let e=new Map;return e.set(A.OPERATIONS_ENUM.INSERT,new O(Ys.insert)),e.set(A.OPERATIONS_ENUM.UPDATE,new O(Ys.update)),e.set(A.OPERATIONS_ENUM.UPSERT,new O(Ys.upsert)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new O(uu.searchByConditions)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_HASH,new O(ZJ)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_VALUE,new O(zJ)),e.set(A.OPERATIONS_ENUM.SEARCH,new O(jJ)),e.set(A.OPERATIONS_ENUM.SQL,new O(eX)),e.set(A.OPERATIONS_ENUM.CSV_DATA_LOAD,new O(ir,cu.csvDataLoad)),e.set(A.OPERATIONS_ENUM.CSV_FILE_LOAD,new O(ir,cu.csvFileLoad)),e.set(A.OPERATIONS_ENUM.CSV_URL_LOAD,new O(ir,cu.csvURLLoad)),e.set(A.OPERATIONS_ENUM.IMPORT_FROM_S3,new O(ir,cu.importFromS3)),e.set(A.OPERATIONS_ENUM.CREATE_SCHEMA,new O(vn.createSchema)),e.set(A.OPERATIONS_ENUM.CREATE_TABLE,new O(vn.createTable)),e.set(A.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new O(vn.createAttribute)),e.set(A.OPERATIONS_ENUM.DROP_SCHEMA,new O(vn.dropSchema)),e.set(A.OPERATIONS_ENUM.DROP_TABLE,new O(vn.dropTable)),e.set(A.OPERATIONS_ENUM.DROP_ATTRIBUTE,new O(vn.dropAttribute)),e.set(A.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new O(Eh.describeSchema)),e.set(A.OPERATIONS_ENUM.DESCRIBE_TABLE,new O(Eh.describeTable)),e.set(A.OPERATIONS_ENUM.DESCRIBE_ALL,new O(Eh.describeAll)),e.set(A.OPERATIONS_ENUM.DELETE,new O(Aa.deleteRecord)),e.set(A.OPERATIONS_ENUM.ADD_USER,new O(Ra.addUser)),e.set(A.OPERATIONS_ENUM.ALTER_USER,new O(Ra.alterUser)),e.set(A.OPERATIONS_ENUM.DROP_USER,new O(Ra.dropUser)),e.set(A.OPERATIONS_ENUM.LIST_USERS,new O(Ra.listUsersExternal)),e.set(A.OPERATIONS_ENUM.LIST_ROLES,new O(_u.listRoles)),e.set(A.OPERATIONS_ENUM.ADD_ROLE,new O(_u.addRole)),e.set(A.OPERATIONS_ENUM.ALTER_ROLE,new O(_u.alterRole)),e.set(A.OPERATIONS_ENUM.DROP_ROLE,new O(_u.dropRole)),e.set(A.OPERATIONS_ENUM.USER_INFO,new O(Ra.userInfo)),e.set(A.OPERATIONS_ENUM.READ_LOG,new O(GJ)),e.set(A.OPERATIONS_ENUM.ADD_NODE,new O(FJ)),e.set(A.OPERATIONS_ENUM.UPDATE_NODE,new O(xJ)),e.set(A.OPERATIONS_ENUM.REMOVE_NODE,new O(VJ)),e.set(A.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new O(kJ)),e.set(A.OPERATIONS_ENUM.PURGE_STREAM,new O($J)),e.set(A.OPERATIONS_ENUM.SET_CONFIGURATION,new O(_w.setConfiguration)),e.set(A.OPERATIONS_ENUM.CLUSTER_STATUS,new O(YJ.clusterStatus)),e.set(A.OPERATIONS_ENUM.CLUSTER_NETWORK,new O(KJ)),e.set(A.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new O(dh.setRoutes)),e.set(A.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new O(dh.getRoutes)),e.set(A.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new O(dh.deleteRoutes)),e.set(A.OPERATIONS_ENUM.EXPORT_TO_S3,new O(ir,nw.export_to_s3)),e.set(A.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new O(ir,Aa.deleteFilesBefore)),e.set(A.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new O(ir,Aa.deleteFilesBefore)),e.set(A.OPERATIONS_ENUM.EXPORT_LOCAL,new O(ir,nw.export_local)),e.set(A.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new O(Sh.handleGetJobsByStartDate)),e.set(A.OPERATIONS_ENUM.GET_JOB,new O(Sh.handleGetJob)),e.set(A.OPERATIONS_ENUM.GET_FINGERPRINT,new O(hh.getFingerprint)),e.set(A.OPERATIONS_ENUM.SET_LICENSE,new O(hh.setLicense)),e.set(A.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new O(hh.getRegistrationInfo)),e.set(A.OPERATIONS_ENUM.RESTART,new O(aw.restart)),e.set(A.OPERATIONS_ENUM.RESTART_SERVICE,new O(aw.restartService)),e.set(A.OPERATIONS_ENUM.CATCHUP,new O(iX)),e.set(A.OPERATIONS_ENUM.SYSTEM_INFORMATION,new O(JJ.systemInformation)),e.set(A.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new O(ir,Aa.deleteAuditLogsBefore)),e.set(A.OPERATIONS_ENUM.READ_AUDIT_LOG,new O(qJ)),e.set(A.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new O(cw.createTokens)),e.set(A.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new O(cw.refreshOperationToken)),e.set(A.OPERATIONS_ENUM.GET_CONFIGURATION,new O(_w.getConfiguration)),e.set(A.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new O(br.customFunctionsStatus)),e.set(A.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new O(br.getCustomFunctions)),e.set(A.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new O(br.getCustomFunction)),e.set(A.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new O(br.setCustomFunction)),e.set(A.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new O(br.dropCustomFunction)),e.set(A.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new O(br.addCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new O(br.dropCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new O(br.packageCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new O(br.deployCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new O(uw.readTransactionLog)),e.set(A.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new O(ir,uw.deleteTransactionLogsBefore)),e.set(A.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new O(lw.installModules)),e.set(A.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new O(lw.auditModules)),e}a(aX,"initializeOperationFunctionMap")});var gw=f((S8,pw)=>{"use strict";var oX=require("util"),{toJsMsg:cX}=require("nats"),{decode:_X}=require("msgpackr"),uX=qr(),{isMainThread:lX,parentPort:EX}=require("worker_threads"),Rw=be(),Na=oe(),Tw=m(),Hn=I(),dX=Sw(),hX=K_(),fX=Tn(),SX=B(),TX=m();hs();var mX=oX.promisify(uX.setSchemaDataToGlobal),RX={durable:Na.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Na.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Th,AX,pX,gX;pw.exports={initialize:NX,workQueueListener:OX};async function NX(){Hn.notify("Starting clustering ingest service."),await mX();let{connection:e,jsm:t,js:r}=await Rw.getNATSReferences();Th=e,AX=e.info.server_name,pX=t,gX=r}a(NX,"initialize");var Aw=100,mw=new Array(Aw),Eu=0;async function OX(){let e=Th.subscribe(`${Na.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${Th.info.server_name}`,RX);for await(let t of e)await mw[Eu],mw[Eu]=IX(t).catch(r=>{Hn.error(r)}),++Eu>=Aw&&(Eu=0)}a(OX,"workQueueListener");lX||EX.on("message",async e=>{let{type:t}=e;t===TX.ITC_EVENT_TYPES.SHUTDOWN&&Rw.closeConnection()});async function IX(e){let t=cX(e),r=_X(t.data);if(t.headers.get(Na.MSG_HEADERS.ORIGIN)===SX.get(Tw.CONFIG_PARAMS.CLUSTERING_NODENAME)){t.ack();return}Hn.trace("processing message:",r,"with sequence:",t.seq),Hn.trace(`messageProcessor nats msg id: ${t.headers.get(Na.MSG_HEADERS.NATS_MSG_ID)}`);let n,i=dX.getOperationFunction(r);n=i.job_operation_function?i.job_operation_function:i.operation_function;let o;try{i.job_operation_function?o=await n(r,t.headers):(r[Tw.CLUSTERING_FLAG]=!0,o=await hX.callOperationFunctionAsAwait(n,r,fX.postOperationHandler,t.headers)),Hn.debug(o)}catch(c){Hn.error(c)}return t.ack(),o}a(IX,"messageProcessor")});var Nw=gw();(async()=>{try{await Nw.initialize(),await Nw.workQueueListener()}catch(e){console.error("Error launching Nats ingest service."),console.error(e)}})();
|
|
12
|
+
`,""):null}catch(d){d.stderr?i[_].npm_error=OI(d.stderr):i[_].npm_error=d.message;continue}try{i[_].npm_output=JSON.parse(l)}catch{i[_].npm_output=l}try{i[_].npm_error=JSON.parse(E)}catch{i[_].npm_error=E}}return w_.info(`finished installModules with response ${i}`),i}a(fQ,"installModules");function OI(e){let t='"error": {',r=e.indexOf('"error": {'),s=e.indexOf(`}
|
|
13
|
+
`);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(OI,"parseNPMStdErr");async function SQ(e){w_.info(`starting auditModules for request: ${e}`);let t=wI(e);if(t)throw Dn(t,t.message,Pn.BAD_REQUEST);let{projects:r}=e;await II(),await bI(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=b_.join(xd,o);s[o]={npm_output:null,npm_error:null};try{let _=await NI("npm audit --json",c);s[o].npm_output=JSON.parse(_)}catch(_){s[o].npm_error=OI(_.stderr)}}return w_.info(`finished auditModules with response ${s}`),s}a(SQ,"auditModules");async function II(){try{return await NI("npm -v"),!0}catch{throw Dn(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Pn.BAD_REQUEST,void 0,void 0,!0)}}a(II,"checkNPMInstalled");async function bI(e){if(!Array.isArray(e)||e.length===0)throw Dn(new Error,"projects argument must be an array with at least 1 element",Pn.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=b_.join(xd,i.toString());if(!await RI.pathExists(o)){t.push(i);continue}let _=b_.join(o,"package.json");await RI.pathExists(_)||r.push(i)}if(t.length>0)throw Dn(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Pn.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Dn(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Pn.BAD_REQUEST,void 0,void 0,!0)}a(bI,"checkProjectPaths");function wI(e){let t=I_.object({projects:I_.array().min(1).items(I_.string()).required(),dry_run:I_.boolean().default(!1)});return dQ.validateBySchema(e,t)}a(wI,"modulesValidator")});var yI=f((Hj,LI)=>{"use strict";var C_=class{constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};a(C_,"PermissionTableResponseObject");LI.exports=C_});var MI=f((Gj,UI)=>{"use strict";var L_=class{constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};a(L_,"PermissionAttributeResponseObject");UI.exports=L_});var kd=f((xj,PI)=>{"use strict";var DI=yI(),TQ=MI(),{HDB_ERROR_MSGS:mQ}=it(),y_=class{constructor(){this.error=mQ.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new DI(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let _=new TQ(c,n[c]);i.push(_)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new DI(r,s,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};a(y_,"PermissionResponseObject");PI.exports=y_});var P_=f((kj,JI)=>{"use strict";var $d=Ot(),U_=It(),Ct=Nc(),ua=As(),Yd=ms(),RQ=mE(),la=Vr(),M_=wE(),me=I(),AQ=yE(),pQ=Qc(),gQ=td(),NQ=zc(),OQ=rd(),IQ=sd(),bQ=ad(),wQ=cd(),Kd=ld(),Nr=b(),CQ=ZN(),Wd=hd(),HI=Ld(),wt=m(),qI=tI(),LQ=bn(),GI=vc(),FI=lr(),Or=qd(),yQ=require("alasql"),xI=O_(),VI=Vd(),kI=kd(),{handleHDBError:tt,hdb_errors:$I}=L(),{HDB_ERROR_MSGS:Ce,HTTP_STATUS_CODES:ca}=$I,p=new Map,YI="delete",ns="insert",is="read",Gs="update",_a="describe",BI=ua.describeSchema.name,vI=ua.describeTable.name,KI={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},UQ="catchup",MQ="handleGetJob",DQ="handleGetJobsByStartDate",D_={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},PQ=[Ct.createTable.name,Ct.createAttribute.name,Ct.dropTable.name,Ct.dropAttribute.name],WI={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},N=class{constructor(t,r){this.requires_su=t,this.perms=r}};a(N,"permission");p.set($d.insert.name,new N(!1,[ns]));p.set($d.update.name,new N(!1,[Gs]));p.set($d.upsert.name,new N(!1,[ns,Gs]));p.set(U_.searchByConditions.name,new N(!1,[is]));p.set(U_.searchByHash.name,new N(!1,[is]));p.set(U_.searchByValue.name,new N(!1,[is]));p.set(U_.search.name,new N(!1,[is]));p.set(Ct.createSchema.name,new N(!0,[]));p.set(Ct.createTable.name,new N(!0,[]));p.set(Ct.createAttribute.name,new N(!1,[ns]));p.set(Ct.dropSchema.name,new N(!0,[]));p.set(Ct.dropTable.name,new N(!0,[]));p.set(Ct.dropAttribute.name,new N(!0,[]));p.set(ua.describeSchema.name,new N(!1,[is]));p.set(ua.describeTable.name,new N(!1,[is]));p.set(Yd.deleteRecord.name,new N(!1,[YI]));p.set(la.addUser.name,new N(!0,[]));p.set(la.alterUser.name,new N(!0,[]));p.set(la.dropUser.name,new N(!0,[]));p.set(la.listUsersExternal.name,new N(!0,[]));p.set(M_.listRoles.name,new N(!0,[]));p.set(M_.addRole.name,new N(!0,[]));p.set(M_.alterRole.name,new N(!0,[]));p.set(M_.dropRole.name,new N(!0,[]));p.set(AQ.name,new N(!0,[]));p.set(pQ.name,new N(!0,[]));p.set(gQ.name,new N(!0,[]));p.set(NQ.name,new N(!0,[]));p.set(OQ.name,new N(!0,[]));p.set(IQ.name,new N(!0,[]));p.set(Kd.setRoutes.name,new N(!0,[]));p.set(Kd.getRoutes.name,new N(!0,[]));p.set(Kd.deleteRoutes.name,new N(!0,[]));p.set(FI.setConfiguration.name,new N(!0,[]));p.set(bQ.clusterStatus.name,new N(!0,[]));p.set(wQ.name,new N(!0,[]));p.set(Wd.getFingerprint.name,new N(!0,[]));p.set(Wd.setLicense.name,new N(!0,[]));p.set(Yd.deleteFilesBefore.name,new N(!0,[]));p.set(Yd.deleteAuditLogsBefore.name,new N(!0,[]));p.set(HI.restart.name,new N(!0,[]));p.set(HI.restartService.name,new N(!0,[]));p.set(RQ.name,new N(!0,[]));p.set(LQ.systemInformation.name,new N(!0,[]));p.set(FI.getConfiguration.name,new N(!0,[]));p.set(xI.readTransactionLog.name,new N(!0,[]));p.set(xI.deleteTransactionLogsBefore.name,new N(!0,[]));p.set(VI.installModules.name,new N(!0,[]));p.set(VI.auditModules.name,new N(!0,[]));p.set(GI.createTokens.name,new N(!1,[]));p.set(GI.refreshOperationToken.name,new N(!1,[]));p.set(Or.customFunctionsStatus.name,new N(!0,[]));p.set(Or.getCustomFunctions.name,new N(!0,[]));p.set(Or.getCustomFunction.name,new N(!0,[]));p.set(Or.setCustomFunction.name,new N(!0,[]));p.set(Or.dropCustomFunction.name,new N(!0,[]));p.set(Or.addCustomFunctionProject.name,new N(!0,[]));p.set(Or.dropCustomFunctionProject.name,new N(!0,[]));p.set(Or.packageCustomFunctionProject.name,new N(!0,[]));p.set(Or.deployCustomFunctionProject.name,new N(!0,[]));p.set(Wd.getRegistrationInfo.name,new N(!1,[]));p.set(la.userInfo.name,new N(!1,[]));p.set(ua.describeAll.name,new N(!1,[]));p.set(MQ,new N(!1,[]));p.set(DQ,new N(!0,[]));p.set(UQ,new N(!0,[]));p.set(D_.CSV_DATA_LOAD,new N(!1,[ns,Gs]));p.set(D_.CSV_URL_LOAD,new N(!1,[ns,Gs]));p.set(D_.CSV_FILE_LOAD,new N(!1,[ns,Gs]));p.set(D_.IMPORT_FROM_S3,new N(!1,[ns,Gs]));p.set(WI.EXPORT_TO_S3,new N(!0,[]));p.set(WI.EXPORT_LOCAL,new N(!0,[]));p.set(wt.VALID_SQL_OPS_ENUM.DELETE,new N(!1,[YI]));p.set(wt.VALID_SQL_OPS_ENUM.SELECT,new N(!1,[is]));p.set(wt.VALID_SQL_OPS_ENUM.INSERT,new N(!1,[ns]));p.set(wt.VALID_SQL_OPS_ENUM.UPDATE,new N(!1,[Gs]));JI.exports={verifyPerms:vQ,verifyPermsAst:BQ,verifyBulkLoadAttributePerms:qQ};function BQ(e,t,r){if(Nr.isEmptyOrZeroLength(e))throw me.info("verify_perms_ast has an empty user parameter"),tt(new Error);if(Nr.isEmptyOrZeroLength(t))throw me.info("verify_perms_ast has an empty user parameter"),tt(new Error);if(Nr.isEmptyOrZeroLength(r))throw me.info("verify_perms_ast has a null operation parameter"),tt(new Error);try{let s=new kI,n=new CQ(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw me.info("No schemas defined in verifyPermsAst(), will not continue."),tt(new Error);let c=!!t.role.permission.super_user,_=i.includes("system");if(_&&KI[r])throw tt(new Error,Ce.DROP_SYSTEM,ca.FORBIDDEN);if(c&&!_)return null;let u=qI.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof yQ.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(u));for(let E=0;E<i.length;E++){let d=n.getTablesBySchemaName(i[E]);d&&o.set(i[E],d)}let l=QI(t,r,o,s);return l||(o.forEach((E,d)=>{for(let h=0;h<E.length;h++){let T=n.getAttributesBySchemaTableName(d,E[h]),R=Jd(t.role.permission,d,E[h]);Qd(T,R,r,E[h],d,s)}}),s.getPermsResponse())}catch(s){throw tt(s)}}a(BQ,"verifyPermsAst");function vQ(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw me.info("null required parameter in verifyPerms"),tt(new Error,Ce.DEFAULT_INVALID_REQUEST,ca.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new kI;if(Nr.isEmptyOrZeroLength(e.hdb_user.role)||Nr.isEmptyOrZeroLength(e.hdb_user.role.permission))return me.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Ce.USER_HAS_NO_PERMS(e.hdb_user.username));let _=!!e.hdb_user.role.permission.super_user,u=e.hdb_user.role.permission.structure_user,l=o.has(wt.SYSTEM_SCHEMA_NAME)||n===wt.SYSTEM_SCHEMA_NAME;if(l&&KI[r])throw tt(new Error,Ce.DROP_SYSTEM,ca.FORBIDDEN);if(_&&!l||u===!0&&(r===Ct.createSchema.name||r===Ct.dropSchema.name))return null;if(PQ.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let E=qI.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=E,r===BI||r===vI){if(n===wt.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ce.SCHEMA_PERM_ERROR(n));if(!E.super_user){if(r===BI&&(!E[n]||!E[n][_a]))return c.handleInvalidItem(Ce.SCHEMA_NOT_FOUND(n));if(r===vI&&(!E[n]||!E[n].tables[i]||!E[n].tables[i][_a]))return c.handleInvalidItem(Ce.TABLE_NOT_FOUND(n,i))}}let d=QI(e.hdb_user,r,o,c,s);if(d)return d;if(p.get(r)&&p.get(r).perms.length===0)return null;if(!_&&e.get_attributes&&wt.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let R=[],g=E[n].tables[i];g[wt.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(x=>x[wt.PERMS_CRUD_ENUM.READ]).forEach(x=>{R.push(x.attribute_name)}):R=global.hdb_schema[n][i].attributes.map(H=>H.attribute),e.get_attributes=R)}let h=HQ(e),T=Jd(e.hdb_user.role.permission,n,i);return Qd(h,T,r,i,n,c,s),c.getPermsResponse()}a(vQ,"verifyPerms");function QI(e,t,r,s,n){if(Nr.arrayHasEmptyValues([e,t,r]))throw me.info("hasPermissions has an invalid parameter"),tt(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&!i)return null;if(!p.get(t))throw me.info(`operation ${t} not found.`),tt(new Error,Ce.OP_NOT_FOUND(t),ca.BAD_REQUEST);if(p.get(t)&&p.get(t).requires_su)return me.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Ce.OP_IS_SU_ONLY(t));let c=r.keys();for(let _ of c){try{if(_&&!o[_]||o[_][_a]===!1){s.addInvalidItem(Ce.SCHEMA_NOT_FOUND(_));continue}}catch{s.addInvalidItem(Ce.SCHEMA_NOT_FOUND(_));continue}let u=r.get(_);for(let l of u){let E=o[_].tables[l];if(!E||E[_a]===!1)s.addInvalidItem(Ce.TABLE_NOT_FOUND(_,l));else try{let d=[],h=p.get(t).perms;!Nr.isEmpty(n)&&h.includes(n)&&(h=[n]);for(let T=0;T<h.length;T++){let R=h[T],g=E[R];(g==null||g===!1)&&(me.info(`Required ${R} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),d.push(R))}d.length>0&&s.addUnauthorizedTable(_,l,d)}catch(d){let h=Ce.UNKNOWN_OP_AUTH_ERROR(t,_,l);throw me.error(h),me.error(d),tt($I.CHECK_LOGS_WRAPPER(h))}}}return r.size<2?s.getPermsResponse():null}a(QI,"hasPermissions");function Qd(e,t,r,s,n,i,o){if(!e||!t)throw me.info("no attributes specified in checkAttributePerms."),tt(new Error);let c=p.get(r).perms;if(!c||c==="")throw me.info(`no permissions found for ${r} in checkAttributePerms().`),tt(new Error);if(Nr.isEmptyOrZeroLength(t))return me.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let _={};for(let l of e){let E=t.get(l);if(E){if(E[_a]===!1){i.addInvalidItem(Ce.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let d of c){if(wt.TIME_STAMP_NAMES.includes(E.attribute_name)&&d!==is)throw tt(new Error,Ce.SYSTEM_TIMESTAMP_PERMS_ERR,ca.FORBIDDEN);E[d]===!1&&(_[E.attribute_name]?_[E.attribute_name].push(d):_[E.attribute_name]=[d])}}else i.addInvalidItem(Ce.ATTR_NOT_FOUND(n,s,l),n,s)}let u=Object.keys(_);u.length>0&&i.addUnauthorizedAttributes(u,n,s,_)}a(Qd,"checkAttributePerms");function HQ(e){let t=new Set;try{if(e.action)return t;if(e.operation===wt.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){me.info(r)}return t}a(HQ,"getRecordAttributes");function Jd(e,t,r){let s=new Map;if(Nr.isEmpty(e))return me.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{me.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(Jd,"getAttributePermissions");function qQ(e,t,r,s,n,i,o){let c=new Set(i),_=Jd(e,s,n);Qd(c,_,t,n,s,o,r)}a(qQ,"verifyBulkLoadAttributePerms")});var v_=f((Yj,eb)=>{"use strict";eb.exports={evaluateSQL:jQ,processAST:jI,convertSQLToAST:zI,checkASTPermissions:ZI};var XI=Ot(),zd=require("util"),GQ=zd.callbackify(XI.insert),FQ=It().search,xQ=Fp().update,VQ=zd.callbackify(xQ),kQ=Vp().convertDelete,as=require("alasql"),$Q=P_(),da=I(),YQ=uc(),KQ=b(),Ea=m(),{hdb_errors:WQ,handleHDBError:Xd}=L(),{HTTP_STATUS_CODES:Zd}=WQ,QQ=Tn();function JQ(e,t){return Promise.all([QQ.postOperationHandler(e,t,void 0),XI.flush(e)])}a(JQ,"postWrite");var XQ=zd.callbackify(JQ);YQ(as);var ZQ=403,zQ="There was a problem performing this insert. Please check the logs and try again.",B_=class{constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};a(B_,"ParsedSQLObject");function jQ(e,t){let r=e.parsed_sql_object;if(!r){r=zI(e.sql);let s,n=r.ast.statements[0];if(n instanceof as.yy.Insert?s=n.into.databaseid:n instanceof as.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof as.yy.Update||n instanceof as.yy.Delete?s=n.table.databaseid:da.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof as.yy.Select)&&KQ.isEmptyOrZeroLength(s))return t("No schema specified",null)}jI(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(jQ,"evaluateSQL");function ZI(e,t){let r;try{r=$Q.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(ZI,"checkASTPermissions");function zI(e){let t=new B_;if(!e)throw Xd(new Error,"The 'sql' parameter is missing from the request body",Zd.BAD_REQUEST);try{let r=e.trim(),s=as.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
|
|
14
|
+
`);throw s[1]?Xd(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,Zd.BAD_REQUEST):Xd(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",Zd.BAD_REQUEST)}return t}a(zI,"convertSQLToAST");function jI(e,t,r){try{let s=e1;if(!e.bypass_auth&&!t.permissions_checked){let i=ZI(e,t);if(i&&i.length>0)return r(ZQ,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Ea.VALID_SQL_OPS_ENUM.SELECT:s=FQ,n=t.ast.statements[0];break;case Ea.VALID_SQL_OPS_ENUM.INSERT:s=t1;break;case Ea.VALID_SQL_OPS_ENUM.UPDATE:s=VQ;break;case Ea.VALID_SQL_OPS_ENUM.DELETE:s=kQ;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(jI,"processAST");function e1(e,t){da.info(e),t("unknown sql statement")}a(e1,"nullFunction");function t1({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=r1(i,e.values)}catch(o){return r(o)}GQ(n,(o,c)=>{if(o)return r(o);XQ(n,c,_=>{_&&da.error(_)});try{delete c.new_attributes,delete c.txn_time}catch(_){da.error(`Error delete new_attributes from insert response: ${_}`)}r(null,c)})}a(t1,"convertInsert");function r1(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=as.compile(`SELECT ${n.toString()} AS [${Ea.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw da.error(r),new Error(zQ)}}a(r1,"createDataObjects")});var rh=f((Wj,ib)=>{var V_=require("clone"),k_=te(),s1=b(),F_=m(),n1=I(),H_=require("fs"),jd=require("joi"),{string:x_}=jd.types(),{hdb_errors:i1,handleHDBError:ha}=L(),{HDB_ERROR_MSGS:a1,HTTP_STATUS_CODES:q_}=i1,{common_validators:G_}=Wt(),tb=1e9,rb=" is required",o1=["insert","update","upsert"],eh={schema:{presence:!0,format:G_.schema_format,length:G_.schema_length},table:{presence:!0,format:G_.schema_format,length:G_.schema_length},action:{inclusion:{within:o1,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},c1={schema:x_.required(),table:x_.required(),action:x_.valid("insert","update","upsert")},{AWS_ACCESS_KEY:_1,AWS_SECRET:u1,AWS_BUCKET:l1,AWS_FILE_KEY:E1,REGION:d1}=F_.S3_BUCKET_AUTH_KEYS,h1={s3:{presence:!0},[`s3.${_1}`]:{presence:!0,type:"String"},[`s3.${u1}`]:{presence:!0,type:"String"},[`s3.${l1}`]:{presence:!0,type:"String"},[`s3.${E1}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${d1}`]:{presence:!0,type:"String"}},sb=V_(eh);sb.data.presence={message:rb};var nb=V_(eh);nb.file_path.presence={message:rb};var f1=Object.assign(V_(eh),h1),th=V_(c1);th.csv_url=x_.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();th.passthrough_headers=jd.object();function S1(e){let t=k_.validateObject(e,sb);return $_(e,t)}a(S1,"dataObject");function T1(e){let t=k_.validateBySchema(e,jd.object(th));return $_(e,t)}a(T1,"urlObject");function m1(e){let t=k_.validateObject(e,nb);return $_(e,t)}a(m1,"fileObject");function R1(e){let t=k_.validateObject(e,f1);return $_(e,t)}a(R1,"s3FileObject");function $_(e,t){if(!t){let r=s1.checkGlobalSchemaTable(e.schema,e.table);if(r)return ha(new Error,r,q_.BAD_REQUEST);if(e.operation===F_.OPERATIONS_ENUM.CSV_FILE_LOAD){try{H_.accessSync(e.file_path,H_.constants.R_OK|H_.constants.F_OK)}catch(s){return s.code===F_.NODE_ERROR_CODES.ENOENT?ha(s,`No such file or directory ${s.path}`,q_.BAD_REQUEST):s.code===F_.NODE_ERROR_CODES.EACCES?ha(s,`Permission denied ${s.path}`,q_.BAD_REQUEST):ha(s)}try{let s=H_.statSync(e.file_path).size;if(s>tb)return ha(new Error,a1.MAX_FILE_SIZE_ERR(s,tb),q_.BAD_REQUEST)}catch(s){n1.error(s),console.error(s)}}}return t}a($_,"postValidateChecks");ib.exports={dataObject:S1,urlObject:T1,fileObject:m1,s3FileObject:R1}});var K_=f((Jj,ab)=>{"use strict";var fa=I(),Y_=m();async function A1(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===Y_.OPERATIONS_ENUM.INSERT||t.operation===Y_.OPERATIONS_ENUM.UPDATE||t.operation===Y_.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===Y_.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(fa.info(i.message),i):i.http_resp_msg?(fa.error(`Error calling operation: ${e.name}`),fa.error(i.http_resp_msg),i):(fa.error(`Error calling operation: ${e.name}`),fa.error(i),i)}}a(A1,"callOperationFunctionAsAwait");ab.exports={callOperationFunctionAsAwait:A1}});var sh=f((Zj,cb)=>{"use strict";var{S3:p1,GetObjectCommand:g1}=require("@aws-sdk/client-s3");cb.exports={getFileStreamFromS3:N1,getS3AuthObj:ob};async function N1(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await ob(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new g1(r))).Body}a(N1,"getFileStreamFromS3");function ob(e,t,r){return new p1({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(ob,"getS3AuthObj")});var ub=f((jj,_b)=>{"use strict";var W_=class{constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}};a(W_,"BulkLoadFileObject");var Q_=class{constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};a(Q_,"BulkLoadDataObject");_b.exports={BulkLoadFileObject:W_,BulkLoadDataObject:Q_}});var ch=f((t8,wb)=>{"use strict";var J_=Ot(),z_=rh(),O1=require("needle"),Tt=m(),I1=oe(),Sa=b(),{handleHDBError:ne,hdb_errors:Rb}=L(),{HTTP_STATUS_CODES:Le,HDB_ERROR_MSGS:Re,CHECK_LOGS_WRAPPER:Vs}=Rb,xs=I(),X_=require("papaparse");Sa.promisifyPapaParse();var Vt=require("fs-extra"),b1=require("path"),{chain:lb}=require("stream-chain"),Eb=require("stream-json/streamers/StreamArray"),db=require("stream-json/utils/Batch"),hb=require("stream-chain/utils/comp"),{finished:fb}=require("stream"),nh=B(),Ab=K_(),w1=sh(),{BulkLoadFileObject:ih,BulkLoadDataObject:C1}=ub(),ah=kd(),{verifyBulkLoadAttributePerms:pb}=P_(),L1=uE(),y1=be(),U1=xr(),Sb="No records parsed from csv file.",Fs=`${nh.get("HDB_ROOT")}/tmp`,{schema_regex:M1}=Wt(),Tb=1024*1024*5,mb=5e3,D1={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};wb.exports={csvDataLoad:P1,csvURLLoad:B1,csvFileLoad:v1,importFromS3:H1};async function P1(e,t){let r=z_.dataObject(e);if(r)throw ne(r,r.message,Le.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=X_.parse(e.data,{header:!0,skipEmptyLines:!0,dynamicTyping:!0}),i=new ah;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&pb(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,n.meta.fields,i);let o=i.getPermsResponse();if(o)throw ne(new Error,o,Le.BAD_REQUEST,void 0,void 0,!0);let c=new C1(e.action,e.schema,e.table,n.data);return s=await Ab.callOperationFunctionAsAwait(Ob,c,Ib.bind(null,n.meta.fields),t),s.message===Sb?Sb:bb(s.records,s.number_written)}catch(n){throw ks(n)}}a(P1,"csvDataLoad");async function B1(e){let t=z_.urlObject(e);if(t)throw ne(t,t.message,Le.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Fs}/${r}`;try{await q1(e,r)}catch(n){throw xs.error(Re.DOWNLOAD_FILE_ERR(r)+" - "+n),ne(n,Vs(Re.DOWNLOAD_FILE_ERR(r)))}try{let n=new ih(this.job_operation_function.name,e.action,e.schema,e.table,s,Tt.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await oh(n);return await Z_(s),i}catch(n){throw await Z_(s),ks(n)}}a(B1,"csvURLLoad");async function v1(e){let t=z_.fileObject(e);if(t)throw ne(t,t.message,Le.BAD_REQUEST,void 0,void 0,!0);let r=new ih(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Tt.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await oh(r)}catch(s){throw ks(s)}}a(v1,"csvFileLoad");async function H1(e){let t=z_.s3FileObject(e);if(t)throw ne(t,t.message,Le.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=b1.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Fs}/${n}`;let i=new ih(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await G1(n,e);let o=await oh(i);return await Z_(r),o}catch(s){throw await Z_(r),ks(s)}}a(H1,"importFromS3");async function q1(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await O1("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw ne(s,n,s.statusCode,Tt.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}x1(r,e.csv_url),await F1(t,r.raw)}a(q1,"downloadCSVFile");async function G1(e,t){try{let r=`${Fs}/${e}`;await Vt.mkdirp(Fs),await Vt.writeFile(`${Fs}/${e}`,"",{flag:"a+"});let s=await Vt.createWriteStream(r),n=await w1.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){xs.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw xs.error(Re.S3_DOWNLOAD_ERR+" - "+r),ne(r,Vs(Re.S3_DOWNLOAD_ERR))}}a(G1,"downloadFileFromS3");async function F1(e,t){try{await Vt.mkdirp(Fs),await Vt.writeFile(`${Fs}/${e}`,t)}catch(r){throw xs.error(Re.WRITE_TEMP_FILE_ERR),ne(r,Vs(Re.DEFAULT_BULK_LOAD_ERR))}}a(F1,"writeFileToTempFolder");async function Z_(e){if(e)try{await Vt.access(e),await Vt.unlink(e)}catch{xs.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Z_,"deleteTempFile");function x1(e,t){if(e.statusCode!==Rb.HTTP_STATUS_CODES.OK)throw ne(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Le.BAD_REQUEST);if(!D1[e.headers["content-type"]])throw ne(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Le.BAD_REQUEST);if(!e.raw)throw ne(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Le.BAD_REQUEST)}a(x1,"validateURLResponse");async function oh(e){try{let t;switch(e.file_type){case Tt.VALID_S3_FILE_TYPES.CSV:t=await V1(e);break;case Tt.VALID_S3_FILE_TYPES.JSON:t=await k1(e);break;default:throw ne(new Error,Re.DEFAULT_BULK_LOAD_ERR,Le.BAD_REQUEST,Tt.LOG_LEVELS.ERROR,Re.INVALID_FILE_EXT_ERR(e))}return bb(t.records,t.number_written)}catch(t){throw ks(t)}}a(oh,"fileLoad");async function gb(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await J_.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&pb(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let _=ne(c);r(_)}}a(gb,"validateChunk");async function Nb(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;Sa.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!Sa.isEmpty(c)&&!Sa.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(_=>{Object.keys(_).forEach(u=>c.add(u))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},_=await Ab.callOperationFunctionAsAwait(Ob,c,Ib.bind(null,o));t.records+=_.records,t.number_written+=_.number_written,n&&n.resume()}catch(c){let _=ne(c,Vs(Re.INSERT_CSV_ERR),Le.INTERNAL_SERVER_ERROR,Tt.LOG_LEVELS.ERROR,Re.INSERT_CSV_ERR+" - "+c);r(_)}}a(Nb,"insertChunk");async function V1(e){let t={records:0,number_written:0};try{let r=new ah,s=Vt.createReadStream(e.file_path,{highWaterMark:Tb});s.setEncoding("utf8"),await X_.parsePromise(s,gb.bind(null,e,r));let n=r.getPermsResponse();if(n)throw ne(new Error,n,Le.BAD_REQUEST);return s=Vt.createReadStream(e.file_path,{highWaterMark:Tb}),s.setEncoding("utf8"),await X_.parsePromise(s,Nb.bind(null,e,t)),s.destroy(),t}catch(r){throw ne(r,Vs(Re.PAPA_PARSE_ERR),Le.INTERNAL_SERVER_ERROR,Tt.LOG_LEVELS.ERROR,Re.PAPA_PARSE_ERR+r)}}a(V1,"callPapaParse");async function k1(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new ah,n=lb([Vt.createReadStream(e.file_path,{encoding:"utf-8"}),Eb.withParser(),c=>c.value,new db({batchSize:mb}),hb(async c=>{await gb(e,s,r,c)})]);await new Promise((c,_)=>{fb(n,u=>{u?_(u):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw ne(new Error,i,Le.BAD_REQUEST);let o=lb([Vt.createReadStream(e.file_path,{encoding:"utf-8"}),Eb.withParser(),c=>c.value,new db({batchSize:mb}),hb(async c=>{await Nb(e,t,r,c)})]);return await new Promise((c,_)=>{fb(o,u=>{u?_(u):c()}),o.resume()}),t}catch(s){throw ne(s,Vs(Re.INSERT_JSON_ERR),Le.INTERNAL_SERVER_ERROR,Tt.LOG_LEVELS.ERROR,Re.INSERT_JSON_ERR+s)}}a(k1,"insertJson");async function Ob(e){let t={};try{e.data&&e.data.length>0&&$1(e.data[0])?t=await Y1(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",xs.info(t.message))}catch(r){throw ks(r)}return t}a(Ob,"callBulkFileLoad");function $1(e){let t=Object.keys(e);for(let r of t)if(!M1.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a($1,"validateColumnNames");async function Y1(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=J_.insert;break;case"update":i=J_.update;break;case"upsert":i=J_.upsert;break;default:throw ne(new Error,Re.INVALID_ACTION_PARAM_ERR(s),Le.BAD_REQUEST,Tt.LOG_LEVELS.ERROR,Re.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let l=global.hdb_schema[t][r].hash_attribute,E=e.length;for(;E--;)o.skipped_hashes.indexOf(e[E][l])>=0&&e.splice(E,1)}let _=Sa.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:_,new_attributes:o.new_attributes}}catch(o){throw ks(o)}}a(Y1,"bulkFileLoad");async function Ib(e,t,r,s){try{if(t.data.length===0||!nh.get(Tt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;let n=X_.unparse(t.data,{header:!0,skipEmptyLines:!0,columns:e}),i;t.hdb_user&&t.hdb_user.username&&(i=t.hdb_user.username);let o={operation:"csv_data_load",action:t.action?t.action:"insert",schema:t.schema,table:t.table,data:n,__origin:new L1(r.txn_time,i,nh.get(Tt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY))};await y1.publishToStream(`${I1.SUBJECT_PREFIXES.TXN}.${t.schema}.${t.table}`,U1.createNatsTableStreamName(t.schema,t.table),s,o),delete r.new_attributes}catch(n){xs.error(n)}}a(Ib,"postCSVLoadFunction");function bb(e,t){return`successfully loaded ${t} of ${e} records`}a(bb,"buildResponseMsg");function ks(e){return ne(e,Vs(Re.DEFAULT_BULK_LOAD_ERR),Le.INTERNAL_SERVER_ERROR,Tt.LOG_LEVELS.ERROR,Re.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(ks,"buildTopLevelErrMsg")});var Ub=f((s8,yb)=>{"use strict";var{Readable:K1}=require("stream"),W1=1e4;yb.exports={streamAsJSON(e){return new j_({value:e})}};var j_=class extends K1{constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0)}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator](),o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){yield"]";return}else n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),Cb)}catch(n){yield Cb(n)}else yield JSON.stringify(t)}else yield JSON.stringify(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);Lb(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>W1?this.flush():!0)}flush(){let t=super.push(this.buffer.join(""));return this.buffer=[],this.bufferSize=0,t}readIterator(t){try{let r;if(t.childIterator)return Lb(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}};a(j_,"JSONStream");function Cb(e){return console.error(e),JSON.stringify(e.toString())}a(Cb,"handleError");function Lb(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(Lb,"when")});var uh=f((i8,Fb)=>{"use strict";var Pb=It(),Q1=v_(),J1=sh(),{AsyncParser:X1,Transform:Z1}=require("json2csv"),ma=require("stream"),mt=b(),_h=require("fs-extra"),z1=require("path"),Lt=I(),{promisify:eu}=require("util"),Ta=b(),{handleHDBError:fe,hdb_errors:j1}=L(),{HDB_ERROR_MSGS:rt,HTTP_STATUS_CODES:Se}=j1,{streamAsJSON:eJ}=Ub(),{Upload:tJ}=require("@aws-sdk/lib-storage"),Mb=["search_by_value","search_by_hash","sql"],Db=["json","csv"],Bb="json",vb="csv",rJ="Successfully exported JSON locally.",sJ="Successfully exported CSV locally.",nJ=1e3,iJ=eu(Pb.searchByHash),aJ=eu(Pb.searchByValue),oJ=eu(Q1.evaluateSQL),cJ=eu(ma.finished);Fb.exports={export_to_s3:EJ,export_local:_J,toCsvStream:Hb};async function _J(e){Lt.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=qb(e);if(!mt.isEmpty(t))throw Lt.error(t),fe(new Error,t,Se.BAD_REQUEST,void 0,void 0,!0);if(mt.isEmpty(e.path))throw Lt.error(rt.MISSING_VALUE("path")),fe(new Error,rt.MISSING_VALUE("path"),Se.BAD_REQUEST,void 0,void 0,!0);let r=(mt.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(z1.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=mt.buildFolderPath(e.path,r);await uJ(e.path);let n=await Gb(e);return await lJ(s,e.format,n)}a(_J,"export_local");async function uJ(e){if(Lt.trace("in confirmPath"),mt.isEmptyOrZeroLength(e))throw fe(new Error,`Invalid path: ${e}`,Se.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await _h.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,Lt.error(s),fe(new Error,s,Se.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw Lt.error(r),fe(new Error,r,Se.BAD_REQUEST,void 0,void 0,!0)}return!0}a(uJ,"confirmPath");async function lJ(e,t,r){if(Lt.trace("in saveToLocal"),Ta.isEmptyOrZeroLength(e))throw fe(new Error,rt.INVALID_VALUE("file_path"),Se.BAD_REQUEST,void 0,void 0,!0);if(Ta.isEmptyOrZeroLength(t))throw fe(new Error,rt.INVALID_VALUE("Source format"),Se.BAD_REQUEST,void 0,void 0,!0);if(Ta.isEmpty(r))throw fe(new Error,rt.NOT_FOUND("Data"),Se.BAD_REQUEST,void 0,void 0,!0);if(t===Bb){let s=_h.createWriteStream(e);return eJ(r).pipe(s),await cJ(s),{message:rJ,path:e}}else if(t===vb){let s=_h.createWriteStream(e),n=ma.Readable.from(r),i={},o={objectMode:!0};return await new X1(i,o).fromInput(n).toOutput(s).promise(!1),{message:sJ,path:e}}throw fe(new Error,rt.INVALID_VALUE("format"),Se.BAD_REQUEST)}a(lJ,"saveToLocal");async function EJ(e){if(!e.s3||Object.keys(e.s3).length===0)throw fe(new Error,rt.MISSING_VALUE("S3 object"),Se.BAD_REQUEST);if(mt.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw fe(new Error,rt.MISSING_VALUE("aws_access_key_id"),Se.BAD_REQUEST);if(mt.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw fe(new Error,rt.MISSING_VALUE("aws_secret_access_key"),Se.BAD_REQUEST);if(mt.isEmptyOrZeroLength(e.s3.bucket))throw fe(new Error,rt.MISSING_VALUE("bucket"),Se.BAD_REQUEST);if(mt.isEmptyOrZeroLength(e.s3.key))throw fe(new Error,rt.MISSING_VALUE("key"),Se.BAD_REQUEST);if(mt.isEmptyOrZeroLength(e.s3.region))throw fe(new Error,rt.MISSING_VALUE("region"),Se.BAD_REQUEST);let t=qb(e);if(!mt.isEmpty(t))throw fe(new Error,t,Se.BAD_REQUEST);Lt.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await Gb(e)}catch(_){throw Lt.error(_),_}let s,n=await J1.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new ma.PassThrough;if(e.format===vb){i=e.s3.key+".csv";let _=Hb(r);_.on("error",u=>{throw u}),_.pipe(o)}else if(e.format===Bb){i=e.s3.key+".json";let _=new ma.Readable;_.pipe(o),_.on("error",E=>{throw E}),_.push("[");let u=r.length,l="";for(let[E,d]of r.entries()){let h=E===u-1?JSON.stringify(d):JSON.stringify(d)+",";l+=h,E!==0&&E%nJ===0&&(_.push(l),l="")}l.length!==0&&_.push(l),_.push("]"),_.push(null)}else throw fe(new Error,rt.INVALID_VALUE("format"),Se.BAD_REQUEST);return new tJ({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(EJ,"export_to_s3");function Hb(e){let t=ma.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new Z1(r,s);return t.pipe(n)}a(Hb,"toCsvStream");function qb(e){if(Lt.trace("in exportCoreValidation"),mt.isEmpty(e.format))return"format missing";if(Db.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${Db.join(", ")}`;let t=e.search_operation.operation;if(mt.isEmpty(t))return"search_operation.operation missing";if(Mb.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${Mb.join(", ")}`}a(qb,"exportCoreValidation");async function Gb(e){Lt.trace("in getRecords");let t,r;if(Ta.isEmpty(e.search_operation)||Ta.isEmptyOrZeroLength(e.search_operation.operation))throw fe(new Error,rt.INVALID_VALUE("Search operation"),Se.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=aJ;break;case"search_by_hash":t=iJ;break;case"sql":t=oJ;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Lt.error(r),fe(new Error,r,Se.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(Gb,"getRecords")});var Vb=f((o8,xb)=>{"use strict";var tu=class{constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};a(tu,"SqlSearchObject");xb.exports=tu});var Yb=f((_8,$b)=>{"use strict";var dJ=m(),kb=require("moment"),hJ=require("uuid").v4,ru=class{constructor(){this.id=hJ(),this.type=void 0,this.start_datetime=kb().valueOf(),this.created_datetime=kb().valueOf(),this.end_datetime=void 0,this.status=dJ.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};a(ru,"JobObject");$b.exports=ru});var Eh=f((l8,Zb)=>{"use strict";var fJ=require("uuid").v4,Qb=Ot(),Jb=It(),SJ=Ht(),TJ=un(),mJ=Vb(),ie=m(),RJ=Yb(),AJ=ME(),yt=I(),pJ=oi(),Bn=b(),{promisify:lh}=require("util"),$s=require("moment"),gJ=v_(),su=rh(),Kb=dl(),{deleteTransactionLogsBeforeValidator:NJ}=Gd(),{handleHDBError:OJ,hdb_errors:IJ}=L(),{HTTP_STATUS_CODES:bJ}=IJ,Wb=lh(Jb.searchByValue),wJ=lh(Jb.searchByHash),CJ=Qb.insert,LJ=lh(gJ.evaluateSQL),yJ=Qb.update;Zb.exports={addJob:DJ,updateJob:BJ,handleGetJob:UJ,handleGetJobsByStartDate:MJ,getJobById:Xb};async function UJ(e){try{let t=await Xb(e.id);return Bn.isEmptyOrZeroLength(t)||(t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw yt.error(r),new Error(r)}}a(UJ,"handleGetJob");async function MJ(e){try{let t=await PJ(e);if(yt.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=$s(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=$s(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw yt.error(r),new Error(r)}}a(MJ,"handleGetJobsByStartDate");async function DJ(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Bn.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return yt.info(l),t.error=l,t}if(!ie.JOB_TYPE_ENUM[e.operation])return yt.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case ie.OPERATIONS_ENUM.CSV_FILE_LOAD:s=su.fileObject(e);break;case ie.OPERATIONS_ENUM.CSV_URL_LOAD:s=su.urlObject(e);break;case ie.OPERATIONS_ENUM.CSV_DATA_LOAD:s=su.dataObject(e);break;case ie.OPERATIONS_ENUM.IMPORT_FROM_S3:s=su.s3FileObject(e);break;case ie.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case ie.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=Kb(e,"date");break;case ie.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=Kb(e,"timestamp");break;case ie.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=NJ(e);break;default:break}if(s)throw OJ(s,s.message,bJ.BAD_REQUEST,void 0,void 0,!0);let n=new RJ;n.type=e.operation===ie.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?ie.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new SJ(ie.SYSTEM_SCHEMA_NAME,ie.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=await Wb(i)}catch(l){let E=`There was an error inserting a new job: ${l}`;return yt.error(E),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=fJ();try{o=await Wb(i)}catch(l){let E=`There was an error inserting a new job: ${l}`;return yt.error(E),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return yt.error("Error creating a job, could not find a unique job id."),t}n.request=e;let _=new pJ(ie.SYSTEM_SCHEMA_NAME,ie.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),u;try{u=await CJ(_)}catch(l){return yt.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${n.operation} and id ${n.id}`;else{let l=`Created a job with type ${n.type} and id ${n.id}`;t.message=l,t.createdJob=n,t.success=!0,yt.trace(l)}return t}a(DJ,"addJob");async function PJ(e){let t=$s(e.from_date,$s.ISO_8601),r=$s(e.to_date,$s.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new mJ(s,e.hdb_user);try{return await LJ(n)}catch(i){throw yt.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(PJ,"getJobsInDateRange");async function Xb(e){if(Bn.isEmptyOrZeroLength(e))return Bn.errorizeMessage("Invalid job ID specified.");let t=new TJ(ie.SYSTEM_SCHEMA_NAME,ie.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await wJ(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return yt.error(s),Bn.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(Xb,"getJobById");async function BJ(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Bn.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===ie.JOB_STATUS_ENUM.COMPLETE||e.status===ie.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=$s().valueOf());let t=new AJ(ie.SYSTEM_SCHEMA_NAME,ie.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;try{r=await yJ(t)}catch(s){throw new Error(s)}return r}a(BJ,"updateJob")});var sw=f((d8,rw)=>{"use strict";var zb=b(),st=m(),vJ=require("moment"),nu=ch(),iu=I(),jb=Eh(),ew=uh(),tw=ms(),HJ=fs(),qJ=O_(),au=class{constructor(t,r){this.job=t,this.json=r}};a(au,"RunnerMessage");async function GJ(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if(zb.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(zb.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case st.JOB_TYPE_ENUM.csv_file_load:await Ir(e,nu.csvFileLoad);break;case st.JOB_TYPE_ENUM.csv_url_load:await Ir(e,nu.csvURLLoad);break;case st.JOB_TYPE_ENUM.csv_data_load:await Ir(e,nu.csvDataLoad);break;case st.JOB_TYPE_ENUM.import_from_s3:await Ir(e,nu.importFromS3);break;case st.JOB_TYPE_ENUM.empty_trash:break;case st.JOB_TYPE_ENUM.export_local:await Ir(e,ew.export_local);break;case st.JOB_TYPE_ENUM.export_to_s3:await Ir(e,ew.export_to_s3);break;case st.JOB_TYPE_ENUM.delete_files_before:case st.JOB_TYPE_ENUM.delete_records_before:await Ir(e,tw.deleteFilesBefore);break;case st.JOB_TYPE_ENUM.delete_audit_logs_before:await Ir(e,tw.deleteAuditLogsBefore);break;case st.JOB_TYPE_ENUM.delete_transaction_logs_before:await Ir(e,qJ.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(GJ,"parseMessage");async function Ir(e,t){try{e.job.status=st.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=vJ().valueOf(),await jb.updateJob(e.job),await FJ(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):iu.error(`There was an error running ${t.name} job with id ${e.job.id}`),iu.error(s),e.job.message=s,e.job.status=st.JOB_STATUS_ENUM.ERROR;try{await jb.updateJob(e.job)}catch(n){throw iu.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Ir,"runJob");async function FJ(e){iu.trace("launching job thread:",e),HJ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[st.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(FJ,"launchJobThread");rw.exports={parseMessage:GJ,RunnerMessage:au}});var iw=f((f8,nw)=>{"use strict";var ou=class{constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};a(ou,"OperationFunctionObject");nw.exports=ou});var mw=f((T8,Tw)=>{"use strict";var uu=It(),Sh=v_(),cu=ch(),vn=Nc(),dh=As(),Aa=ms(),xJ=mE(),Ra=Vr(),_u=wE(),br=qd(),xe=I(),VJ=yE(),kJ=Qc(),$J=td(),YJ=zc(),KJ=rd(),WJ=sd(),QJ=ad(),JJ=cd(),hh=ld(),aw=uh(),XJ=P_(),Th=Eh(),A=m(),{hdb_errors:ga,handleHDBError:pa}=L(),{HTTP_STATUS_CODES:ow}=ga,fh=hd(),cw=Ld(),lu=require("util"),Ys=Ot(),ZJ=qr(),zJ=bn(),fw=Tn(),_w=sw(),uw=vc(),lw=lr(),Ew=O_(),dw=Vd(),jJ=K_(),eX=lu.promisify(uu.searchByHash),tX=lu.promisify(uu.searchByValue),rX=lu.promisify(uu.search),sX=lu.promisify(Sh.evaluateSQL),nX={[A.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[A.OPERATIONS_ENUM.CREATE_TABLE]:!0,[A.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[A.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[A.OPERATIONS_ENUM.DROP_TABLE]:!0,[A.OPERATIONS_ENUM.DROP_SCHEMA]:!0},O=iw();function iX(e,t,r){return Promise.all([fw.postOperationHandler(e,t,r),e.table?Ys.flush(e):null])}a(iX,"postWrite");async function aX(e,t){try{if(e.body.operation!=="read_log"&&(xe.log_level===A.LOG_LEVELS.INFO||xe.log_level===A.LOG_LEVELS.DEBUG||xe.log_level===A.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:i,password:o,...c}=e.body;xe.info(c)}}catch(n){xe.error(n)}let r=A.CLUSTER_OPERATIONS[e.body.operation]===void 0?null:iX,s=await jJ.callOperationFunctionAsAwait(t,e.body,r);if(typeof s!="object"&&(s={message:s}),s instanceof Error)throw s;return nX[e.body.operation]&&ZJ.setSchemaDataToGlobal(n=>{n&&xe.error(n)}),s}a(aX,"processLocalTransaction");var hw=_X();Tw.exports={chooseOperation:oX,getOperationFunction:Sw,processLocalTransaction:aX};function oX(e){let t;try{t=Sw(e)}catch(n){throw xe.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=Sh.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=Sh.checkASTPermissions(e,i);if(o)throw xe.error(`${ow.FORBIDDEN} from operation ${e.search_operation}`),pa(new Error,o,ga.HTTP_STATUS_CODES.FORBIDDEN)}}else if(!e.bypass_auth&&e.operation!==A.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=XJ.verifyPerms(i,n);if(o)throw xe.error(`${ow.FORBIDDEN} from operation ${e.operation}`),pa(new Error,o,ga.HTTP_STATUS_CODES.FORBIDDEN)}}catch(n){throw pa(n,"There was an error when trying to choose an operation path")}return r}a(oX,"chooseOperation");function Sw(e){if(xe.trace(`getOperationFunction with operation: ${e.operation}`),hw.has(e.operation))return hw.get(e.operation);throw pa(new Error,ga.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),ga.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(Sw,"getOperationFunction");async function cX(e){xe.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[A.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case A.OPERATIONS_ENUM.INSERT:o=await Ys.insert(i);break;case A.OPERATIONS_ENUM.UPDATE:o=await Ys.update(i);break;case A.OPERATIONS_ENUM.UPSERT:o=await Ys.upsert(i);break;case A.OPERATIONS_ENUM.DELETE:o=await Aa.deleteRecord(i);break;default:xe.warn("invalid operation in catchup");break}await fw.postOperationHandler(i,o,e)}catch(o){xe.info("Invalid operation in transaction"),xe.error(o)}}a(cX,"catchup");async function ir(e){let t,r;try{r=await Th.addJob(e),t=r.createdJob;let s=new _w.RunnerMessage(t,e);return await _w.parseMessage(s),`Starting job with id ${t.id}`}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw xe.error(n),pa(s,n)}}a(ir,"executeJob");function _X(){let e=new Map;return e.set(A.OPERATIONS_ENUM.INSERT,new O(Ys.insert)),e.set(A.OPERATIONS_ENUM.UPDATE,new O(Ys.update)),e.set(A.OPERATIONS_ENUM.UPSERT,new O(Ys.upsert)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new O(uu.searchByConditions)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_HASH,new O(eX)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_VALUE,new O(tX)),e.set(A.OPERATIONS_ENUM.SEARCH,new O(rX)),e.set(A.OPERATIONS_ENUM.SQL,new O(sX)),e.set(A.OPERATIONS_ENUM.CSV_DATA_LOAD,new O(ir,cu.csvDataLoad)),e.set(A.OPERATIONS_ENUM.CSV_FILE_LOAD,new O(ir,cu.csvFileLoad)),e.set(A.OPERATIONS_ENUM.CSV_URL_LOAD,new O(ir,cu.csvURLLoad)),e.set(A.OPERATIONS_ENUM.IMPORT_FROM_S3,new O(ir,cu.importFromS3)),e.set(A.OPERATIONS_ENUM.CREATE_SCHEMA,new O(vn.createSchema)),e.set(A.OPERATIONS_ENUM.CREATE_TABLE,new O(vn.createTable)),e.set(A.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new O(vn.createAttribute)),e.set(A.OPERATIONS_ENUM.DROP_SCHEMA,new O(vn.dropSchema)),e.set(A.OPERATIONS_ENUM.DROP_TABLE,new O(vn.dropTable)),e.set(A.OPERATIONS_ENUM.DROP_ATTRIBUTE,new O(vn.dropAttribute)),e.set(A.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new O(dh.describeSchema)),e.set(A.OPERATIONS_ENUM.DESCRIBE_TABLE,new O(dh.describeTable)),e.set(A.OPERATIONS_ENUM.DESCRIBE_ALL,new O(dh.describeAll)),e.set(A.OPERATIONS_ENUM.DELETE,new O(Aa.deleteRecord)),e.set(A.OPERATIONS_ENUM.ADD_USER,new O(Ra.addUser)),e.set(A.OPERATIONS_ENUM.ALTER_USER,new O(Ra.alterUser)),e.set(A.OPERATIONS_ENUM.DROP_USER,new O(Ra.dropUser)),e.set(A.OPERATIONS_ENUM.LIST_USERS,new O(Ra.listUsersExternal)),e.set(A.OPERATIONS_ENUM.LIST_ROLES,new O(_u.listRoles)),e.set(A.OPERATIONS_ENUM.ADD_ROLE,new O(_u.addRole)),e.set(A.OPERATIONS_ENUM.ALTER_ROLE,new O(_u.alterRole)),e.set(A.OPERATIONS_ENUM.DROP_ROLE,new O(_u.dropRole)),e.set(A.OPERATIONS_ENUM.USER_INFO,new O(Ra.userInfo)),e.set(A.OPERATIONS_ENUM.READ_LOG,new O(VJ)),e.set(A.OPERATIONS_ENUM.ADD_NODE,new O(kJ)),e.set(A.OPERATIONS_ENUM.UPDATE_NODE,new O($J)),e.set(A.OPERATIONS_ENUM.REMOVE_NODE,new O(YJ)),e.set(A.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new O(KJ)),e.set(A.OPERATIONS_ENUM.PURGE_STREAM,new O(WJ)),e.set(A.OPERATIONS_ENUM.SET_CONFIGURATION,new O(lw.setConfiguration)),e.set(A.OPERATIONS_ENUM.CLUSTER_STATUS,new O(QJ.clusterStatus)),e.set(A.OPERATIONS_ENUM.CLUSTER_NETWORK,new O(JJ)),e.set(A.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new O(hh.setRoutes)),e.set(A.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new O(hh.getRoutes)),e.set(A.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new O(hh.deleteRoutes)),e.set(A.OPERATIONS_ENUM.EXPORT_TO_S3,new O(ir,aw.export_to_s3)),e.set(A.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new O(ir,Aa.deleteFilesBefore)),e.set(A.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new O(ir,Aa.deleteFilesBefore)),e.set(A.OPERATIONS_ENUM.EXPORT_LOCAL,new O(ir,aw.export_local)),e.set(A.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new O(Th.handleGetJobsByStartDate)),e.set(A.OPERATIONS_ENUM.GET_JOB,new O(Th.handleGetJob)),e.set(A.OPERATIONS_ENUM.GET_FINGERPRINT,new O(fh.getFingerprint)),e.set(A.OPERATIONS_ENUM.SET_LICENSE,new O(fh.setLicense)),e.set(A.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new O(fh.getRegistrationInfo)),e.set(A.OPERATIONS_ENUM.RESTART,new O(cw.restart)),e.set(A.OPERATIONS_ENUM.RESTART_SERVICE,new O(cw.restartService)),e.set(A.OPERATIONS_ENUM.CATCHUP,new O(cX)),e.set(A.OPERATIONS_ENUM.SYSTEM_INFORMATION,new O(zJ.systemInformation)),e.set(A.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new O(ir,Aa.deleteAuditLogsBefore)),e.set(A.OPERATIONS_ENUM.READ_AUDIT_LOG,new O(xJ)),e.set(A.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new O(uw.createTokens)),e.set(A.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new O(uw.refreshOperationToken)),e.set(A.OPERATIONS_ENUM.GET_CONFIGURATION,new O(lw.getConfiguration)),e.set(A.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new O(br.customFunctionsStatus)),e.set(A.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new O(br.getCustomFunctions)),e.set(A.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new O(br.getCustomFunction)),e.set(A.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new O(br.setCustomFunction)),e.set(A.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new O(br.dropCustomFunction)),e.set(A.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new O(br.addCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new O(br.dropCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new O(br.packageCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new O(br.deployCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new O(Ew.readTransactionLog)),e.set(A.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new O(ir,Ew.deleteTransactionLogsBefore)),e.set(A.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new O(dw.installModules)),e.set(A.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new O(dw.auditModules)),e}a(_X,"initializeOperationFunctionMap")});var Ow=f((R8,Nw)=>{"use strict";var uX=require("util"),{toJsMsg:lX}=require("nats"),{decode:EX}=require("msgpackr"),dX=qr(),{isMainThread:hX,parentPort:fX}=require("worker_threads"),pw=be(),Na=oe(),Rw=m(),Hn=I(),SX=mw(),TX=K_(),mX=Tn(),RX=B(),AX=m();fs();var pX=uX.promisify(dX.setSchemaDataToGlobal),gX={durable:Na.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Na.WORK_QUEUE_CONSUMER_NAMES.deliver_group},mh,NX,OX,IX;Nw.exports={initialize:bX,workQueueListener:wX};async function bX(){Hn.notify("Starting clustering ingest service."),await pX();let{connection:e,jsm:t,js:r}=await pw.getNATSReferences();mh=e,NX=e.info.server_name,OX=t,IX=r}a(bX,"initialize");var gw=100,Aw=new Array(gw),Eu=0;async function wX(){let e=mh.subscribe(`${Na.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${mh.info.server_name}`,gX);for await(let t of e)await Aw[Eu],Aw[Eu]=CX(t).catch(r=>{Hn.error(r)}),++Eu>=gw&&(Eu=0)}a(wX,"workQueueListener");hX||fX.on("message",async e=>{let{type:t}=e;t===AX.ITC_EVENT_TYPES.SHUTDOWN&&pw.closeConnection()});async function CX(e){let t=lX(e),r=EX(t.data);if(t.headers.get(Na.MSG_HEADERS.ORIGIN)===RX.get(Rw.CONFIG_PARAMS.CLUSTERING_NODENAME)){t.ack();return}Hn.trace("processing message:",r,"with sequence:",t.seq),Hn.trace(`messageProcessor nats msg id: ${t.headers.get(Na.MSG_HEADERS.NATS_MSG_ID)}`);let n,i=SX.getOperationFunction(r);n=i.job_operation_function?i.job_operation_function:i.operation_function;let o;try{i.job_operation_function?o=await n(r,t.headers):(r[Rw.CLUSTERING_FLAG]=!0,o=await TX.callOperationFunctionAsAwait(n,r,mX.postOperationHandler,t.headers)),Hn.debug(o)}catch(c){Hn.error(c)}return t.ack(),o}a(CX,"messageProcessor")});var Iw=Ow();(async()=>{try{await Iw.initialize(),await Iw.workQueueListener()}catch(e){console.error("Error launching Nats ingest service."),console.error(e)}})();
|