harperdb 4.1.0 → 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.
@@ -1,14 +1,14 @@
1
- "use strict";var Ow=Object.defineProperty;var a=(e,t)=>Ow(e,"name",{value:t,configurable:!0});var f=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var os=f((bX,Iw)=>{Iw.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((wX,Uh)=>{"use strict";var Ut=require("path"),bw=require("fs");function ww(){let e=__dirname;for(;!bw.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(ww,"getHDBPackageRoot");var Cr=ww(),mh="js",ba=mh,Cw="harperdb-config.yaml",yw="defaultConfig.yaml",Lw="hdb",Rh=`harperdb.${ba}`,Ah=`customFunctionsServer.${ba}`,Uw=`restartHdb.${ba}`,hu="HarperDB",Ia="Custom Functions",wa="Clustering Hub",Ca="Clustering Leaf",Mw="Clustering Ingest Service",Dw="Clustering Reply Service",Pw="foreground.pid",Bw={HDB:hu,CLUSTERING_HUB:wa,CLUSTERING_LEAF:Ca,CLUSTERING_INGEST_SERVICE:Mw,CLUSTERING_REPLY_SERVICE:Dw,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"},vw={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},Hw={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},qw={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"},Gw={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")},Fw={HDB:Ut.join(du.HDB,Rh),CUSTOM_FUNCTIONS:Ut.join(du.CUSTOM_FUNCTIONS,Ah)},xw={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")},Vw={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},ph="support@harperdb.io",kw="customer-success@harperdb.io",gh=1,$w=4141,Nh="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",Yw="https://www.harperdb.io/product",Kw=`For support, please submit a request at ${Nh} or contact ${ph}`,Oh=`For license support, please contact ${kw}`,Ww="None of the specified records were found.",Qw="hash attribute not found",Jw=`Your current license only supports ${gh} role. ${Oh}`,Xw="Your current license only supports 3 connections to a node.",Zw="127.0.0.1",zw=1,jw=/^\.$/,eC=/^\.\.$/,tC="U+002E",rC=/\//g,sC="U+002F",nC=/U\+002F/g,iC=/^U\+002E$/,aC=/^U\+002EU\+002E$/,oC="d",cC=999999,_C="*",uC="--max-old-space-size=",lC="system",EC="__hdb_hash",dC=".harperdb",hC=".hdb",fC="keys",SC="hdb_boot_properties.file",TC=".updateConfig.json",mC="SIGTSTP",RC=24,AC=6e4,pC=448,gC="blob",NC="trash",OC="schema",IC="transactions",bC=".count",wC="id",CC="PROCESS_NAME",Ih={SETTINGS_PATH_KEY:"settings_path"},bh=require("lodash"),yC={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"},LC={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},UC={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},MC={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"},DC={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:",PC={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"},BC={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"},vC="060493.ks",HC=".license",qC={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"},GC={CSV:".csv",JSON:".json"},FC={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},xC={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 VC={RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help"},kC={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"},$C=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",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,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 YC={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},KC={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"},WC={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"},QC={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},JC={FILE_SYSTEM:"fs",LMDB:"lmdb"},XC={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},ZC={DEVELOPMENT:8192,DEFAULT:512},zC={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"},jC={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"},ey={ENOENT:"ENOENT",EACCES:"EACCES"},yh={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},ty="__clustering__",ry=Object.values(yh),sy=15984864e5,Lh={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},ny=bh.invert(Lh),iy={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"},ay=111,oy=`\r
2
- `,cy={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},_y=["*","%"],uy="unauthorized_access",ly="func_val",Ey={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},dy={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},hy={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"},fy={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},Sy={HTTP:"http"},Ty={STOPPED:"stopped",ONLINE:"online"},my="3.x.x";Uh.exports={LOCAL_HARPERDB_OPERATIONS:J,HDB_SUPPORT_ADDRESS:ph,HDB_SUPPORT_URL:Nh,HDB_PRICING_URL:Yw,SUPPORT_HELP_MSG:Kw,LICENSE_HELP_MSG:Oh,HDB_PROC_NAME:Rh,HDB_PROC_DESCRIPTOR:hu,CLUSTERING_LEAF_PROC_DESCRIPTOR:Ca,CLUSTERING_HUB_PROC_DESCRIPTOR:wa,SYSTEM_SCHEMA_NAME:lC,HASH_FOLDER_NAME:EC,HDB_HOME_DIR_NAME:dC,UPDATE_FILE_NAME:TC,LICENSE_KEY_DIR_NAME:fC,BOOT_PROPS_FILE_NAME:SC,JOB_TYPE_ENUM:KC,JOB_STATUS_ENUM:qC,SYSTEM_TABLE_NAMES:MC,SYSTEM_TABLE_HASH_ATTRIBUTES:DC,OPERATIONS_ENUM:w,VALID_S3_FILE_TYPES:GC,S3_BUCKET_AUTH_KEYS:FC,VALID_SQL_OPS_ENUM:xC,GEO_CONVERSION_ENUM:kC,HDB_SETTINGS_NAMES:wh,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:$C,SERVICE_ACTIONS_ENUM:VC,CLUSTER_MESSAGE_TYPE_ENUM:WC,CLUSTER_CONNECTION_DIRECTION_ENUM:QC,CLUSTER_EVENTS_DEFS_ENUM:zC,PERIOD_REGEX:jw,DOUBLE_PERIOD_REGEX:eC,UNICODE_PERIOD:tC,FORWARD_SLASH_REGEX:rC,UNICODE_FORWARD_SLASH:sC,ESCAPED_FORWARD_SLASH_REGEX:nC,ESCAPED_PERIOD_REGEX:iC,ESCAPED_DOUBLE_PERIOD_REGEX:aC,REG_KEY_FILE_NAME:vC,RESTART_TIMEOUT_MS:AC,HDB_FILE_PERMISSIONS:pC,SCHEMA_DIR_NAME:OC,TRANSACTIONS_DIR_NAME:IC,LIMIT_COUNT_NAME:bC,ID_ATTRIBUTE_STRING:wC,INSERT_MODULE_ENUM:LC,UPGRADE_JSON_FIELD_NAMES_ENUM:UC,RESTART_CODE:mC,RESTART_CODE_NUM:RC,CLUSTER_OPERATIONS:Gn,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:BC,HDB_INTERNAL_SC_CHANNEL_PREFIX:nt,INTERNAL_SC_CHANNELS:PC,CLUSTERING_MESSAGE_TYPES:iy,HDB_FILE_SUFFIX:hC,BLOB_FOLDER_NAME:gC,HDB_TRASH_DIR:NC,ORIGINATOR_SET_VALUE:ay,LICENSE_VALUES:XC,RAM_ALLOCATION_ENUM:ZC,STORAGE_TYPES_ENUM:JC,TIME_STAMP_NAMES_ENUM:yh,TIME_STAMP_NAMES:ry,PERMS_UPDATE_RELEASE_TIMESTAMP:sy,SEARCH_NOT_FOUND_MESSAGE:Ww,SEARCH_ATTRIBUTE_NOT_FOUND:Qw,LICENSE_ROLE_DENIED_RESPONSE:Jw,LICENSE_MAX_CONNS_REACHED:Xw,BASIC_LICENSE_MAX_NON_CU_ROLES:gh,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:$w,VALUE_SEARCH_COMPARATORS:Lh,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:ny,LICENSE_FILE_NAME:HC,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:jC,NEW_LINE:oy,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:zw,MOMENT_DAYS_TAG:oC,API_TURNOVER_SEC:cC,LOOPBACK:Zw,CODE_EXTENSION:ba,WILDCARD_SEARCH_VALUE:_C,NODE_ERROR_CODES:ey,JAVASCRIPT_EXTENSION:mh,PERMS_CRUD_ENUM:cy,UNAUTHORIZED_PERMISSION_NAME:uy,SEARCH_WILDCARDS:_y,FUNC_VAL:ly,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:Ey,JWT_ENUM:dy,CLUSTERING_FLAG:ty,ITC_EVENT_TYPES:hy,CUSTOM_FUNCTION_PROC_NAME:Ah,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Ia,SERVICES:fy,THREAD_TYPES:Sy,MEM_SETTING_KEY:uC,HDB_RESTART_SCRIPT:Uw,PROCESS_DESCRIPTORS:Bw,SERVICE_SERVERS:Fw,SERVICE_SERVERS_CWD:du,PROCESS_DESCRIPTORS_VALIDATE:qw,LAUNCH_SERVICE_SCRIPTS:xw,LOG_LEVELS:Hw,PROCESS_NAME_ENV_PROP:CC,LOG_NAMES:vw,PM2_PROCESS_STATUSES:Ty,CONFIG_PARAM_MAP:Ch,CONFIG_PARAMS:S,HDB_CONFIG_FILE:Cw,HDB_DEFAULT_CONFIG_FILE:yw,ROLE_TYPES_ENUM:Vw,BOOT_PROP_PARAMS:Ih,INSTALL_PROMPTS:yC,HDB_ROOT_DIR_NAME:Lw,CLUSTERING_PROCESSES:Gw,FOREGROUND_PID_FILE:Pw,PACKAGE_ROOT:Cr,PRE_4_0_0_VERSION:my,SCHEMAS_PARAM_CONFIG:YC}});var fu=f((yX,Ph)=>{"use strict";var Mh=require("minimist");Ph.exports=Ry;function Ry(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=Dh(process.env),s=Dh(Mh(process.argv))):(r=process.env,s=Mh(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(Ry,"assignCMDENVVariables");function Dh(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(Dh,"objKeysToLowerCase")});var I=f((UX,Kh)=>{"use strict";var Ws=require("fs-extra"),{workerData:Ay,threadId:py}=require("worker_threads"),yr=require("path"),Hh=require("yaml"),qh=require("properties-reader"),Ae=m(),Bh=fu(),gy=require("os"),{PACKAGE_ROOT:Tu}=m(),Gh={};for(let e in console)Gh[e]=console[e];var ke={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Fh={STDOUT:"stdOut",STDERR:"stdErr"},Ny=yr.join(Tu,"logs"),Oy=yr.join(Tu,"config/yaml/",Ae.HDB_DEFAULT_CONFIG_FILE),Iy=1e4,ar,or,Ve,ya,La,Ua,xn,Fn;Fn===void 0&&xh();Kh.exports={notify:$h,fatal:Yh,error:Vn,warn:pu,info:Ma,debug:Au,trace:Ru,setLogLevel:My,log_level:Ve,loggerWithTag:by,suppressLogging:wy,initLogSettings:xh,setupConsoleLogging:Vh,logCustomLevel:Ly,closeLogFile:mu,getLogFilePath:()=>Ua,OUTPUTS:Fh};function xh(e=!1){try{if(Fn===void 0||e){mu();let t=Uy();Fn=qh(t);let r=Bh(["ROOTPATH"]);({level:Ve,config_log_path:La,to_file:ar,to_stream:or}=Dy(r.ROOTPATH?yr.join(r.ROOTPATH,Ae.HDB_CONFIG_FILE):Fn.get("settings_path"))),ya=Ae.LOG_NAMES.HDB,Ua=yr.join(La,ya)}}catch(t){if(Fn=void 0,t.code===Ae.NODE_ERROR_CODES.ENOENT){let r=Bh(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}=Py();ar=ar===void 0?n:ar,ar=vh(ar),or=or===void 0?i:or,or=vh(or),Ve=Ve===void 0?s:Ve,La=Ny,ya=Ae.LOG_NAMES.INSTALL,Ua=yr.join(La,ya);return}throw Vn("Error initializing log settings"),Vn(t),t}Vh()}a(xh,"initLogSettings");var Su=!0;function Vh(){Ks("error",Vn),Ks("warn",pu),Ks("log",Ma),Ks("info",Ma),Ks("debug",Au),Ks("trace",Ru)}a(Vh,"setupConsoleLogging");function Ks(e,t){console[e]=function(...r){if(Su&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Gh[e](...r)}}a(Ks,"logConsole");function by(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r($h),fatal:r(Yh),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(by,"loggerWithTag");function wy(e){try{Su=!1,e()}finally{Su=!0}}a(wy,"suppressLogging");var Cy=Ay?.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(_||Cy+"/"+py);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&&kh(e),or&&process.stdout.write(e)}a(kn,"logStdOut");function Da(e){ar&&kh(e),or&&process.stderr.write(e)}a(Da,"logStdErr");function kh(e){yy(),Ws.appendFileSync(xn,e)}a(kh,"logToFile");function mu(){try{Ws.closeSync(xn)}catch{}xn=null}a(mu,"closeLogFile");function yy(){xn||(xn=Ws.openSync(Ua,"a"),setTimeout(()=>{mu()},Iy).unref())}a(yy,"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 $h(...e){ke[Ve]<=ke.notify&&kn(cr("notify",e))}a($h,"notify");function Yh(...e){ke[Ve]<=ke.fatal&&Da(cr("fatal",e))}a(Yh,"fatal");function pu(...e){ke[Ve]<=ke.warn&&Da(cr("warn",e))}a(pu,"warn");function Ly(e,t,...r){t===Fh.STDERR?Da(cr(e,r)):kn(cr(e,r))}a(Ly,"logCustomLevel");function Uy(){let e;try{e=gy.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=yr.join(e,Ae.HDB_HOME_DIR_NAME,Ae.BOOT_PROPS_FILE_NAME);return Ws.existsSync(t)||(t=yr.join(Tu,"utility/hdb_boot_properties.file")),t}a(Uy,"getPropsFilePath");function My(e){Ve=e}a(My,"setLogLevel");function vh(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(vh,"autoCastBoolean");function Dy(e){try{if(e.includes("config/settings.js")){let o=qh(e);return{level:o.get(Ae.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:yr.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=Hh.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(Dy,"getLogConfig");function Py(){try{let e=Hh.parseDocument(Ws.readFileSync(Oy,"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(Py,"getDefaultConfig")});var Qh=f((DX,Wh)=>{"use strict";var By=require("util"),vy=require("path"),Hy=require("child_process"),qy=By.promisify(Hy.execFile),Gy=1e3*1e3*10;Wh.exports={findPs:Fy};async function Fy(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await qy("ps",["wwxo",`pid,${r}`],{maxBuffer:Gy});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:vy.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(Fy,"findPs")});var Ue=f((BX,Xh)=>{"use strict";var xy="__dbis__",Vy="__environment_name__",ky="__dbi_defintion__",$y={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"},Yy=["__createdtime__","__updatedtime__"],Ky="\uFFFF",Jh={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Wy=Object.values(Jh);Xh.exports={INTERNAL_DBIS_NAME:xy,DBI_DEFINITION_NAME:ky,SEARCH_TYPES:$y,TIMESTAMP_NAMES:Yy,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Vy,TRANSACTIONS_DBI_NAMES_ENUM:Jh,TRANSACTIONS_DBIS:Wy,OVERFLOW_MARKER:Ky}});var it=f((vX,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"},Qy=tf[jh.INTERNAL_SERVER_ERROR],Jy={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.`},Xy={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},Zy={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"},zy={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"},jy={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"},eL={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."},tL={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`},rL={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"},sL={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},nL={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}`},iL={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."},aL={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},oL={...rf,...Zy,...Jy,...eL,...tL,...rL,...sL,...nL,...jy,...sf,...nf,...iL,...aL,...Xy};af.exports={CHECK_LOGS_WRAPPER:ef,HDB_ERROR_MSGS:oL,DEFAULT_ERROR_MSGS:tf,DEFAULT_ERROR_RESP:Qy,HTTP_STATUS_CODES:jh,LMDB_ERRORS_ENUM:zy,AUTHENTICATION_ERROR_MSGS:rf,VALIDATION_ERROR_MSGS:sf,ITC_ERRORS:nf}});var y=f((qX,_f)=>{"use strict";var Qs=it(),cL=I(),_L=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&&cL[n](i)}};a($n,"HdbError");function of(e,t,r,s=_L.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((xX,Nf)=>{"use strict";var cs=require("path"),uL=require("fs-extra"),De=I(),uf=require("fs-extra"),Yn=require("os"),lL=require("net"),EL=require("recursive-iterator"),Me=m(),hf=Qh(),lf=require("papaparse"),Pa=require("moment"),{inspect:dL}=require("util"),Ef=require("is-number"),FX=require("lodash"),{hdb_errors:Ba}=y(),ff=require("util").promisify(setTimeout),hL=100,fL=5,SL="",TL=4,df={true:!0,false:!1,undefined:null,null:null,NaN:NaN};Nf.exports={isEmpty:at,isEmptyOrZeroLength:kt,arrayHasEmptyValues:AL,arrayHasEmptyOrZeroLengthValues:pL,buildFolderPath:gL,isBoolean:Sf,errorizeMessage:mL,stripFileExtension:OL,autoCast:IL,autoCastJSON:Tf,autoCastJSONDeep:gu,removeDir:bL,compareVersions:wL,isCompatibleDataVersion:CL,escapeRawValue:yL,unescapeValue:LL,stringifyProps:UL,timeoutPromise:DL,isClusterOperation:BL,getClusterUser:HL,checkGlobalSchemaTable:vL,getHomeDir:Rf,getPropsFilePath:ML,promisifyPapaParse:qL,removeBOM:Af,createEventPromise:GL,checkProcessRunning:FL,checkSchemaTableExist:xL,checkSchemaExists:pf,checkTableExists:gf,getStartOfTomorrowInSeconds:VL,getLimitKey:kL,isObject:NL,isNotEmptyAndHasValue:RL,autoCasterIsNumberCheck:mf,backtickASTSchemaItems:$L,isPortTaken:PL,stopProcess:YL,createForkArgs:KL,autoCastBoolean:WL,async_set_timeout:ff,getTableHashAttribute:QL,doesSchemaExist:JL,doesTableExist:XL,stringifyObj:ZL,ms_to_time:zL,changeExtension:jL,PACKAGE_ROOT:Me.PACKAGE_ROOT};function mL(e){return e instanceof Error?e:new Error(e)}a(mL,"errorizeMessage");function at(e){return e==null}a(at,"isEmpty");function RL(e){return!at(e)&&(e||e===0||e===""||Sf(e))}a(RL,"isNotEmptyAndHasValue");function kt(e){return at(e)||e.length===0||e.size===0}a(kt,"isEmptyOrZeroLength");function AL(e){if(at(e))return!0;for(let t=0;t<e.length;t++)if(at(e[t]))return!0;return!1}a(AL,"arrayHasEmptyValues");function pL(e){if(kt(e))return!0;for(let t=0;t<e.length;t++)if(kt(e[t]))return!0;return!1}a(pL,"arrayHasEmptyOrZeroLengthValues");function gL(...e){try{return e.join(cs.sep)}catch{console.error(e)}}a(gL,"buildFolderPath");function Sf(e){return at(e)?!1:e===!0||e===!1}a(Sf,"isBoolean");function NL(e){return at(e)?!1:typeof e=="object"}a(NL,"isObject");function OL(e){return kt(e)?SL:e.slice(0,-TL)}a(OL,"stripFileExtension");function IL(e){return at(e)||e===""||typeof e!="string"?e:df[e]!==void 0?df[e]:mf(e)===!0?Number(e):e}a(IL,"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 bL(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(bL,"removeDir");function wL(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(wL,"compareVersions");function CL(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(CL,"isCompatibleDataVersion");function yL(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(yL,"escapeRawValue");function LL(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(LL,"unescapeValue");function UL(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(UL,"stringifyProps");function Rf(){let e;try{e=Yn.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Rf,"getHomeDir");function ML(){let e=cs.join(Rf(),Me.HDB_HOME_DIR_NAME,Me.BOOT_PROPS_FILE_NAME);return uL.existsSync(e)||(e=cs.join(__dirname,"../","hdb_boot_properties.file")),e}a(ML,"getPropsFilePath");function DL(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(DL,"timeoutPromise");async function PL(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=lL.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(PL,"isPortTaken");function BL(e){try{return Me.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){De.error(`Error checking operation against cluster ops ${t}`)}return!1}a(BL,"isClusterOperation");function vL(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(vL,"checkGlobalSchemaTable");function HL(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(HL,"getClusterUser");function qL(){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(qL,"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 GL(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;De.info(`Got cluster status event response: ${dL(n)}`);try{i.cancel()}catch{De.error("Error trying to cancel timeout.")}s(n)})})}a(GL,"createEventPromise");async function FL(e){let t=!0,r=0;do await ff(hL*r++),(await hf.findPs(e)).length>0&&(t=!1);while(t&&r<fL);if(t)throw new Error(`process ${e} was not started`)}a(FL,"checkProcessRunning");function xL(e,t){let r=pf(e);if(r)return r;let s=gf(e,t);if(s)return s}a(xL,"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 VL(){let e=Pa().utc().add(1,Me.MOMENT_DAYS_TAG).startOf(Me.MOMENT_DAYS_TAG).unix(),t=Pa().utc().unix();return e-t}a(VL,"getStartOfTomorrowInSeconds");function kL(){return Pa().utc().format("DD-MM-YYYY")}a(kL,"getLimitKey");function $L(e){try{let t=new EL(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($L,"backtickASTSchemaItems");async function YL(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(YL,"stopProcess");function KL(e){return[e]}a(KL,"createForkArgs");function WL(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(WL,"autoCastBoolean");function QL(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(QL,"getTableHashAttribute");function JL(e){return global?.hdb_schema?.[e]!==void 0}a(JL,"doesSchemaExist");function XL(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(XL,"doesTableExist");function ZL(e){try{return JSON.stringify(e)}catch{return e}}a(ZL,"stringifyObj");function zL(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(zL,"ms_to_time");function jL(e,t){let r=cs.basename(e,cs.extname(e));return cs.join(cs.dirname(e),r+t)}a(jL,"changeExtension")});var vf=f(($X,Bf)=>{"use strict";var Nu=require("recursive-iterator"),eU=require("alasql"),Ou=require("clone"),Of=b(),{handleHDBError:If,hdb_errors:tU}=y(),{HDB_ERROR_MSGS:bf,HTTP_STATUS_CODES:wf}=tU,rU=["DISTINCT_ARRAY"],Cf=Symbol("validateTables"),Iu=Symbol("validateTable"),kX=Symbol("getAllColumns"),yf=Symbol("validateAllColumns"),va=Symbol("findColumn"),Lf=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[yf]()}[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 eU.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[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[Lf](i):n.push(this[bu](i)));return n}[Df](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&rU.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`}[Lf](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((KX,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((XX,kf)=>{"use strict";var qf=it().LMDB_ERRORS_ENUM,QX=require("lmdb"),sU=Ue(),JX=require("buffer").Buffer,{OVERFLOW_MARKER:Gf,MAX_SEARCH_KEY_LENGTH:Ga}=sU,Ff=["number","string","symbol","boolean","bigint"];function nU(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(nU,"validateEnv");function iU(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(iU,"stringifyData");function aU(e){return e instanceof Date?e.valueOf():e}a(aU,"convertKeyValueToWrite");function oU(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(oU,"getIndexedValues");var Fa=0,xf=0;function Vf(){xf=Date.now()-performance.now()}a(Vf,"adjustStartTime");Vf();var cU=6e4;setInterval(Vf,cU).unref();function _U(){let e=performance.now()+xf;return e>Fa?(Fa=e,e):(Fa+=488e-6,Fa)}a(_U,"getNextMonotonicTime");kf.exports={validateEnv:nU,stringifyData:iU,convertKeyValueToWrite:aU,getNextMonotonicTime:_U,getIndexedValues:oU}});var Yf=f((zX,$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((eZ,Kf)=>{"use strict";var uU={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))},lU="certificate.pem",EU="privateKey.pem",dU="ca.pem";Kf.exports={CERTIFICATE_VALUES:uU,CERTIFICATE_PEM_NAME:lU,PRIVATEKEY_PEM_NAME:EU,CA_PEM_NAME:dU}});var te=f((tZ,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:hU,validateObjectAsync:fU,validateBySchema:SU};function hU(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(hU,"validateObject");async function fU(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(fU,"validateObjectAsync");function SU(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(SU,"validateBySchema")});var yu=f((nZ,Zf)=>{"use strict";var TU=require("fs-extra"),P=require("joi"),mU=require("os"),{boolean:ae,string:_r,number:Mt,array:Cu}=P.types(),Wn=require("path"),RU=I(),ka=b(),sZ=Wf(),AU=m(),pU=te(),Jf="log",gU="custom_functions",NU="Invalid logging.rotation.maxSize unit. Available units are G, M or K",OU="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",IU="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",bU="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",wU="rootPath config parameter is undefined",CU="clustering.enabled config parameter is undefined",us=Mt.min(0).required(),$a=Cu.items({host:_r.required(),port:us}).empty(null),Lr;Zf.exports={configValidator:yU,routesValidator:BU,route_constraints:$a};function yU(e){if(Lr=e.rootPath,ka.isEmpty(Lr))throw wU;let t=ae.required(),r=P.valid("production","development").required(),s=Mt.min(1).max(1e3).empty(null).default(PU),n=_r.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Va),i=P.custom(LU).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(UU).empty(null).default(Va),u=e.clustering?.enabled;if(ka.isEmpty(u))throw CU;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,tls:P.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ae.required(),verify:ae.optional()}),user:_r.optional().empty(null)}).required():l=P.object({enabled:t,tls:P.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ae.required()})}).required(),P.object({clustering:l,customFunctions:P.object({enabled:t,network:P.object({cors:ae.required(),corsAccessList:Cu.required(),headersTimeout:Mt.min(1).required(),https:ae.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:ae.required(),level:P.valid("notify","fatal","error","warn","info","debug","trace"),rotation:P.object({enabled:ae.optional(),compress:ae.optional(),interval:_r.custom(DU).optional().empty(null),maxSize:_r.custom(MU).optional().empty(null),path:_r.optional().empty(null).default(Va)}).required(),root:n,stdStreams:ae.required(),auditLog:ae.required()}).required(),operationsApi:P.object({authentication:P.object({operationTokenTimeout:P.required(),refreshTokenTimeout:P.required()}).required(),foreground:ae.required(),network:P.object({cors:ae.required(),corsAccessList:Cu.required(),headersTimeout:Mt.min(1).required(),https:ae.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:ae.required(),overlappingSync:ae.optional(),caching:ae.optional(),compression:ae.optional(),noReadAhead:ae.optional(),path:_,prefetchWrites:ae.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(yU,"configValidator");function Xf(e){return TU.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Xf,"doesPathExist");function LU(e,t){if(e===null)return;let r=Xf(e);return r?t.message(r):e}a(LU,"validatePemFile");function UU(e,t){P.assert(e,_r.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Xf(e);if(r)return t.message(r)}a(UU,"validatePath");function MU(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(NU);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(IU):e}a(MU,"validateRotationMaxSize");function DU(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(OU);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(bU):e}a(DU,"validateRotationInterval");function PU(e,t){let r=t.state.path.join("."),s=mU.cpus().length,n=s-1;return n<=2&&(n=2),RU.info(`Detected ${s} cores on this machine, defaulting ${r} to ${n}`),n}a(PU,"setDefaultThreads");function Va(e,t){if(!ka.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(ka.isEmpty(Lr))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Wn.join(Lr,gU);case"logging.root":return Wn.join(Lr,Jf);case"clustering.leafServer.streams.path":return Wn.join(Lr,"clustering","leaf");case"storage.path":return Wn.join(Lr,AU.SCHEMA_DIR_NAME);case"logging.rotation.path":return Wn.join(Lr,Jf);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Va,"setDefaultRoot");function BU(e){let t=P.object({routes:$a});return pU.validateBySchema({routes:e},t)}a(BU,"routesValidator")});var lr=f((aZ,oS)=>{"use strict";var At=m(),ot=b(),Te=I(),{configValidator:vU,routesValidator:zf}=yu(),Rt=require("fs-extra"),HU=require("yaml"),$t=require("path"),qU=require("is-number"),eS=require("properties-reader"),GU=require("lodash"),{handleHDBError:FU}=y(),{HTTP_STATUS_CODES:xU,HDB_ERROR_MSGS:Ya}=it(),VU=require("minimist"),{SCHEMAS_PARAM_CONFIG:Qn,CONFIG_PARAMS:Ur,CONFIG_PARAM_MAP:ur}=At,kU="Unable to get config value because config is uninitialized",$U="Config successfully initialized",YU="Error backing up config file",KU="Empty parameter sent to getConfigValue",tS=$t.join(At.PACKAGE_ROOT,"config","yaml",At.HDB_DEFAULT_CONFIG_FILE),WU="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",jf={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,ge;oS.exports={createConfigFile:QU,getDefaultConfig:JU,getConfigValue:sS,initConfig:nS,flattenConfig:ls,updateConfigValue:iS,updateConfigObject:ZU,getConfiguration:eM,setConfiguration:tM,readConfigFile:Du,getClusteringRoutes:rM,initOldConfig:aS,getConfigFromFile:sM};function QU(e){let t=Js(tS);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=Lu(c,e[o]);try{t.setIn([..._],u)}catch(l){Te.error(l)}}}r&&rS(t,r),Mu(t);let s=t.toJSON();ge=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(QU,"createConfigFile");function rS(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(rS,"setSchemasConfig");function JU(e){if(Ka===void 0){let r=Js(tS);Ka=ls(r.toJSON())}let t=ur[e.toLowerCase()];if(t!==void 0)return Ka[t.toLowerCase()]}a(JU,"getDefaultConfig");function sS(e){if(ot.isEmpty(e)){Te.error(KU);return}if(ge===void 0){Te.trace(kU);return}let t=ur[e.toLowerCase()];if(t!==void 0)return ge[t.toLowerCase()]}a(sS,"getConfigValue");function Uu(e){let t=VU(process.argv);return t.ROOTPATH?$t.join(t.ROOTPATH,At.HDB_CONFIG_FILE):eS(e).get(At.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Uu,"getConfigFilePath");function nS(e=!1){if(ge===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{aS(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}`)}XU(s,r),Mu(s);let n=s.toJSON();if(ge=ls(n),ge.logging_rotation_rotate)for(let i in jf)ge[i]&&Te.error(`Config ${jf[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Te.trace($U)}}a(nS,"initConfig");function XU(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(XU,"checkForUpdatedConfig");function Mu(e){let t=e.toJSON(),r=vU(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 ZU(e,t){ge===void 0&&(ge={});let r=ur[e.toLowerCase()];if(r===void 0){Te.trace(`Unable to update config object because config param '${e}' does not exist`);return}ge[r.toLowerCase()]=t}a(ZU,"updateConfigObject");function iS(e,t,r=void 0,s=!1,n=!1){ge===void 0&&nS();let i=sS(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=Lu(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=Lu(d,r[E]);try{c.setIn([...h],T)}catch(R){Te.error(R)}}}_&&rS(c,_),Mu(c);let u=c.getIn(["rootPath"]),l=$t.join(u,At.HDB_CONFIG_FILE);s===!0&&zU(o,u),Rt.writeFileSync(l,String(c)),n&&(ge=ls(c.toJSON())),Te.trace(`Config parameter: ${e} updated with value: ${t}`)}a(iS,"updateConfigValue");function zU(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(YU),Te.error(r)}}a(zU,"backupConfigFile");var jU=["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])&&!jU.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 Lu(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(qU(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(Lu,"castConfigValue");function eM(){let e=ot.getPropsFilePath(),t=Uu(e);return Js(t).toJSON()}a(eM,"getConfiguration");async function tM(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return iS(void 0,void 0,n,!0),WU}catch(i){throw typeof i=="string"||i instanceof String?FU(i,i,xU.BAD_REQUEST,void 0,void 0,!0):i}}a(tM,"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 HU.parseDocument(Rt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Js,"parseYamlDoc");function rM(){let e=Du(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=ot.isEmptyOrZeroLength(t)?[]:t;let r=zf(t);if(r)throw Ya.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=ot.isEmptyOrZeroLength(s)?[]:s;let n=zf(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(rM,"getClusteringRoutes");function aS(e){let t=eS(e);ge={};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?ge[n]=$t.dirname(s):ge[n]=s}return ge}a(aS,"initOldConfig");function sM(e){let t=Du();return GU.get(t,e.replaceAll("_","."))}a(sM,"getConfigFromFile")});var B=f((cZ,_S)=>{"use strict";var Pu=require("fs-extra"),Yt=require("path"),nM=require("os"),iM=require("properties-reader"),Jn=I(),Xs=b(),L=m(),Wa=lr(),aM="Error initializing environment manager",Qa="BOOT_PROPS_FILE_PATH",cS=!1,oM={[L.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Er={};_S.exports={BOOT_PROPS_FILE_PATH:Qa,getHdbBasePath:cM,setHdbBasePath:_M,get:uM,initSync:EM,setProperty:V,initTestEnvironment:dM};function cM(){return Er[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(cM,"getHdbBasePath");function _M(e){Er[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(_M,"setHdbBasePath");function uM(e){let t=Wa.getConfigValue(e);return t===void 0?Er[e]:t}a(uM,"get");function V(e,t){oM[e]&&(Er[e]=t),Wa.updateConfigObject(e,t)}a(V,"setProperty");function lM(){let e;try{e=Xs.getPropsFilePath(),Pu.accessSync(e,Pu.constants.F_OK|Pu.constants.R_OK),cS=!0;let t=iM(e);return Er[L.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(L.HDB_SETTINGS_NAMES.INSTALL_USER),Er[L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Er[Qa]=e,!0}catch{return Jn.trace(`Environment manager found no properties file at ${e}`),!1}}a(lM,"doesPropFileExist");function EM(e=!1){try{(cS||lM())&&(Wa.initConfig(e),Er[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Wa.getConfigValue(L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Jn.error(aM),Jn.error(t),console.error(t),process.exit(1)}}a(EM,"initSync");function dM(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"),V(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Yt.join(_,"settings.test")),V(L.HDB_SETTINGS_NAMES.INSTALL_USER,nM.userInfo().username),V(L.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Yt.join(_,"envDir","utility","keys","privateKey.pem")),V(L.HDB_SETTINGS_NAMES.CERT_KEY,Yt.join(_,"envDir","utility","keys","certificate.pem")),V(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Yt.join(_,"envDir","utility","keys","privateKey.pem")),V(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Yt.join(_,"envDir","utility","keys","certificate.pem")),V(L.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),V(L.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Yt.join(_,"envDir","log")),V(L.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),V(L.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),V(L.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),V(L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Yt.join(_,"envDir")),V(L.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Xs.isEmpty(n)?!0:n),V(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Xs.isEmpty(n)?!0:n),V(L.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),V(L.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Xs.isEmpty(i)?!1:i),V(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Xs.isEmpty(i)?!1:i),V(L.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),V(L.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),V(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),V(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),V(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Yt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),V(L.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Xs.isEmpty(c)?!1:c),o&&(V("CORS_ACCESSLIST",o),V(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(V(L.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),V(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(V(L.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),V(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(V(L.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),V(L.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(dM,"initTestEnvironment")});var ES=f((uZ,lS)=>{"use strict";var Bu=B(),uS=m();Bu.initSync();var hM=Bu.get(uS.CONFIG_PARAMS.STORAGE_COMPRESSION),fM=Bu.get(uS.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=hM&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=fM&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(Ja,"OpenDBIObject");lS.exports=Ja});var fS=f((EZ,hS)=>{"use strict";var Zs=B(),Xn=m();Zs.initSync();var SM=Zs.get(Xn.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Zs.get(Xn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Zs.get(Xn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",dS=Zs.get(Xn.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),TM=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=SM,dS!==void 0&&(this.overlappingSync=dS),this.noReadAhead=TM}};a(Xa,"OpenEnvironmentObject");hS.exports=Xa});var X=f((hZ,gS)=>{"use strict";var vu=require("lmdb"),pt=require("fs-extra"),Dt=require("path"),za=_s(),SS=I(),Ne=it().LMDB_ERRORS_ENUM,ja=Yf(),Hu=ES(),TS=fS(),Mr=Ue(),Pt=Mr.INTERNAL_DBIS_NAME,mS=Mr.DBI_DEFINITION_NAME,mM="data.mdb",RM="lock.mdb",Zn=".mdb",AM="-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(Ne.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Ne.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(Ne.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,mM),pt.constants.R_OK|pt.constants.F_OK),Dt.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Ne.INVALID_ENVIRONMENT)}else throw new Error(Ne.INVALID_ENVIRONMENT);throw s}}a(Gu,"validateEnvironmentPath");function eo(e,t){if(za.validateEnv(e),t===void 0)throw new Error(Ne.DBI_NAME_REQUIRED)}a(eo,"validateEnvDBIName");async function pM(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===Ne.INVALID_ENVIRONMENT){let i=Dt.join(e,t);await pt.mkdirp(s?i:e);let o=new TS(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(pM,"createEnvironment");async function gM(e,t,r,s=!0){let n=await Fu(e,t);if(r===void 0)throw new Error(Ne.DESTINATION_PATH_REQUIRED);try{await pt.access(Dt.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(Ne.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(gM,"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 TS(n,o),_=vu.open(c);_.dbis=Object.create(null);let u=AS(_);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 NM(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 RS(o),delete global.lmdb_map[i]}}await pt.remove(n),await pt.remove(n===s?n+AM:Dt.join(Dt.dirname(n),RM))}a(NM,"deleteEnvironment");async function RS(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(RS,"closeEnvironment");function xu(e,t,r=!1){let n=`${Dt.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(xu,"getCachedEnvironmentName");function OM(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{SS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(OM,"listDBIDefinitions");function AS(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(AS,"listDBIs");function IM(e,t){let s=gt(e,Pt).getEntry(t),n=new ja;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{SS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(IM,"getDBIDefinition");function pS(e,t,r,s=!1){if(eo(e,t),t=t.toString(),t===Pt)throw new Error(Ne.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return gt(e,t)}catch(n){if(n.message===Ne.DBI_DOES_NOT_EXIST){let i=new Hu(r,s===!0),o=e.openDB(t,i),c=new ja(r===!0,s);return o[mS]=c,gt(e,Pt).putSync(t,c),e.dbis[t]=o,o}throw n}}a(pS,"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=IM(e,t):r=new ja,r===void 0)throw new Error(Ne.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(Ne.DBI_DOES_NOT_EXIST):n}return s[mS]=r,e.dbis[t]=s,s}a(gt,"openDBI");function bM(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(bM,"statDBI");async function wM(e,t){try{let r=Dt.join(e,t+Zn);return(await pt.stat(r)).size}catch{throw new Error(Ne.INVALID_ENVIRONMENT)}}a(wM,"environmentDataSize");function CM(e,t){if(eo(e,t),t=t.toString(),t===Pt)throw new Error(Ne.CANNOT_DROP_INTERNAL_DBIS_NAME);gt(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],gt(e,Pt).removeSync(t)}a(CM,"dropDBI");function yM(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===Ne.DBI_DOES_NOT_EXIST)pS(e,n,n!==t,n===t);else throw i}}}a(yM,"initializeDBIs");gS.exports={openDBI:gt,openEnvironment:Fu,createEnvironment:pM,listDBIs:AS,listDBIDefinitions:OM,createDBI:pS,dropDBI:CM,statDBI:bM,deleteEnvironment:NM,initializeDBIs:yM,TransactionCursor:Za,environmentDataSize:wM,copyEnvironment:gM,closeEnvironment:RS}});var OS=f((SZ,NS)=>{"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");NS.exports=to});var bS=f((mZ,IS)=>{"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");IS.exports=ro});var CS=f((AZ,wS)=>{"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");wS.exports=so});var zs=f((IZ,US)=>{"use strict";var LM=X(),UM=OS(),MM=bS(),DM=CS(),Kt=_s(),zn=it().LMDB_ERRORS_ENUM,PM=Ue(),dr=m(),BM=b(),vM=require("uuid"),gZ=require("lmdb"),{handleHDBError:HM,hdb_errors:qM}=y(),{OVERFLOW_MARKER:NZ,MAX_SEARCH_KEY_LENGTH:OZ}=PM,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 GM(e,t,r,s,n=Kt.getNextMonotonicTime()){Ku(e,t,r,s),ku(e,t,r);let i=new UM,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];LS(u,!0,n);let l=FM(e,t,r,u),E=u[t];o.push(l),c.push(E)}return $u(o,c,s,i,n)}a(GM,"insertRecords");function FM(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(FM,"insertRecord");function xM(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(xM,"removeSkippedRecords");function LS(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(LS,"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),LM.initializeDBIs(e,t,r)}a(ku,"initializeTransaction");async function VM(e,t,r,s,n=Kt.getNextMonotonicTime()){Ku(e,t,r,s),ku(e,t,r);let i=new MM,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(VM,"updateRecords");async function kM(e,t,r,s,n=Kt.getNextMonotonicTime()){try{Ku(e,t,r,s)}catch(_){throw HM(_,_.message,qM.HTTP_STATUS_CODES.BAD_REQUEST)}ku(e,t,r);let i=new DM,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;BM.isEmpty(u[t])?(l=vM.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(kM,"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(),xM(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(LS(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,Le=x.length;q<Le;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,Le=x.length;q<Le;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 $M(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($M,"validateBasic");function Ku(e,t,r,s){if($M(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");US.exports={insertRecords:GM,updateRecords:VM,upsertRecords:kM}});var j=f((wZ,HS)=>{"use strict";var si=m(),YM=b(),Ye=B(),ni=require("path"),KM=require("minimist"),MS=require("fs-extra"),DS=require("lodash");Ye.initSync();var{CONFIG_PARAMS:Dr,SCHEMAS_PARAM_CONFIG:jn,SYSTEM_SCHEMA_NAME:ao}=si,ei,ti,ri;function PS(){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(PS,"getBaseSchemaPath");function BS(){if(ti!==void 0)return ti;if(Ye.getHdbBasePath()!==void 0)return ti=vS(ao),ti}a(BS,"getSystemSchemaPath");function WM(){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(WM,"getTransactionAuditStoreBasePath");function QM(e,t){let r=Ye.get(Dr.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||ni.join(WM(),e.toString())}a(QM,"getTransactionAuditStorePath");function vS(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(PS(),e)}a(vS,"getSchemaPath");function JM(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,KM(process.argv));let s=r[Dr.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!YM.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 DS.set(_,[ao,jn.TABLES,t,jn.PATH],u),Ye.setProperty(Dr.SCHEMAS,_),u;let l=c?.[jn.PATH];if(l)return DS.set(_,[ao,jn.PATH],l),Ye.setProperty(Dr.SCHEMAS,_),l}}let n=r[Dr.STORAGE_PATH.toUpperCase()];if(n){if(!MS.pathExistsSync(n))throw new Error(n+" does not exist");let i=ni.join(n,e);return MS.mkdirsSync(i),Ye.setProperty(Dr.STORAGE_PATH,n),i}return BS()}a(JM,"initSystemSchemaPaths");function XM(){ei=void 0,ti=void 0,ri=void 0}a(XM,"resetPaths");HS.exports={getBaseSchemaPath:PS,getSystemSchemaPath:BS,getTransactionAuditStorePath:QM,getSchemaPath:vS,initSystemSchemaPaths:JM,resetPaths:XM}});var Wt=f((yZ,FS)=>{"use strict";var GS=b(),qS=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"}},ZM=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 zM(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(zM,"checkValidTable");function jM(e,t){return GS.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(jM,"validateSchemaExists");function eD(e,t){let r=t.state.ancestors[0].schema;return GS.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(eD,"validateTableExists");function tD(e,t){return e.toLowerCase()===qS.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${qS.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(tD,"validateSchemaName");FS.exports={common_validators:oo,schema_regex:co,hdb_schema_table:ZM,validateSchemaExists:jM,validateTableExists:eD,validateSchemaName:tD,checkValidTable:zM}});var _o=f((UZ,xS)=>{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 rD(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(rD,"schema_object");function sD(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(sD,"table_object");function nD(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(nD,"create_table_object");function iD(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(iD,"attribute_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=!1,ii.validateObject(e,Z)}a(aD,"describe_table");function oD(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(oD,"validateTableResidence");xS.exports={schema_object:rD,create_table_object:nD,table_object:sD,attribute_object:iD,describe_table:aD,validateTableResidence:oD}});var kS=f((DZ,VS)=>{"use strict";var cD=require("uuid"),uo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||cD.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(uo,"CreateAttributeObject");VS.exports=uo});var Eo=f((BZ,$S)=>{"use strict";var _D=kS(),lo=class extends _D{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");$S.exports=lo});var KS=f((HZ,YS)=>{"use strict";YS.exports=lD;var uD="inserted";function lD(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===uD?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(lD,"returnObject")});var ho=f((GZ,ZS)=>{"use strict";var ED=m(),Qu=X(),dD=zs(),{getSystemSchemaPath:hD,getSchemaPath:fD}=j(),SD=os(),TD=_o(),mD=Eo(),RD=KS(),{handleHDBError:WS,hdb_errors:JS}=y(),QS=b(),{HTTP_STATUS_CODES:AD}=JS,Ju=SD.hdb_attribute,XS=[];for(let e=0;e<Ju.attributes.length;e++)XS.push(Ju.attributes[e].attribute);var pD="inserted";ZS.exports=gD;async function gD(e){let t=TD.attribute_object(e);if(t)throw WS(new Error,t.message,JS.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&QS.checkGlobalSchemaTable(e.schema,e.table);if(r)throw WS(new Error,r,AD.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=QS.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 mD(e.schema,e.table,e.attribute,e.id);try{let i=await Qu.openEnvironment(fD(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(hD(),ED.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:_}=await dD.insertRecords(o,Ju.hash_attribute,XS,[n]);return RD(pD,c,{records:[n]},_)}catch(i){throw i}}a(gD,"lmdbCreateAttribute")});var Zu=f((xZ,jS)=>{var{hdb_schema_table:zS}=Wt(),ND=te(),Xu=require("joi"),OD={undefined:"undefined",null:"null"},ID=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||OD[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"),bD=Xu.object({schema:zS,table:zS,records:Xu.array().items(Xu.object().custom(ID)).required()});jS.exports=function(e){return ND.validateBySchema(e,bD)}});var fo=f(($Z,tT)=>{"use strict";var hr=b(),eT=I(),kZ=Zu();tT.exports=wD;function wD(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 eT.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 eT.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(wD,"insertUpdateValidate")});var oi=f((KZ,rT)=>{"use strict";var CD=m().OPERATIONS_ENUM,So=class{constructor(t,r,s,n,i=void 0){this.operation=CD.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(So,"InsertObject");rT.exports=So});var mo=f((JZ,sT)=>{"use strict";var QZ=oi(),To=m(),ju=b(),zu=I(),yD=require("uuid"),{handleHDBError:ci,hdb_errors:LD}=y(),{HDB_ERROR_MSGS:_i,HTTP_STATUS_CODES:ui}=LD;sT.exports=UD;function UD(e,t,r){for(let n=0;n<t.length;n++)MD(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];DD(i,r,e.operation)}}a(UD,"processRows");function MD(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(MD,"validateAttribute");function DD(e,t,r){if(!e.hasOwnProperty(t)||ju.isEmptyOrZeroLength(e[t])){if(r===To.OPERATIONS_ENUM.INSERT||r===To.OPERATIONS_ENUM.UPSERT){e[t]=yD.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(DD,"validateHash")});var iT=f((ZZ,nT)=>{"use strict";var Ro=class{constructor(t,r){this.type=t,this.message=r}};a(Ro,"ITCEventObject");nT.exports=Ro});var Ao=f((jZ,cT)=>{var PD=require("crypto"),aT=9;function BD(e){let t=HD(aT),r=oT(e+t);return t+r}a(BD,"createHash");function vD(e,t){let r=e.substr(0,aT),s=r+oT(t+r);return e===s}a(vD,"validateHash");function HD(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(HD,"generateSalt");function oT(e){return PD.createHash("md5").update(e).digest("hex")}a(oT,"md5");cT.exports={hash:BD,validate:vD}});var uT=f((t3,_T)=>{"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");_T.exports={BaseLicense:li,ExtendedLicense:po}});var tn=f((s3,ST)=>{"use strict";var en=require("fs-extra"),lT=Ao(),ET=require("crypto"),qD=require("moment"),GD=require("uuid").v4,Pe=I(),tl=require("path"),FD=b(),ct=m(),xD=uT().ExtendedLicense,js="invalid license key format",VD="061183",kD="mofi25",$D="aes-256-cbc",YD=16,KD=32,dT=B();dT.initSync();var el;ST.exports={validateLicense:hT,generateFingerPrint:QD,licenseSearch:fT,getLicense:ZD};function rl(){return tl.join(dT.getHdbBasePath(),ct.LICENSE_KEY_DIR_NAME,ct.LICENSE_FILE_NAME)}a(rl,"getLicenseDirPath");function WD(){let e=rl();return tl.join(e,ct.LICENSE_FILE_NAME)}a(WD,"getLicenseFilePath");function sl(){let e=rl();return tl.join(e,ct.REG_KEY_FILE_NAME)}a(sl,"getFingerPrintFilePath");async function QD(){let e=sl();try{return await en.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await JD();throw Pe.error(`Error writing fingerprint file to ${e}`),Pe.error(t),new Error("There was an error generating the fingerprint")}}a(QD,"generateFingerPrint");async function JD(){let e=GD(),t=lT.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(JD,"writeFingerprint");function hT(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(kD),c=o[1];c=Buffer.concat([Buffer.from(c)],YD);let _=Buffer.concat([Buffer.from(i)],KD),u=ET.createDecipheriv($D,_,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=XD(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<qD().valueOf()&&(r.valid_date=!1),lT.validate(o[1],`${VD}${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(hT,"validateLicense");function XD(e,t){try{let r=ET.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(XD,"checkOldLicense");function fT(){let e=new xD;e.api_call=0;let t=[];try{t=en.readFileSync(WD(),"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(FD.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=hT(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(fT,"licenseSearch");async function ZD(){return el||await fT(),el}a(ZD,"getLicense")});var hs=f((i3,_l)=>{"use strict";var{Worker:zD,MessageChannel:jD,parentPort:fr,isMainThread:mT,threadId:eP,workerData:tP}=require("worker_threads"),{PACKAGE_ROOT:rP}=m(),{join:sP,isAbsolute:nP,extname:iP}=require("path"),{totalmem:aP}=require("os"),ol=m(),RT=B(),oP=tn(),go=I(),cP=m();RT.initSync();var _P=RT.get(ol.CONFIG_PARAMS.HTTP_THREADS)||1,uP=1024*1024,vr=[],ds=[],lP=50,AT=1e4,pT="restart",gT="request_thread_info",NT="resource_report",OT="thread_info",IT="added-port",nl;_l.exports={startWorker:il,restartWorkers:cl,shutdownWorkers:dP,workers:vr,setMonitorListener:mP,onMessageFromWorkers:hP,broadcast:fP};function il(e,t={}){let s=oP.licenseSearch().ram_allocation,n=Math.min(Math.max(Math.floor(aP()/uP/(1+_P/4)),512),s||1/0),i=Math.min(Math.max(n>>7,16),64),o=[];for(let _ of ds){let{port1:u,port2:l}=new jD;_.postMessage({type:IT,port:u},[u]),o.push(l)}iP(e)||(e+=".js");let c=new zD(nP(e)?e:sP(rP,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:i},argv:process.argv.slice(2),workerData:{addPorts:o,name:t.name},transferList:o},t));return No(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>{il(e,t)},c.on("error",_=>{console.error("Worker error:",_),go.error("Worker error:",_)}),c.on("exit",_=>{vr.splice(vr.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<lP?(t.unexpectedRestarts=c.unexpectedRestarts+1,il(e,t)):go.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",_=>{_.type===pT&&cl(_.workerType),_.type===gT&&SP(c),_.type===NT&&TP(c,_)}),vr.push(c),AP(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(il,"startWorker");var EP=[ol.THREAD_TYPES.HTTP];async function cl(e=null,t=2,r=!0){if(mT){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=EP.indexOf(n.name)>-1,o=new Promise(c=>{let _=setTimeout(()=>n.terminate(),AT*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:pT,workerType:e})}a(cl,"restartWorkers");function dP(e){return cl(e,1/0,!1)}a(dP,"shutdownWorkers");var bT=[];function hP(e){bT.push(e)}a(hP,"onMessageFromWorkers");function fP(e){for(let t of ds)try{t.postMessage(e)}catch(r){go.error("Unable to send message to worker",r)}}a(fP,"broadcast");function SP(e){e.postMessage({type:OT,workers:wT()})}a(SP,"sendThreadInfo");function wT(){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(wT,"getChildWorkerInfo");function TP(e,t){e.resources=t,e.resources.updated=Date.now()}a(TP,"recordResourceReport");var al;function mP(e){al=e}a(mP,"setMonitorListener");var RP=1e3,TT=!1;function AP(){TT||(TT=!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()},RP).unref())}a(AP,"startMonitoring");var pP=1e3;if(fr){No(fr);for(let e of tP.addPorts)No(e);setInterval(()=>{let e=process.memoryUsage();fr.postMessage({type:NT,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},pP).unref(),nl=a(()=>new Promise((e,t)=>{fr.on("message",r),fr.postMessage({type:gT});function r(s){s.type===OT&&(fr.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else nl=wT;_l.exports.getThreadInfo=nl;function No(e,t){ds.push(e),e.on("message",r=>{if(r.type===IT)No(r.port);else for(let s of bT)s(r)}).on("close",()=>{ds.splice(ds.indexOf(e),1)}).on("exit",()=>{ds.splice(ds.indexOf(e),1)}),t||e.unref()}a(No,"addPort");mT||fr.on("message",async e=>{let{type:t}=e;t===cP.ITC_EVENT_TYPES.SHUTDOWN&&(fr.unref(),setTimeout(()=>{go.warn("Thread did not voluntarily terminate",eP),process.exit(0)},AT).unref())})});var LT=f((o3,yT)=>{"use strict";var ul=X(),gP=I(),CT=it().LMDB_ERRORS_ENUM;yT.exports=NP;async function NP(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!==CT.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!==CT.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){gP.error(t)}}a(NP,"cleanLMDBMap")});var Ot=f((_3,DT)=>{"use strict";var Io=Zu(),Nt=b(),OP=require("util"),bo=Qt(),IP=qr(),ll=I(),{handleHDBError:Hr,hdb_errors:bP}=y(),{HTTP_STATUS_CODES:fs}=bP,wP=OP.promisify(IP.getTableSchema),CP="updated",UT="inserted",MT="upserted";DT.exports={insert:LP,update:UP,upsert:MP,validation:yP,flush:DP};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 wP(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 LP(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(UT,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(LP,"insertData");async function UP(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(CP,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(UP,"updateData");async function MP(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(MT,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(MP,"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===UT?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===MT?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Oo,"returnObject");function DP(e){return bo.flush(e.schema,e.table)}a(DP,"flush")});var dl=f((l3,vT)=>{var PP=te(),El=require("joi"),{hdb_schema_table:PT}=Wt(),BT={schema:PT,table:PT},BP={date:El.date().iso().required()},vP={timestamp:El.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};vT.exports=function(e,t){let r=t==="timestamp"?{...BT,...vP}:{...BT,...BP},s=El.object(r);return PP.validateBySchema(e,s)}});var FT=f((E3,GT)=>{var HP=te(),HT=require("joi"),{hdb_schema_table:qT}=Wt(),qP=HT.object({schema:qT,table:qT,hash_values:HT.array().required()});GT.exports=function(e){return HP.validateBySchema(e,qP)}});var VT=f((d3,xT)=>{"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 yo=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(yo,"DeleteResponseObject");xT.exports={InsertObject:wo,NoSQLSeachObject:Co,DeleteResponseObject:yo}});var Ts=f((f3,WT)=>{"use strict";var $T=dl(),GP=FT(),Lo=b(),kT=require("moment"),YT=I(),{promisify:FP,callbackify:xP}=require("util"),Ss=m(),VP=qr(),hl=FP(VP.getTableSchema),fl=Qt(),{DeleteResponseObject:kP}=VT(),{handleHDBError:Gr,hdb_errors:$P}=y(),{HDB_ERROR_MSGS:Uo,HTTP_STATUS_CODES:Fr}=$P,YP="records successfully deleted",KP=xP(KT);WT.exports={delete:KP,deleteRecord:KT,deleteFilesBefore:WP,deleteAuditLogsBefore:QP};async function WP(e){let t=$T(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,Ss.LOG_LEVELS.ERROR,Uo.INVALID_DATE,!0);let s=Lo.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),YT.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(WP,"deleteFilesBefore");async function QP(e){let t=$T(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=Lo.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),YT.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(QP,"deleteAuditLogsBefore");async function KT(e){let t=GP(e);if(t)throw Gr(t,t.message,Fr.BAD_REQUEST,void 0,void 0,!0);let r=Lo.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 Lo.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${YP}`),s}catch(s){if(s.message===Ss.SEARCH_NOT_FOUND_MESSAGE){let n=new kP;return n.message=Ss.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(KT,"deleteRecord")});var JT=f((T3,QT)=>{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 XP(e){return Be.password.presence=!1,Be.username.presence=!0,Be.role.presence=!1,Be.active.presence=!1,Sl.validateObject(e,Be)}a(XP,"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");QT.exports={addUserValidation:JP,alterUserValidation:XP,dropUserValidation:ZP}});var xr=f((R3,jT)=>{"use strict";var Ei=require("crypto"),ZT="aes-256-cbc",zP=32,jP=16,Tl=64,zT=32,eB=Tl+zT,XT=new Map;jT.exports={encrypt:tB,decrypt:rB,createNatsTableStreamName:sB};function tB(e){let t=Ei.randomBytes(zP),r=Ei.randomBytes(jP),s=Ei.createCipheriv(ZT,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(tB,"encrypt");function rB(e){let t=e.substr(0,Tl),r=e.substr(Tl,zT),s=e.substr(eB,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Ei.createDecipheriv(ZT,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(rB,"decrypt");function sB(e,t){let r=`${e}.${t}`,s=XT.get(r);return s||(s=Ei.createHash("md5").update(`${e}.${t}`).digest("hex"),XT.set(r,s)),s}a(sB,"createNatsTableStreamName")});var oe=f((g3,tm)=>{"use strict";var{platform:p3}=require("os"),nB="nats-server.zip",ml="nats-server",iB=process.platform==="win32"?`${ml}.exe`:ml,Rl="HDB",aB=/^[^\s.,*>]+$/,em="__request__",oB=a(e=>`${e}.${em}`,"REQUEST_SUBJECT"),cB={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},_B={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},uB={HUB:"hub.pid",LEAF:"leaf.pid"},lB={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},EB={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Rl,deliver_subject:"__HDB__.WORKQUEUE"},dB={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Rl,deliver_subject:"HDB.SCHEMAQUEUE"},hB={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Rl,deliver_subject:"HDB.USERQUEUE"},fB={SUCCESS:"success",ERROR:"error"},SB={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},TB={TXN:"txn",MSGID:"msgid"},rn={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},mB={[rn.ERR]:1,[rn.WRN]:2,[rn.INF]:3,[rn.DBG]:4,[rn.TRC]:5},RB={debug:"-D",trace:"-DVV"};tm.exports={NATS_SERVER_ZIP:nB,NATS_SERVER_NAME:ml,NATS_BINARY_NAME:iB,PID_FILES:uB,NATS_CONFIG_FILES:_B,SERVER_SUFFIX:lB,WORK_QUEUE_CONSUMER_NAMES:EB,SCHEMA_QUEUE_CONSUMER_NAMES:dB,USER_QUEUE_CONSUMER_NAMES:hB,NATS_TERM_CONSTRAINTS_RX:aB,REQUEST_SUFFIX:em,UPDATE_REMOTE_RESPONSE_STATUSES:fB,CLUSTER_STATUS_STATUSES:SB,REQUEST_SUBJECT:oB,SUBJECT_PREFIXES:TB,MSG_HEADERS:cB,LOG_LEVELS:rn,LOG_LEVEL_FLAGS:RB,LOG_LEVEL_HIERARCHY:mB}});var Vr=f((I3,Sm)=>{"use strict";var am="username is required",om="nothing to update, must supply active, role or password to update",cm="password cannot be an empty string",_m="If role is specified, it cannot be empty.",um="active must be true or false";Sm.exports={addUser:wB,alterUser:CB,dropUser:LB,userInfo:UB,listUsers:Do,listUsersExternal:MB,setUsersToGlobal:di,findAndValidateUser:BB,getClusterUser:vB,USERNAME_REQUIRED:am,ALTERUSER_NOTHING_TO_UPDATE:om,EMPTY_PASSWORD:cm,EMPTY_ROLE:_m,ACTIVE_BOOLEAN:um};var lm=Ot(),AB=Ts(),pl=Ao(),Em=JT(),dm=It(),gl=nn(),_t=b(),hm=require("validate.js"),M=I(),{promisify:Nl}=require("util"),Ol=xr(),rm=m(),sm=oe(),pB=lr(),O3=B(),gB=tn(),NB=os(),{handleHDBError:Jt,hdb_errors:OB}=y(),{HTTP_STATUS_CODES:Xt,AUTHENTICATION_ERROR_MSGS:Al,HDB_ERROR_MSGS:sn}=OB,{UserEventMsg:Il}=kr(),nm=require("lodash"),fm={username:!0,active:!0,role:!0,password:!0},im=new Map,Mo=Nl(dm.searchByValue),IB=Nl(dm.searchByHash),bB=Nl(AB.delete);async function wB(e){let t=hm.cleanAttributes(e,fm),r=Em.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 lm.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(wB,"addUser");async function CB(e){let t=hm.cleanAttributes(e,fm);if(_t.isEmptyOrZeroLength(t.username))throw new Error(am);if(_t.isEmptyOrZeroLength(t.password)&&_t.isEmptyOrZeroLength(t.role)&&_t.isEmptyOrZeroLength(t.active))throw new Error(om);if(!_t.isEmpty(t.password)&&_t.isEmptyOrZeroLength(t.password.trim()))throw new Error(cm);if(!_t.isEmpty(t.active)&&!_t.isBoolean(t.active))throw new Error(um);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(_m);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 lm.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(CB,"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 LB(e){try{let t=Em.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 bB(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(LB,"dropUser");async function UB(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 IB(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(UB,"userInfo");async function MB(){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(MB,"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]=nm.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=nm.cloneDeep(o),o.role=r[o.role],DB(o.role),i.set(o.username,o);return(await gB.getLicense()).enterprise?i:PB(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 DB(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(NB)){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(DB,"appendSystemTablesToRole");function PB(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(PB,"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 BB(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(im.get(t)===s.password)return n;if(pl.validate(s.password,t))im.set(t,s.password);else throw Jt(new Error,Al.GENERIC_AUTH_FAIL,Xt.UNAUTHORIZED,void 0,void 0,!0)}return n}a(BB,"findAndValidateUser");async function vB(){let e=await Do(),t=pB.getConfigFromFile(rm.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!_t.isEmpty(r)&&r?.role?.role===rm.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+sm.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+sm.SERVER_SUFFIX.ADMIN,r}a(vB,"getClusterUser")});var Po=f((w3,Am)=>{"use strict";var ms=I(),ut=m(),HB=LT(),Tm=qr(),qB=Rs(),GB=Vr(),{validateEvent:Rm}=kr(),hi=Qt(),FB=require("process"),xB={[ut.ITC_EVENT_TYPES.SCHEMA]:VB,[ut.ITC_EVENT_TYPES.USER]:$B};async function VB(e){let t=Rm(e);if(t){ms.error(t);return}ms.trace("ITC schemaHandler received schema event:",e),await HB(e.message),await kB(e.message)}a(VB,"schemaHandler");async function kB(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 qB.describeTable({schema:e.schema,table:e.table});break;default:Tm.setSchemaDataToGlobal(mm);break}else Tm.setSchemaDataToGlobal(mm)}catch(t){ms.error(t)}}a(kB,"syncSchemaMetadata");function mm(e){e&&ms.error(e)}a(mm,"handleErrorCallback");async function $B(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=Rm(e);if(t){ms.error(t);return}ms.trace(`ITC userHandler ${ut.HDB_ITC_CLIENT_PREFIX}${FB.pid} received user event:`,e),await GB.setUsersToGlobal()}catch(t){ms.error(t)}}a($B,"userHandler");Am.exports=xB});var kr=f((M3,gm)=>{"use strict";var y3=I(),bl=b(),YB=m(),{ITC_ERRORS:fi}=it(),{parentPort:L3,threadId:KB,isMainThread:WB,workerData:U3}=require("worker_threads"),{onMessageFromWorkers:QB,broadcast:JB}=hs();gm.exports={sendItcEvent:XB,validateEvent:pm,SchemaEventMsg:ZB,UserEventMsg:zB};var Bo;QB(e=>{Bo=Bo||Po(),pm(e),Bo[e.type]&&Bo[e.type](e)});function XB(e){!WB&&e.message&&(e.message.originator=KB),JB(e)}a(XB,"sendItcEvent");function pm(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(YB.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return fi.INVALID_EVENT(e.type)}a(pm,"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 zB(e){this.originator=e}a(zB,"UserEventMsg")});var nn=f((B3,bm)=>{"use strict";var Nm=m(),P3=b(),vo=I(),Om=iT(),an,{sendItcEvent:Im}=kr();function jB(e){try{vo.trace("signalSchemaChange called with message:",e),an=an||Po();let t=new Om(Nm.ITC_EVENT_TYPES.SCHEMA,e);an.schema(t),Im(t)}catch(t){vo.error(t)}}a(jB,"signalSchemaChange");function ev(e){try{vo.trace("signalUserChange called with message:",e),an=an||Po();let t=new Om(Nm.ITC_EVENT_TYPES.USER,e);an.user(t),Im(t)}catch(t){vo.error(t)}}a(ev,"signalUserChange");bm.exports={signalSchemaChange:jB,signalUserChange:ev}});var Ho=f((H3,Cm)=>{"use strict";var wm=b(),tv=m(),rv=I(),sv=ho(),nv=Eo(),iv=nn(),{SchemaEventMsg:av}=kr(),ov="already exists in";Cm.exports=cv;async function cv(e,t,r){if(wm.isEmptyOrZeroLength(r))return r;let s=[];wm.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 _v(e,t.schema,t.name,i)})),n}a(cv,"lmdbCheckForNewAttributes");async function _v(e,t,r,s){let n=new nv(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await uv(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(ov))rv.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(_v,"createNewAttribute");async function uv(e){let t;return t=await sv(e),iv.signalSchemaChange(new av(process.pid,tv.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(uv,"createAttribute")});var on=f((G3,ym)=>{"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");ym.exports=qo});var Um=f((x3,Lm)=>{"use strict";var lv=on(),Ev=m().OPERATIONS_ENUM,Go=class extends lv{constructor(t,r,s,n,i=void 0){super(Ev.INSERT,r,s,n,i),this.records=t}};a(Go,"LMDBInsertTransactionObject");Lm.exports=Go});var Dm=f((k3,Mm)=>{"use strict";var dv=on(),hv=m().OPERATIONS_ENUM,Fo=class extends dv{constructor(t,r,s,n,i,o=void 0){super(hv.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(Fo,"LMDBUpdateTransactionObject");Mm.exports=Fo});var Bm=f((Y3,Pm)=>{"use strict";var fv=on(),Sv=m().OPERATIONS_ENUM,xo=class extends fv{constructor(t,r,s,n,i,o=void 0){super(Sv.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(xo,"LMDBUpsertTransactionObject");Pm.exports=xo});var Hm=f((W3,vm)=>{"use strict";var Tv=on(),mv=m().OPERATIONS_ENUM,Vo=class extends Tv{constructor(t,r,s,n,i=void 0){super(mv.DELETE,s,n,t,i),this.original_records=r}};a(Vo,"LMDBDeleteTransactionObject");vm.exports=Vo});var Si=f((X3,xm)=>{"use strict";var J3=require("path"),qm=X(),Rv=Um(),Av=Dm(),pv=Bm(),gv=Hm(),cn=Ue(),Gm=b(),{CONFIG_PARAMS:Nv}=m(),Fm=B();Fm.initSync();var ko=m().OPERATIONS_ENUM,{getTransactionAuditStorePath:Ov}=j();xm.exports=Iv;async function Iv(e,t){if(Fm.get(Nv.LOGGING_AUDITLOG)===!1)return;let r=Ov(e.schema,e.table),s=await qm.openEnvironment(r,e.table,!0),n=bv(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){qm.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),Gm.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(Iv,"writeTransaction");function bv(e,t){let r=Gm.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===ko.INSERT)return new Rv(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ko.UPDATE)return new Av(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ko.UPSERT)return new pv(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ko.DELETE)return new gv(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(bv,"createTransactionObject")});var wl=f((j3,Vm)=>{"use strict";var wv=fo(),z3=oi(),Ti=m(),Cv=mo(),yv=zs().insertRecords,Lv=X(),Uv=I(),Mv=Ho(),{getSchemaPath:Dv}=j(),Pv=Si();Vm.exports=Bv;async function Bv(e){try{let{schema_table:t,attributes:r}=wv(e);Cv(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 Mv(e.hdb_auth_header,t,r),n=Dv(e.schema,e.table),i=await Lv.openEnvironment(n,e.table),o=await yv(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Pv(e,o)}catch(c){Uv.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(Bv,"lmdbCreateRecords")});var Ym=f((tz,$m)=>{"use strict";var km=m(),vv=wl(),Hv=oi(),qv=require("fs-extra"),{getSchemaPath:Gv}=j();$m.exports=Fv;async function Fv(e){let t=[{name:e.schema,createddate:Date.now()}],r=new Hv(km.SYSTEM_SCHEMA_NAME,km.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await vv(r),await qv.mkdirp(Gv(e.schema))}a(Fv,"lmdbCreateSchema")});var Wm=f((sz,Km)=>{"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");Km.exports=$o});var Ll=f((cz,Xm)=>{"use strict";var Qm=X(),Cl=_s(),yl=it().LMDB_ERRORS_ENUM,xv=Ue(),Jm=I(),iz=b(),Vv=require("lmdb"),kv=Wm(),$v=m(),{OVERFLOW_MARKER:az,MAX_SEARCH_KEY_LENGTH:oz}=xv,Yv=$v.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Kv(e,t,r,s){if(Cl.validateEnv(e),t===void 0)throw new Error(yl.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(yl.IDS_REQUIRED):new Error(yl.IDS_MUST_BE_ITERABLE);try{let n=Qm.listDBIs(e);Qm.initializeDBIs(e,t,n);let i=new kv,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[Yv]>s){i.skipped.push(o);continue}let R=e.dbis[t].ifVersion(o,Vv.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 Le=Cl.getIndexedValues(q);if(Le)for(let U=0,$=Le.length;U<$;U++)x.remove(Le[U],o)}catch{Jm.warn(`cannot delete from attribute: ${H}, ${q}:${o}`)}}});c.push(R),_.push(o),i.original_records.push(T)}catch(T){Jm.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(Kv,"deleteRecords");Xm.exports={deleteRecords:Kv}});var mi=f((uz,zm)=>{"use strict";var _n=b(),Wv=Ll(),Qv=X(),{getSchemaPath:Jv}=j(),Xv=Si(),Zv=I();zm.exports=zv;async function zv(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 Zm([],[]);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 Qv.openEnvironment(n,e.table),o=await Wv.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await Xv(e,o)}catch(c){Zv.error(`unable to write transaction due to ${c.message}`)}return Zm(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(zv,"lmdbDeleteRecords");function Zm(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(Zm,"createDeleteResponse")});var Ml=f((dz,jm)=>{"use strict";var jv=m(),Ez=_s();function Ul(e,t){let r=Object.create(null);if(t.length===1&&jv.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 eH(e,t,r,s){let n=Ul(r,e);s.push(n)}a(eH,"searchAll");function tH(e,t,r,s){let n=Ul(r,e);s[t]=n}a(tH,"searchAllToMap");function rH(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(rH,"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 sH(e,t,r,s,n,i){t.toString().endsWith(e)&&As(t,r,s,n,i)}a(sH,"endsWith");function nH(e,t,r,s,n,i){t.toString().includes(e)&&As(t,r,s,n,i)}a(nH,"contains");function iH(e,t,r,s,n,i){t>e&&As(t,r,s,n,i)}a(iH,"greaterThanCompare");function aH(e,t,r,s,n,i){t>=e&&As(t,r,s,n,i)}a(aH,"greaterThanEqualCompare");function oH(e,t,r,s,n,i){t<e&&As(t,r,s,n,i)}a(oH,"lessThanCompare");function cH(e,t,r,s,n,i){t<=e&&As(t,r,s,n,i)}a(cH,"lessThanEqualCompare");jm.exports={parseRow:Ul,searchAll:eH,searchAllToMap:tH,iterateDBI:rH,endsWith:sH,contains:nH,greaterThanCompare:iH,greaterThanEqualCompare:aH,lessThanCompare:oH,lessThanEqualCompare:cH,pushResults:As}});var gs=f((mz,aR)=>{"use strict";var $r=X(),fz=I(),lt=_s(),Yo=Ue(),ce=it().LMDB_ERRORS_ENUM,Sz=b(),_H=m(),Ko=Ml(),{parseRow:uH}=Ko,Tz=require("lmdb"),{OVERFLOW_MARKER:eR,MAX_SEARCH_KEY_LENGTH:lH}=Yo;function tR(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(tR,"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 rR(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(eR)){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(rR,"getOverflowCheck");function EH(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=>uH(u.value,r))))}a(EH,"searchAll");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);Wo(r),r=Ai(e.database||e,r);let o=new Map;for(let{key:c,value:_}of tR(e,t,t,s,n,i))o.set(c,Ko.parseRow(_,r));return o}a(dH,"searchAllToMap");function hH(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=tR(e,void 0,t,r,s,n),c=o.transaction,_=rR(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(hH,"iterateDBI");function fH(e,t){if(lt.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return $r.statDBI(e,t).entryCount}a(fH,"countAll");function SH(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(SH,"equals");function TH(e,t,r){return Yr(e,t,r),$r.openDBI(e,t).getValuesCount(r)}a(TH,"count");function mH(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(mH,"startsWith");function RH(e,t,r,s,n=!1,i=void 0,o=void 0){return sR(e,t,r,s,n,i,o,!0)}a(RH,"endsWith");function sR(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=rR(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(eR)?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(sR,"contains");function AH(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(AH,"greaterThan");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,!1,!1)}a(pH,"greaterThanEqual");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"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Ri(e,t,r,_,s,n,i,o,!1,!0)}a(gH,"lessThan");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,!1)}a(NH,"lessThanEqual");function OH(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(OH,"between");function IH(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(IH,"searchByHash");function bH(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(bH,"checkHashExists");function wH(e,t,r,s,n=[]){return iR(e,t,r,s,n),nR(e,t,r,s,n).map(i=>i[1])}a(wH,"batchSearchByHash");function CH(e,t,r,s,n=[]){iR(e,t,r,s,n);let i=new Map;for(let[o,c]of nR(e,t,r,s,n))i.set(o,c);return i}a(CH,"batchSearchByHashToMap");function nR(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(nR,"batchHashSearch");function iR(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(iR,"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>lH)throw new Error(ce.SEARCH_VALUE_TOO_LARGE)}a(Yr,"validateComparisonFunctions");function Ai(e,t){return t.length===1&&_H.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=$r.listDBIs(e)),t}a(Ai,"setGetWholeRowAttributes");aR.exports={searchAll:EH,searchAllToMap:dH,count:TH,countAll:fH,equals:SH,startsWith:mH,endsWith:RH,contains:sR,searchByHash:IH,setGetWholeRowAttributes:Ai,batchSearchByHash:wH,batchSearchByHashToMap:CH,checkHashExists:bH,iterateDBI:hH,greaterThan:AH,greaterThanEqual:pH,lessThan:gH,lessThanEqual:NH,between:OH}});var pi=f((pz,uR)=>{var oR=require("lodash"),cR=te(),W=require("joi"),yH=b(),{hdb_schema_table:vt,checkValidTable:_R}=Wt(),{handleHDBError:LH,hdb_errors:UH}=y(),{HTTP_STATUS_CODES:MH}=UH,Az=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()}),DH=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)}),PH=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()});uR.exports=function(e,t){let r=null;switch(t){case"value":r=cR.validateBySchema(e,DH);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(_R("schema",e.schema)),i(_R("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=cR.validateBySchema(e,PH);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 LH(new Error,n,MH.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 _=oR.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!oR.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((Nz,lR)=>{"use strict";var BH=X(),vH=pi(),{getSchemaPath:HH}=j();lR.exports=qH;function qH(e){let t=vH(e,"hashes");if(t)throw t;let r=HH(e.schema,e.table);return BH.openEnvironment(r,e.table)}a(qH,"initialize")});var Pl=f((Iz,ER)=>{"use strict";var GH=gs(),FH=Dl();ER.exports=xH;async function xH(e){let t=await FH(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return GH.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(xH,"lmdbGetDataByHash")});var un=f((wz,dR)=>{"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");dR.exports=Qo});var fR=f((Lz,hR)=>{"use strict";var yz=un(),VH=gs(),kH=Dl();hR.exports=$H;async function $H(e){let t=await kH(e),r=global.hdb_schema[e.schema][e.table];return VH.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a($H,"lmdbSearchByHash")});var Ht=f((Mz,SR)=>{"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");SR.exports=Jo});var Xo=f((Pz,gR)=>{"use strict";var ve=gs(),YH=X(),KH=b(),C=Ue(),Ns=m(),WH=os(),TR=it().LMDB_ERRORS_ENUM,{compareKeys:ln}=require("ordered-binary"),{getSchemaPath:QH}=j(),Sr=Ns.SEARCH_WILDCARDS;async function JH(e,t,r){let s;e.schema===Ns.SYSTEM_SCHEMA_NAME?s=WH[e.table]:s=global.hdb_schema[e.schema][e.table];let n=pR(e,s.hash_attribute,r,t);return RR(e,n,s.hash_attribute,r)}a(JH,"prepSearch");async function RR(e,t,r,s){let n=QH(e.schema,e.table),i=await YH.openEnvironment(n,e.table),o=AR(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?mR(o,()=>!0):o.map(d=>({[r]:d.key}));let E=a(d=>({[r]:d.value,[l]:d.key}),"toObject");return s?mR(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(RR,"executeSearch");function AR(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(AR,"searchByType");function XH(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(XH,"filterByType");function mR(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(mR,"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 pR(e,t,r,s){if(KH.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(TR.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(TR.UNKNOWN_SEARCH_TYPE)}}a(pR,"createSearchTypeFromSearchObject");gR.exports={executeSearch:RR,createSearchTypeFromSearchObject:pR,prepSearch:JH,searchByType:AR,filterByType:XH}});var OR=f((Hz,NR)=>{"use strict";var vz=Ht(),zH=pi(),jH=b(),eq=m(),tq=Xo();NR.exports=rq;function rq(e,t){if(!jH.isEmpty(t)&&eq.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=zH(e,"value");if(s)throw s;let n=!0;return tq.prepSearch(e,t,n)}a(rq,"lmdbGetDataByValue")});var En=f((Fz,IR)=>{"use strict";var Gz=Ht(),sq=pi(),nq=b(),iq=m(),aq=Xo();IR.exports=oq;async function oq(e,t){if(!nq.isEmpty(t)&&iq.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=sq(e,"value");if(s)throw s;return aq.prepSearch(e,t,!1)}a(oq,"lmdbSearchByValue")});var wR=f((kz,bR)=>{"use strict";var Vz=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");bR.exports={SearchByConditionsObject:Zo,SearchCondition:zo,SortAttribute:jo}});var MR=f((Kz,UR)=>{"use strict";var Yz=wR().SearchByConditionsObject,cq=Ht(),_q=pi(),Bl=gs(),ec=Ue(),LR=Xo(),uq=Ml(),lq=require("lodash"),{getSchemaPath:Eq}=j(),CR=X(),{handleHDBError:dq,hdb_errors:hq}=y(),{HTTP_STATUS_CODES:fq}=hq,Sq=1e8;UR.exports=Tq;async function Tq(e){let t=_q(e,"conditions");if(t)throw dq(t,t.message,fq.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=Eq(e.schema,e.table),s=await CR.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)CR.openDBI(s,u.search_attribute);let i=lq.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=Sq}return u.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await yR(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(LR.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=>uq.parseRow(h,d))}else{for(let E=1;E<i.length;E++){let d=i[E],h=await yR(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(Tq,"lmdbSearchByConditions");async function yR(e,t,r,s){let n=new cq(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,LR.searchByType(e,n,i,s).map(o=>o.value)}a(yR,"executeConditionSearch")});var gi=f((Qz,DR)=>{"use strict";var mq=m().OPERATIONS_ENUM,tc=class{constructor(t,r,s,n=void 0){this.operation=mq.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(tc,"DeleteObject");DR.exports=tc});var vl=f((Xz,xR)=>{"use strict";var HR=Ht(),qR=gi(),GR=En(),FR=mi(),Ke=m(),PR=b(),BR=X(),{getTransactionAuditStorePath:Rq,getSchemaPath:Aq}=j(),vR=I();xR.exports=pq;async function pq(e){try{if(PR.isEmpty(global.hdb_schema[e.schema])||PR.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await gq(e),await Nq(e);let t=Aq(e.schema,e.table);try{await BR.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")vR.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Rq(e.schema,e.table);await BR.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")vR.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(pq,"lmdbDropTable");async function gq(e){let t=new HR(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 GR(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 qR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await FR(n)}a(gq,"deleteAttributesFromSystem");async function Nq(e){let t=new HR(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 GR(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 qR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await FR(n)}catch(i){throw i}}a(Nq,"dropTableFromSystem")});var kR=f((zz,VR)=>{"use strict";var Oq=require("fs-extra"),Iq=Ht(),bq=un(),wq=gi(),Cq=vl(),yq=mi(),Lq=Pl(),Uq=En(),Tr=m(),{getSchemaPath:Mq}=j(),{handleHDBError:Dq,hdb_errors:Pq}=y(),{HDB_ERROR_MSGS:Bq,HTTP_STATUS_CODES:vq}=Pq;VR.exports=Hq;async function Hq(e){let t;try{t=await qq(e.schema);let r=new Iq(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 Uq(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await Cq(c)}catch(_){if(_.message!=="invalid environment")throw _}}let n=new wq(Tr.SYSTEM_SCHEMA_NAME,Tr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await yq(n);let i=Mq(t);await Oq.remove(i)}catch(r){throw r}}a(Hq,"lmdbDropSchema");async function qq(e){let t=new bq(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 Lq(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw Dq(new Error,Bq.SCHEMA_NOT_FOUND(e),vq.NOT_FOUND,void 0,void 0,!0);return s}a(qq,"validateDropSchema")});var Hl=f((e2,$R)=>{"use strict";var rc=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(rc,"CreateTableObject");$R.exports=rc});var KR=f((s2,YR)=>{"use strict";var Gq=require("fs-extra"),sc=X(),{getTransactionAuditStorePath:Fq}=j(),ql=Ue(),r2=Hl();YR.exports=xq;async function xq(e){let t;try{let r=Fq(e.schema,e.table);await Gq.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(xq,"createTransactionsAuditEnvironment")});var XR=f((i2,JR)=>{"use strict";var Gl=m(),WR=X(),Vq=zs(),{getSystemSchemaPath:kq,getSchemaPath:$q}=j(),Yq=os(),Kq=ho(),Fl=Eo(),Wq=I(),Qq=KR(),Vl=Yq.hdb_table,QR=[];for(let e=0;e<Vl.attributes.length;e++)QR.push(Vl.attributes[e].attribute);JR.exports=Jq;async function Jq(e,t){let r=$q(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 WR.createEnvironment(r,t.table),e!==void 0){let o=await WR.openEnvironment(kq(),Gl.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Vq.insertRecords(o,Vl.hash_attribute,QR,[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 Qq(t)}catch(o){throw o}}a(Jq,"lmdbCreateTable");async function xl(e){try{await Kq(e)}catch(t){Wq.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(xl,"createAttribute")});var zR=f((o2,ZR)=>{"use strict";var Xq=fo(),Zq=mo(),zq=Ho(),Ni=m(),jq=zs().updateRecords,eG=X(),{getSchemaPath:tG}=j(),rG=Si(),sG=I();ZR.exports=nG;async function nG(e){try{let{schema_table:t,attributes:r}=Xq(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 zq(e.hdb_auth_header,t,r),n=tG(e.schema,e.table),i=await eG.openEnvironment(n,e.table),o=await jq(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await rG(e,o)}catch(c){sG.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(nG,"lmdbUpdateRecords")});var eA=f((_2,jR)=>{"use strict";var iG=m().OPERATIONS_ENUM,nc=class{constructor(t,r,s,n=void 0){this.operation=iG.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(nc,"UpsertObject");jR.exports=nc});var rA=f((E2,tA)=>{"use strict";var l2=eA(),aG=fo(),oG=mo(),cG=Ho(),Oi=m(),_G=zs().upsertRecords,uG=X(),{getSchemaPath:lG}=j(),EG=Si(),dG=I(),{handleHDBError:hG,hdb_errors:fG}=y();tA.exports=SG;async function SG(e){let t;try{t=aG(e)}catch(_){throw hG(_,_.message,fG.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;oG(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 cG(e.hdb_auth_header,r,s),i=lG(e.schema,e.table),o=await uG.openEnvironment(i,e.table),c=await _G(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await EG(e,c)}catch(_){dG.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(SG,"lmdbUpsertRecords")});var cA=f((h2,oA)=>{"use strict";var TG=Ht(),sA=b(),nA=I(),mG=En(),iA=m(),RG=Ll().deleteRecords,AG=X(),{getSchemaPath:pG}=j(),{promisify:gG}=require("util"),NG=gG(setTimeout),aA=1e4,OG=10;oA.exports=IG;async function IG(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(sA.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 TG(e.schema,e.table,iA.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=Array.from(await mG(n,iA.VALUE_SEARCH_COMPARATORS.LESS))}catch(n){throw nA.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return sA.isEmptyOrZeroLength(s)?(nA.trace("No records found to delete"),{message:"No records found to delete"}):await bG(e,s,t)}a(IG,"lmdbDeleteRecordsBefore");async function bG(e,t,r){let s=pG(e.schema,e.table),n=await AG.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,c=t.length;o<c;o+=aA){let _=t.slice(o,o+aA),u=[];for(let l=0,E=_.length;l<E;l++)u.push(_[l][r]);try{let l=await RG(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 NG(OG)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(bG,"chunkDeletes")});var uA=f((S2,_A)=>{"use strict";var ic=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(ic,"DeleteBeforeObject");_A.exports=ic});var EA=f((m2,lA)=>{"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");lA.exports=ac});var fA=f((p2,hA)=>{"use strict";var kl=X(),{getTransactionAuditStorePath:wG}=j(),A2=uA(),Ii=Ue(),CG=b(),dA=EA(),yG=require("util").promisify,LG=yG(setTimeout),UG=1e4,MG=100;hA.exports=DG;async function DG(e){let t=wG(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 dA;do n=await PG(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 LG(MG);while(n.transactions_deleted>0);return i}a(DG,"deleteAuditLogsBefore");async function PG(e,t){let r=new dA;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];CG.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>UG)break}return await n,r}catch(s){throw s}}a(PG,"deleteTransactions")});var TA=f((N2,SA)=>{"use strict";var oc=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(oc,"DropAttributeObject");SA.exports=oc});var RA=f((b2,mA)=>{"use strict";var BG=Ht(),vG=gi(),I2=TA(),Zt=m(),HG=b(),$l=X(),qG=os(),GG=En(),FG=mi(),{getSchemaPath:xG}=j();mA.exports=VG;async function VG(e,t=!0){let r;e.schema===Zt.SYSTEM_SCHEMA_NAME?r=qG[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await $G(e),n=xG(e.schema,e.table),i=await $l.openEnvironment(n,e.table);return t===!0&&await kG(e,i,r.hash_attribute),$l.dropDBI(i,e.attribute),s}a(VG,"lmdbDropAttribute");async function kG(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(kG,"removeAttributeFromAllObjects");async function $G(e){let t=new BG(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 GG(t)).filter(o=>o[Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(HG.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 vG(Zt.SYSTEM_SCHEMA_NAME,Zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return FG(i)}a($G,"dropAttributeFromSystem")});var IA=f((y2,OA)=>{"use strict";var Yl=X(),dn=Ue(),C2=_s(),Kl=m(),AA=b(),{getTransactionAuditStorePath:YG}=j(),KG=gs(),cc=on(),WG=I();OA.exports=QG;async function QG(e){let t=YG(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 pA(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,XG(r,e.search_values,n);case Kl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return JG(r,e.search_values);default:return pA(r)}}a(QG,"readAuditLog");function pA(e,t=[0,Date.now()]){AA.isEmpty(t[0])&&(t[0]=0),AA.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(pA,"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,NA(e,i))}return Object.fromEntries(r)}a(JG,"searchTransactionsByUsername");function XG(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=KG.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=NA(e,n),o=new Map;for(let c=0;c<i.length;c++){let _=i[c],u=_.timestamp,l=s.get(u);gA(_,"records",r,l,o),gA(_,"original_records",r,l,o)}return Object.fromEntries(o)}a(XG,"searchTransactionsByHashValues");function gA(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(gA,"loopRecords");function NA(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){WG.warn(i)}return r}catch(s){throw s}}a(NA,"batchSearchTransactions")});var wA=f((U2,bA)=>{"use strict";var{getSchemaPath:ZG}=j(),zG=X();bA.exports={writeTransaction:jG};async function jG(e,t,r){let s=ZG(e,t);return(await zG.openEnvironment(s,t)).transaction(r)}a(jG,"writeTransaction")});var UA=f((D2,LA)=>{"use strict";var{getSchemaPath:CA}=j(),yA=X();LA.exports={flush:eF,resetReadTxn:tF};async function eF(e,t){return(await yA.openEnvironment(CA(e,t),t.toString())).flushed}a(eF,"flush");async function tF(e,t){try{(await yA.openEnvironment(CA(e,t),t.toString())).resetReadTxn()}catch{}}a(tF,"resetReadTxn")});var PA=f((B2,DA)=>{"use strict";var rF=I(),{handleHDBError:sF}=y(),nF=wu(),iF=ho(),aF=wl(),oF=Ym(),cF=mi(),_F=Pl(),uF=fR(),lF=OR(),EF=En(),dF=MR(),hF=kR(),fF=XR(),SF=zR(),TF=rA(),mF=cA(),RF=fA(),AF=vl(),pF=RA(),gF=IA(),NF=wA(),MA=UA(),_c=class extends nF{async searchByConditions(t){return dF(t)}async getDataByHash(t){return await _F(t)}async searchByHash(t){return await uF(t)}async getDataByValue(t,r){return await lF(t,r)}async searchByValue(t){return await EF(t)}async createSchema(t){return await oF(t)}async dropSchema(t){return await hF(t)}async createTable(t,r){return await fF(t,r)}async dropTable(t){return await AF(t)}async createAttribute(t){return await iF(t)}async createRecords(t){return await aF(t)}async updateRecords(t){return await SF(t)}async upsertRecords(t){try{return await TF(t)}catch(r){throw sF(r,null,null,rF.ERR,r)}}async deleteRecords(t){return await cF(t)}async deleteRecordsBefore(t){return await mF(t)}async dropAttribute(t){return await pF(t)}async deleteAuditLogsBefore(t){return await RF(t)}async readAuditLog(t){return await gF(t)}writeTransaction(t,r,s){return NF.writeTransaction(t,r,s)}flush(t,r){return MA.flush(t,r)}resetReadTxn(t,r){return MA.resetReadTxn(t,r)}};a(_c,"LMDBBridge");DA.exports=_c});var Qt=f((H2,vA)=>{"use strict";var OF=PA(),IF=wu(),bF=B();bF.initSync();var BA;function wF(){return BA instanceof IF?BA:new OF}a(wF,"getBridge");vA.exports=wF()});var FA=f((G2,GA)=>{"use strict";var HA=require("lodash"),bi=require("mathjs"),CF=require("jsonata"),qA=b();GA.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?HA.uniqWith(e,HA.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(qA.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),qA.isEmpty(this.__ala__.res[r])){let s=CF(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(yF,"searchJSON")});var VA=f((x2,xA)=>{"use strict";var le=require("moment"),Wl="YYYY-MM-DDTHH:mm:ss.SSSZZ";le.suppressDeprecationWarnings=!0;xA.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 KA=f((V2,YA)=>{"use strict";var LF=require("@turf/area"),UF=require("@turf/length"),MF=require("@turf/circle"),DF=require("@turf/difference"),PF=require("@turf/distance"),BF=require("@turf/boolean-contains"),vF=require("@turf/boolean-equal"),HF=require("@turf/boolean-disjoint"),qF=require("@turf/helpers"),kA=m(),G=b();YA.exports={geoArea:GF,geoLength:FF,geoCircle:xF,geoDifference:VF,geoDistance:$A,geoNear:kF,geoContains:$F,geoEqual:YF,geoCrosses:KF,geoConvert:WF};var Ql="geo1 is required",Jl="geo2 is required";function GF(e){if(G.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),LF.default(e)}a(GF,"geoArea");function FF(e,t){if(G.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),UF.default(e,{units:t||"kilometers"})}a(FF,"geoLength");function xF(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)),MF.default(e,t,{units:r||"kilometers"})}a(xF,"geoCircle");function VF(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)),DF(e,t)}a(VF,"geoDifference");function $A(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)),PF.default(e,t,{units:r||"kilometers"})}a($A,"geoDistance");function kF(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 $A(e,t,s)<=r}a(kF,"geoNear");function $F(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)),BF.default(e,t)}a($F,"geoContains");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,"geoEqual");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,"geoCrosses");function WF(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 qF[t](e,r)}a(WF,"geoConvert")});var uc=f(($2,WA)=>{var Os=FA(),Et=VA(),zt=KA();WA.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 XA=f((Y2,JA)=>{"use strict";var Ci=require("lodash"),Oe=require("alasql");Oe.options.cache=!1;var QF=uc(),QA=require("clone"),lc=require("recursive-iterator"),D=I(),v=b(),hn=Qt(),JF=m(),{hdb_errors:XF}=y(),ZF="IS NULL",qt="There was a problem performing this search. Please check the logs and try again.";QF(Oe);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(QA(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 Oe.yy.LogicValue({value:s}):r.right instanceof Oe.yy.StringValue&&!v.isEmpty(s)&&v.autoCasterIsNumberCheck(s.toString())&&(r.right=new Oe.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 Oe.yy.LogicValue({value:i}):s instanceof Oe.yy.StringValue&&v.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new Oe.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 Oe.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(QA(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 Oe.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new Oe.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new Oe.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new Oe.yy.FuncValue:new Oe.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(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 Oe.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 Oe.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(XF.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");JA.exports=Ec});var It=f((W2,zA)=>{"use strict";var zF=vf();zA.exports={searchByConditions:r0,searchByHash:s0,searchByValue:n0,search:i0};var Xl=Qt(),ZA=require("util"),jF=ZA.callbackify(Xl.searchByHash),e0=ZA.callbackify(Xl.searchByValue),t0=XA();async function r0(e){return Xl.searchByConditions(e)}a(r0,"searchByConditions");function s0(e,t){try{jF(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(s0,"searchByHash");function n0(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),e0(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(n0,"searchByValue");function i0(e,t){try{let r=new zF(e);r.validate(),new t0(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(i0,"search")});var Rs=f((J2,ap)=>{"use strict";var ep=It(),Kr=I(),tp=_o(),a0=require("lodash"),o0=xr(),rp=b(),{promisify:sp}=require("util"),z=m(),{handleHDBError:dc,hdb_errors:c0}=y(),{HDB_ERROR_MSGS:hc,HTTP_STATUS_CODES:np}=c0,_0=B();_0.initSync();var jA=X(),u0=gs(),{getSchemaPath:l0}=j(),yi=sp(ep.searchByValue),E0=sp(ep.searchByHash),fn="name",ip="hash_attribute",Zl="schema",d0="schema_table",h0="attribute";ap.exports={describeAll:f0,describeTable:fc,describeSchema:T0};async function f0(e){try{let t=rp.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 yi(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:[ip,z.ID_ATTRIBUTE_STRING,fn,Zl]},u=await yi(_),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(f0,"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=tp.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 yi(c));if(!_||_.length===0)throw dc(new Error,hc.TABLE_NOT_FOUND(e.schema,e.table),np.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:d0,search_value:r+"."+s,get_attributes:[h0]},E=Array.from(await yi(l));E=a0.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=S0(n)),i.attributes=E,i.clustering_stream_name=o0.createNatsTableStreamName(u.schema,u.name);try{let d=l0(i.schema,i.name),h=await jA.openEnvironment(d,i.name),T=jA.statDBI(h,i.hash_attribute);i.record_count=T.entryCount;for(let{key:R}of u0.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 S0(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(S0,"getAttrsByPerms");async function T0(e){let t=tp.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:[ip,z.ID_ATTRIBUTE_STRING,fn,Zl]},i=Array.from(await yi(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 E0(o));if(c&&c.length<1)throw dc(new Error,hc.SCHEMA_NOT_FOUND(e.schema),np.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]),rp.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(T0,"describeSchema")});var qr=f((Z2,lp)=>{var Sn=os(),{callbackify:_p,promisify:m0}=require("util");lp.exports={setSchemaDataToGlobal:op,getTableSchema:p0,getSystemSchema:N0,setSchemaDataToGlobalAsync:m0(op)};var up=Rs(),R0=_p(up.describeAll),A0=_p(up.describeTable);function op(e){R0(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Sn),global.hdb_schema=r,e(null,null)})}a(op,"setSchemaDataToGlobal");function cp(e,t){return e==="system"?Sn[t]:global.hdb_schema[e][t]}a(cp,"returnSchema");function p0(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?g0(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,cp(e,t))}):r(null,cp(e,t))}a(p0,"getTableSchema");function g0(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}A0(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(g0,"setTableDataToGlobal");function N0(){return Sn}a(N0,"getSystemSchema")});var Sc=f((j2,Ep)=>{"use strict";var O0=Qt();Ep.exports={writeTransaction:I0};function I0(e,t,r){return O0.writeTransaction(e,t,r)}a(I0,"writeTransaction")});var zl=f((t4,b0)=>{b0.exports={name:"harperdb",version:"4.1.0",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{node:">=14.0.0","preferred-node":"18.15.0","go-lang":"1.19.6","nats-server":"2.9.15"},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.299.0","@aws-sdk/lib-storage":"3.300.0","@aws-sdk/abort-controller":"3.0.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.14.1","fastify-plugin":"~4.5.0","fs-extra":"11.1.0","human-readable-ids":"1.0.4",inquirer:"8.2.2","is-number":"7.0.0",joi:"17.8.3",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.0",lmdb:"2.7.10",lodash:"4.17.21",mathjs:"11.6.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4",msgpackr:"1.8.5",nats:"2.12.1",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.11.0",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.3.8","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((u4,Lp)=>{"use strict";var Ie=B();Ie.initSync();var w0=require("fs-extra"),C0=require("semver"),Pi=require("path"),{monotonicFactory:y0}=require("ulidx"),sE=y0(),L0=require("util"),hp=require("child_process"),U0=L0.promisify(hp.exec),M0=hp.spawn,k=oe(),Q=m(),Tc=b(),Wr=I(),mc=xr(),D0=Sc(),Li=lr(),{encode:tE,decode:nE}=require("msgpackr"),{isEmpty:Is}=Tc,fp=Vr(),Sp=12e10,{connect:P0,StorageType:Tp,RetentionPolicy:mp,AckPolicy:iE,DeliverPolicy:Bi,DiscardPolicy:B0,NatsConnection:r4,JetStreamManager:s4,JetStreamClient:n4,StringCodec:i4,JSONCodec:v0,createInbox:aE,StreamSource:a4,headers:H0,toJsMsg:Rp,nuid:o4,JetStreamOptions:c4,ErrorCode:dp,nanos:_4}=require("nats"),{PACKAGE_ROOT:q0}=m(),G0=zl(),Ap=v0(),F0="clustering",x0=G0.engines[k.NATS_SERVER_NAME],V0=Pi.join(q0,"dependencies"),rE=Pi.join(V0,`${process.platform}-${process.arch}`,k.NATS_BINARY_NAME),jl,eE,Ui,Mi,Di,Gt;Lp.exports={runCommand:pp,checkNATSServerInstalled:k0,createConnection:oE,getConnection:Rc,getJetStreamManager:vi,getJetStream:gp,getNATSReferences:dt,getServerList:Y0,createLocalStream:cE,listStreams:Np,deleteLocalStream:K0,getServerConfig:Hi,listRemoteStreams:W0,viewStream:Q0,viewStreamIterator:J0,publishToStream:X0,createWorkQueueStream:Z0,addSourceToWorkStream:Ip,request:z0,removeSourceFromWorkStream:wp,reloadNATS:_E,reloadNATSHub:j0,reloadNATSLeaf:ex,extractServerName:bp,requestErrorHandler:tx,updateWorkStream:rx,createLocalTableStream:Cp,createTableStreams:sx,purgeTableStream:yp,purgeSchemaTableStreams:nx,getStreamInfo:ix,updateLocalStreams:ox,closeConnection:$0,getJsmServerName:qi,addNatsMsgHeader:Op};async function pp(e,t=void 0){let{stdout:r,stderr:s}=await U0(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(pp,"runCommand");async function k0(){try{await w0.access(rE)}catch{return!1}let e=await pp(`${rE} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return C0.eq(t,x0)}a(k0,"checkNATSServerInstalled");async function oE(e,t,r,s=!0,n="127.0.0.1"){return P0({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:Ie.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Ie.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Ie.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}a(oE,"createConnection");async function $0(){Gt&&(await Gt.drain(),Gt=void 0)}a($0,"closeConnection");async function Rc(){if(!Gt){let e=await fp.getClusterUser();if(Is(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=Ie.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 gp(){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(gp,"getJetStream");async function dt(){let e=Gt||await Rc(),t=Mi||await vi(),r=Di||await gp();return{connection:e,jsm:t,js:r}}a(dt,"getNATSReferences");async function Y0(e){let t=Ie.get(Q.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await fp.getClusterUser(),n=await oE(t,r,s),i=aE(),o=n.subscribe(i),c=[],_,u=(async()=>{for await(let l of o){let E=Ap.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(Y0,"getServerList");async function cE(e,t){let{jsm:r}=await dt(),s=Ie.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Ie.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Ie.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Tp.File,retention:mp.Limits,subjects:t,discard:B0.Old,duplicate_window:Sp,max_msgs:n,max_bytes:i,max_age:s})}a(cE,"createLocalStream");async function Np(){let{jsm:e}=await dt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(Np,"listStreams");async function K0(e){let{jsm:t}=await dt();await t.streams.delete(e)}a(K0,"deleteLocalStream");async function W0(e){let{connection:t}=await dt(),r=[],s=aE(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(Ap.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(W0,"listRemoteStreams");async function Q0(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=Rp(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(k.MSG_HEADERS.ORIGIN),h.nats_msg_id=E.headers.get(k.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(Q0,"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=Rp(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(k.MSG_HEADERS.ORIGIN),h.nats_msg_id=l.headers.get(k.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 X0(e,t,r,s){Wr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s),r=Op(s,r);let{js:n}=await dt(),i=await qi(),o=`${e}.${i}`;try{Wr.trace(`publishToStream publishing to subject: ${o}, data:`,s),await n.publish(o,tE(s),{headers:r})}catch(c){if(c.code&&c.code.toString()==="503")Wr.trace(`publishToStream creating stream: ${t}`),await cE(t,[o]),await n.publish(o,tE(s),{headers:r});else throw c}}a(X0,"publishToStream");function Op(e,t){t===void 0&&(t=H0());let r=Ie.get(Q.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(k.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(k.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(k.MSG_HEADERS.ORIGIN)||t.append(k.MSG_HEADERS.ORIGIN,r),t}a(Op,"addNatsMsgHeader");function Hi(e){e=e.toLowerCase();let t=Pi.join(Ie.get(Q.CONFIG_PARAMS.ROOTPATH),F0);if(e===Q.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Is(eE)&&(eE={port:Li.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Li.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+k.SERVER_SUFFIX.HUB,config_file:k.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Pi.join(t,k.PID_FILES.HUB),hdb_nats_path:t}),eE;if(e===Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Is(jl)&&(jl={port:Li.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Li.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+k.SERVER_SUFFIX.LEAF,config_file:k.NATS_CONFIG_FILES.LEAF_SERVER,domain:Li.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+k.SERVER_SUFFIX.LEAF,pid_file_path:Pi.join(t,k.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:Tp.File,retention:mp.Workqueue,duplicate_window:Sp,subjects:[`${k.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 Ip(e,t,r){let{jsm:s}=await dt(),n=await s.streams.info(t),i=bp(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:`${k.SUBJECT_PREFIXES.TXN}.>`};l||(T.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(T),await s.streams.update(t,n.config)}a(Ip,"addSourceToWorkStream");function bp(e){return e.split(".")[1]}a(bp,"extractServerName");async function wp(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(wp,"removeSourceFromWorkStream");async function z0(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(z0,"request");function _E(e){return new Promise(async(t,r)=>{let s=M0(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 j0(){let{pid_file_path:e}=Hi(Q.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await _E(e)}a(j0,"reloadNATSHub");async function ex(){let{pid_file_path:e}=Hi(Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await _E(e)}a(ex,"reloadNATSLeaf");function tx(e,t,r){let s;switch(e.code){case dp.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case dp.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(tx,"requestErrorHandler");async function rx(e,t){let r=t+k.SERVER_SUFFIX.LEAF;await D0.writeTransaction(Q.SYSTEM_SCHEMA_NAME,Q.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await Ip(r,k.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await wp(r,k.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(rx,"updateWorkStream");async function Cp(e,t){let r=mc.createNatsTableStreamName(e,t),s=await qi(),n=ax(e,t,s);await cE(r,[n])}a(Cp,"createLocalTableStream");async function sx(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await Cp(s,n)}}a(sx,"createTableStreams");async function yp(e,t){if(Ie.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(yp,"purgeTableStream");async function nx(e,t){if(Ie.get(Q.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await yp(e,t[r])}a(nx,"purgeSchemaTableStreams");async function ix(e){return(await vi()).streams.info(e)}a(ix,"getStreamInfo");function ax(e,t,r){return`${k.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(ax,"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 ox(){let e=await vi(),t=await qi(),r=await Np();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=cx(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===k.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let u=`${k.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===k.WORK_QUEUE_CONSUMER_NAMES.stream_name){let u=`${k.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(k.WORK_QUEUE_CONSUMER_NAMES.stream_name,k.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${k.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(ox,"updateLocalStreams");function cx(e){let{config:t}=e,r=!1;if(t.name===k.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===k.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=Ie.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Ie.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Ie.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(cx,"updateStreamLimits")});var uE=f((E4,Up)=>{"use strict";var Ac=class{constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};a(Ac,"ClusteringOriginObject");Up.exports=Ac});var Tn=f((h4,Mp)=>{"use strict";var _x=b(),lE=B(),Qr=m(),ux=oe(),lx=be(),jt=I(),Ex=uE(),dx=xr();lE.initSync();Mp.exports={postOperationHandler:fx};async function pc(e,t,r,s){if(e.schema===Qr.SYSTEM_SCHEMA_NAME)return;let n=hx(e,t,r);n&&(jt.trace(`sendOperationTransaction publishing to schema ${e.schema} table ${e.table} following transaction:`,n),await lx.publishToStream(`${ux.SUBJECT_PREFIXES.TXN}.${e.schema}.${e.table}`,dx.createNatsTableStreamName(e.schema,e.table),s,n))}a(pc,"sendOperationTransaction");function hx(e,t,r){if(_x.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(hx,"convertCRUDOperationToTransaction");async function fx(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 Ex(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(fx,"postOperationHandler")});var Hp=f((S4,vp)=>{"use strict";var Sx=It(),Tx=qr(),Dp=I(),Pp=Ot(),mx=Sc(),Rx=require("clone"),dE=require("alasql"),Ax=uc(),Bp=require("util"),px=Bp.promisify(Tx.getTableSchema),gx=Bp.promisify(Sx.search),Nx=m(),EE=b(),Ox=Tn();Ax(dE);vp.exports={update:bx};var Ix="There was a problem performing this update. Please check the logs and try again.";async function bx({statement:e,hdb_user:t}){let r=await px(e.table.databaseid,e.table.tableid),s=wx(e.columns);EE.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=Rx(n),c=EE.isEmpty(i)?"":` WHERE ${i.toString()}`,_=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,u=dE.parse(_).statements[0],l=await mx.writeTransaction(r.schema,r.name,async()=>{let E=await gx(u),d=Cx(s,E);return yx(o,d,t)});return await Pp.flush({schema:r.schema,table:r.name}),l}a(bx,"update");function wx(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 [${Nx.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Dp.error(t),new Error(Ix)}}a(wx,"createUpdateRecord");function Cx(e,t){return EE.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Cx,"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 Pp.update(s);await Ox.postOperationHandler(s,n);try{delete n.new_attributes,delete n.txn_time}catch(i){Dp.error(`Error delete new_attributes from update response: ${i}`)}return n}a(yx,"updateRecords")});var Gp=f((m4,qp)=>{var Lx=require("alasql"),Ux=It(),Mx=I(),Dx=Qt(),fE=require("util"),hE=b(),Px=m(),Bx=qr(),vx=Sc(),Hx=Tn(),qx=Ot(),Gx="record",Fx="successfully deleted",xx=fE.callbackify(Yx),Vx=fE.promisify(Ux.search),kx=fE.promisify(Bx.getTableSchema);qp.exports={convertDelete:xx};function $x(e){return`${e.deleted_hashes.length} ${Gx}${e.deleted_hashes.length===1?"":"s"} ${Fx}`}a($x,"generateReturnMessage");async function Yx({statement:e,hdb_user:t}){let r=await kx(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=Lx.parse(o).statements[0],_={operation:Px.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{let u=await vx.writeTransaction(r.schema,r.name,async()=>(_.records=await Vx(c),Dx.deleteRecords(_)));return await qx.flush({schema:r.schema,table:r.name}),u.deleted_hashes.length>0&&await Hx.postOperationHandler(_,u),hE.isEmptyOrZeroLength(u.message)&&(u.message=$x(u)),delete u.txn_time,u}catch(u){throw Mx.error(u),u.hdb_code?u.message:u}}a(Yx,"convertDelete")});var Vp=f((A4,xp)=>{"use strict";var TE=Rs(),{hdb_errors:SE}=y();xp.exports={checkSchemaExists:Fp,checkSchemaTableExists:Kx,schema_describe:TE};async function Fp(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(Fp,"checkSchemaExists");async function Kx(e,t){let r=await Fp(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(Kx,"checkSchemaTableExists")});var Nc=f((N4,Kp)=>{"use strict";var mn=_o(),bs=Vp(),Wx=I(),Qx=require("uuid").v4,g4=require("clone"),Rn=nn(),ws=m(),Jx=require("util"),Cs=Qt(),{handleHDBError:We,hdb_errors:Xx}=y(),{HDB_ERROR_MSGS:gc,HTTP_STATUS_CODES:Qe}=Xx,{SchemaEventMsg:An}=kr(),kp=be();Kp.exports={createSchema:Zx,createSchemaStructure:$p,createTable:zx,createTableStructure:Yp,createAttribute:sV,dropSchema:jx,dropTable:eV,dropAttribute:tV};async function Zx(e){try{let t=await $p(e);return Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema)),t}catch(t){throw t}}a(Zx,"createSchema");async function $p(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($p,"createSchemaStructure");async function zx(e){let t=await Yp(e);return Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema,e.table)),t}a(zx,"createTable");async function Yp(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:Qx(),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(Yp,"createTableStructure");async function jx(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 kp.purgeSchemaTableStreams(e.schema,n),`successfully deleted schema '${e.schema}'`}a(jx,"dropSchema");async function eV(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 kp.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(eV,"dropTable");async function tV(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),rV(e),Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw Wx.error(`Got an error deleting attribute ${Jx.inspect(e)}.`),s}}a(tV,"dropAttribute");function rV(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(rV,"dropAttributeFromGlobal");async function sV(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(sV,"createAttribute")});var Qp=f((I4,Wp)=>{"use strict";var{OPERATIONS_ENUM:nV}=m(),Oc=class{constructor(t,r,s=void 0,n=void 0){this.operation=nV.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};a(Oc,"ReadAuditLogObject");Wp.exports=Oc});var mE=f((C4,jp)=>{"use strict";var iV=Qt(),w4=Qp(),Ic=b(),bc=m(),aV=B(),{handleHDBError:Jp,hdb_errors:oV}=y(),{HDB_ERROR_MSGS:Xp,HTTP_STATUS_CODES:Zp}=oV,cV=Object.values(bc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),zp="To use this operation audit log must be enabled in harperdb-config.yaml";jp.exports=_V;async function _V(e){if(Ic.isEmpty(e.schema))throw new Error(Xp.SCHEMA_REQUIRED_ERR);if(Ic.isEmpty(e.table))throw new Error(Xp.TABLE_REQUIRED_ERR);if(!aV.get(bc.CONFIG_PARAMS.LOGGING_AUDITLOG))throw Jp(new Error,zp,Zp.BAD_REQUEST,bc.LOG_LEVELS.ERROR,zp,!0);let t=Ic.checkSchemaTableExist(e.schema,e.table);if(t)throw Jp(new Error,t,Zp.NOT_FOUND,bc.LOG_LEVELS.ERROR,t,!0);if(!Ic.isEmpty(e.search_type)&&cV.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await iV.readAuditLog(e)}a(_V,"readAuditLog")});var ig=f((L4,ng)=>{var Jr=require("validate.js"),tg=te(),pn=m(),{handleHDBError:uV,hdb_errors:lV}=y(),{HDB_ERROR_MSGS:_e,HTTP_STATUS_CODES:EV}=lV,RE=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),dV={STRUCTURE_USER:"structure_user"},eg=Object.values(pn.ROLE_TYPES_ENUM),hV="attribute_permissions",fV="attribute_name",{PERMS_CRUD_ENUM:gn}=pn,SV=[hV,...Object.values(gn)],rg=[gn.READ,gn.INSERT,gn.UPDATE],TV=[fV,...rg];function mV(e){let t=RE();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,sg(e,t)}a(mV,"addRoleValidation");function RV(e){let t=RE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,sg(e,t)}a(RV,"alterRoleValidation");function AV(e){let t=RE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,tg.validateObject(e,t)}a(AV,"dropRoleValidation");var pV=["operation","role","id","permission","hdb_user","hdb_auth_header"];function sg(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)pV.includes(s[o])||n.push(s[o]);n.length>0&&Ee(_e.INVALID_ROLE_JSON_KEYS(n),r);let i=tg.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Ee(o,r)}),e.permission){let o=gV(e);o&&Ee(o,r),eg.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(eg.indexOf(o)<0){if(o===dV.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=>{SV.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=>{!TV.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}rg.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 NV(r)}a(sg,"customValidate");ng.exports={addRoleValidation:mV,alterRoleValidation:RV,dropRoleValidation:AV};function gV(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(gV,"validateNoSUPerms");function NV(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 uV(new Error,s,EV.BAD_REQUEST)}else return null}a(NV,"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((M4,lg)=>{"use strict";var ag=Ot(),og=It(),OV=Ts(),gE=ig(),NE=nn(),IV=require("uuid").v4,OE=require("util"),bV=tn(),mr=m(),cg=b(),IE=OE.promisify(og.searchByValue),wV=OE.promisify(og.searchByHash),CV=OE.promisify(OV.delete),yV=Ht(),LV=un(),{hdb_errors:UV,handleHDBError:Gi}=y(),{HDB_ERROR_MSGS:_g,HTTP_STATUS_CODES:AE}=UV,{UserEventMsg:bE}=kr();lg.exports={addRole:MV,alterRole:PV,dropRole:BV,listRoles:ug};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 MV(e){let t=gE.addRoleValidation(e);if(t)throw t;if(!(await bV.getLicense()).enterprise){let o=await ug();if(DV(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,_g.ROLE_ALREADY_EXISTS(e.role),AE.CONFLICT,void 0,void 0,!0);e.id||(e.id=IV());let i={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await ag.insert(i),NE.signalUserChange(new bE(process.pid)),e=pE(e),e}a(MV,"addRole");function DV(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(!cg.isEmpty(i)&&i.cluster_user===!0)return!0}return r}a(DV,"checkClusterUserRole");async function PV(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 ag.update(r)}catch(s){throw Gi(s)}return NE.signalUserChange(new bE(process.pid)),e}a(PV,"alterRole");async function BV(e){let t=gE.dropRoleValidation(e);if(t)throw Gi(new Error,t,AE.BAD_REQUEST,void 0,void 0,!0);let r=new LV(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await wV(r));if(s.length===0)throw Gi(new Error,_g.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(cg.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 CV(c),NE.signalUserChange(new bE(process.pid)),`${s[0].role} successfully deleted`}a(BV,"dropRole");async function ug(){return IE({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(ug,"listRoles")});var fg=f((P4,hg)=>{"use strict";var vV=B(),Xr=require("joi"),HV=te(),Eg=require("moment"),qV=require("fs-extra"),CE=require("path"),GV=require("lodash"),Fi=m(),{LOG_LEVELS:ys}=m(),FV="YYYY-MM-DD hh:mm:ss",xV=CE.resolve(__dirname,"../logs");hg.exports=function(e){return HV.validateBySchema(e,VV)};var VV=Xr.object({from:Xr.custom(dg),until:Xr.custom(dg),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(kV)});function dg(e,t){if(Eg(e,Eg.ISO_8601).format(FV)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(dg,"validateDatetime");function kV(e,t){if(GV.invert(Fi.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=vV.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(xV,Fi.LOG_NAMES.INSTALL):CE.join(s,n);return qV.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(kV,"validateReadLogPath")});var LE=f((v4,Sg)=>{"use strict";var wc=m(),$V=I(),YV=B(),KV=fg(),yE=require("path"),WV=require("fs-extra"),{once:QV}=require("events"),{handleHDBError:JV,hdb_errors:XV}=y(),{PACKAGE_ROOT:ZV}=m(),zV=yE.join(ZV,"logs"),jV=1e3;Sg.exports=ek;async function ek(e){let t=KV(e);if(t)throw JV(t,t.message,XV.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=YV.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?yE.join(zV,wc.LOG_NAMES.INSTALL):yE.join(r,s),i=WV.createReadStream(n);i.on("error",U=>{$V.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?jV: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,ie;for(;(ie=$.exec(U))&&!i.destroyed;){q&&(q.message=U.slice(ue,ie.index),Le(q));let[qn,as,wr]=ie,Oa=wr.split("] ["),gw=Oa[0],Nw=Oa[1];Oa.splice(0,2),q={timestamp:as,thread:gw,level:Nw,tags:Oa,message:""},ue=ie.index+qn.length}x=U.slice(ue)}),i.on("end",U=>{i.destroyed||q&&(q.message=x.trim(),Le(q))}),i.resume();function Le(U){let $,ue,ie;switch(!0){case(o&&_&&l):$=new Date(U.timestamp),ue=new Date(u),ie=new Date(E),U.level===c&&$>=ue&&$<=ie&&g<T?g++:U.level===c&&$>=ue&&$<=ie&&(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),ie=new Date(E),U.level===c&&$<=ie&&g<T?g++:U.level===c&&$<=ie&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case(_&&l):$=new Date(U.timestamp),ue=new Date(u),ie=new Date(E),$>=ue&&$<=ie&&g<T?g++:$>=ue&&$<=ie&&(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),ie=new Date(E),$<=ie&&g<T?g++:$<=ie&&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(Le,"onLogMessage"),await QV(i,"close"),H}a(ek,"readLog");function Zr(e,t,r){t==="desc"?tk(e,r):t==="asc"?rk(e,r):r.push(e)}a(Zr,"pushLineToResult");function tk(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(tk,"insertDescending");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,"insertAscending")});var yc=f((F4,Rg)=>{"use strict";var UE=require("joi"),{string:Cc,boolean:Tg,date:sk}=UE.types(),nk=te(),{validateSchemaExists:q4,validateTableExists:G4,validateSchemaName:ik}=Wt(),ak=m(),ok=oe(),ck=B(),_k=Cc.invalid(ck.get(ak.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(ok.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(),mg={operation:Cc.valid("add_node","update_node"),node_name:_k,subscriptions:UE.array().items({table:Cc.required(),schema:Cc.custom(ik).required(),subscribe:Tg.required(),publish:Tg.required().custom(lk),start_time:sk.iso()}).min(1).required()};function uk(e){return nk.validateBySchema(e,UE.object(mg))}a(uk,"addUpdateNodeValidator");function lk(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(lk,"checkForFalsy");Rg.exports={addUpdateNodeValidator:uk,validation_schema:mg}});var pg=f((V4,Ag)=>{var Ek=te(),dk={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Ag.exports=function(e){return Ek.validateObject(e,dk)}});var ME=f((k4,gg)=>{"use strict";var hk=m().OPERATIONS_ENUM,Lc=class{constructor(t,r,s,n=void 0){this.operation=hk.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Lc,"UpdateObject");gg.exports=Lc});var Og=f((Y4,Ng)=>{"use strict";var fk={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");Ng.exports={JWTTokens:Uc,TOKEN_TYPE_ENUM:fk,JWTRSAKeys:Mc}});var vc=f((W4,Cg)=>{"use strict";var Vi=require("jsonwebtoken"),DE=require("fs-extra"),PE=b(),bt=m(),{handleHDBError:Je,hdb_errors:Sk}=y(),{HTTP_STATUS_CODES:Xe,AUTHENTICATION_ERROR_MSGS:Ze}=Sk,xi=I(),Ig=Ao(),HE=Vr(),Tk=Ot().update,mk=ME(),Rk=nn(),{UserEventMsg:Ak}=kr(),zr=B();zr.initSync();var BE=require("path"),{JWTTokens:pk,JWTRSAKeys:gk,TOKEN_TYPE_ENUM:Dc}=Og(),Nk=zr.get(bt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?zr.get(bt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",Ok=zr.get(bt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?zr.get(bt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Pc="RS256",vE;Cg.exports={createTokens:Ik,validateOperationToken:wk,refreshOperationToken:bk,validateRefreshToken:wg};async function Ik(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 bg(i,r.private_key,r.passphrase),c=await Vi.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:Ok,algorithm:Pc,subject:Dc.REFRESH}),_=Ig.hash(c),u=new mk(bt.SYSTEM_SCHEMA_NAME,bt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:_}]),l,E;try{l=await Tk(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 Rk.signalUserChange(new Ak(process.pid)),new pk(o,c)}a(Ik,"createTokens");async function bg(e,t,r){return await Vi.sign(e,{key:t,passphrase:r},{expiresIn:Nk,algorithm:Pc,subject:Dc.OPERATION})}a(bg,"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 gk(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 bk(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 wg(e.refresh_token);let t=await Bc(),r=await Vi.decode(e.refresh_token);return{operation_token:await bg({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(bk,"refreshOperationToken");async function wk(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(wk,"validateOperationToken");async function wg(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(!Ig.validate(t.refresh_token,e))throw Je(new Error,Ze.INVALID_TOKEN,Xe.UNAUTHORIZED);return t}a(wg,"validateRefreshToken")});var Mg=f((X4,Ug)=>{"use strict";var Ck=pg(),Nn=require("passport"),yk=require("passport-local").Strategy,Lk=require("passport-http").BasicStrategy,Uk=require("util"),Mk=Vr(),Lg=Uk.callbackify(Mk.findAndValidateUser),J4=it(),Dk=m(),yg=vc();Nn.use(new yk(function(e,t,r){Lg(e,t,r)}));Nn.use(new Lk(function(e,t,r){Lg(e,t,r)}));Nn.serializeUser(function(e,t){t(null,e)});Nn.deserializeUser(function(e,t){t(null,e)});function Pk(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===Dk.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?yg.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):yg.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(Pk,"authorize");function Bk(e,t){let r=Ck(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(Bk,"checkPermissions");Ug.exports={authorize:Pk,checkPermissions:Bk}});var On=f((z4,Dg)=>{"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");Dg.exports={Node:Hc,NodeSubscription:qc}});var Bg=f((e5,Pg)=>{"use strict";var vk=m().OPERATIONS_ENUM,Gc=class{constructor(t,r,s,n=void 0){this.operation=vk.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Gc,"UpsertObject");Pg.exports=Gc});var ki=f((r5,vg)=>{"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");vg.exports={RemotePayloadObject:Fc,RemotePayloadSubscription:xc}});var qg=f((n5,Hg)=>{"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");Hg.exports=Vc});var Fg=f((a5,Gg)=>{"use strict";var Hk=qg(),qk=Ue(),In=X(),Gk=I(),{getSchemaPath:Fk,getTransactionAuditStorePath:xk}=j();Gg.exports=Vk;async function Vk(e){let t=new Hk;try{let r=Fk(e.schema,e.name),s=await In.openEnvironment(r,e.name),n=In.statDBI(s,e.hash_attribute),i=xk(e.schema,e.name),o=await In.openEnvironment(i,e.name,!0),c=In.statDBI(o,qk.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){Gk.warn(`unable to stat table dbi due to ${r}`)}return t}a(Vk,"lmdbGetTableSize")});var Vg=f((c5,xg)=>{"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");xg.exports=kc});var bn=f((u5,Yg)=>{"use strict";var He=require("systeminformation"),Ls=I(),kk=m(),$k=Fg(),$g=Rs(),{getThreadInfo:kg}=hs(),Yk=B();Yk.initSync();var Kk=Vg(),{openEnvironment:Wk}=X(),{getSchemaPath:Qk}=j(),$c;Yg.exports={getHDBProcessInfo:xE,getNetworkInfo:kE,getDiskInfo:VE,getMemoryInfo:FE,getCPUInfo:GE,getTimeInfo:qE,getSystemInformation:$E,systemInformation:Jk,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:Le,raw_load_idle:U,raw_load_irq:$,raw_load_nice:ue,raw_load_system:ie,raw_load_user:qn,...as}=q;x.cpus.push(as)}),l.current_load=x,l}catch(e){return Ls.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 Ls.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(kk.HDB_PROC_NAME)||r.name.includes("harperdb")?e.core.push(r):r.name==="nats-server"&&e.clustering.push(r)}),e}catch(t){return Ls.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 Ls.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 Ls.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 Ls.error(`error in getSystemInformation: ${t}`),e}}a($E,"getSystemInformation");async function YE(){let e=[],t=await $g.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await $k(s));return e}a(YE,"getTableSize");async function KE(){let e=await $g.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=Qk(i,n),c=(await Wk(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){Ls.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(KE,"getMetrics");async function Jk(e){let t=new Kk;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 kg(),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 kg();break;default:break}return t}a(Jk,"systemInformation")});var WE=f((h5,Kg)=>{"use strict";var E5=require("fs-extra"),d5=I();Kg.exports={version:Xk,printVersion:zk,nodeVersion:Zk};var jr=zl();function Xk(){if(jr)return jr.version}a(Xk,"version");function Zk(){if(jr&&jr.engines&&jr.engines["preferred-node"])return jr.engines["preferred-node"]}a(Zk,"nodeVersion");function zk(){jr&&console.log(`HarperDB Version ${jr.version}`)}a(zk,"printVersion")});var Rr=f((m5,Xg)=>{"use strict";var jk=Ot(),QE=b(),JE=require("util"),Us=m(),Wg=B();Wg.initSync();var e$=Mg(),Qg=It(),{Node:S5,NodeSubscription:T5}=On(),t$=un(),r$=Bg(),{RemotePayloadObject:s$,RemotePayloadSubscription:n$}=ki(),{handleHDBError:i$,hdb_errors:a$}=y(),{HTTP_STATUS_CODES:o$,HDB_ERROR_MSGS:c$}=a$,_$=Ht(),u$=bn(),l$=WE(),E$=JE.promisify(e$.authorize),d$=JE.promisify(Qg.searchByHash),h$=JE.promisify(Qg.searchByValue);Xg.exports={authHeaderToUser:f$,isEmpty:S$,getNodeRecord:T$,upsertNodeRecord:m$,buildNodePayloads:R$,checkClusteringEnabled:A$,getAllNodeRecords:p$,getSystemInfo:g$,reverseSubscription:Jg};async function f$(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await E$(t,null),e}a(f$,"authHeaderToUser");function S$(e){return e==null}a(S$,"isEmpty");async function T$(e){let t=new t$(Us.SYSTEM_SCHEMA_NAME,Us.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return d$(t)}a(T$,"getNodeRecord");async function m$(e){let t=new r$(Us.SYSTEM_SCHEMA_NAME,Us.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return jk.upsert(t)}a(m$,"upsertNodeRecord");function Jg(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(Jg,"reverseSubscription");function R$(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}=Jg(c),h=new n$(_,u,l,d,E,c.start_time);n.push(h)}return new s$(r,t,n,s)}a(R$,"buildNodePayloads");function A$(){if(!Wg.get(Us.CONFIG_PARAMS.CLUSTERING_ENABLED))throw i$(new Error,c$.CLUSTERING_NOT_ENABLED,o$.BAD_REQUEST,void 0,void 0,!0)}a(A$,"checkClusteringEnabled");async function p$(){let e=new _$(Us.SYSTEM_SCHEMA_NAME,Us.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await h$(e))}a(p$,"getAllNodeRecords");async function g$(){let e=await u$.getSystemInformation();return{hdb_version:l$.version(),node_version:e.node_version,platform:e.platform}}a(g$,"getSystemInfo")});var ZE=f((A5,rN)=>{"use strict";var XE=be(),Zg=b(),zg=oe(),N$=m(),Yc=I(),jg=Nc(),O$=Hl(),{RemotePayloadObject:I$}=ki(),{handleHDBError:eN,hdb_errors:b$}=y(),{HTTP_STATUS_CODES:tN}=b$,{NodeSubscription:w$}=On();rN.exports=C$;async function C$(e,t){let r;try{r=await XE.request(`${t}.${zg.REQUEST_SUFFIX}`,new I$(N$.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 eN(new Error,c,tN.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===zg.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw eN(new Error,o,tN.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:_}=o,u=Zg.doesSchemaExist(c),l=s[c]!==void 0,E=Zg.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 jg.createSchema({operation:"create_schema",schema:c})),!E&&d){Yc.trace(`addNode creating table: ${_} in schema: ${c}`);let T=new O$(c,_,s[c][_].hash_attribute);await jg.createTable(T)}await XE.createLocalTableStream(c,_);let h=new w$(c,_,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h)}return{added:i,skipped:n}}a(C$,"reviewSubscriptions")});var Qc=f((g5,iN)=>{"use strict";var{handleHDBError:Kc,hdb_errors:y$}=y(),{HTTP_STATUS_CODES:Wc}=y$,{addUpdateNodeValidator:L$}=yc(),$i=I(),nN=m(),sN=oe(),U$=b(),zE=be(),Yi=Rr(),M$=B(),D$=ZE(),{Node:P$,NodeSubscription:B$}=On(),v$="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",H$="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",q$=M$.get(nN.CONFIG_PARAMS.CLUSTERING_NODENAME);iN.exports=G$;async function G$(e,t=!1){$i.trace("addNode called with:",e),Yi.checkClusteringEnabled();let r=L$(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(!U$.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 D$(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=v$,o;let c=Yi.buildNodePayloads(n,q$,nN.OPERATIONS_ENUM.ADD_NODE,await Yi.getSystemInfo());$i.trace("addNode sending remote payload:",c);let _;try{_=await zE.request(`${s}.${sN.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===sN.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 B$(h.schema,h.table,h.publish,h.subscribe))}let l=new P$(s,u,_.system_info);return await Yi.upsertNodeRecord(l),i.length>0?o.message=H$:o.message=`Successfully added '${s}' to manifest`,o}a(G$,"addNode")});var ed=f((O5,cN)=>{"use strict";var{handleHDBError:Jc,hdb_errors:F$}=y(),{HTTP_STATUS_CODES:Xc}=F$,{addUpdateNodeValidator:x$}=yc(),Ki=I(),oN=m(),aN=oe(),V$=b(),jE=be(),Wi=Rr(),k$=B(),{cloneDeep:$$}=require("lodash"),Y$=ZE(),{NodeSubscription:K$}=On(),W$="Unable to update 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",J$=k$.get(oN.CONFIG_PARAMS.CLUSTERING_NODENAME);cN.exports=X$;async function X$(e){Ki.trace("updateNode called with:",e),Wi.checkClusteringEnabled();let t=x$(e);if(t)throw Jc(t,t.message,Xc.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=$$(await Wi.getNodeRecord(r));if(V$.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 Y$(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=W$,o;let c=Wi.buildNodePayloads(n,J$,oN.OPERATIONS_ENUM.UPDATE_NODE,await Wi.getSystemInfo());Ki.trace("updateNode sending remote payload:",c);let _;try{_=await jE.request(`${r}.${aN.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===aN.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=Q$:o.message=`Successfully updated '${r}'`,o}a(X$,"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 K$(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Wi.upsertNodeRecord(s)}a(Z$,"updateNodeTable")});var dN=f((b5,EN)=>{"use strict";var lN=require("joi"),{string:_N}=lN.types(),z$=te(),uN=m(),j$=B(),eY=oe();EN.exports=tY;function tY(e){let t=_N.invalid(j$.get(uN.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(eY.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=lN.object({operation:_N.valid(uN.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return z$.validateBySchema(e,r)}a(tY,"removeNodeValidator")});var zc=f((C5,RN)=>{"use strict";var{handleHDBError:hN,hdb_errors:rY}=y(),{HTTP_STATUS_CODES:fN}=rY,sY=dN(),Qi=I(),SN=Rr(),nY=b(),Zc=m(),TN=oe(),mN=be(),iY=B(),{RemotePayloadObject:aY}=ki(),{NodeSubscription:oY}=On(),cY=gi(),_Y=Ts(),uY=iY.get(Zc.CONFIG_PARAMS.CLUSTERING_NODENAME);RN.exports=lY;async function lY(e){Qi.trace("removeNode called with:",e),SN.checkClusteringEnabled();let t=sY(e);if(t)throw hN(t,t.message,fN.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await SN.getNodeRecord(r);if(nY.isEmptyOrZeroLength(s))throw hN(new Error,`Node '${r}' was not found.`,fN.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new aY(Zc.OPERATIONS_ENUM.REMOVE_NODE,uY,[]),i,o=!1;try{i=await mN.request(`${r}.${TN.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 oY(l.schema,l.table,!1,!1);await mN.updateWorkStream(E,r)}let c=new cY(Zc.SYSTEM_SCHEMA_NAME,Zc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await _Y.deleteRecord(c),i?.status===TN.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(lY,"removeNode")});var gN=f((L5,pN)=>{"use strict";var AN=require("joi"),{string:EY,array:dY}=AN.types(),hY=te(),fY=yc();pN.exports=SY;function SY(e){let t=AN.object({operation:EY.valid("configure_cluster").required(),connections:dY.items(fY.validation_schema).required()});return hY.validateBySchema(e,t)}a(SY,"configureClusterValidator")});var td=f((M5,wN)=>{"use strict";var TY=m(),jc=I(),mY=b(),RY=zc(),AY=Qc(),NN=Rr(),pY=gN(),{handleHDBError:ON,hdb_errors:gY}=y(),{HTTP_STATUS_CODES:IN}=gY,NY="Configure cluster complete.",OY="Failed to configure the cluster. Check the logs for more details.",IY="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";wN.exports=bY;async function bY(e){jc.trace("configure cluster called with:",e),NN.checkClusteringEnabled();let t=pY(e);if(t)throw ON(t,t.message,IN.BAD_REQUEST,void 0,void 0,!0);let r=await NN.getAllNodeRecords(),s=[];for(let d=0,h=r.length;d<h;d++)s.push(bN(RY,{operation:TY.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(bN(AY,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(mY.isEmptyOrZeroLength(_))return{message:NY,connections:u};if(l)return{message:IY,failed_nodes:_,connections:u};throw ON(new Error,OY,IN.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(bY,"configureCluster");async function bN(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(bN,"functionWrapper")});var yN=f((P5,CN)=>{"use strict";var e_=require("joi"),wY=te(),{validateSchemaExists:CY,validateTableExists:yY,validateSchemaName:LY}=Wt(),UY=e_.object({operation:e_.string().valid("purge_stream"),schema:e_.string().custom(CY).custom(LY).required(),table:e_.string().custom(yY).required()});function MY(e){return wY.validateBySchema(e,UY)}a(MY,"purgeStreamValidator");CN.exports=MY});var rd=f((v5,LN)=>{"use strict";var{handleHDBError:DY,hdb_errors:PY}=y(),{HTTP_STATUS_CODES:BY}=PY,vY=yN(),HY=be(),qY=Rr();LN.exports=GY;async function GY(e){let t=vY(e);if(t)throw DY(t,t.message,BY.BAD_REQUEST,void 0,void 0,!0);qY.checkClusteringEnabled();let{schema:r,table:s}=e;return await HY.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(GY,"purgeStream")});var id=f((q5,vN)=>{"use strict";var nd=Rr(),FY=be(),DN=B(),t_=m(),Ms=oe(),xY=b(),sd=I(),{RemotePayloadObject:VY}=ki(),{ErrorCode:UN}=require("nats"),MN=DN.get(t_.CONFIG_PARAMS.CLUSTERING_ENABLED),PN=DN.get(t_.CONFIG_PARAMS.CLUSTERING_NODENAME);vN.exports={clusterStatus:kY,buildNodeStatus:BN};async function kY(){let e={node_name:PN,is_enabled:MN,connections:[]};if(!MN)return e;let t=await nd.getAllNodeRecords();if(xY.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(BN(t[s],e.connections));return await Promise.allSettled(r),e}a(kY,"clusterStatus");async function BN(e,t){let r=e.name,s=new VY(t_.OPERATIONS_ENUM.CLUSTER_STATUS,PN,void 0,await nd.getSystemInfo()),n,i,o=Ms.CLUSTER_STATUS_STATUSES.OPEN;try{let _=Date.now();n=await FY.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===UN.NoResponders?o=Ms.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:_.code===UN.Timeout?o=Ms.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Ms.CLUSTER_STATUS_STATUSES.CLOSED}let c=new $Y(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(BN,"buildNodeStatus");function $Y(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($Y,"NodeStatusObject")});var od=f((F5,HN)=>{"use strict";var{handleHDBError:YY,hdb_errors:KY}=y(),{HTTP_STATUS_CODES:WY}=KY,QY=be(),JY=Rr(),ad=b(),r_=require("joi"),XY=te(),ZY=2e3,zY=r_.object({timeout:r_.number().min(1),connected_nodes:r_.boolean(),routes:r_.boolean()});HN.exports=jY;async function jY(e){JY.checkClusteringEnabled();let t=XY.validateBySchema(e,zY);if(t)throw YY(t,t.message,WY.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 QY.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(jY,"clusterNetwork")});var xN=f((V5,FN)=>{"use strict";var cd=require("joi"),qN=te(),{route_constraints:GN}=yu();FN.exports={setRoutesValidator:eK,deleteRoutesValidator:tK};function eK(e){let t=cd.object({server:cd.valid("hub","leaf").required(),routes:GN.required()});return qN.validateBySchema(e,t)}a(eK,"setRoutesValidator");function tK(e){let t=cd.object({routes:GN.required()});return qN.validateBySchema(e,t)}a(tK,"deleteRoutesValidator")});var ud=f(($5,YN)=>{"use strict";var Ds=lr(),_d=b(),s_=m(),VN=xN(),{handleHDBError:kN,hdb_errors:rK}=y(),{HTTP_STATUS_CODES:$N}=rK,sK="cluster routes successfully set",nK="cluster routes successfully deleted";YN.exports={setRoutes:iK,getRoutes:aK,deleteRoutes:oK};function iK(e){let t=VN.setRoutesValidator(e);if(t)throw kN(t,t.message,$N.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:sK,set:o,skipped:i}}a(iK,"setRoutes");function aK(){let e=Ds.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(aK,"getRoutes");function oK(e){let t=VN.deleteRoutesValidator(e);if(t)throw kN(t,t.message,$N.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:nK,deleted:i,skipped:o}}a(oK,"deleteRoutes")});var WN=f((K5,KN)=>{"use strict";var Ji=require("alasql"),Ps=require("recursive-iterator"),Ft=I(),cK=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,uK(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=_K(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 _K(e){return e.filter(t=>t[Xi.PERMS_CRUD_ENUM.READ])}a(_K,"filterReadRestrictedAttrs");function uK(e,t,r,s,n){lK(e,t,r,s,n)}a(uK,"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 lK(e,t,r,s,n){if(!e){Ft.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Ji.yy.Insert?fK(e,t,r):e instanceof Ji.yy.Select?EK(e,t,r,s,n):e instanceof Ji.yy.Update?dK(e,t,r):e instanceof Ji.yy.Delete?hK(e,t,r):Ft.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(lK,"getRecordAttributesAST");function EK(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(cK.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(EK,"getSelectAttributes");function dK(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(dK,"getUpdateAttributes");function hK(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(hK,"getDeleteAttributes");function fK(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(fK,"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");KN.exports=n_});var XN=f((Q5,JN)=>{var SK=require("os"),QN=B();JN.exports={checkPermission:TK};function TK(){if(SK.userInfo().username!==QN.get("install_user"))throw new Error(`Error: Must execute as ${QN.get("install_user")}`)}a(TK,"checkPermission")});var dd=f((X5,tO)=>{var a_=tn(),ZN=require("chalk"),er=I(),zN=XN(),jN=require("prompt"),{promisify:mK}=require("util"),i_=m(),RK=require("fs-extra"),AK=require("path"),pK=b(),gK=WE(),eO=B();eO.initSync();var NK=require("moment"),OK=mK(jN.get),IK=AK.join(eO.getHdbBasePath(),i_.LICENSE_KEY_DIR_NAME,i_.LICENSE_FILE_NAME,i_.LICENSE_FILE_NAME);tO.exports={getFingerprint:wK,setLicense:bK,parseLicense:Ed,register:CK,getRegistrationInfo:LK};async function bK(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(bK,"setLicense");async function wK(){try{zN.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(wK,"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 RK.writeFile(IK,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 CK(){let e=await yK();return Ed(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(CK,"register");async function yK(){try{zN.checkPermission()}catch(s){return console.error(s.message)}let e=await a_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:ZN.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:ZN.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{jN.start()}catch(s){er.error(s)}let r;try{r=await OK(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(yK,"promptForRegistration");async function LK(){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(pK.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=gK.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=NK.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(LK,"getRegistrationInfo")});var sO=f((z5,rO)=>{"use strict";var UK=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+UK.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");rO.exports=o_});var aO=f((ej,iO)=>{"use strict";var nO=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+nO.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+nO.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");iO.exports=c_});var cO=f((rj,oO)=>{"use strict";var __=class{constructor(t,r){this.user=t,this.password=r}};a(__,"HdbUserObject");oO.exports=__});var uO=f((nj,_O)=>{"use strict";var MK=oe(),u_=class{constructor(t,r){this.user=t+MK.SERVER_SUFFIX.ADMIN,this.password=r}};a(u_,"SysUserObject");_O.exports=u_});var Sd=f((aj,dO)=>{"use strict";var zi=require("path"),h_=require("fs-extra"),DK=sO(),PK=aO(),BK=cO(),vK=uO(),hd=Vr(),wn=b(),ze=lr(),d_=m(),l_=oe(),{CONFIG_PARAMS:de}=d_,ea=I(),f_=B(),lO=xr(),fd=be(),ji="clustering",HK=1e4,EO=5;dO.exports={generateNatsConfig:qK,removeNatsConfig:GK};async function qK(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 vK(wr.username,lO.decrypt(wr.hash))),q.push(new BK(wr.username,lO.decrypt(wr.hash))));let Le=[],{hub_routes:U}=ze.getClusteringRoutes();if(!wn.isEmptyOrZeroLength(U))for(let as of U)Le.push(`tls://${H.sys_name_encoded}:${H.uri_encoded_d_hash}@${as.host}:${as.port}`);let $=new DK(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),Le,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}`,ie=`tls://${H.uri_encoded_name}:${H.uri_encoded_d_hash}@0.0.0.0:${T}`,qn=new PK(ze.getConfigFromFile(de.CLUSTERING_LEAFSERVER_NETWORK_PORT),h,n,i,[ue],[ie],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(qK,"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 GK(e){let{port:t,config_file:r}=fd.getServerConfig(e),{username:s,decrypt_hash:n}=await hd.getClusterUser(),i=0,o=500;for(;i<EO;){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>=EO)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(HK),_=zi.join(f_.get(de.ROOTPATH),ji,r);await h_.writeFile(_,c),await h_.remove(_),ea.notify(e,"started.")}a(GK,"removeNatsConfig")});var RO=f((cj,mO)=>{"use strict";var ht=B(),FK=tn(),F=m(),ta=oe(),Ar=require("path"),{PACKAGE_ROOT:T_}=m(),hO=B(),Cn="/dev/null",xK=Ar.join(T_,"launchServiceScripts"),fO=Ar.join(T_,"utility/scripts"),VK=Ar.join(fO,F.HDB_RESTART_SCRIPT),SO=Ar.resolve(T_,"dependencies",`${process.platform}-${process.arch}`,ta.NATS_BINARY_NAME);function TO(){let t=FK.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(TO,"generateMainServerConfig");var kK=9930;function $K(){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=hO.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!==kK?"-"+s:""),script:SO,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($K,"generateNatsHubServerConfig");var YK=9940;function KK(){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=hO.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!==YK?"-"+s:""),script:SO,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(KK,"generateNatsLeafServerConfig");function WK(){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:xK,autorestart:!1};return ht.get(F.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Cn,t.error_file=Cn),t}a(WK,"generateClusteringUpgradeV4ServiceConfig");function QK(){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:fO},script:VK}}a(QK,"generateRestart");function JK(){return{apps:[TO()]}}a(JK,"generateAllServiceConfigs");mO.exports={generateAllServiceConfigs:JK,generateMainServerConfig:TO,generateRestart:QK,generateNatsHubServerConfig:$K,generateNatsLeafServerConfig:KK,generateClusteringUpgradeV4ServiceConfig:WK}});var PO=f((Sj,DO)=>{"use strict";var Y=m(),pO=b(),ra=Sd(),m_=be(),tr=oe(),K=require("pm2"),es=RO(),R_=B(),pr=I(),XK=Rr(),{startWorker:Td,onMessageFromWorkers:ZK}=hs(),uj=bn(),zK=require("util"),gO=require("child_process"),{execFile:jK}=gO,lj=zK.promisify(gO.exec),Ej=require("systeminformation");DO.exports={enterPM2Mode:eW,start:Bs,stop:md,reload:NO,restart:OO,list:Rd,describe:Ad,connect:gr,kill:iW,startAllServices:aW,startService:pd,getUniqueServicesList:bO,restartAllServices:oW,isServiceRegistered:wO,reloadStopStart:CO,restartHdb:IO,deleteProcess:sW,startClusteringProcesses:UO,startClusteringThreads:MO,isHdbRestartRunning:nW,isClusteringRunning:_W,stopClustering:cW,reloadClustering:uW};var{PACKAGE_ROOT:dj}=m(),hj=m(),{loggerWithTag:fj}=pr,sa=!1;ZK(e=>{e.type==="restart"&&R_.initSync(!0)});function eW(){sa=!0}a(eW,"enterPM2Mode");function gr(){return new Promise((e,t)=>{K.connect((r,s)=>{pr.setupConsoleLogging(),r&&t(r),e(s)})})}a(gr,"connect");var je,tW=10,AO;function Bs(e){if(sa)return rW(e);let t=jK(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),!AO&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<tW&&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(()=>{AO=!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 rW(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(rW,"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 NO(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(NO,"reload");function OO(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(OO,"restart");function sW(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(sW,"deleteProcess");async function IO(){await Bs(es.generateRestart())}a(IO,"restartHdb");async function nW(){let e=await Rd();for(let t in e)if(e[t].name===Y.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(nW,"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 iW(){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(iW,"kill");async function aW(){try{await UO(),await MO(),await Bs(es.generateAllServiceConfigs())}catch(e){throw K.disconnect(),e}}a(aW,"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 bO(){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(bO,"getUniqueServicesList");async function oW(e=[]){try{let t=!1,r=await bO();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 OO(o))}t&&await CO(Y.PROCESS_DESCRIPTORS.HDB)}catch(t){throw K.disconnect(),t}}a(oW,"restartAllServices");async function wO(e){return je?.find(t=>t.name===e)?!0:!pO.isEmptyOrZeroLength(await Ad(e))}a(wO,"isServiceRegistered");async function CO(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=pO.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await md(e),await pd(e)):e===Y.PROCESS_DESCRIPTORS.HDB?await IO():await NO(e)}a(CO,"reloadStopStart");var yO,LO;async function UO(){for(let e in Y.CLUSTERING_PROCESSES){let t=Y.CLUSTERING_PROCESSES[e];await pd(t)}}a(UO,"startClusteringProcesses");async function MO(){yO=Td(Y.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,{name:Y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE}),LO=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 XK.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(MO,"startClusteringThreads");async function cW(){for(let e in Y.CLUSTERING_PROCESSES)if(e===Y.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)await yO.terminate();else if(e===Y.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await LO.terminate();else{let t=Y.CLUSTERING_PROCESSES[e];await md(t)}}a(cW,"stopClustering");async function _W(){for(let e in Y.CLUSTERING_PROCESSES){let t=Y.CLUSTERING_PROCESSES[e];if(await wO(t)===!1)return!1}return!0}a(_W,"isClusteringRunning");async function uW(){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(uW,"reloadClustering")});var Cd=f((mj,FO)=>{"use strict";var lW=require("minimist"),{isMainThread:Od,parentPort:HO}=require("worker_threads"),re=m(),{PROCESS_DESCRIPTORS_VALIDATE:na}=re,rr=I(),Id=b(),A_=Sd(),yn=be(),gd=oe(),qO=lr(),sr=PO(),BO=bn(),EW=fu(),{restartWorkers:p_,onMessageFromWorkers:dW}=hs(),{handleHDBError:hW,hdb_errors:fW}=y(),{HTTP_STATUS_CODES:SW}=fW,g_=B();g_.initSync();var ia=`Restarting HarperDB. This may take up to ${re.RESTART_TIMEOUT_MS/1e3} seconds.`,TW="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",vO="Clustering is not enabled so cannot be restarted",mW="Invalid service",vs,xt;FO.exports={restart:GO,restartService:bd};Od&&dW(e=>{e.type===re.ITC_EVENT_TYPES.RESTART&&(e.workerType?bd({service:e.workerType}):GO({operation:"restart"}))});async function GO(e){xt=Object.keys(e).length===0,vs=await sr.isServiceRegistered(re.HDB_PROC_DESCRIPTOR);let t=lW(process.argv);if(t.service){await bd(t);return}if(xt&&!vs){console.error(TW);return}if(xt&&console.log(ia),vs){sr.enterPM2Mode(),rr.notify(ia);let r=EW(Object.keys(re.CONFIG_PARAM_MAP),!0);return Id.isEmptyOrZeroLength(Object.keys(r))||qO.updateConfigValue(void 0,void 0,r,!0,!0),AW(),ia}return Od?(rr.notify(ia),await wd(),setTimeout(()=>{p_()},50)):HO.postMessage({type:re.ITC_EVENT_TYPES.RESTART}),ia}a(GO,"restart");async function bd(e){let{service:t}=e;if(re.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw hW(new Error,mW,SW.BAD_REQUEST,void 0,void 0,!0);if(vs=await sr.isServiceRegistered(re.HDB_PROC_DESCRIPTOR),!Od)return HO.postMessage({type:re.ITC_EVENT_TYPES.RESTART,workerType:t}),`Restarting ${t}`;let r;switch(t){case na.clustering:if(!g_.get(re.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=vO;break}xt&&console.log("Restarting clustering"),rr.notify("Restarting clustering"),await wd();break;case na.clustering_config:case na["clustering config"]:if(!g_.get(re.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=vO;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(re.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 RW(){await yn.publishToStream(`${gd.SUBJECT_PREFIXES.TXN}.${gd.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,gd.WORK_QUEUE_CONSUMER_NAMES.stream_name,yn.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(RW,"postDummyNatsMsg");async function AW(){await wd(),await sr.restart(re.HDB_PROC_DESCRIPTOR),await Id.async_set_timeout(2e3),g_.get(re.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await Nd(),xt&&(await yn.closeConnection(),process.exit(0))}a(AW,"restartPM2Mode");async function wd(){if(!qO.getConfigFromFile(re.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await BO.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 yn.closeConnection();else{await RW(),await A_.generateNatsConfig(!0),vs?(rr.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await sr.restart(re.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await sr.restart(re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await BO.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 yn.updateLocalStreams(),xt&&await yn.closeConnection(),rr.trace("Restart clustering restarting ingest and reply service threads");let t=p_(re.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=p_(re.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(wd,"restartClustering");async function Nd(){await A_.removeNatsConfig(re.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await A_.removeNatsConfig(re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(Nd,"removeNatsConfig")});var ZO=f((pj,XO)=>{"use strict";var Aj=require("lodash"),qe=m(),{handleHDBError:xO,hdb_errors:pW}=y(),{HDB_ERROR_MSGS:gW,HTTP_STATUS_CODES:NW}=pW,yd=I();XO.exports={getRolePermissions:IW};var Hs=Object.create(null),OW=a(e=>({key:e,perms:{}}),"perms_template_obj"),YO=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),KO=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"),Ld=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...KO(t,r,s,n)}),"table_perms_template"),VO=a((e,t=KO())=>({attribute_name:e,describe:JO(t),[aa]:t[aa],[Ud]:t[Ud],[Md]:t[Md]}),"attr_perms_template"),kO=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,WO=Object.values(qe.PERMS_CRUD_ENUM),QO=[aa,Ud,Md];function IW(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=bW(e,r);return Hs[t]?Hs[t].key=s:Hs[t]=OW(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),xO(new Error,gW.OUTDATED_PERMS_TRANSLATION_ERROR,NW.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
8
- ${r.stack}`;throw yd.error(s),xO(new Error)}}}a(IW,"getRolePermissions");function bW(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]=wW(t[i]);return}r[i]=YO(),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=CW(c,_);r[i].describe||WO.forEach(l=>{u[l]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=Ld()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=Ld()})}),r}a(bW,"translateRolePermissions");function wW(e){let t=YO(!0);return Object.keys(e).forEach(r=>{t.tables[r]=Ld(!0,!0,!0,!0,!0)}),t}a(wW,"createStructureUserPermissions");function CW(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=kO(E,l[aa])),u[E]=d,u},{}),o=t[qe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_HASH_ATTRIBUTE_KEY],c=!!i[o],_=VO(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let l=i[u];l.describe=JO(l),n.attribute_permissions.push(l),c||yW(l,_)}else if(u!==o){let l;qe.TIME_STAMP_NAMES.includes(u)?l=kO(u):l=VO(u),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(_),n.describe=$O(n),n}else return e.describe=$O(e),e}a(CW,"getTableAttrPerms");function $O(e){return WO.filter(t=>e[t]).length>0}a($O,"getSchemaTableDescribePerm");function JO(e){return QO.filter(t=>e[t]).length>0}a(JO,"getAttributeDescribePerm");function yW(e,t){QO.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(yW,"checkForHashPerms")});var nI=f((Nj,sI)=>{"use strict";var he=require("joi"),zO=require("fs-extra"),jO=require("path"),Ln=te(),eI=B(),tI=m(),rI=I(),{hdb_errors:LW}=y(),{HDB_ERROR_MSGS:et}=LW,ts=/^[a-zA-Z0-9-_]+$/;sI.exports={getDropCustomFunctionValidator:MW,setCustomFunctionValidator:DW,addCustomFunctionProjectValidator:PW,dropCustomFunctionProjectValidator:BW,packageCustomFunctionProjectValidator:vW,deployCustomFunctionProjectValidator:HW};function oa(e,t,r){try{let s=eI.get(tI.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=jO.join(s,t);return zO.existsSync(n)?e?t:r.message(et.PROJECT_EXISTS):e?r.message(et.NO_PROJECT):t}catch(s){return rI.error(s),r.message(et.VALIDATION_ERR)}}a(oa,"checkProjectExists");function UW(e,t,r,s){try{let n=eI.get(tI.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=jO.join(n,e,t,r+".js");return zO.existsSync(i)?r:s.message(et.NO_FILE)}catch(n){return rI.error(n),s.message(et.VALIDATION_ERR)}}a(UW,"checkFileExists");function MW(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(UW.bind(null,e.project,e.type)).required().messages({"string.pattern.base":et.BAD_FILE_NAME})});return Ln.validateBySchema(e,t)}a(MW,"getDropCustomFunctionValidator");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).required().messages({"string.pattern.base":et.BAD_FILE_NAME}),function_content:he.string().required()});return Ln.validateBySchema(e,t)}a(DW,"setCustomFunctionValidator");function PW(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 Ln.validateBySchema(e,t)}a(PW,"addCustomFunctionProjectValidator");function BW(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 Ln.validateBySchema(e,t)}a(BW,"dropCustomFunctionProjectValidator");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}),skip_node_modules:he.boolean()});return Ln.validateBySchema(e,t)}a(vW,"packageCustomFunctionProjectValidator");function HW(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 Ln.validateBySchema(e,t)}a(HW,"deployCustomFunctionProjectValidator")});var Hd=f((Ij,oI)=>{"use strict";var we=require("fs-extra"),Dd=require("fast-glob"),ee=require("path"),iI=require("tar-fs"),aI=require("uuid").v4,Pd=require("normalize-path"),qs=nI(),pe=I(),ft=m(),St=B(),{PACKAGE_ROOT:qW}=m(),{handleHDBError:Ge,hdb_errors:GW}=y(),{HDB_ERROR_MSGS:rs,HTTP_STATUS_CODES:Fe}=GW,FW=ee.join(qW,"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 xW(){pe.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,pe.ERR,t)}return e}a(xW,"customFunctionsStatus");function VW(){pe.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,pe.ERR,r)}return e}a(VW,"getCustomFunctions");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);pe.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,pe.ERR,c)}}a(kW,"getCustomFunction");function $W(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);pe.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,pe.ERR,c)}}a($W,"setCustomFunction");function YW(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);pe.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,pe.ERR,o)}}a(YW,"dropCustomFunction");function KW(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);pe.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(FW,n),`Successfully created custom function project: ${s}`}catch(n){throw Ge(new Error,rs.ADD_FUNCTION,Fe.INTERNAL_SERVER_ERROR,pe.ERR,n)}}a(KW,"addCustomFunctionProject");function WW(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);pe.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,pe.ERR,n)}}a(WW,"dropCustomFunctionProject");async function QW(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);pe.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=aI();if(!we.existsSync(n)){let l=`Unable to locate custom function project: ${s}`;throw pe.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"))}),iI.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(QW,"packageCustomFunctionProject");async function JW(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);pe.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,aI()+".tar"),c=await we.pathExists(o);while(c);await we.outputFile(o,n,{encoding:"base64"});let _=we.createReadStream(o);return _.pipe(iI.extract(i)),await new Promise(u=>_.on("end",u)),await we.unlink(o),`Successfully deployed project: ${s}`}a(JW,"deployCustomFunctionProject");oI.exports={customFunctionsStatus:xW,getCustomFunctions:VW,getCustomFunction:kW,setCustomFunction:$W,dropCustomFunction:YW,addCustomFunctionProject:KW,dropCustomFunctionProject:WW,packageCustomFunctionProject:QW,deployCustomFunctionProject:JW}});var qd=f((wj,_I)=>{"use strict";var nr=require("joi"),cI=te();_I.exports={readTransactionLogValidator:XW,deleteTransactionLogsBeforeValidator:ZW};function XW(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 cI.validateBySchema(e,t)}a(XW,"readTransactionLogValidator");function ZW(e){let t=nr.object({schema:nr.string().required(),table:nr.string().required(),timestamp:nr.date().timestamp().required()});return cI.validateBySchema(e,t)}a(ZW,"deleteTransactionLogsBeforeValidator")});var O_=f((yj,hI)=>{"use strict";var Gd=m(),N_=be(),uI=b(),lI=B(),EI=xr(),{handleHDBError:Un,hdb_errors:zW}=y(),{HTTP_STATUS_CODES:Mn}=zW,{readTransactionLogValidator:jW,deleteTransactionLogsBeforeValidator:eQ}=qd(),dI="This operation relies on clustering and cannot run with it disable.",tQ="Logs successfully deleted from transaction log.",rQ="All logs successfully deleted from transaction log.";hI.exports={readTransactionLog:sQ,deleteTransactionLogsBefore:nQ};async function*sQ(e){let t=jW(e);if(t)throw Un(t,t.message,Mn.BAD_REQUEST,void 0,void 0,!0);if(!lI.get(Gd.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Un(new Error,dI,Mn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=uI.checkSchemaTableExist(r,s);if(n)throw Un(new Error,n,Mn.NOT_FOUND,void 0,void 0,!0);let i=EI.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(sQ,"readTransactionLog");async function nQ(e){let t=eQ(e);if(t)throw Un(t,t.message,Mn.BAD_REQUEST,void 0,void 0,!0);if(!lI.get(Gd.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Un(new Error,dI,Mn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=uI.checkSchemaTableExist(r,s);if(i)throw Un(new Error,i,Mn.NOT_FOUND,void 0,void 0,!0);let o=EI.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=tQ,E,d=new Date(_.state.last_ts).getTime();return n>d?(E=_.state.last_seq+1,l=rQ):E=(await N_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:E}),l}a(nQ,"deleteTransactionLogsBefore")});var xd=f((Uj,OI)=>{"use strict";var I_=require("joi"),b_=require("path"),fI=require("fs-extra"),{exec:iQ}=require("child_process"),aQ=require("util"),SI=aQ.promisify(iQ),oQ=m(),{handleHDBError:Dn,hdb_errors:cQ}=y(),{HTTP_STATUS_CODES:Pn}=cQ,TI=B(),_Q=te(),w_=I();TI.initSync();var Fd=TI.get(oQ.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),mI="npm install --omit=dev --json",uQ=`${mI} --dry-run`;OI.exports={installModules:lQ,auditModules:EQ};async function RI(e,t=void 0){let{stdout:r,stderr:s}=await SI(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(RI,"runCommand");async function lQ(e){w_.info(`starting installModules for request: ${e}`);let t=NI(e);if(t)throw Dn(t,t.message,Pn.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?uQ:mI;await pI(),await gI(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(Fd,_),l,E=null;try{let{stdout:d,stderr:h}=await SI(n,{cwd:u});l=d?d.replace(`
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=AI(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(lQ,"installModules");function AI(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(AI,"parseNPMStdErr");async function EQ(e){w_.info(`starting auditModules for request: ${e}`);let t=NI(e);if(t)throw Dn(t,t.message,Pn.BAD_REQUEST);let{projects:r}=e;await pI(),await gI(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 RI("npm audit --json",c);s[o].npm_output=JSON.parse(_)}catch(_){s[o].npm_error=AI(_.stderr)}}return w_.info(`finished auditModules with response ${s}`),s}a(EQ,"auditModules");async function pI(){try{return await RI("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(pI,"checkNPMInstalled");async function gI(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 fI.pathExists(o)){t.push(i);continue}let _=b_.join(o,"package.json");await fI.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(gI,"checkProjectPaths");function NI(e){let t=I_.object({projects:I_.array().min(1).items(I_.string()).required(),dry_run:I_.boolean().default(!1)});return _Q.validateBySchema(e,t)}a(NI,"modulesValidator")});var bI=f((Dj,II)=>{"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");II.exports=C_});var CI=f((Bj,wI)=>{"use strict";var y_=class{constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};a(y_,"PermissionAttributeResponseObject");wI.exports=y_});var Vd=f((Hj,LI)=>{"use strict";var yI=bI(),dQ=CI(),{HDB_ERROR_MSGS:hQ}=it(),L_=class{constructor(){this.error=hQ.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 yI(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let _=new dQ(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 yI(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(L_,"PermissionResponseObject");LI.exports=L_});var P_=f((Gj,YI)=>{"use strict";var kd=Ot(),U_=It(),Ct=Nc(),ua=Rs(),$d=Ts(),fQ=mE(),la=Vr(),M_=wE(),me=I(),SQ=LE(),TQ=Qc(),mQ=ed(),RQ=zc(),AQ=td(),pQ=rd(),gQ=id(),NQ=od(),Yd=ud(),Nr=b(),OQ=WN(),Kd=dd(),DI=Cd(),wt=m(),PI=ZO(),IQ=bn(),BI=vc(),vI=lr(),Or=Hd(),bQ=require("alasql"),HI=O_(),qI=xd(),GI=Vd(),{handleHDBError:tt,hdb_errors:FI}=y(),{HDB_ERROR_MSGS:Ce,HTTP_STATUS_CODES:ca}=FI,p=new Map,xI="delete",ss="insert",ns="read",Gs="update",_a="describe",UI=ua.describeSchema.name,MI=ua.describeTable.name,VI={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},wQ="catchup",CQ="handleGetJob",yQ="handleGetJobsByStartDate",D_={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},LQ=[Ct.createTable.name,Ct.createAttribute.name,Ct.dropTable.name,Ct.dropAttribute.name],kI={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,[xI]));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(SQ.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(Yd.setRoutes.name,new N(!0,[]));p.set(Yd.getRoutes.name,new N(!0,[]));p.set(Yd.deleteRoutes.name,new N(!0,[]));p.set(vI.setConfiguration.name,new N(!0,[]));p.set(gQ.clusterStatus.name,new N(!0,[]));p.set(NQ.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(DI.restart.name,new N(!0,[]));p.set(DI.restartService.name,new N(!0,[]));p.set(fQ.name,new N(!0,[]));p.set(IQ.systemInformation.name,new N(!0,[]));p.set(vI.getConfiguration.name,new N(!0,[]));p.set(HI.readTransactionLog.name,new N(!0,[]));p.set(HI.deleteTransactionLogsBefore.name,new N(!0,[]));p.set(qI.installModules.name,new N(!0,[]));p.set(qI.auditModules.name,new N(!0,[]));p.set(BI.createTokens.name,new N(!1,[]));p.set(BI.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(CQ,new N(!1,[]));p.set(yQ,new N(!0,[]));p.set(wQ,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(kI.EXPORT_TO_S3,new N(!0,[]));p.set(kI.EXPORT_LOCAL,new N(!0,[]));p.set(wt.VALID_SQL_OPS_ENUM.DELETE,new N(!1,[xI]));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]));YI.exports={verifyPerms:MQ,verifyPermsAst:UQ,verifyBulkLoadAttributePerms:PQ};function UQ(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 GI,n=new OQ(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(_&&VI[r])throw tt(new Error,Ce.DROP_SYSTEM,ca.FORBIDDEN);if(c&&!_)return null;let u=PI.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof bQ.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=$I(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(UQ,"verifyPermsAst");function MQ(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 GI;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&&VI[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(LQ.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=PI.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=E,r===UI||r===MI){if(n===wt.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ce.SCHEMA_PERM_ERROR(n));if(!E.super_user){if(r===UI&&(!E[n]||!E[n][_a]))return c.handleInvalidItem(Ce.SCHEMA_NOT_FOUND(n));if(r===MI&&(!E[n]||!E[n].tables[i]||!E[n].tables[i][_a]))return c.handleInvalidItem(Ce.TABLE_NOT_FOUND(n,i))}}let d=$I(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=DQ(e),T=Qd(e.hdb_user.role.permission,n,i);return Wd(h,T,r,i,n,c,s),c.getPermsResponse()}a(MQ,"verifyPerms");function $I(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(FI.CHECK_LOGS_WRAPPER(h))}}}return r.size<2?s.getPermsResponse():null}a($I,"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 DQ(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(DQ,"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 PQ(e,t,r,s,n,i,o){let c=new Set(i),_=Qd(e,s,n);Wd(c,_,t,n,s,o,r)}a(PQ,"verifyBulkLoadAttributePerms")});var v_=f((xj,XI)=>{"use strict";XI.exports={evaluateSQL:JQ,processAST:JI,convertSQLToAST:QI,checkASTPermissions:WI};var KI=Ot(),Zd=require("util"),BQ=Zd.callbackify(KI.insert),vQ=It().search,HQ=Hp().update,qQ=Zd.callbackify(HQ),GQ=Gp().convertDelete,is=require("alasql"),FQ=P_(),da=I(),xQ=uc(),VQ=b(),Ea=m(),{hdb_errors:kQ,handleHDBError:Jd}=y(),{HTTP_STATUS_CODES:Xd}=kQ,$Q=Tn();function YQ(e,t){return Promise.all([$Q.postOperationHandler(e,t,void 0),KI.flush(e)])}a(YQ,"postWrite");var KQ=Zd.callbackify(YQ);xQ(is);var WQ=403,QQ="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=QI(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)&&VQ.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 WI(e,t){let r;try{r=FQ.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(WI,"checkASTPermissions");function QI(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(QI,"convertSQLToAST");function JI(e,t,r){try{let s=XQ;if(!e.bypass_auth&&!t.permissions_checked){let i=WI(e,t);if(i&&i.length>0)return r(WQ,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Ea.VALID_SQL_OPS_ENUM.SELECT:s=vQ,n=t.ast.statements[0];break;case Ea.VALID_SQL_OPS_ENUM.INSERT:s=ZQ;break;case Ea.VALID_SQL_OPS_ENUM.UPDATE:s=qQ;break;case Ea.VALID_SQL_OPS_ENUM.DELETE:s=GQ;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 XQ(e,t){da.info(e),t("unknown sql statement")}a(XQ,"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=zQ(i,e.values)}catch(o){return r(o)}BQ(n,(o,c)=>{if(o)return r(o);KQ(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 zQ(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(QQ)}}a(zQ,"createDataObjects")});var th=f((kj,tb)=>{var V_=require("clone"),k_=te(),jQ=b(),F_=m(),e1=I(),H_=require("fs"),zd=require("joi"),{string:x_}=zd.types(),{hdb_errors:t1,handleHDBError:ha}=y(),{HDB_ERROR_MSGS:r1,HTTP_STATUS_CODES:q_}=t1,{common_validators:G_}=Wt(),ZI=1e9,zI=" is required",s1=["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:s1,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},n1={schema:x_.required(),table:x_.required(),action:x_.valid("insert","update","upsert")},{AWS_ACCESS_KEY:i1,AWS_SECRET:a1,AWS_BUCKET:o1,AWS_FILE_KEY:c1,REGION:_1}=F_.S3_BUCKET_AUTH_KEYS,u1={s3:{presence:!0},[`s3.${i1}`]:{presence:!0,type:"String"},[`s3.${a1}`]:{presence:!0,type:"String"},[`s3.${o1}`]:{presence:!0,type:"String"},[`s3.${c1}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${_1}`]:{presence:!0,type:"String"}},jI=V_(jd);jI.data.presence={message:zI};var eb=V_(jd);eb.file_path.presence={message:zI};var l1=Object.assign(V_(jd),u1),eh=V_(n1);eh.csv_url=x_.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();eh.passthrough_headers=zd.object();function E1(e){let t=k_.validateObject(e,jI);return $_(e,t)}a(E1,"dataObject");function d1(e){let t=k_.validateBySchema(e,zd.object(eh));return $_(e,t)}a(d1,"urlObject");function h1(e){let t=k_.validateObject(e,eb);return $_(e,t)}a(h1,"fileObject");function f1(e){let t=k_.validateObject(e,l1);return $_(e,t)}a(f1,"s3FileObject");function $_(e,t){if(!t){let r=jQ.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>ZI)return ha(new Error,r1.MAX_FILE_SIZE_ERR(s,ZI),q_.BAD_REQUEST)}catch(s){e1.error(s),console.error(s)}}}return t}a($_,"postValidateChecks");tb.exports={dataObject:E1,urlObject:d1,fileObject:h1,s3FileObject:f1}});var K_=f((Yj,rb)=>{"use strict";var fa=I(),Y_=m();async function S1(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(S1,"callOperationFunctionAsAwait");rb.exports={callOperationFunctionAsAwait:S1}});var rh=f((Wj,nb)=>{"use strict";var{S3:T1,GetObjectCommand:m1}=require("@aws-sdk/client-s3");nb.exports={getFileStreamFromS3:R1,getS3AuthObj:sb};async function R1(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await sb(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new m1(r))).Body}a(R1,"getFileStreamFromS3");function sb(e,t,r){return new T1({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(sb,"getS3AuthObj")});var ab=f((Jj,ib)=>{"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");ib.exports={BulkLoadFileObject:W_,BulkLoadDataObject:Q_}});var oh=f((Zj,Nb)=>{"use strict";var J_=Ot(),z_=th(),A1=require("needle"),Tt=m(),p1=oe(),Sa=b(),{handleHDBError:se,hdb_errors:fb}=y(),{HTTP_STATUS_CODES:ye,HDB_ERROR_MSGS:Re,CHECK_LOGS_WRAPPER:Vs}=fb,xs=I(),X_=require("papaparse");Sa.promisifyPapaParse();var Vt=require("fs-extra"),g1=require("path"),{chain:ob}=require("stream-chain"),cb=require("stream-json/streamers/StreamArray"),_b=require("stream-json/utils/Batch"),ub=require("stream-chain/utils/comp"),{finished:lb}=require("stream"),sh=B(),Sb=K_(),N1=rh(),{BulkLoadFileObject:nh,BulkLoadDataObject:O1}=ab(),ih=Vd(),{verifyBulkLoadAttributePerms:Tb}=P_(),I1=uE(),b1=be(),w1=xr(),Eb="No records parsed from csv file.",Fs=`${sh.get("HDB_ROOT")}/tmp`,{schema_regex:C1}=Wt(),db=1024*1024*5,hb=5e3,y1={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};Nb.exports={csvDataLoad:L1,csvURLLoad:U1,csvFileLoad:M1,importFromS3:D1};async function L1(e,t){let r=z_.dataObject(e);if(r)throw se(r,r.message,ye.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&&Tb(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 se(new Error,o,ye.BAD_REQUEST,void 0,void 0,!0);let c=new O1(e.action,e.schema,e.table,n.data);return s=await Sb.callOperationFunctionAsAwait(Ab,c,pb.bind(null,n.meta.fields),t),s.message===Eb?Eb:gb(s.records,s.number_written)}catch(n){throw ks(n)}}a(L1,"csvDataLoad");async function U1(e){let t=z_.urlObject(e);if(t)throw se(t,t.message,ye.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Fs}/${r}`;try{await P1(e,r)}catch(n){throw xs.error(Re.DOWNLOAD_FILE_ERR(r)+" - "+n),se(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(U1,"csvURLLoad");async function M1(e){let t=z_.fileObject(e);if(t)throw se(t,t.message,ye.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(M1,"csvFileLoad");async function D1(e){let t=z_.s3FileObject(e);if(t)throw se(t,t.message,ye.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=g1.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 B1(n,e);let o=await ah(i);return await Z_(r),o}catch(s){throw await Z_(r),ks(s)}}a(D1,"importFromS3");async function P1(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await A1("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 se(s,n,s.statusCode,Tt.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}H1(r,e.csv_url),await v1(t,r.raw)}a(P1,"downloadCSVFile");async function B1(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 N1.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),se(r,Vs(Re.S3_DOWNLOAD_ERR))}}a(B1,"downloadFileFromS3");async function v1(e,t){try{await Vt.mkdirp(Fs),await Vt.writeFile(`${Fs}/${e}`,t)}catch(r){throw xs.error(Re.WRITE_TEMP_FILE_ERR),se(r,Vs(Re.DEFAULT_BULK_LOAD_ERR))}}a(v1,"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 H1(e,t){if(e.statusCode!==fb.HTTP_STATUS_CODES.OK)throw se(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,ye.BAD_REQUEST);if(!y1[e.headers["content-type"]])throw se(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,ye.BAD_REQUEST);if(!e.raw)throw se(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,ye.BAD_REQUEST)}a(H1,"validateURLResponse");async function ah(e){try{let t;switch(e.file_type){case Tt.VALID_S3_FILE_TYPES.CSV:t=await q1(e);break;case Tt.VALID_S3_FILE_TYPES.JSON:t=await G1(e);break;default:throw se(new Error,Re.DEFAULT_BULK_LOAD_ERR,ye.BAD_REQUEST,Tt.LOG_LEVELS.ERROR,Re.INVALID_FILE_EXT_ERR(e))}return gb(t.records,t.number_written)}catch(t){throw ks(t)}}a(ah,"fileLoad");async function mb(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&&Tb(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let _=se(c);r(_)}}a(mb,"validateChunk");async function Rb(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 Sb.callOperationFunctionAsAwait(Ab,c,pb.bind(null,o));t.records+=_.records,t.number_written+=_.number_written,n&&n.resume()}catch(c){let _=se(c,Vs(Re.INSERT_CSV_ERR),ye.INTERNAL_SERVER_ERROR,Tt.LOG_LEVELS.ERROR,Re.INSERT_CSV_ERR+" - "+c);r(_)}}a(Rb,"insertChunk");async function q1(e){let t={records:0,number_written:0};try{let r=new ih,s=Vt.createReadStream(e.file_path,{highWaterMark:db});s.setEncoding("utf8"),await X_.parsePromise(s,mb.bind(null,e,r));let n=r.getPermsResponse();if(n)throw se(new Error,n,ye.BAD_REQUEST);return s=Vt.createReadStream(e.file_path,{highWaterMark:db}),s.setEncoding("utf8"),await X_.parsePromise(s,Rb.bind(null,e,t)),s.destroy(),t}catch(r){throw se(r,Vs(Re.PAPA_PARSE_ERR),ye.INTERNAL_SERVER_ERROR,Tt.LOG_LEVELS.ERROR,Re.PAPA_PARSE_ERR+r)}}a(q1,"callPapaParse");async function G1(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new ih,n=ob([Vt.createReadStream(e.file_path,{encoding:"utf-8"}),cb.withParser(),c=>c.value,new _b({batchSize:hb}),ub(async c=>{await mb(e,s,r,c)})]);await new Promise((c,_)=>{lb(n,u=>{u?_(u):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw se(new Error,i,ye.BAD_REQUEST);let o=ob([Vt.createReadStream(e.file_path,{encoding:"utf-8"}),cb.withParser(),c=>c.value,new _b({batchSize:hb}),ub(async c=>{await Rb(e,t,r,c)})]);return await new Promise((c,_)=>{lb(o,u=>{u?_(u):c()}),o.resume()}),t}catch(s){throw se(s,Vs(Re.INSERT_JSON_ERR),ye.INTERNAL_SERVER_ERROR,Tt.LOG_LEVELS.ERROR,Re.INSERT_JSON_ERR+s)}}a(G1,"insertJson");async function Ab(e){let t={};try{e.data&&e.data.length>0&&F1(e.data[0])?t=await x1(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(Ab,"callBulkFileLoad");function F1(e){let t=Object.keys(e);for(let r of t)if(!C1.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(F1,"validateColumnNames");async function x1(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 se(new Error,Re.INVALID_ACTION_PARAM_ERR(s),ye.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(x1,"bulkFileLoad");async function pb(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 I1(r.txn_time,i,sh.get(Tt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY))};await b1.publishToStream(`${p1.SUBJECT_PREFIXES.TXN}.${t.schema}.${t.table}`,w1.createNatsTableStreamName(t.schema,t.table),s,o),delete r.new_attributes}catch(n){xs.error(n)}}a(pb,"postCSVLoadFunction");function gb(e,t){return`successfully loaded ${t} of ${e} records`}a(gb,"buildResponseMsg");function ks(e){return se(e,Vs(Re.DEFAULT_BULK_LOAD_ERR),ye.INTERNAL_SERVER_ERROR,Tt.LOG_LEVELS.ERROR,Re.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(ks,"buildTopLevelErrMsg")});var wb=f((jj,bb)=>{"use strict";var{Readable:V1}=require("stream"),k1=1e4;bb.exports={streamAsJSON(e){return new j_({value:e})}};var j_=class extends V1{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),Ob)}catch(n){yield Ob(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);Ib(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>k1?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 Ib(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 Ob(e){return console.error(e),JSON.stringify(e.toString())}a(Ob,"handleError");function Ib(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(Ib,"when")});var _h=f((t8,vb)=>{"use strict";var Lb=It(),$1=v_(),Y1=rh(),{AsyncParser:K1,Transform:W1}=require("json2csv"),ma=require("stream"),mt=b(),ch=require("fs-extra"),Q1=require("path"),yt=I(),{promisify:eu}=require("util"),Ta=b(),{handleHDBError:fe,hdb_errors:J1}=y(),{HDB_ERROR_MSGS:rt,HTTP_STATUS_CODES:Se}=J1,{streamAsJSON:X1}=wb(),{Upload:Z1}=require("@aws-sdk/lib-storage"),Cb=["search_by_value","search_by_hash","sql"],yb=["json","csv"],Ub="json",Mb="csv",z1="Successfully exported JSON locally.",j1="Successfully exported CSV locally.",eJ=1e3,tJ=eu(Lb.searchByHash),rJ=eu(Lb.searchByValue),sJ=eu($1.evaluateSQL),nJ=eu(ma.finished);vb.exports={export_to_s3:cJ,export_local:iJ,toCsvStream:Db};async function iJ(e){yt.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=Pb(e);if(!mt.isEmpty(t))throw yt.error(t),fe(new Error,t,Se.BAD_REQUEST,void 0,void 0,!0);if(mt.isEmpty(e.path))throw yt.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(Q1.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=mt.buildFolderPath(e.path,r);await aJ(e.path);let n=await Bb(e);return await oJ(s,e.format,n)}a(iJ,"export_local");async function aJ(e){if(yt.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,yt.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 yt.error(r),fe(new Error,r,Se.BAD_REQUEST,void 0,void 0,!0)}return!0}a(aJ,"confirmPath");async function oJ(e,t,r){if(yt.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===Ub){let s=ch.createWriteStream(e);return X1(r).pipe(s),await nJ(s),{message:z1,path:e}}else if(t===Mb){let s=ch.createWriteStream(e),n=ma.Readable.from(r),i={},o={objectMode:!0};return await new K1(i,o).fromInput(n).toOutput(s).promise(!1),{message:j1,path:e}}throw fe(new Error,rt.INVALID_VALUE("format"),Se.BAD_REQUEST)}a(oJ,"saveToLocal");async function cJ(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=Pb(e);if(!mt.isEmpty(t))throw fe(new Error,t,Se.BAD_REQUEST);yt.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await Bb(e)}catch(_){throw yt.error(_),_}let s,n=await Y1.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new ma.PassThrough;if(e.format===Mb){i=e.s3.key+".csv";let _=Db(r);_.on("error",u=>{throw u}),_.pipe(o)}else if(e.format===Ub){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%eJ===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(cJ,"export_to_s3");function Db(e){let t=ma.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new W1(r,s);return t.pipe(n)}a(Db,"toCsvStream");function Pb(e){if(yt.trace("in exportCoreValidation"),mt.isEmpty(e.format))return"format missing";if(yb.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${yb.join(", ")}`;let t=e.search_operation.operation;if(mt.isEmpty(t))return"search_operation.operation missing";if(Cb.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${Cb.join(", ")}`}a(Pb,"exportCoreValidation");async function Bb(e){yt.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=rJ;break;case"search_by_hash":t=tJ;break;case"sql":t=sJ;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,yt.error(r),fe(new Error,r,Se.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(Bb,"getRecords")});var qb=f((s8,Hb)=>{"use strict";var tu=class{constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};a(tu,"SqlSearchObject");Hb.exports=tu});var xb=f((i8,Fb)=>{"use strict";var _J=m(),Gb=require("moment"),uJ=require("uuid").v4,ru=class{constructor(){this.id=uJ(),this.type=void 0,this.start_datetime=Gb().valueOf(),this.created_datetime=Gb().valueOf(),this.end_datetime=void 0,this.status=_J.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};a(ru,"JobObject");Fb.exports=ru});var lh=f((o8,Wb)=>{"use strict";var lJ=require("uuid").v4,$b=Ot(),Yb=It(),EJ=Ht(),dJ=un(),hJ=qb(),ne=m(),fJ=xb(),SJ=ME(),Lt=I(),TJ=oi(),Bn=b(),{promisify:uh}=require("util"),$s=require("moment"),mJ=v_(),su=th(),Vb=dl(),{deleteTransactionLogsBeforeValidator:RJ}=qd(),{handleHDBError:AJ,hdb_errors:pJ}=y(),{HTTP_STATUS_CODES:gJ}=pJ,kb=uh(Yb.searchByValue),NJ=uh(Yb.searchByHash),OJ=$b.insert,IJ=uh(mJ.evaluateSQL),bJ=$b.update;Wb.exports={addJob:yJ,updateJob:UJ,handleGetJob:wJ,handleGetJobsByStartDate:CJ,getJobById:Kb};async function wJ(e){try{let t=await Kb(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 Lt.error(r),new Error(r)}}a(wJ,"handleGetJob");async function CJ(e){try{let t=await LJ(e);if(Lt.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 Lt.error(r),new Error(r)}}a(CJ,"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 Lt.info(l),t.error=l,t}if(!ne.JOB_TYPE_ENUM[e.operation])return Lt.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case ne.OPERATIONS_ENUM.CSV_FILE_LOAD:s=su.fileObject(e);break;case ne.OPERATIONS_ENUM.CSV_URL_LOAD:s=su.urlObject(e);break;case ne.OPERATIONS_ENUM.CSV_DATA_LOAD:s=su.dataObject(e);break;case ne.OPERATIONS_ENUM.IMPORT_FROM_S3:s=su.s3FileObject(e);break;case ne.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case ne.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=Vb(e,"date");break;case ne.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=Vb(e,"timestamp");break;case ne.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=RJ(e);break;default:break}if(s)throw AJ(s,s.message,gJ.BAD_REQUEST,void 0,void 0,!0);let n=new fJ;n.type=e.operation===ne.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?ne.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new EJ(ne.SYSTEM_SCHEMA_NAME,ne.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=await kb(i)}catch(l){let E=`There was an error inserting a new job: ${l}`;return Lt.error(E),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=lJ();try{o=await kb(i)}catch(l){let E=`There was an error inserting a new job: ${l}`;return Lt.error(E),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Lt.error("Error creating a job, could not find a unique job id."),t}n.request=e;let _=new TJ(ne.SYSTEM_SCHEMA_NAME,ne.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),u;try{u=await OJ(_)}catch(l){return Lt.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,Lt.trace(l)}return t}a(yJ,"addJob");async function LJ(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 hJ(s,e.hdb_user);try{return await IJ(n)}catch(i){throw Lt.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(LJ,"getJobsInDateRange");async function Kb(e){if(Bn.isEmptyOrZeroLength(e))return Bn.errorizeMessage("Invalid job ID specified.");let t=new dJ(ne.SYSTEM_SCHEMA_NAME,ne.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await NJ(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Lt.error(s),Bn.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(Kb,"getJobById");async function UJ(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===ne.JOB_STATUS_ENUM.COMPLETE||e.status===ne.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=$s().valueOf());let t=new SJ(ne.SYSTEM_SCHEMA_NAME,ne.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;try{r=await bJ(t)}catch(s){throw new Error(s)}return r}a(UJ,"updateJob")});var jb=f((_8,zb)=>{"use strict";var Qb=b(),st=m(),MJ=require("moment"),nu=oh(),iu=I(),Jb=lh(),Xb=_h(),Zb=Ts(),DJ=hs(),PJ=O_(),au=class{constructor(t,r){this.job=t,this.json=r}};a(au,"RunnerMessage");async function BJ(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(Qb.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Qb.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,Xb.export_local);break;case st.JOB_TYPE_ENUM.export_to_s3:await Ir(e,Xb.export_to_s3);break;case st.JOB_TYPE_ENUM.delete_files_before:case st.JOB_TYPE_ENUM.delete_records_before:await Ir(e,Zb.deleteFilesBefore);break;case st.JOB_TYPE_ENUM.delete_audit_logs_before:await Ir(e,Zb.deleteAuditLogsBefore);break;case st.JOB_TYPE_ENUM.delete_transaction_logs_before:await Ir(e,PJ.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(BJ,"parseMessage");async function Ir(e,t){try{e.job.status=st.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=MJ().valueOf(),await Jb.updateJob(e.job),await vJ(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 vJ(e){iu.trace("launching job thread:",e),DJ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[st.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(vJ,"launchJobThread");zb.exports={parseMessage:BJ,RunnerMessage:au}});var tw=f((l8,ew)=>{"use strict";var ou=class{constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};a(ou,"OperationFunctionObject");ew.exports=ou});var hw=f((d8,dw)=>{"use strict";var uu=It(),fh=v_(),cu=oh(),vn=Nc(),Eh=Rs(),Aa=Ts(),HJ=mE(),Ra=Vr(),_u=wE(),br=Hd(),xe=I(),qJ=LE(),GJ=Qc(),FJ=ed(),xJ=zc(),VJ=td(),kJ=rd(),$J=id(),YJ=od(),dh=ud(),rw=_h(),KJ=P_(),Sh=lh(),A=m(),{hdb_errors:ga,handleHDBError:pa}=y(),{HTTP_STATUS_CODES:sw}=ga,hh=dd(),nw=Cd(),lu=require("util"),Ys=Ot(),WJ=qr(),QJ=bn(),lw=Tn(),iw=jb(),aw=vc(),ow=lr(),cw=O_(),_w=xd(),JJ=K_(),XJ=lu.promisify(uu.searchByHash),ZJ=lu.promisify(uu.searchByValue),zJ=lu.promisify(uu.search),jJ=lu.promisify(fh.evaluateSQL),eX={[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=tw();function tX(e,t,r){return Promise.all([lw.postOperationHandler(e,t,r),e.table?Ys.flush(e):null])}a(tX,"postWrite");async function rX(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:tX,s=await JJ.callOperationFunctionAsAwait(t,e.body,r);if(typeof s!="object"&&(s={message:s}),s instanceof Error)throw s;return eX[e.body.operation]&&WJ.setSchemaDataToGlobal(n=>{n&&xe.error(n)}),s}a(rX,"processLocalTransaction");var uw=iX();dw.exports={chooseOperation:sX,getOperationFunction:Ew,processLocalTransaction:rX};function sX(e){let t;try{t=Ew(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(`${sw.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=KJ.verifyPerms(i,n);if(o)throw xe.error(`${sw.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(sX,"chooseOperation");function Ew(e){if(xe.trace(`getOperationFunction with operation: ${e.operation}`),uw.has(e.operation))return uw.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(Ew,"getOperationFunction");async function nX(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 lw.postOperationHandler(i,o,e)}catch(o){xe.info("Invalid operation in transaction"),xe.error(o)}}a(nX,"catchup");async function ir(e){let t,r;try{r=await Sh.addJob(e),t=r.createdJob;let s=new iw.RunnerMessage(t,e);return await iw.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 iX(){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(XJ)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_VALUE,new O(ZJ)),e.set(A.OPERATIONS_ENUM.SEARCH,new O(zJ)),e.set(A.OPERATIONS_ENUM.SQL,new O(jJ)),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(qJ)),e.set(A.OPERATIONS_ENUM.ADD_NODE,new O(GJ)),e.set(A.OPERATIONS_ENUM.UPDATE_NODE,new O(FJ)),e.set(A.OPERATIONS_ENUM.REMOVE_NODE,new O(xJ)),e.set(A.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new O(VJ)),e.set(A.OPERATIONS_ENUM.PURGE_STREAM,new O(kJ)),e.set(A.OPERATIONS_ENUM.SET_CONFIGURATION,new O(ow.setConfiguration)),e.set(A.OPERATIONS_ENUM.CLUSTER_STATUS,new O($J.clusterStatus)),e.set(A.OPERATIONS_ENUM.CLUSTER_NETWORK,new O(YJ)),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,rw.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,rw.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(nw.restart)),e.set(A.OPERATIONS_ENUM.RESTART_SERVICE,new O(nw.restartService)),e.set(A.OPERATIONS_ENUM.CATCHUP,new O(nX)),e.set(A.OPERATIONS_ENUM.SYSTEM_INFORMATION,new O(QJ.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(HJ)),e.set(A.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new O(aw.createTokens)),e.set(A.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new O(aw.refreshOperationToken)),e.set(A.OPERATIONS_ENUM.GET_CONFIGURATION,new O(ow.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(cw.readTransactionLog)),e.set(A.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new O(ir,cw.deleteTransactionLogsBefore)),e.set(A.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new O(_w.installModules)),e.set(A.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new O(_w.auditModules)),e}a(iX,"initializeOperationFunctionMap")});var Aw=f((f8,Rw)=>{"use strict";var aX=require("util"),{toJsMsg:oX}=require("nats"),{decode:cX}=require("msgpackr"),_X=qr(),{isMainThread:uX,parentPort:lX}=require("worker_threads"),Tw=be(),Na=oe(),fw=m(),Hn=I(),EX=hw(),dX=K_(),hX=Tn(),fX=B(),SX=m();hs();var TX=aX.promisify(_X.setSchemaDataToGlobal),mX={durable:Na.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Na.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Th,RX,AX,pX;Rw.exports={initialize:gX,workQueueListener:NX};async function gX(){Hn.notify("Starting clustering ingest service."),await TX();let{connection:e,jsm:t,js:r}=await Tw.getNATSReferences();Th=e,RX=e.info.server_name,AX=t,pX=r}a(gX,"initialize");var mw=100,Sw=new Array(mw),Eu=0;async function NX(){let e=Th.subscribe(`${Na.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${Th.info.server_name}`,mX);for await(let t of e)await Sw[Eu],Sw[Eu]=OX(t).catch(r=>{Hn.error(r)}),++Eu>=mw&&(Eu=0)}a(NX,"workQueueListener");uX||lX.on("message",async e=>{let{type:t}=e;t===SX.ITC_EVENT_TYPES.SHUTDOWN&&Tw.closeConnection()});async function OX(e){let t=oX(e),r=cX(t.data);if(t.headers.get(Na.MSG_HEADERS.ORIGIN)===fX.get(fw.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=EX.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[fw.CLUSTERING_FLAG]=!0,o=await dX.callOperationFunctionAsAwait(n,r,hX.postOperationHandler,t.headers)),Hn.debug(o)}catch(c){Hn.error(c)}return t.ack(),o}a(OX,"messageProcessor")});var pw=Aw();(async()=>{try{await pw.initialize(),await pw.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)}})();