harperdb 4.1.1 → 4.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +20 -19
- package/launchServiceScripts/launchInstallNATSServer.js +3 -3
- package/launchServiceScripts/launchNatsIngestService.js +11 -11
- package/launchServiceScripts/launchNatsReplyService.js +6 -6
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +6 -6
- package/package.json +5 -5
- package/server/jobs/jobProcess.js +11 -11
- package/server/threads/threadHTTPServer.js +13 -13
- package/utility/scripts/restartHdb.js +6 -6
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";var yf=Object.defineProperty;var a=(e,t)=>yf(e,"name",{value:t,configurable:!0});var h=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var f=h((iP,rc)=>{"use strict";var Fe=require("path"),Uf=require("fs");function wf(){let e=__dirname;for(;!Uf.existsSync(Fe.join(e,"package.json"));){let t=Fe.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(wf,"getHDBPackageRoot");var At=wf(),k_="js",$s=k_,Mf="harperdb-config.yaml",Df="defaultConfig.yaml",Pf="hdb",Y_=`harperdb.${$s}`,$_=`customFunctionsServer.${$s}`,Hf=`restartHdb.${$s}`,ga="HarperDB",Ys="Custom Functions",Ks="Clustering Hub",Ws="Clustering Leaf",Bf="Clustering Ingest Service",Gf="Clustering Reply Service",vf="foreground.pid",Ff={HDB:ga,CLUSTERING_HUB:Ks,CLUSTERING_LEAF:Ws,CLUSTERING_INGEST_SERVICE:Bf,CLUSTERING_REPLY_SERVICE:Gf,CUSTOM_FUNCTIONS:Ys,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"},qf={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},xf={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},Vf={harperdb:ga,"clustering hub":Ks,"clustering leaf":Ws,"custom functions":Ys,custom_functions:Ys,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},kf={CLUSTERING_HUB_PROC_DESCRIPTOR:Ks,CLUSTERING_LEAF_PROC_DESCRIPTOR:Ws},Ra={HDB:Fe.join(At,"server/harperdb"),CUSTOM_FUNCTIONS:Fe.join(At,"server/customFunctions"),CLUSTERING_HUB:Fe.join(At,"server/nats"),CLUSTERING_LEAF:Fe.join(At,"server/nats")},Yf={HDB:Fe.join(Ra.HDB,Y_),CUSTOM_FUNCTIONS:Fe.join(Ra.CUSTOM_FUNCTIONS,$_)},$f={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Fe.join(At,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Fe.join(At,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Fe.join(At,"launchServiceScripts/launchUpdateNodes4-0-0.js")},Kf={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},K_="support@harperdb.io",Wf="customer-success@harperdb.io",W_=1,Qf=4141,Q_="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",Jf="https://www.harperdb.io/product",Xf=`For support, please submit a request at ${Q_} or contact ${K_}`,J_=`For license support, please contact ${Wf}`,Zf="None of the specified records were found.",zf="hash attribute not found",jf=`Your current license only supports ${W_} role. ${J_}`,em="Your current license only supports 3 connections to a node.",tm="127.0.0.1",rm=1,sm=/^\.$/,nm=/^\.\.$/,im="U+002E",am=/\//g,om="U+002F",_m=/U\+002F/g,cm=/^U\+002E$/,um=/^U\+002EU\+002E$/,Em="d",lm=999999,dm="*",Sm="--max-old-space-size=",hm="system",Tm="__hdb_hash",fm=".harperdb",mm=".hdb",Am="keys",Rm="hdb_boot_properties.file",gm=".updateConfig.json",Nm="SIGTSTP",pm=24,Om=6e4,Im=448,Cm="blob",bm="trash",Lm="schema",ym="transactions",Um=".count",wm="id",Mm="PROCESS_NAME",X_={SETTINGS_PATH_KEY:"settings_path"},Z_=require("lodash"),Dm={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"},Pm={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},Hm={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Bm={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"},Gm={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"},ge="hdb_internal:",vm={CREATE_SCHEMA:ge+"create_schema",CREATE_TABLE:ge+"create_table",CREATE_ATTRIBUTE:ge+"create_attribute",ADD_USER:ge+"add_user",ALTER_USER:ge+"alter_user",DROP_USER:ge+"drop_user",HDB_NODES:ge+"hdb_nodes",HDB_USERS:ge+"hdb_users",HDB_WORKERS:ge+"hdb_workers",CATCHUP:ge+"catchup",SCHEMA_CATCHUP:ge+"schema_catchup",WORKER_ROOM:ge+"cluster_workers"},Fm={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"},qm="060493.ks",xm=".license",Vm={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},m={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"},km={CSV:".csv",JSON:".json"},Ym={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},$m={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Br={};Br[m.INSERT]=m.INSERT;Br[m.UPDATE]=m.UPDATE;Br[m.UPSERT]=m.UPSERT;Br[m.DELETE]=m.DELETE;var F=Object.create(null);F[m.DESCRIBE_ALL]=m.DESCRIBE_ALL;F[m.DESCRIBE_TABLE]=m.DESCRIBE_TABLE;F[m.DESCRIBE_SCHEMA]=m.DESCRIBE_SCHEMA;F[m.READ_LOG]=m.READ_LOG;F[m.ADD_NODE]=m.ADD_NODE;F[m.LIST_USERS]=m.LIST_USERS;F[m.LIST_ROLES]=m.LIST_ROLES;F[m.USER_INFO]=m.USER_INFO;F[m.SQL]=m.SQL;F[m.GET_JOB]=m.GET_JOB;F[m.SEARCH_JOBS_BY_START_DATE]=m.SEARCH_JOBS_BY_START_DATE;F[m.DELETE_FILES_BEFORE]=m.DELETE_FILES_BEFORE;F[m.EXPORT_LOCAL]=m.EXPORT_LOCAL;F[m.EXPORT_TO_S3]=m.EXPORT_TO_S3;F[m.CLUSTER_STATUS]=m.CLUSTER_STATUS;F[m.REMOVE_NODE]=m.REMOVE_NODE;F[m.RESTART]=m.RESTART;F[m.CUSTOM_FUNCTIONS_STATUS]=m.CUSTOM_FUNCTIONS_STATUS;F[m.GET_CUSTOM_FUNCTIONS]=m.GET_CUSTOM_FUNCTIONS;F[m.GET_CUSTOM_FUNCTION]=m.GET_CUSTOM_FUNCTION;F[m.SET_CUSTOM_FUNCTION]=m.SET_CUSTOM_FUNCTION;F[m.DROP_CUSTOM_FUNCTION]=m.DROP_CUSTOM_FUNCTION;F[m.ADD_CUSTOM_FUNCTION_PROJECT]=m.ADD_CUSTOM_FUNCTION_PROJECT;F[m.DROP_CUSTOM_FUNCTION_PROJECT]=m.DROP_CUSTOM_FUNCTION_PROJECT;F[m.PACKAGE_CUSTOM_FUNCTION_PROJECT]=m.PACKAGE_CUSTOM_FUNCTION_PROJECT;F[m.DEPLOY_CUSTOM_FUNCTION_PROJECT]=m.DEPLOY_CUSTOM_FUNCTION_PROJECT;var Km={RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help"},Wm={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},z_={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"},Qm=Z_.invert(z_),T={CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_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"},j_={settings_path:X_.SETTINGS_PATH_KEY,hdb_root_key:T.ROOTPATH,hdb_root:T.ROOTPATH,server_port_key:T.OPERATIONSAPI_NETWORK_PORT,server_port:T.OPERATIONSAPI_NETWORK_PORT,cert_key:T.OPERATIONSAPI_TLS_CERTIFICATE,certificate:T.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:T.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:T.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:T.OPERATIONSAPI_NETWORK_HTTPS,https_on:T.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:T.OPERATIONSAPI_NETWORK_CORS,cors_on:T.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:T.LOGGING_LEVEL,log_level:T.LOGGING_LEVEL,log_path_key:T.LOGGING_ROOT,log_path:T.LOGGING_ROOT,props_env_key:T.OPERATIONSAPI_NODEENV,node_env:T.OPERATIONSAPI_NODEENV,clustering_node_name_key:T.CLUSTERING_NODENAME,node_name:T.CLUSTERING_NODENAME,clustering_enabled_key:T.CLUSTERING_ENABLED,clustering:T.CLUSTERING_ENABLED,max_http_threads:T.HTTP_THREADS,max_hdb_processes:T.HTTP_THREADS,server_timeout_key:T.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:T.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:T.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:T.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:T.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:T.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:T.LOGGING_AUDITLOG,disable_transaction_log:T.LOGGING_AUDITLOG,operation_token_timeout_key:T.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:T.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:T.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:T.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_enabled_key:T.CUSTOMFUNCTIONS_ENABLED,custom_functions:T.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:T.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:T.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:T.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:T.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:T.HTTP_THREADS,log_to_file:T.LOGGING_FILE,log_to_stdstreams:T.LOGGING_STDSTREAMS,run_in_foreground:T.OPERATIONSAPI_FOREGROUND,local_studio_on:T.LOCALSTUDIO_ENABLED,clustering_port:T.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:T.CLUSTERING_USER,clustering_enabled:T.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:T.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:T.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:T.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:T.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:T.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:T.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:T.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:T.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:T.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:T.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:T.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:T.CLUSTERING_NODENAME,clustering_tls_certificate:T.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:T.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:T.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:T.CLUSTERING_TLS_INSECURE,clustering_tls_verify:T.CLUSTERING_TLS_VERIFY,clustering_loglevel:T.CLUSTERING_LOGLEVEL,clustering_republishmessages:T.CLUSTERING_REPUBLISHMESSAGES,customfunctions_enabled:T.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:T.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:T.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:T.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:T.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:T.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:T.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:T.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:T.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:T.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:T.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:T.CUSTOMFUNCTIONS_NODEENV,http_threads:T.HTTP_THREADS,http_session_affinity:T.HTTP_SESSION_AFFINITY,customfunctions_processes:T.HTTP_THREADS,customfunctions_root:T.CUSTOMFUNCTIONS_ROOT,localstudio_enabled:T.LOCALSTUDIO_ENABLED,logging_file:T.LOGGING_FILE,logging_level:T.LOGGING_LEVEL,logging_root:T.LOGGING_ROOT,logging_rotation_enabled:T.LOGGING_ROTATION_ENABLED,logging_rotation_compress:T.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:T.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:T.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:T.LOGGING_ROTATION_PATH,logging_stdstreams:T.LOGGING_STDSTREAMS,logging_auditlog:T.LOGGING_AUDITLOG,operationsapi_authentication_operationtokentimeout:T.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:T.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:T.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:T.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:T.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:T.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:T.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:T.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:T.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:T.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:T.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:T.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:T.OPERATIONSAPI_NODEENV,operationsapi_root:T.ROOTPATH,schemas:T.SCHEMAS,storage_path:T.STORAGE_PATH};for(let e in T){let t=T[e];j_[t.toLowerCase()]=t}var Jm={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},Xm={csv_file_load:"csv_file_load",csv_data_load:m.CSV_DATA_LOAD,csv_url_load:m.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"},Zm={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"},zm={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},jm={FILE_SYSTEM:"fs",LMDB:"lmdb"},eA={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},tA={DEVELOPMENT:8192,DEFAULT:512},rA={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"},sA={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"},nA={ENOENT:"ENOENT",EACCES:"EACCES"},ec={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},iA="__clustering__",aA=Object.values(ec),oA=15984864e5,tc={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},_A=Z_.invert(tc),cA={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"},uA=111,EA=`\r
|
|
2
|
-
`,
|
|
3
|
-
`}a(nt,"createLogRecord");function qr(e){rt&&
|
|
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:qA.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(YA,"findPs")});var ne=h((dP,Nc)=>{"use strict";var $A="__dbis__",KA="__environment_name__",WA="__dbi_defintion__",QA={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"},JA=["__createdtime__","__updatedtime__"],XA="\uFFFF",gc={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},ZA=Object.values(gc);Nc.exports={INTERNAL_DBIS_NAME:$A,DBI_DEFINITION_NAME:WA,SEARCH_TYPES:QA,TIMESTAMP_NAMES:JA,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:KA,TRANSACTIONS_DBI_NAMES_ENUM:gc,TRANSACTIONS_DBIS:ZA,OVERFLOW_MARKER:XA}});var Me=h((SP,wc)=>{"use strict";var pc=f(),Oc=ne(),Ic={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},Cc=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),bc={500:Cc("There was an error processing your request."),400:"Invalid request"},zA=bc[Ic.INTERNAL_SERVER_ERROR],jA={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.`},eR={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},tR={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"},rR={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 ${Oc.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Oc.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"},sR={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${pc.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 ${pc.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"},Lc={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"},nR={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."},iR={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`},aR={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"},oR={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},_R={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`},yc={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.`},Uc={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}`},cR={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."},uR={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},ER={...Lc,...tR,...jA,...nR,...iR,...aR,...oR,..._R,...sR,...yc,...Uc,...cR,...uR,...eR};wc.exports={CHECK_LOGS_WRAPPER:Cc,HDB_ERROR_MSGS:ER,DEFAULT_ERROR_MSGS:bc,DEFAULT_ERROR_RESP:zA,HTTP_STATUS_CODES:Ic,LMDB_ERRORS_ENUM:rR,AUTHENTICATION_ERROR_MSGS:Lc,VALIDATION_ERROR_MSGS:yc,ITC_ERRORS:Uc}});var Q=h((TP,Pc)=>{"use strict";var cr=Me(),lR=O(),dR=f(),xr=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Mc),this.http_resp_code=s||cr.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(cr.DEFAULT_ERROR_MSGS[s]?cr.DEFAULT_ERROR_MSGS[s]:cr.DEFAULT_ERROR_MSGS[cr.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&&lR[n](i)}};a(xr,"HdbError");function Mc(e,t,r,s=dR.LOG_LEVELS.ERROR,n=null,i=!1){if(Dc(e))return e;let o=new xr(e,t,r,s,n);return i&&delete o.stack,o}a(Mc,"handleHDBError");function Dc(e){return e.__proto__.constructor.name===xr.name}a(Dc,"isHDBError");Pc.exports={isHDBError:Dc,handleHDBError:Mc,hdb_errors:cr}});var p=h((AP,Qc)=>{"use strict";var Ft=require("path"),SR=require("fs-extra"),ae=O(),Hc=require("fs-extra"),Vr=require("os"),hR=require("net"),TR=require("recursive-iterator"),ie=f(),Fc=Rc(),Bc=require("papaparse"),js=require("moment"),{inspect:fR}=require("util"),Gc=require("is-number"),mP=require("lodash"),{hdb_errors:en}=Q(),qc=require("util").promisify(setTimeout),mR=100,AR=5,RR="",gR=4,vc={true:!0,false:!1,undefined:null,null:null,NaN:NaN};Qc.exports={isEmpty:Ne,isEmptyOrZeroLength:We,arrayHasEmptyValues:OR,arrayHasEmptyOrZeroLengthValues:IR,buildFolderPath:CR,isBoolean:xc,errorizeMessage:NR,stripFileExtension:LR,autoCast:yR,autoCastJSON:Vc,autoCastJSONDeep:La,removeDir:UR,compareVersions:wR,isCompatibleDataVersion:MR,escapeRawValue:DR,unescapeValue:PR,stringifyProps:HR,timeoutPromise:GR,isClusterOperation:FR,getClusterUser:xR,checkGlobalSchemaTable:qR,getHomeDir:Yc,getPropsFilePath:BR,promisifyPapaParse:VR,removeBOM:$c,createEventPromise:kR,checkProcessRunning:YR,checkSchemaTableExist:$R,checkSchemaExists:Kc,checkTableExists:Wc,getStartOfTomorrowInSeconds:KR,getLimitKey:WR,isObject:bR,isNotEmptyAndHasValue:pR,autoCasterIsNumberCheck:kc,backtickASTSchemaItems:QR,isPortTaken:vR,stopProcess:JR,createForkArgs:XR,autoCastBoolean:ZR,async_set_timeout:qc,getTableHashAttribute:zR,doesSchemaExist:jR,doesTableExist:eg,stringifyObj:tg,ms_to_time:rg,changeExtension:sg,PACKAGE_ROOT:ie.PACKAGE_ROOT};function NR(e){return e instanceof Error?e:new Error(e)}a(NR,"errorizeMessage");function Ne(e){return e==null}a(Ne,"isEmpty");function pR(e){return!Ne(e)&&(e||e===0||e===""||xc(e))}a(pR,"isNotEmptyAndHasValue");function We(e){return Ne(e)||e.length===0||e.size===0}a(We,"isEmptyOrZeroLength");function OR(e){if(Ne(e))return!0;for(let t=0;t<e.length;t++)if(Ne(e[t]))return!0;return!1}a(OR,"arrayHasEmptyValues");function IR(e){if(We(e))return!0;for(let t=0;t<e.length;t++)if(We(e[t]))return!0;return!1}a(IR,"arrayHasEmptyOrZeroLengthValues");function CR(...e){try{return e.join(Ft.sep)}catch{console.error(e)}}a(CR,"buildFolderPath");function xc(e){return Ne(e)?!1:e===!0||e===!1}a(xc,"isBoolean");function bR(e){return Ne(e)?!1:typeof e=="object"}a(bR,"isObject");function LR(e){return We(e)?RR:e.slice(0,-gR)}a(LR,"stripFileExtension");function yR(e){return Ne(e)||e===""||typeof e!="string"?e:vc[e]!==void 0?vc[e]:kc(e)===!0?Number(e):e}a(yR,"autoCast");function Vc(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(Vc,"autoCastJSON");function La(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=La(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=La(r);s!==r&&(e[t]=s)}return e}else return Vc(e)}a(La,"autoCastJSONDeep");function kc(e){if(e.startsWith("0.")&&Gc(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Gc(e))}a(kc,"autoCasterIsNumberCheck");async function UR(e){if(We(e))throw new Error(`Directory path: ${e} does not exist`);try{await Hc.emptyDir(e),await Hc.remove(e)}catch(t){throw ae.error(`Error removing files in ${e} -- ${t}`),t}}a(UR,"removeDir");function wR(e,t){if(We(e)){ae.info("Invalid current version sent as parameter.");return}if(We(t)){ae.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),_=i.replace(s,"").split("."),c=Math.min(o.length,_.length);for(let u=0;u<c;u++)if(r=parseInt(o[u],10)-parseInt(_[u],10),r)return r;return o.length-_.length}a(wR,"compareVersions");function MR(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(MR,"isCompatibleDataVersion");function DR(e){if(Ne(e))return e;let t=String(e);return t==="."?ie.UNICODE_PERIOD:t===".."?ie.UNICODE_PERIOD+ie.UNICODE_PERIOD:t.replace(ie.FORWARD_SLASH_REGEX,ie.UNICODE_FORWARD_SLASH)}a(DR,"escapeRawValue");function PR(e){if(Ne(e))return e;let t=String(e);return t===ie.UNICODE_PERIOD?".":t===ie.UNICODE_PERIOD+ie.UNICODE_PERIOD?"..":String(e).replace(ie.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(PR,"unescapeValue");function HR(e,t){if(Ne(e))return ae.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+Vr.EOL}!We(s)&&s[0]===";"?r+=" "+s+n+Vr.EOL:We(s)||(r+=s+"="+n+Vr.EOL)}catch{ae.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(HR,"stringifyProps");function Yc(){let e;try{e=Vr.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Yc,"getHomeDir");function BR(){let e=Ft.join(Yc(),ie.HDB_HOME_DIR_NAME,ie.BOOT_PROPS_FILE_NAME);return SR.existsSync(e)||(e=Ft.join(__dirname,"../","hdb_boot_properties.file")),e}a(BR,"getPropsFilePath");function GR(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(GR,"timeoutPromise");async function vR(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=hR.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(vR,"isPortTaken");function FR(e){try{return ie.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){ae.error(`Error checking operation against cluster ops ${t}`)}return!1}a(FR,"isClusterOperation");function qR(e,t){if(!global.hdb_schema[e])return en.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return en.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(qR,"checkGlobalSchemaTable");function xR(e,t){if(Ne(t)){ae.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Ne(e)||We(e)){ae.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){ae.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){ae.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(xR,"getClusterUser");function VR(){Bc.parsePromise=function(e,t){return new Promise(function(r,s){Bc.parse(e,{header:!0,transformHeader:$c,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(VR,"promisifyPapaParse");function $c(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a($c,"removeBOM");function kR(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;ae.info(`Got cluster status event response: ${fR(n)}`);try{i.cancel()}catch{ae.error("Error trying to cancel timeout.")}s(n)})})}a(kR,"createEventPromise");async function YR(e){let t=!0,r=0;do await qc(mR*r++),(await Fc.findPs(e)).length>0&&(t=!1);while(t&&r<AR);if(t)throw new Error(`process ${e} was not started`)}a(YR,"checkProcessRunning");function $R(e,t){let r=Kc(e);if(r)return r;let s=Wc(e,t);if(s)return s}a($R,"checkSchemaTableExist");function Kc(e){if(!global.hdb_schema[e])return en.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Kc,"checkSchemaExists");function Wc(e,t){if(!global.hdb_schema[e][t])return en.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Wc,"checkTableExists");function KR(){let e=js().utc().add(1,ie.MOMENT_DAYS_TAG).startOf(ie.MOMENT_DAYS_TAG).unix(),t=js().utc().unix();return e-t}a(KR,"getStartOfTomorrowInSeconds");function WR(){return js().utc().format("DD-MM-YYYY")}a(WR,"getLimitKey");function QR(e){try{let t=new TR(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){ae.error("Got an error back ticking items."),ae.error(t)}}a(QR,"backtickASTSchemaItems");async function JR(e){let t=Vr.userInfo();(await Fc.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),ae.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(JR,"stopProcess");function XR(e){return[e]}a(XR,"createForkArgs");function ZR(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(ZR,"autoCastBoolean");function zR(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(zR,"getTableHashAttribute");function jR(e){return global?.hdb_schema?.[e]!==void 0}a(jR,"doesSchemaExist");function eg(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(eg,"doesTableExist");function tg(e){try{return JSON.stringify(e)}catch{return e}}a(tg,"stringifyObj");function rg(e){let t=js.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(rg,"ms_to_time");function sg(e,t){let r=Ft.basename(e,Ft.extname(e));return Ft.join(Ft.dirname(e),r+t)}a(sg,"changeExtension")});var it=h((NP,Xc)=>{"use strict";var{platform:gP}=require("os"),ng="nats-server.zip",ya="nats-server",ig=process.platform==="win32"?`${ya}.exe`:ya,Ua="HDB",ag=/^[^\s.,*>]+$/,Jc="__request__",og=a(e=>`${e}.${Jc}`,"REQUEST_SUBJECT"),_g={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},cg={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},ug={HUB:"hub.pid",LEAF:"leaf.pid"},Eg={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},lg={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Ua,deliver_subject:"__HDB__.WORKQUEUE"},dg={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Ua,deliver_subject:"HDB.SCHEMAQUEUE"},Sg={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Ua,deliver_subject:"HDB.USERQUEUE"},hg={SUCCESS:"success",ERROR:"error"},Tg={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},fg={TXN:"txn",MSGID:"msgid"},ur={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},mg={[ur.ERR]:1,[ur.WRN]:2,[ur.INF]:3,[ur.DBG]:4,[ur.TRC]:5},Ag={debug:"-D",trace:"-DVV"};Xc.exports={NATS_SERVER_ZIP:ng,NATS_SERVER_NAME:ya,NATS_BINARY_NAME:ig,PID_FILES:ug,NATS_CONFIG_FILES:cg,SERVER_SUFFIX:Eg,WORK_QUEUE_CONSUMER_NAMES:lg,SCHEMA_QUEUE_CONSUMER_NAMES:dg,USER_QUEUE_CONSUMER_NAMES:Sg,NATS_TERM_CONSTRAINTS_RX:ag,REQUEST_SUFFIX:Jc,UPDATE_REMOTE_RESPONSE_STATUSES:hg,CLUSTER_STATUS_STATUSES:Tg,REQUEST_SUBJECT:og,SUBJECT_PREFIXES:fg,MSG_HEADERS:_g,LOG_LEVELS:ur,LOG_LEVEL_FLAGS:Ag,LOG_LEVEL_HIERARCHY:mg}});var zc=h((OP,Zc)=>{"use strict";var Rg=it(),tn=class{constructor(t,r,s,n,i,o,_,c,u,E,l,S,d,A){this.port=t,o===null&&(o=void 0),this.server_name=r+Rg.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:_,verify:c},this.leafnodes={port:u,tls:{cert_file:n,key_file:i,ca_file:o,insecure:_}},this.cluster={name:E,port:l,routes:S,tls:{cert_file:n,key_file:i,ca_file:o,insecure:_,verify:c}},this.accounts={SYS:{users:d},HDB:{users:A}},this.system_account="SYS"}};a(tn,"HubConfigObject");Zc.exports=tn});var tu=h((CP,eu)=>{"use strict";var jc=it(),rn=class{constructor(t,r,s,n,i,o,_,c,u,E,l){this.port=t,l===null&&(l=void 0),this.server_name=r+jc.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+jc.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:E,ca_file:l,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:l,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:l,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:_},HDB:{users:c,jetstream:"enabled"}},this.system_account="SYS"}};a(rn,"LeafConfigObject");eu.exports=rn});var su=h((LP,ru)=>{"use strict";var sn=class{constructor(t,r){this.user=t,this.password=r}};a(sn,"HdbUserObject");ru.exports=sn});var iu=h((UP,nu)=>{"use strict";var gg=it(),nn=class{constructor(t,r){this.user=t+gg.SERVER_SUFFIX.ADMIN,this.password=r}};a(nn,"SysUserObject");nu.exports=nn});var Er=h((MP,_u)=>{"use strict";var ou=p(),au=f(),on=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,wa=require("joi"),an={schema_format:{pattern:on,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},Ng=wa.alternatives(wa.string().min(1).max(an.schema_length.maximum).pattern(on).messages({"string.pattern.base":"{:#label} "+an.schema_format.message}),wa.number()).required();function pg(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>an.schema_length.maximum?`'${e}' maximum of 250 characters`:on.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(pg,"checkValidTable");function Og(e,t){return ou.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(Og,"validateSchemaExists");function Ig(e,t){let r=t.state.ancestors[0].schema;return ou.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Ig,"validateTableExists");function Cg(e,t){return e.toLowerCase()===au.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${au.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(Cg,"validateSchemaName");_u.exports={common_validators:an,schema_regex:on,hdb_schema_table:Ng,validateSchemaExists:Og,validateTableExists:Ig,validateSchemaName:Cg,checkValidTable:pg}});var at=h((PP,cu)=>{"use strict";var de=require("validate.js");de.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||de.validators.type.checks[t](e)?null:` must be a '${t}' value`};de.validators.type.checks={Object:function(e){return de.isObject(e)&&!de.isArray(e)},Array:de.isArray,Integer:de.isInteger,Number:de.isNumber,String:de.isString,Date:de.isDate,Boolean:function(e){return typeof e=="boolean"}};de.validators.hasValidFileExt=function(e,t){return de.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};cu.exports={validateObject:bg,validateObjectAsync:Lg,validateBySchema:yg};function bg(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=de(e,t,{format:"flat"});return r?new Error(r):null}a(bg,"validateObject");async function Lg(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await de.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(Lg,"validateObjectAsync");function yg(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(yg,"validateBySchema")});var Da=h((BP,Eu)=>{var{hdb_schema_table:uu}=Er(),Ug=at(),Ma=require("joi"),wg={undefined:"undefined",null:"null"},Mg=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||wg[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"),Dg=Ma.object({schema:uu,table:uu,records:Ma.array().items(Ma.object().custom(Mg)).required()});Eu.exports=function(e){return Ug.validateBySchema(e,Dg)}});var Pa=h((vP,lu)=>{"use strict";var _n=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(_n,"BridgeMethods");lu.exports=_n});var qt=h((VP,mu)=>{"use strict";var du=Me().LMDB_ERRORS_ENUM,qP=require("lmdb"),Pg=ne(),xP=require("buffer").Buffer,{OVERFLOW_MARKER:Su,MAX_SEARCH_KEY_LENGTH:cn}=Pg,hu=["number","string","symbol","boolean","bigint"];function Hg(e){if(e=e?.database||e,!e)throw new Error(du.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(du.INVALID_ENVIRONMENT)}a(Hg,"validateEnv");function Bg(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(Bg,"stringifyData");function Gg(e){return e instanceof Date?e.valueOf():e}a(Gg,"convertKeyValueToWrite");function vg(e){if(e==null)return;if(hu.includes(typeof e))return e.length>cn?[e.slice(0,cn)+Su]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];hu.includes(typeof n)&&(n.length>cn?t.push(n.slice(0,cn)+Su):t.push(n))}}return t}a(vg,"getIndexedValues");var un=0,Tu=0;function fu(){Tu=Date.now()-performance.now()}a(fu,"adjustStartTime");fu();var Fg=6e4;setInterval(fu,Fg).unref();function qg(){let e=performance.now()+Tu;return e>un?(un=e,e):(un+=488e-6,un)}a(qg,"getNextMonotonicTime");mu.exports={validateEnv:Hg,stringifyData:Bg,convertKeyValueToWrite:Gg,getNextMonotonicTime:qg,getIndexedValues:vg}});var Ru=h((YP,Au)=>{"use strict";var En=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(En,"DBIDefinition");Au.exports=En});var Nu=h((KP,gu)=>{"use strict";var xg={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))},Vg="certificate.pem",kg="privateKey.pem",Yg="ca.pem";gu.exports={CERTIFICATE_VALUES:xg,CERTIFICATE_PEM_NAME:Vg,PRIVATEKEY_PEM_NAME:kg,CA_PEM_NAME:Yg}});var bu=h((QP,Cu)=>{"use strict";var $g=require("fs-extra"),b=require("joi"),Kg=require("os"),{boolean:K,string:ot,number:qe,array:Ha}=b.types(),{totalmem:pu}=require("os"),kr=require("path"),Wg=O(),dn=p(),WP=Nu(),Qg=f(),Jg=at(),Ou="log",Xg="custom_functions",Zg="Invalid logging.rotation.maxSize unit. Available units are G, M or K",zg="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",jg="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",eN="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",tN="rootPath config parameter is undefined",rN="clustering.enabled config parameter is undefined",xt=qe.min(0).required(),Sn=Ha.items({host:ot.required(),port:xt}).empty(null),gt;Cu.exports={configValidator:sN,routesValidator:cN,route_constraints:Sn};function sN(e){if(gt=e.rootPath,dn.isEmpty(gt))throw tN;let t=K.required(),r=b.valid("production","development").required(),s=qe.min(1).max(1e3).empty(null).default(_N),n=ot.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(ln),i=b.custom(nN).messages({"any.custom":"{:#label} {:#error}"}),o=ot.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),_=b.string().empty(null).default(ln),c=b.custom(iN).empty(null).default(ln),u=e.clustering?.enabled;if(dn.isEmpty(u))throw rN;let E;return u===!0?E=b.object({enabled:t,hubServer:b.object({cluster:b.object({name:b.required().empty(null),network:b.object({port:xt,routes:Sn}).required()}).required(),leafNodes:b.object({network:b.object({port:xt}).required()}).required(),network:b.object({port:xt}).required()}).required(),leafServer:b.object({network:b.object({port:xt,routes:Sn}).required(),streams:b.object({maxAge:qe.min(120).allow(null).optional(),maxBytes:qe.min(1).allow(null).optional(),maxMsgs:qe.min(1).allow(null).optional(),path:_}).required()}).required(),logLevel:b.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:K.optional(),tls:b.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:K.required(),verify:K.optional()}),user:ot.optional().empty(null)}).required():E=b.object({enabled:t,tls:b.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:K.required()})}).required(),b.object({clustering:E,customFunctions:b.object({enabled:t,network:b.object({cors:K.required(),corsAccessList:Ha.required(),headersTimeout:qe.min(1).required(),https:K.required(),keepAliveTimeout:qe.min(1).required(),port:xt,timeout:qe.min(1).required()}),nodeEnv:r,root:n,tls:b.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:b.object({enabled:t}).required(),logging:b.object({file:K.required(),level:b.valid("notify","fatal","error","warn","info","debug","trace"),rotation:b.object({enabled:K.optional(),compress:K.optional(),interval:ot.custom(oN).optional().empty(null),maxSize:ot.custom(aN).optional().empty(null),path:ot.optional().empty(null).default(ln)}).required(),root:n,stdStreams:K.required(),auditLog:K.required()}).required(),operationsApi:b.object({authentication:b.object({operationTokenTimeout:b.required(),refreshTokenTimeout:b.required()}).required(),foreground:K.required(),network:b.object({cors:K.required(),corsAccessList:Ha.required(),headersTimeout:qe.min(1).required(),https:K.required(),keepAliveTimeout:qe.min(1).required(),port:xt,timeout:qe.min(1).required()}).required(),nodeEnv:r,tls:b.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:ot.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:b.object({threads:s}).required(),storage:b.object({writeAsync:K.required(),overlappingSync:K.optional(),caching:K.optional(),compression:K.optional(),noReadAhead:K.optional(),path:c,prefetchWrites:K.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(sN,"configValidator");function Iu(e){return $g.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Iu,"doesPathExist");function nN(e,t){if(e===null)return;let r=Iu(e);return r?t.message(r):e}a(nN,"validatePemFile");function iN(e,t){b.assert(e,ot.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Iu(e);if(r)return t.message(r)}a(iN,"validatePath");function aN(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(Zg);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(jg):e}a(aN,"validateRotationMaxSize");function oN(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(zg);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(eN):e}a(oN,"validateRotationInterval");function _N(e,t){let r=t.state.path.join("."),s=Kg.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||pu();return i=Math.round(Math.min(i,pu())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),Wg.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(_N,"setDefaultThreads");function ln(e,t){if(!dn.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(dn.isEmpty(gt))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return kr.join(gt,Xg);case"logging.root":return kr.join(gt,Ou);case"clustering.leafServer.streams.path":return kr.join(gt,"clustering","leaf");case"storage.path":return kr.join(gt,Qg.SCHEMA_DIR_NAME);case"logging.rotation.path":return kr.join(gt,Ou);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(ln,"setDefaultRoot");function cN(e){let t=b.object({routes:Sn});return Jg.validateBySchema({routes:e},t)}a(cN,"routesValidator")});var $r=h((XP,Gu)=>{"use strict";var Pe=f(),pe=p(),z=O(),{configValidator:uN,routesValidator:Lu}=bu(),De=require("fs-extra"),EN=require("yaml"),Qe=require("path"),lN=require("is-number"),Uu=require("properties-reader"),dN=require("lodash"),{handleHDBError:SN}=Q(),{HTTP_STATUS_CODES:hN,HDB_ERROR_MSGS:hn}=Me(),TN=require("minimist"),{SCHEMAS_PARAM_CONFIG:Yr,CONFIG_PARAMS:Nt,CONFIG_PARAM_MAP:_t}=Pe,fN="Unable to get config value because config is uninitialized",mN="Config successfully initialized",AN="Error backing up config file",RN="Empty parameter sent to getConfigValue",wu=Qe.join(Pe.PACKAGE_ROOT,"config","yaml",Pe.HDB_DEFAULT_CONFIG_FILE),gN="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",yu={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"},Tn,te;Gu.exports={createConfigFile:NN,getDefaultConfig:pN,getConfigValue:Du,initConfig:Pu,flattenConfig:Vt,updateConfigValue:Hu,updateConfigObject:IN,getConfiguration:LN,setConfiguration:yN,readConfigFile:Fa,getClusteringRoutes:UN,initOldConfig:Bu,getConfigFromFile:wN};function NN(e){let t=lr(wu);Tn=Vt(t.toJSON());let r;for(let o in e){let _=_t[o.toLowerCase()];if(_===Nt.SCHEMAS){r=e[o];continue}if(_!==void 0){let c=_.split("_"),u=Ba(_,e[o]);try{t.setIn([...c],u)}catch(E){z.error(E)}}}r&&Mu(t,r),va(t);let s=t.toJSON();te=Vt(s);let n=t.getIn(["rootPath"]),i=Qe.join(n,Pe.HDB_CONFIG_FILE);De.createFileSync(i),De.writeFileSync(i,String(t)),z.trace(`Config file written to ${i}`)}a(NN,"createConfigFile");function Mu(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!pe.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Yr.TABLES))for(let i in s[n][Yr.TABLES])for(let o in s[n][Yr.TABLES][i]){let _=s[n][Yr.TABLES][i][o],c=[Nt.SCHEMAS,n,Yr.TABLES,i,o];e.hasIn(c)?e.setIn(c,_):e.addIn(c,_)}else for(let i in s[n]){let o=s[n][i],_=[Nt.SCHEMAS,n,i];e.hasIn(_)?e.setIn(_,o):e.addIn(_,o)}}}catch(s){z.error("Error parsing schemas CLI/env config arguments",s)}}a(Mu,"setSchemasConfig");function pN(e){if(Tn===void 0){let r=lr(wu);Tn=Vt(r.toJSON())}let t=_t[e.toLowerCase()];if(t!==void 0)return Tn[t.toLowerCase()]}a(pN,"getDefaultConfig");function Du(e){if(pe.isEmpty(e)){z.error(RN);return}if(te===void 0){z.trace(fN);return}let t=_t[e.toLowerCase()];if(t!==void 0)return te[t.toLowerCase()]}a(Du,"getConfigValue");function Ga(e){let t=TN(process.argv);return t.ROOTPATH?Qe.join(t.ROOTPATH,Pe.HDB_CONFIG_FILE):Uu(e).get(Pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Ga,"getConfigFilePath");function Pu(e=!1){if(te===void 0||e){let t=pe.getPropsFilePath();try{De.accessSync(t,De.constants.F_OK|De.constants.R_OK)}catch(i){throw z.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}let r=Ga(t),s;if(r.includes("config/settings.js"))try{Bu(r);return}catch(i){if(i.code!==Pe.NODE_ERROR_CODES.ENOENT)throw i}try{s=lr(r)}catch(i){if(i.code===Pe.NODE_ERROR_CODES.ENOENT){z.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 z.error(i),new Error(`Error reading HarperDB config file at ${r}`)}ON(s,r),va(s);let n=s.toJSON();if(te=Vt(n),te.logging_rotation_rotate)for(let i in yu)te[i]&&z.error(`Config ${yu[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);z.trace(mN)}}a(Pu,"initConfig");function ON(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Qe.join(r,Pe.SCHEMA_DIR_NAME)),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Qe.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Qe.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(z.trace("Updating config file with missing config params"),De.writeFileSync(t,String(e)))}a(ON,"checkForUpdatedConfig");function va(e){let t=e.toJSON(),r=uN(t);if(r.error)throw hn.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(va,"validateConfig");function IN(e,t){te===void 0&&(te={});let r=_t[e.toLowerCase()];if(r===void 0){z.trace(`Unable to update config object because config param '${e}' does not exist`);return}te[r.toLowerCase()]=t}a(IN,"updateConfigObject");function Hu(e,t,r=void 0,s=!1,n=!1){te===void 0&&Pu();let i=Du(_t.hdb_root),o=Qe.join(i,Pe.HDB_CONFIG_FILE),_=lr(o),c;if(r===void 0&&e.toLowerCase()===Nt.SCHEMAS)c=t;else if(r===void 0){let l=_t[e.toLowerCase()];if(l===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let S=l.split("_"),d=Ba(l,t);_.setIn([...S],d)}else for(let l in r){let S=_t[l.toLowerCase()];if(S===Nt.SCHEMAS){c=r[l];continue}if(S!==void 0){let d=S.split("_"),A=Ba(S,r[l]);try{_.setIn([...d],A)}catch(g){z.error(g)}}}c&&Mu(_,c),va(_);let u=_.getIn(["rootPath"]),E=Qe.join(u,Pe.HDB_CONFIG_FILE);s===!0&&CN(o,u),De.writeFileSync(E,String(_)),n&&(te=Vt(_.toJSON())),z.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Hu,"updateConfigValue");function CN(e,t){try{let r=Qe.join(t,"backup",`${Pe.HDB_CONFIG_FILE}.bak`);De.copySync(e,r),z.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){z.error(AN),z.error(r)}}a(CN,"backupConfigFile");var bN=["schemas"];function Vt(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!bN.includes(r)){let s=Vt(e[r]);for(let n in s)s.hasOwnProperty(n)&&(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}a(Vt,"flattenConfig");function Ba(e,t){if(e===Nt.CLUSTERING_NODENAME||e===Nt.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(lN(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||pe.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 pe.autoCast(t)}a(Ba,"castConfigValue");function LN(){let e=pe.getPropsFilePath(),t=Ga(e);return lr(t).toJSON()}a(LN,"getConfiguration");async function yN(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Hu(void 0,void 0,n,!0),gN}catch(i){throw typeof i=="string"||i instanceof String?SN(i,i,hN.BAD_REQUEST,void 0,void 0,!0):i}}a(yN,"setConfiguration");function Fa(){let e=pe.getPropsFilePath();try{De.accessSync(e,De.constants.F_OK|De.constants.R_OK)}catch(s){throw z.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Ga(e);return lr(t).toJSON()}a(Fa,"readConfigFile");function lr(e){return EN.parseDocument(De.readFileSync(e,"utf8"),{simpleKeys:!0})}a(lr,"parseYamlDoc");function UN(){let e=Fa(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=pe.isEmptyOrZeroLength(t)?[]:t;let r=Lu(t);if(r)throw hn.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=pe.isEmptyOrZeroLength(s)?[]:s;let n=Lu(s);if(n)throw hn.CONFIG_VALIDATION(n.message);if(!pe.isEmptyOrZeroLength(s)&&!pe.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(_=>_.host===o.host&&_.port===o.port));if(!pe.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw hn.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(UN,"getClusteringRoutes");function Bu(e){let t=Uu(e);te={};for(let r in _t){let s=t.get(r.toUpperCase());if(pe.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=_t[r].toLowerCase();n===Nt.LOGGING_ROOT?te[n]=Qe.dirname(s):te[n]=s}return te}a(Bu,"initOldConfig");function wN(e){let t=Fa();return dN.get(t,e.replaceAll("_","."))}a(wN,"getConfigFromFile")});var J=h((zP,Fu)=>{"use strict";var qa=require("fs-extra"),Je=require("path"),MN=require("os"),DN=require("properties-reader"),Kr=O(),dr=p(),N=f(),fn=$r(),PN="Error initializing environment manager",mn="BOOT_PROPS_FILE_PATH",vu=!1,HN={[N.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[N.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[N.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},ct={};Fu.exports={BOOT_PROPS_FILE_PATH:mn,getHdbBasePath:BN,setHdbBasePath:GN,get:vN,initSync:qN,setProperty:D,initTestEnvironment:xN};function BN(){return ct[N.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(BN,"getHdbBasePath");function GN(e){ct[N.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(GN,"setHdbBasePath");function vN(e){let t=fn.getConfigValue(e);return t===void 0?ct[e]:t}a(vN,"get");function D(e,t){HN[e]&&(ct[e]=t),fn.updateConfigObject(e,t)}a(D,"setProperty");function FN(){let e;try{e=dr.getPropsFilePath(),qa.accessSync(e,qa.constants.F_OK|qa.constants.R_OK),vu=!0;let t=DN(e);return ct[N.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(N.HDB_SETTINGS_NAMES.INSTALL_USER),ct[N.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(N.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),ct[mn]=e,!0}catch{return Kr.trace(`Environment manager found no properties file at ${e}`),!1}}a(FN,"doesPropFileExist");function qN(e=!1){try{(vu||FN())&&(fn.initConfig(e),ct[N.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=fn.getConfigValue(N.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Kr.error(PN),Kr.error(t),console.error(t),process.exit(1)}}a(qN,"initSync");function xN(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:_}=e,c=Je.join(__dirname,"../../","unitTests");ct[mn]=Je.join(c,"hdb_boot_properties.file"),D(N.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Je.join(c,"settings.test")),D(N.HDB_SETTINGS_NAMES.INSTALL_USER,MN.userInfo().username),D(N.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Je.join(c,"envDir","utility","keys","privateKey.pem")),D(N.HDB_SETTINGS_NAMES.CERT_KEY,Je.join(c,"envDir","utility","keys","certificate.pem")),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Je.join(c,"envDir","utility","keys","privateKey.pem")),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Je.join(c,"envDir","utility","keys","certificate.pem")),D(N.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),D(N.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Je.join(c,"envDir","log")),D(N.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),D(N.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),D(N.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),D(N.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Je.join(c,"envDir")),D(N.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,dr.isEmpty(n)?!0:n),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,dr.isEmpty(n)?!0:n),D(N.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),D(N.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,dr.isEmpty(i)?!1:i),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,dr.isEmpty(i)?!1:i),D(N.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),D(N.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),D(N.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),D(N.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),D(N.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Je.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),D(N.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,dr.isEmpty(_)?!1:_),o&&(D("CORS_ACCESSLIST",o),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(D(N.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(D(N.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(D(N.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${mn}. Please check your boot props and settings files`;Kr.fatal(r),Kr.error(t)}}a(xN,"initTestEnvironment")});var Vu=h((eH,xu)=>{"use strict";var xa=J(),qu=f();xa.initSync();var VN=xa.get(qu.CONFIG_PARAMS.STORAGE_COMPRESSION),kN=xa.get(qu.CONFIG_PARAMS.STORAGE_CACHING)!==!1,An=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=VN&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=kN&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(An,"OpenDBIObject");xu.exports=An});var $u=h((rH,Yu)=>{"use strict";var Sr=J(),Wr=f();Sr.initSync();var YN=Sr.get(Wr.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Sr.get(Wr.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Sr.get(Wr.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",ku=Sr.get(Wr.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),$N=Sr.get(Wr.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Rn=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=YN,ku!==void 0&&(this.overlappingSync=ku),this.noReadAhead=$N}};a(Rn,"OpenEnvironmentObject");Yu.exports=Rn});var q=h((nH,zu)=>{"use strict";var Va=require("lmdb"),He=require("fs-extra"),xe=require("path"),Nn=qt(),Ku=O(),re=Me().LMDB_ERRORS_ENUM,pn=Ru(),ka=Vu(),Wu=$u(),pt=ne(),Ve=pt.INTERNAL_DBIS_NAME,Qu=pt.DBI_DEFINITION_NAME,KN="data.mdb",WN="lock.mdb",Qr=".mdb",QN="-lock",gn=class{constructor(t,r,s=!1){this.dbi=Be(t,r),this.key_type=this.dbi[pt.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[pt.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Va.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(gn,"TransactionCursor");function Ya(e,t){if(e===void 0)throw new Error(re.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(re.ENV_NAME_REQUIRED)}a(Ya,"pathEnvNameValidation");async function $a(e,t,r=!0){try{await He.access(e)}catch(s){throw s.code==="ENOENT"?new Error(re.INVALID_BASE_PATH):s}try{let s=xe.join(e,t+Qr);return await He.access(s,He.constants.R_OK|He.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await He.access(xe.join(e,t,KN),He.constants.R_OK|He.constants.F_OK),xe.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(re.INVALID_ENVIRONMENT)}else throw new Error(re.INVALID_ENVIRONMENT);throw s}}a($a,"validateEnvironmentPath");function On(e,t){if(Nn.validateEnv(e),t===void 0)throw new Error(re.DBI_NAME_REQUIRED)}a(On,"validateEnvDBIName");async function JN(e,t,r=!1,s=!1){Ya(e,t),t=t.toString();try{return await $a(e,t,s),Ka(e,t,r)}catch(n){if(n.message===re.INVALID_ENVIRONMENT){let i=xe.join(e,t);await He.mkdirp(s?i:e);let o=new Wu(s?i:i+Qr,!1),_=Va.open(o);_.dbis=Object.create(null);let c=new ka(!1);_.openDB(Ve,c),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=Wa(e,t,r);return _[pt.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=_,_}throw n}}a(JN,"createEnvironment");async function XN(e,t,r,s=!0){let n=await Ka(e,t);if(r===void 0)throw new Error(re.DESTINATION_PATH_REQUIRED);try{await He.access(xe.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(re.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(XN,"copyEnvironment");async function Ka(e,t,r=!1){Ya(e,t),t=t.toString();let s=Wa(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 $a(e,t),i=xe.join(e,t+Qr),o=n!=i,_=new Wu(n,o),c=Va.open(_);c.dbis=Object.create(null);let u=Xu(c);for(let E=0;E<u.length;E++)Be(c,u[E]);return c[pt.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=c,c}a(Ka,"openEnvironment");async function ZN(e,t,r=!1){Ya(e,t),t=t.toString();let s=xe.join(e,t+Qr),n=await $a(e,t);if(global.lmdb_map!==void 0){let i=Wa(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Ju(o),delete global.lmdb_map[i]}}await He.remove(n),await He.remove(n===s?n+QN:xe.join(xe.dirname(n),WN))}a(ZN,"deleteEnvironment");async function Ju(e){Nn.validateEnv(e);let t=e[pt.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Ju,"closeEnvironment");function Wa(e,t,r=!1){let n=`${xe.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Wa,"getCachedEnvironmentName");function zN(e){Nn.validateEnv(e);let t=Object.create(null),r=Be(e,Ve);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Ve)try{t[s]=Object.assign(new pn,n)}catch{Ku.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(zN,"listDBIDefinitions");function Xu(e){Nn.validateEnv(e);let t=[],r=Be(e,Ve);for(let{key:s}of r.getRange({start:!1}))s!==Ve&&t.push(s);return t}a(Xu,"listDBIs");function jN(e,t){let s=Be(e,Ve).getEntry(t),n=new pn;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{Ku.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(jN,"getDBIDefinition");function Zu(e,t,r,s=!1){if(On(e,t),t=t.toString(),t===Ve)throw new Error(re.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Be(e,t)}catch(n){if(n.message===re.DBI_DOES_NOT_EXIST){let i=new ka(r,s===!0),o=e.openDB(t,i),_=new pn(r===!0,s);return o[Qu]=_,Be(e,Ve).putSync(t,_),e.dbis[t]=o,o}throw n}}a(Zu,"createDBI");function Be(e,t){if(On(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Ve?r=jN(e,t):r=new pn,r===void 0)throw new Error(re.DBI_DOES_NOT_EXIST);let s;try{let n=new ka(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(re.DBI_DOES_NOT_EXIST):n}return s[Qu]=r,e.dbis[t]=s,s}a(Be,"openDBI");function ep(e,t){On(e,t),t=t.toString();let r=Be(e,t),s=r.getStats();return r[pt.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(ep,"statDBI");async function tp(e,t){try{let r=xe.join(e,t+Qr);return(await He.stat(r)).size}catch{throw new Error(re.INVALID_ENVIRONMENT)}}a(tp,"environmentDataSize");function rp(e,t){if(On(e,t),t=t.toString(),t===Ve)throw new Error(re.CANNOT_DROP_INTERNAL_DBIS_NAME);Be(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Be(e,Ve).removeSync(t)}a(rp,"dropDBI");function sp(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{Be(e,n)}catch(i){if(i.message===re.DBI_DOES_NOT_EXIST)Zu(e,n,n!==t,n===t);else throw i}}}a(sp,"initializeDBIs");zu.exports={openDBI:Be,openEnvironment:Ka,createEnvironment:JN,listDBIs:Xu,listDBIDefinitions:zN,createDBI:Zu,dropDBI:rp,statDBI:ep,deleteEnvironment:ZN,initializeDBIs:sp,TransactionCursor:gn,environmentDataSize:tp,copyEnvironment:XN,closeEnvironment:Ju}});var eE=h((aH,ju)=>{"use strict";var In=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(In,"InsertRecordsResponseObject");ju.exports=In});var rE=h((_H,tE)=>{"use strict";var Cn=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(Cn,"UpdateRecordsResponseObject");tE.exports=Cn});var nE=h((uH,sE)=>{"use strict";var bn=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(bn,"UpsertRecordsResponseObject");sE.exports=bn});var hr=h((hH,oE)=>{"use strict";var np=q(),ip=eE(),ap=rE(),op=nE(),Xe=qt(),Jr=Me().LMDB_ERRORS_ENUM,_p=ne(),ut=f(),cp=p(),up=require("uuid"),lH=require("lmdb"),{handleHDBError:Ep,hdb_errors:lp}=Q(),{OVERFLOW_MARKER:dH,MAX_SEARCH_KEY_LENGTH:SH}=_p,iE=J();iE.initSync();var Ln=iE.get(ut.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Qa=ut.TIME_STAMP_NAMES_ENUM.CREATED_TIME,kt=ut.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function dp(e,t,r,s,n=Xe.getNextMonotonicTime()){za(e,t,r,s),Ja(e,t,r);let i=new ip,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c];aE(u,!0,n);let E=Sp(e,t,r,u),l=u[t];o.push(E),_.push(l)}return Xa(o,_,s,i,n)}a(dp,"insertRecords");function Sp(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let _=s[o];if(typeof _=="function"){let E=_([[{}]]);Array.isArray(E)&&(_=E[0][ut.FUNC_VAL],s[o]=_)}let c=Xe.getIndexedValues(_),u=e.dbis[o];if(c){Ln&&u.prefetch(c.map(E=>({key:E,value:n})),yn);for(let E=0,l=c.length;E<l;E++)u.put(c[E],n)}}Ln&&e.dbis[t].prefetch([n],yn),e.dbis[t].put(n,s,s[kt])})}a(Sp,"insertRecord");function hp(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(hp,"removeSkippedRecords");function aE(e,t,r){let s=r>0;(s||!Number.isInteger(e[kt]))&&(e[kt]=r||(r=Xe.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Qa]))&&(e[Qa]=r||Xe.getNextMonotonicTime()):delete e[Qa]}a(aE,"setTimestamps");function Ja(e,t,r){r.indexOf(ut.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ut.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ut.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ut.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),np.initializeDBIs(e,t,r)}a(Ja,"initializeTransaction");async function Tp(e,t,r,s,n=Xe.getNextMonotonicTime()){za(e,t,r,s),Ja(e,t,r);let i=new ap,o=[],_=[],c=[];for(let u=0;u<s.length;u++){let E=s[u],l=E[t],S;try{S=Za(e,t,E,l,i,!0,n)}catch{i.skipped_hashes.push(l),o.push(u);continue}_.push(S),c.push(l)}return Xa(_,c,s,i,n,o)}a(Tp,"updateRecords");async function fp(e,t,r,s,n=Xe.getNextMonotonicTime()){try{za(e,t,r,s)}catch(c){throw Ep(c,c.message,lp.HTTP_STATUS_CODES.BAD_REQUEST)}Ja(e,t,r);let i=new op,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c],E;cp.isEmpty(u[t])?(E=up.v4(),u[t]=E):E=u[t];let l=Za(e,t,u,E,i,!1,n);o.push(l),_.push(E)}return Xa(o,_,s,i,n)}a(fp,"upsertRecords");async function Xa(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let _=0,c=o.length;_<c;_++)o[_]===!0?s.written_hashes.push(t[_]):(s.skipped_hashes.push(t[_]),i.push(_));return s.txn_time=n||Xe.getNextMonotonicTime(),hp(r,i),s}a(Xa,"finalizeWrite");function Za(e,t,r,s,n,i=!1,o){let _=e.dbis[t],c=_.getEntry(s),u=c?.value,E=u;if(!u){if(i)return!1;u={}}if(aE(r,!E,o),Number.isInteger(r[kt])&&u[kt]>r[kt])return!1;E&&n.original_records.push(u);let l,S=a(()=>{for(let A in r){if(!r.hasOwnProperty(A)||A===t)continue;let g=r[A],y=e.dbis[A];if(y===void 0)continue;let $=u[A];if(typeof g=="function"){let v=g([[u]]);Array.isArray(v)&&(g=v[0][ut.FUNC_VAL],r[A]=g)}if(g===$)continue;let x=Xe.getIndexedValues($);if(x){Ln&&y.prefetch(x.map(v=>({key:v,value:s})),yn);for(let v=0,we=x.length;v<we;v++)y.remove(x[v],s)}if(x=Xe.getIndexedValues(g),x){Ln&&y.prefetch(x.map(v=>({key:v,value:s})),yn);for(let v=0,we=x.length;v<we;v++)y.put(x[v],s)}}let d=Object.assign({},u,r);_.put(s,d,d[kt])},"do_put");return c?l=_.ifVersion(s,c.version,S):l=_.ifNoExists(s,S),l.then(d=>d?!0:Za(e,t,r,s,n,i,o))}a(Za,"updateUpsertRecord");function mp(e,t,r){if(Xe.validateEnv(e),t===void 0)throw new Error(Jr.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Jr.WRITE_ATTRIBUTES_REQUIRED):new Error(Jr.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(mp,"validateBasic");function za(e,t,r,s){if(mp(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Jr.RECORDS_REQUIRED):new Error(Jr.RECORDS_MUST_BE_ARRAY)}a(za,"validateWrite");function yn(){}a(yn,"noop");oE.exports={insertRecords:dp,updateRecords:Tp,upsertRecords:fp}});var Y=h((fH,dE)=>{"use strict";var es=f(),Ap=p(),Se=J(),ts=require("path"),Rp=require("minimist"),_E=require("fs-extra"),cE=require("lodash");Se.initSync();var{CONFIG_PARAMS:Ot,SCHEMAS_PARAM_CONFIG:Xr,SYSTEM_SCHEMA_NAME:Un}=es,Zr,zr,jr;function uE(){if(Zr!==void 0)return Zr;if(Se.getHdbBasePath()!==void 0)return Zr=Se.get(Ot.STORAGE_PATH)||ts.join(Se.getHdbBasePath(),es.SCHEMA_DIR_NAME),Zr}a(uE,"getBaseSchemaPath");function EE(){if(zr!==void 0)return zr;if(Se.getHdbBasePath()!==void 0)return zr=lE(Un),zr}a(EE,"getSystemSchemaPath");function gp(){if(jr!==void 0)return jr;if(Se.getHdbBasePath()!==void 0)return jr=Se.get(es.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||ts.join(Se.getHdbBasePath(),es.TRANSACTIONS_DIR_NAME),jr}a(gp,"getTransactionAuditStoreBasePath");function Np(e,t){let r=Se.get(Ot.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||ts.join(gp(),e.toString())}a(Np,"getTransactionAuditStorePath");function lE(e,t){e=e.toString(),t=t&&t.toString();let r=Se.get(es.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||ts.join(uE(),e)}a(lE,"getSchemaPath");function pp(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,Rp(process.argv));let s=r[Ot.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!Ap.isObject(s))throw o;i=s}for(let o of i){let _=o[Un];if(!_)continue;let c=Se.get(Ot.SCHEMAS);c=c??{};let u=_?.tables?.[t]?.[Xr.PATH];if(u)return cE.set(c,[Un,Xr.TABLES,t,Xr.PATH],u),Se.setProperty(Ot.SCHEMAS,c),u;let E=_?.[Xr.PATH];if(E)return cE.set(c,[Un,Xr.PATH],E),Se.setProperty(Ot.SCHEMAS,c),E}}let n=r[Ot.STORAGE_PATH.toUpperCase()];if(n){if(!_E.pathExistsSync(n))throw new Error(n+" does not exist");let i=ts.join(n,e);return _E.mkdirsSync(i),Se.setProperty(Ot.STORAGE_PATH,n),i}return EE()}a(pp,"initSystemSchemaPaths");function Op(){Zr=void 0,zr=void 0,jr=void 0}a(Op,"resetPaths");dE.exports={getBaseSchemaPath:uE,getSystemSchemaPath:EE,getTransactionAuditStorePath:Np,getSchemaPath:lE,initSystemSchemaPaths:pp,resetPaths:Op}});var Yt=h((AH,Ip)=>{Ip.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 ja=h((RH,SE)=>{var{common_validators:It}=Er(),rs=at(),ke="is required",V={schema:{presence:!0,format:It.schema_format,length:It.schema_length},table:{presence:!0,format:It.schema_format,length:It.schema_length},attribute:{presence:!0,format:It.schema_format,length:It.schema_length},hash_attribute:{presence:!0,format:It.schema_format,length:It.schema_length}};function ss(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(ss,"makeAttributesStrings");function Cp(e){return e=ss(e),V.schema.presence={message:ke},V.table.presence=!1,V.attribute.presence=!1,V.hash_attribute.presence=!1,rs.validateObject(e,V)}a(Cp,"schema_object");function bp(e){return e=ss(e),V.schema.presence={message:ke},V.table.presence={message:ke},V.attribute.presence=!1,V.hash_attribute.presence=!1,rs.validateObject(e,V)}a(bp,"table_object");function Lp(e){return e=ss(e),V.schema.presence={message:ke},V.table.presence={message:ke},V.attribute.presence=!1,V.hash_attribute.presence={message:ke},rs.validateObject(e,V)}a(Lp,"create_table_object");function yp(e){return e=ss(e),V.schema.presence={message:ke},V.table.presence={message:ke},V.attribute.presence={message:ke},V.hash_attribute.presence=!1,rs.validateObject(e,V)}a(yp,"attribute_object");function Up(e){return e=ss(e),V.schema.presence={message:ke},V.table.presence={message:ke},V.attribute.presence=!1,V.hash_attribute.presence=!1,rs.validateObject(e,V)}a(Up,"describe_table");function wp(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(wp,"validateTableResidence");SE.exports={schema_object:Cp,create_table_object:Lp,table_object:bp,attribute_object:yp,describe_table:Up,validateTableResidence:wp}});var TE=h((NH,hE)=>{"use strict";var Mp=require("uuid"),wn=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Mp.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(wn,"CreateAttributeObject");hE.exports=wn});var Dn=h((OH,fE)=>{"use strict";var Dp=TE(),Mn=class extends Dp{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(Mn,"LMDBCreateAttributeObject");fE.exports=Mn});var AE=h((CH,mE)=>{"use strict";mE.exports=Hp;var Pp="inserted";function Hp(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Pp?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Hp,"returnObject")});var Pn=h((LH,OE)=>{"use strict";var Bp=f(),eo=q(),Gp=hr(),{getSystemSchemaPath:vp,getSchemaPath:Fp}=Y(),qp=Yt(),xp=ja(),Vp=Dn(),kp=AE(),{handleHDBError:RE,hdb_errors:NE}=Q(),gE=p(),{HTTP_STATUS_CODES:Yp}=NE,to=qp.hdb_attribute,pE=[];for(let e=0;e<to.attributes.length;e++)pE.push(to.attributes[e].attribute);var $p="inserted";OE.exports=Kp;async function Kp(e){let t=xp.attribute_object(e);if(t)throw RE(new Error,t.message,NE.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&gE.checkGlobalSchemaTable(e.schema,e.table);if(r)throw RE(new Error,r,Yp.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=gE.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 Vp(e.schema,e.table,e.attribute,e.id);try{let i=await eo.openEnvironment(Fp(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}`);eo.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await eo.openEnvironment(vp(),Bp.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:_,skipped_hashes:c}=await Gp.insertRecords(o,to.hash_attribute,pE,[n]);return kp($p,_,{records:[n]},c)}catch(i){throw i}}a(Kp,"lmdbCreateAttribute")});var Hn=h((wH,CE)=>{"use strict";var Et=p(),IE=O(),UH=Da();CE.exports=Wp;function Wp(e){if(Et.isEmpty(e))throw new Error("invalid update parameters defined.");if(Et.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Et.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(Et.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&&Et.isEmptyOrZeroLength(o[r]))throw IE.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(!Et.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw IE.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`);!Et.isEmpty(o[r])&&o[r]!==""&&s.has(Et.autoCast(o[r]))&&(o.skip=!0),s.add(Et.autoCast(o[r]));for(let _ in o)n[_]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(Wp,"insertUpdateValidate")});var Gn=h((DH,bE)=>{"use strict";var Qp=f().OPERATIONS_ENUM,Bn=class{constructor(t,r,s,n,i=void 0){this.operation=Qp.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(Bn,"InsertObject");bE.exports=Bn});var Fn=h((BH,LE)=>{"use strict";var HH=Gn(),vn=f(),so=p(),ro=O(),Jp=require("uuid"),{handleHDBError:ns,hdb_errors:Xp}=Q(),{HDB_ERROR_MSGS:is,HTTP_STATUS_CODES:as}=Xp;LE.exports=Zp;function Zp(e,t,r){for(let n=0;n<t.length;n++)zp(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];jp(i,r,e.operation)}}a(Zp,"processRows");function zp(e){if(Buffer.byteLength(String(e))>vn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ns(new Error,is.ATTR_NAME_LENGTH_ERR(e),as.BAD_REQUEST,void 0,void 0,!0);if(so.isEmptyOrZeroLength(e)||so.isEmpty(e.trim()))throw ns(new Error,is.ATTR_NAME_NULLISH_ERR,as.BAD_REQUEST,void 0,void 0,!0)}a(zp,"validateAttribute");function jp(e,t,r){if(!e.hasOwnProperty(t)||so.isEmptyOrZeroLength(e[t])){if(r===vn.OPERATIONS_ENUM.INSERT||r===vn.OPERATIONS_ENUM.UPSERT){e[t]=Jp.v4();return}throw ro.error("Update transaction aborted due to record with no hash value:",e),ns(new Error,is.RECORD_MISSING_HASH_ERR,as.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>vn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ro.error(e),ns(new Error,is.HASH_VAL_LENGTH_ERR,as.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw ro.error(e),ns(new Error,is.INVALID_FORWARD_SLASH_IN_HASH_ERR,as.BAD_REQUEST,void 0,void 0,!0)}a(jp,"validateHash")});var UE=h((vH,yE)=>{"use strict";var qn=class{constructor(t,r){this.type=t,this.message=r}};a(qn,"ITCEventObject");yE.exports=qn});var xn=h((qH,DE)=>{var eO=require("crypto"),wE=9;function tO(e){let t=sO(wE),r=ME(e+t);return t+r}a(tO,"createHash");function rO(e,t){let r=e.substr(0,wE),s=r+ME(t+r);return e===s}a(rO,"validateHash");function sO(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(sO,"generateSalt");function ME(e){return eO.createHash("md5").update(e).digest("hex")}a(ME,"md5");DE.exports={hash:tO,validate:rO}});var HE=h((VH,PE)=>{"use strict";var Ct=f(),os=class{constructor(t=0,r=Ct.STORAGE_TYPES_ENUM.LMDB,s=Ct.LICENSE_VALUES.API_CALL_DEFAULT,n=Ct.RAM_ALLOCATION_ENUM.DEFAULT,i=Ct.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(os,"BaseLicense");var Vn=class extends os{constructor(t=0,r=Ct.STORAGE_TYPES_ENUM.LMDB,s=Ct.LICENSE_VALUES.API_CALL_DEFAULT,n=Ct.RAM_ALLOCATION_ENUM.DEFAULT,i=Ct.LICENSE_VALUES.VERSION_DEFAULT,o,_=!1){super(t,r,s,n,i,o),this.enterprise=_}};a(Vn,"ExtendedLicense");PE.exports={BaseLicense:os,ExtendedLicense:Vn}});var kn=h((YH,xE)=>{"use strict";var fr=require("fs-extra"),BE=xn(),GE=require("crypto"),nO=require("moment"),iO=require("uuid").v4,oe=O(),io=require("path"),aO=p(),Oe=f(),oO=HE().ExtendedLicense,Tr="invalid license key format",_O="061183",cO="mofi25",uO="aes-256-cbc",EO=16,lO=32,vE=J();vE.initSync();var no;xE.exports={validateLicense:FE,generateFingerPrint:SO,licenseSearch:qE,getLicense:fO};function ao(){return io.join(vE.getHdbBasePath(),Oe.LICENSE_KEY_DIR_NAME,Oe.LICENSE_FILE_NAME)}a(ao,"getLicenseDirPath");function dO(){let e=ao();return io.join(e,Oe.LICENSE_FILE_NAME)}a(dO,"getLicenseFilePath");function oo(){let e=ao();return io.join(e,Oe.REG_KEY_FILE_NAME)}a(oo,"getFingerPrintFilePath");async function SO(){let e=oo();try{return await fr.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await hO();throw oe.error(`Error writing fingerprint file to ${e}`),oe.error(t),new Error("There was an error generating the fingerprint")}}a(SO,"generateFingerPrint");async function hO(){let e=iO(),t=BE.hash(e),r=oo();try{await fr.mkdirp(ao()),await fr.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw oe.error(`Error writing fingerprint file to ${r}`),oe.error(s),new Error("There was an error generating the fingerprint")}return t}a(hO,"writeFingerprint");function FE(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Oe.STORAGE_TYPES_ENUM.LMDB,api_call:Oe.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Oe.RAM_ALLOCATION_ENUM.DEFAULT,version:Oe.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return oe.error("empty license key passed to validate."),r;let s=oo(),n=!1;try{n=fr.statSync(s)}catch(i){oe.error(i)}if(n){let i;try{i=fr.readFileSync(s,"utf8")}catch{oe.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(cO),_=o[1];_=Buffer.concat([Buffer.from(_)],EO);let c=Buffer.concat([Buffer.from(i)],lO),u=GE.createDecipheriv(uO,c,_);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let E=null;try{E=u.update(o[0],"hex","utf8"),E.trim(),E+=u.final("utf8")}catch{let d=TO(o[0],i);if(d)E=d;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Tr),oe.error(Tr),new Error(Tr)}let l;if(isNaN(E))try{l=JSON.parse(E),r.api_call=l.api_call,r.version=l.version,r.storage_type=l.storage_type,r.exp_date=l.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),l.ram_allocation&&(r.ram_allocation=l.ram_allocation)}catch{throw console.error(Tr),oe.error(Tr),new Error(Tr)}else r.exp_date=E;r.exp_date<nO().valueOf()&&(r.valid_date=!1),BE.validate(o[1],`${_O}${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||oe.error("Invalid licence"),r}a(FE,"validateLicense");function TO(e,t){try{let r=GE.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{oe.warn("Check old license failed")}}a(TO,"checkOldLicense");function qE(){let e=new oO;e.api_call=0;let t=[];try{t=fr.readFileSync(dO(),"utf-8").split(Oe.NEW_LINE)}catch(r){r.code==="ENOENT"?oe.info("no license file found"):oe.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(aO.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=FE(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){oe.error("There was an error parsing the license string."),oe.error(n),e.api_call=Oe.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Oe.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Oe.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Oe.LICENSE_VALUES.API_CALL_DEFAULT),no=e,e}a(qE,"licenseSearch");async function fO(){return no||await qE(),no}a(fO,"getLicense")});var Kn=h((KH,So)=>{"use strict";var{Worker:mO,MessageChannel:AO,parentPort:lt,isMainThread:YE,threadId:RO,workerData:gO}=require("worker_threads"),{PACKAGE_ROOT:NO}=f(),{join:pO,isAbsolute:OO,extname:IO}=require("path"),{totalmem:VE}=require("os"),Eo=f(),$E=J(),CO=kn(),Yn=O(),bO=f();$E.initSync();var LO=$E.get(Eo.CONFIG_PARAMS.HTTP_THREADS)||1,yO=1024*1024,bt=[],$t=[],UO=50,KE=1e4,WE="restart",QE="request_thread_info",JE="resource_report",XE="thread_info",ZE="added-port",_o;So.exports={startWorker:co,restartWorkers:lo,shutdownWorkers:MO,workers:bt,setMonitorListener:GO,onMessageFromWorkers:DO,broadcast:PO};function co(e,t={}){let s=CO.licenseSearch().ram_allocation,n=process.constrainedMemory?.()||VE();n=Math.min(n,VE());let i=Math.min(Math.max(Math.floor(n/yO/(1+LO/4)),512),s||1/0),o=Math.min(Math.max(i>>7,16),64),_=[];for(let u of $t){let{port1:E,port2:l}=new AO;u.postMessage({type:ZE,port:E},[E]),_.push(l)}IO(e)||(e+=".js");let c=new mO(OO(e)?e:pO(NO,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:i,maxYoungGenerationSizeMb:o},argv:process.argv.slice(2),workerData:{addPorts:_,name:t.name},transferList:_},t));return $n(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>{co(e,t)},c.on("error",u=>{console.error("Worker error:",u),Yn.error("Worker error:",u)}),c.on("exit",u=>{bt.splice(bt.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<UO?(t.unexpectedRestarts=c.unexpectedRestarts+1,co(e,t)):Yn.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{u.type===WE&&lo(u.workerType),u.type===QE&&HO(c),u.type===JE&&BO(c,u)}),bt.push(c),FO(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(co,"startWorker");var wO=[Eo.THREAD_TYPES.HTTP];async function lo(e=null,t=2,r=!0){if(YE){t<1&&(t=t*bt.length);let s=[];for(let n of bt.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({type:Eo.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=wO.indexOf(n.name)>-1,o=new Promise(_=>{let c=setTimeout(()=>n.terminate(),KE*2).unref();n.on("exit",()=>{clearTimeout(c),s.splice(s.indexOf(o)),!i&&r&&n.startCopy(),_()})});s.push(o),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else lt.postMessage({type:WE,workerType:e})}a(lo,"restartWorkers");function MO(e){return lo(e,1/0,!1)}a(MO,"shutdownWorkers");var zE=[];function DO(e){zE.push(e)}a(DO,"onMessageFromWorkers");function PO(e){for(let t of $t)try{t.postMessage(e)}catch(r){Yn.error("Unable to send message to worker",r)}}a(PO,"broadcast");function HO(e){e.postMessage({type:XE,workers:jE()})}a(HO,"sendThreadInfo");function jE(){let e=Date.now();return bt.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(jE,"getChildWorkerInfo");function BO(e,t){e.resources=t,e.resources.updated=Date.now()}a(BO,"recordResourceReport");var uo;function GO(e){uo=e}a(GO,"setMonitorListener");var vO=1e3,kE=!1;function FO(){kE||(kE=!0,setInterval(()=>{for(let e of bt){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}uo&&uo()},vO).unref())}a(FO,"startMonitoring");var qO=1e3;if(lt){$n(lt);for(let e of gO.addPorts)$n(e);setInterval(()=>{let e=process.memoryUsage();lt.postMessage({type:JE,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},qO).unref(),_o=a(()=>new Promise((e,t)=>{lt.on("message",r),lt.postMessage({type:QE});function r(s){s.type===XE&&(lt.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else _o=jE;So.exports.getThreadInfo=_o;function $n(e,t){$t.push(e),e.on("message",r=>{if(r.type===ZE)$n(r.port);else for(let s of zE)s(r)}).on("close",()=>{$t.splice($t.indexOf(e),1)}).on("exit",()=>{$t.splice($t.indexOf(e),1)}),t||e.unref()}a($n,"addPort");YE||lt.on("message",async e=>{let{type:t}=e;t===bO.ITC_EVENT_TYPES.SHUTDOWN&&(lt.unref(),setTimeout(()=>{Yn.warn("Thread did not voluntarily terminate",RO),process.exit(0)},KE).unref())})});var rl=h((QH,tl)=>{"use strict";var ho=q(),xO=O(),el=Me().LMDB_ERRORS_ENUM;tl.exports=VO;async function VO(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 ho.closeEnvironment(global.lmdb_map[o])}catch(_){if(_.message!==el.ENV_REQUIRED)throw _}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await ho.closeEnvironment(global.lmdb_map[s]),await ho.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==el.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){xO.error(t)}}a(VO,"cleanLMDBMap")});var hl=h((ZH,Sl)=>{"use strict";var To=require("recursive-iterator"),kO=require("alasql"),fo=require("clone"),sl=p(),{handleHDBError:nl,hdb_errors:YO}=Q(),{HDB_ERROR_MSGS:il,HTTP_STATUS_CODES:al}=YO,$O=["DISTINCT_ARRAY"],ol=Symbol("validateTables"),mo=Symbol("validateTable"),XH=Symbol("getAllColumns"),_l=Symbol("validateAllColumns"),Wn=Symbol("findColumn"),cl=Symbol("validateOrderBy"),_s=Symbol("validateSegment"),Ao=Symbol("validateColumn"),ul=Symbol("setColumnsForTable"),El=Symbol("checkColumnsForAsterisk"),ll=Symbol("validateGroupBy"),dl=Symbol("hasColumns"),Qn=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[ol](),this[El](),this[_l]()}[ol](){if(this[dl]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[mo](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[mo](t.table)})}}[dl](){let t=!1,r=new To(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[mo](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw nl(new Error,il.SCHEMA_NOT_FOUND(t.databaseid),al.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw nl(new Error,il.TABLE_NOT_FOUND(t.databaseid,t.tableid),al.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=fo(s);n.table=fo(t),this.attributes.push(n)})}[Wn](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)}[El](){let t=new To(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[ul](r.tableid)}[ul](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new kO.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[_l](){this[_s](this.statement.columns,!1),this[_s](this.statement.joins,!1),this[_s](this.statement.where,!1),this[ll](this.statement.group,!1),this[_s](this.statement.order,!0)}[_s](t,r){if(!t)return;let s=new To(t),n=[];for(let{node:i,path:o}of s)!sl.isEmpty(i)&&!sl.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[cl](i):n.push(this[Ao](i)));return n}[ll](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&$O.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=fo(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Wn](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[Wn](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,_)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(_,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[cl](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[Ao](t)}[Ao](t){let r=this[Wn](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(Qn,"SelectValidator");Sl.exports=Qn});var Al=h((jH,ml)=>{"use strict";var Tl=require("lodash"),cs=require("mathjs"),KO=require("jsonata"),fl=p();ml.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Tl.uniqWith(e,Tl.isEqual):e,searchJSON:WO,mad:us.bind(null,cs.mad),mean:us.bind(null,cs.mean),mode:us.bind(null,cs.mode),prod:us.bind(null,cs.prod),median:us.bind(null,cs.median)};function us(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(us,"aggregateFunction");function WO(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(fl.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),fl.isEmpty(this.__ala__.res[r])){let s=KO(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(WO,"searchJSON")});var gl=h((tB,Rl)=>{"use strict";var X=require("moment"),Ro="YYYY-MM-DDTHH:mm:ss.SSSZZ";X.suppressDeprecationWarnings=!0;Rl.exports={current_date:()=>X().utc().format("YYYY-MM-DD"),current_time:()=>X().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return X(e).utc().format("YYYY");case"month":return X(e).utc().format("MM");case"day":return X(e).utc().format("DD");case"hour":return X(e).utc().format("HH");case"minute":return X(e).utc().format("mm");case"second":return X(e).utc().format("ss");case"millisecond":return X(e).utc().format("SSS");default:break}},date:e=>X(e).utc().format(Ro),date_format:(e,t)=>X(e).utc().format(t),date_add:(e,t,r)=>X(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>X(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=X(e).utc(),n=X(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>X().utc().valueOf(),get_server_time:()=>X().format(Ro),offset_utc:(e,t)=>X(e).utc().utcOffset(t).format(Ro)}});var Il=h((rB,Ol)=>{"use strict";var QO=require("@turf/area"),JO=require("@turf/length"),XO=require("@turf/circle"),ZO=require("@turf/difference"),zO=require("@turf/distance"),jO=require("@turf/boolean-contains"),eI=require("@turf/boolean-equal"),tI=require("@turf/boolean-disjoint"),rI=require("@turf/helpers"),Nl=f(),U=p();Ol.exports={geoArea:sI,geoLength:nI,geoCircle:iI,geoDifference:aI,geoDistance:pl,geoNear:oI,geoContains:_I,geoEqual:cI,geoCrosses:uI,geoConvert:EI};var go="geo1 is required",No="geo2 is required";function sI(e){if(U.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),QO.default(e)}a(sI,"geoArea");function nI(e,t){if(U.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),JO.default(e,{units:t||"kilometers"})}a(nI,"geoLength");function iI(e,t,r){if(U.isEmpty(e))throw new Error("point is required");if(U.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),XO.default(e,t,{units:r||"kilometers"})}a(iI,"geoCircle");function aI(e,t){if(U.isEmpty(e))throw new Error("poly1 is required");if(U.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),ZO(e,t)}a(aI,"geoDifference");function pl(e,t,r){if(U.isEmpty(e))throw new Error("point1 is required");if(U.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),zO.default(e,t,{units:r||"kilometers"})}a(pl,"geoDistance");function oI(e,t,r,s){if(U.isEmpty(e))throw new Error("point1 is required");if(U.isEmpty(t))throw new Error("point2 is required");if(U.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return pl(e,t,s)<=r}a(oI,"geoNear");function _I(e,t){if(U.isEmpty(e))throw new Error(go);if(U.isEmpty(e))throw new Error(No);return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),jO.default(e,t)}a(_I,"geoContains");function cI(e,t){if(U.isEmpty(e))throw new Error(go);if(U.isEmpty(e))throw new Error(No);return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),eI.default(e,t)}a(cI,"geoEqual");function uI(e,t){if(U.isEmpty(e))throw new Error(go);if(U.isEmpty(e))throw new Error(No);return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),!tI.default(e,t)}a(uI,"geoCrosses");function EI(e,t,r){if(U.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(U.isEmpty(t))throw new Error("geo_type is required");if(U.isEmpty(Nl.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Nl.GEO_CONVERSION_ENUM).join(",")}`);return rI[t](e,r)}a(EI,"geoConvert")});var bl=h((nB,Cl)=>{var Kt=Al(),Ie=gl(),Ze=Il();Cl.exports=e=>{e.aggr.mad=e.aggr.MAD=Kt.mad,e.aggr.mean=e.aggr.MEAN=Kt.mean,e.aggr.mode=e.aggr.MODE=Kt.mode,e.aggr.prod=e.aggr.PROD=Kt.prod,e.aggr.median=e.aggr.MEDIAN=Kt.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Kt.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Kt.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Ie.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Ie.current_time,e.fn.extract=e.fn.EXTRACT=Ie.extract,e.fn.date=e.fn.DATE=Ie.date,e.fn.date_format=e.fn.DATE_FORMAT=Ie.date_format,e.fn.date_add=e.fn.DATE_ADD=Ie.date_add,e.fn.date_sub=e.fn.DATE_SUB=Ie.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Ie.date_diff,e.fn.now=e.fn.NOW=Ie.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Ie.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Ie.get_server_time,e.fn.getdate=e.fn.GETDATE=Ie.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Ie.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Ze.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ze.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ze.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ze.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ze.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ze.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ze.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ze.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ze.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ze.geoNear}});var Ul=h((iB,yl)=>{"use strict";var Es=require("lodash"),se=require("alasql");se.options.cache=!1;var lI=bl(),Ll=require("clone"),Jn=require("recursive-iterator"),I=O(),L=p(),mr=Wt(),dI=f(),{hdb_errors:SI}=Q(),hI="IS NULL",Ye="There was a problem performing this search. Please check the logs and try again.";lI(se);var Xn=class{constructor(t,r){if(L.isEmpty(t))throw I.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(),L.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!L.isEmptyOrZeroLength(s))return I.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw I.error("Error thrown from checkEmptySQL in SQLSearch class method search."),I.error(s),new Error(Ye)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw I.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),I.error(s),new Error(Ye)}if(Object.keys(this.data).length===0)return I.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw I.error("Error thrown from processJoins in SQLSearch class method search."),I.error(s),new Error(Ye)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw I.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),I.error(s),new Error(Ye)}try{return t=await this._finalSQL(),t}catch(s){throw I.error("Error thrown from finalSQL in SQLSearch class method search."),I.error(s),new Error(Ye)}}_getColumns(){let t=new Jn(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(Ll(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Es.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(L.isEmpty(this.statement.where)){I.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Jn(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!L.isEmpty(r)&&r.right)if(L.isNotEmptyAndHasValue(r.right.value)){let s=L.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new se.yy.LogicValue({value:s}):r.right instanceof se.yy.StringValue&&!L.isEmpty(s)&&L.autoCasterIsNumberCheck(s.toString())&&(r.right=new se.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=L.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new se.yy.LogicValue({value:i}):s instanceof se.yy.StringValue&&L.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new se.yy.NumValue({value:i}))});if(t){I.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Jn(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(!L.isEmpty(dI.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(L.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(L.isEmptyOrZeroLength(r.left.columnid)||L.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(L.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let _=!1;switch(r.op){case"=":!L.isEmpty(r.right.value)||!L.isEmpty(r.left.value)?s.add(L.isEmpty(r.right.value)?r.left.value:r.right.value):_=!0;break;case"IN":let c=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<c.length;u++)if(c[u].value)s.add(c[u].value);else{_=!0;break}break;default:_=!0;break}this.exact_search_values[o].ignore=_,_?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(L.isEmptyOrZeroLength(this.all_table_attributes)&&L.isEmptyOrZeroLength(this.statement.from)&&L.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&&Es.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(L.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);L.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(L.isEmptyOrZeroLength(this.all_table_attributes)&&!L.isEmptyOrZeroLength(this.columns.columns))return t;if(L.isEmptyOrZeroLength(this.all_table_attributes)&&L.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await se.promise(r)}catch(r){throw I.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),I.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(Ll(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(L.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(hI)>-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=Es.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,_=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,_)),i.attribute!==_&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,_={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},c=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(c=!0),!L.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!L.isEmptyOrZeroLength(this.exact_search_values[u].values))if(c)try{_.hash_values=Array.from(this.exact_search_values[u].values);let E=await mr.getDataByHash(_);for(let l of _.hash_values)E.get(l)&&!this.data[i].__merged_data[l]&&(this.data[i].__merged_data[l]=[...s[i]],this._setMergedHashAttribute(i,l))}catch(E){throw I.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),I.error(E),new Error(Ye)}else try{_.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async E=>{let l=Object.assign({},_);l.search_value=E;let S=await mr.getDataByValue(l);for(let[d,A]of S)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,A[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,A[n.attribute]),this._setMergedHashAttribute(i,L.autoCast(d)))}))}catch(E){throw I.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),I.error(E),new Error(Ye)}else if(!L.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!L.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let E=this.comparator_search_values[u].comparators;for(let l=0,S=E.length;l<S;l++){let d=E[l];_.search_attribute=d.attribute,_.search_value=d.search_value;let A=await mr.getDataByValue(_,d.operation);if(c)for(let[g]of A)this.data[i].__merged_data[g]||(this.data[i].__merged_data[g]=[...s[i]],this._setMergedHashAttribute(i,L.autoCast(g)));else for(let[g,y]of A)this.data[i].__merged_data[g]?this._updateMergedAttribute(i,g,n.attribute,y[n.attribute]):(this.data[i].__merged_data[g]=[...s[i]],this._updateMergedAttribute(i,g,n.attribute,y[n.attribute]),this._setMergedHashAttribute(i,L.autoCast(g)))}}catch(E){throw I.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),I.error(E),new Error(Ye)}else try{_.search_attribute=n.attribute,_.search_value="*";let E=await mr.getDataByValue(_);if(c)for(let[l]of E)this.data[i].__merged_data[l]||(this.data[i].__merged_data[l]=[...s[i]],this._setMergedHashAttribute(i,L.autoCast(l)));else for(let[l,S]of E)this.data[i].__merged_data[l]?this._updateMergedAttribute(i,l,n.attribute,S[n.attribute]):(this.data[i].__merged_data[l]=[...s[i]],this._updateMergedAttribute(i,l,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,L.autoCast(l)))}catch(E){throw I.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),I.error(E),new Error(Ye)}}}_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 se.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 se.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new se.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 se.yy.FuncValue:new se.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(d=>{d.joinmode&&d.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(d.table);let A=d.joinmode+" JOIN ? AS "+(d.as?d.as:d.table.tableid);d.on&&(A+=" ON "+d.on.toString()),i.push(A),t.push(Object.values(this.data[`${d.table.databaseid_orig}_${d.table.as?d.table.as_orig:d.table.tableid_orig}`].__merged_data))});let o=[],_={};n.forEach(d=>{let A=this.data[`${d.databaseid_orig}_${d.as?d.as_orig:d.tableid_orig}`].__hash_name,g=d.as?d.as_orig:d.tableid_orig;o.push({key:`'${g}.${A}'`,schema:d.databaseid_orig,table:d.as?d.as_orig:d.tableid_orig,keys:new Set}),r.push(`${d.as?d.as:d.tableid}.\`${A}\` AS "${g}.${A}"`),_[d.as?d.as_orig:d.tableid_orig]=this.data[`${d.databaseid_orig}_${d.as?d.as_orig:d.tableid_orig}`].__merged_attributes});let c=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(d=>{d.is_func?r.push(d.initial_select_column.toString()):d.initial_select_column.tableid?r.push(`${d.initial_select_column.tableid}.${d.initial_select_column.columnid} AS ${d.expression.columnid}`):r.push(`${d.initial_select_column.columnid} AS ${d.expression.columnid}`)}));let E="",l="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(E=this.statement.limit?"LIMIT "+this.statement.limit:"",l=this.statement.offset?"OFFSET "+this.statement.offset:"");let S=[];try{let d=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${c} ${u} ${E} ${l}`,A=this._convertColumnsToIndexes(d,n);S=await se.promise(A,t),t=null}catch(d){throw I.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),I.error(d),new Error("There was a problem processing the data.")}if(S&&S.length>0){for(let d=0,A=S.length;d<A;d++){let g=S[d];o.forEach(y=>{g[y.key]!==null&&g[y.key]!==void 0&&y.keys.add(g[y.key])})}o.forEach(d=>{let A=Object.keys(this.data[`${d.schema}_${d.table}`].__merged_data),g=Es.difference(A,[...d.keys].map(y=>y.toString()));for(let y=0,$=g.length;y<$;y++){let x=g[y];delete this.data[`${d.schema}_${d.table}`].__merged_data[x]}})}return{existing_attributes:_,joined_length:S?S.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Jn(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let _=o.table.as?o.table.as:o.table.tableid;(!t[_]||t[_].indexOf(o.attribute)<0)&&s.push(o)}}s=Es.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 I.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),I.error(i),new Error(Ye)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let E in i)o.push(i[E][0]);this.data[s].__merged_attributes.push(...n.columns);let _={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},c=await mr.getDataByHash(_),u=n.columns.length;for(let E=0,l=o.length;E<l;E++){let S=o[E],d=c.get(S);for(let A=0;A<u;A++){let g=n.columns[A],y=d[g]===void 0?null:d[g];this.data[s].__merged_data[S].push(y)}}}}catch(r){throw I.error("Error thrown from getDataByHash function in SQLSearch class method getData."),I.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let _=o.aggregatorid?o.expression:o,c=o.aggregatorid?o.as_orig:_.as_orig;return n.expression.tableid?_.columnid_orig===n.expression.columnid_orig&&_.tableid_orig===n.expression.tableid_orig:_.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===c}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();I.trace(`Final SQL: ${n}`),s=await se.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),I.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw I.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),I.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 I.error(SI.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),I.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=n[i],u=new RegExp(`${c}.\`${o}\``,"g"),E=`${c}.[${_}]`;s=s.replace(u,E)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=new RegExp(`\`${o}\``,"g"),u=`[${_}]`;s=s.replace(c,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await mr.getDataByValue(i);for(let[_,c]of o)this.data[n].__merged_data[_]||(this.data[n].__merged_data[_]=Object.assign({},r[n])),this.data[n].__merged_data[_][t[s.attribute]]=c[s.attribute]}catch(o){throw I.error("There was an error when processing this SQL operation. Check your logs"),I.error(o),new Error(Ye)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(Xn,"SQLSearch");yl.exports=Xn});var Zn=h((oB,Ml)=>{"use strict";var TI=hl();Ml.exports={searchByConditions:RI,searchByHash:gI,searchByValue:NI,search:pI};var po=Wt(),wl=require("util"),fI=wl.callbackify(po.searchByHash),mI=wl.callbackify(po.searchByValue),AI=Ul();async function RI(e){return po.searchByConditions(e)}a(RI,"searchByConditions");function gI(e,t){try{fI(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(gI,"searchByHash");function NI(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),mI(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(NI,"searchByValue");function pI(e,t){try{let r=new TI(e);r.validate(),new AI(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(pI,"search")});var ds=h((cB,Bl)=>{"use strict";var ls=require("crypto"),Pl="aes-256-cbc",OI=32,II=16,Oo=64,Hl=32,CI=Oo+Hl,Dl=new Map;Bl.exports={encrypt:bI,decrypt:LI,createNatsTableStreamName:yI};function bI(e){let t=ls.randomBytes(OI),r=ls.randomBytes(II),s=ls.createCipheriv(Pl,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),_=n.toString("hex");return i+o+_}a(bI,"encrypt");function LI(e){let t=e.substr(0,Oo),r=e.substr(Oo,Hl),s=e.substr(CI,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=ls.createDecipheriv(Pl,Buffer.from(t,"hex"),n),_=o.update(i);return _=Buffer.concat([_,o.final()]),_.toString()}a(LI,"decrypt");function yI(e,t){let r=`${e}.${t}`,s=Dl.get(r);return s||(s=ls.createHash("md5").update(`${e}.${t}`).digest("hex"),Dl.set(r,s)),s}a(yI,"createNatsTableStreamName")});var Co=h((lB,Gl)=>{"use strict";var UI=f(),EB=qt();function Io(e,t){let r=Object.create(null);if(t.length===1&&UI.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(Io,"parseRow");function wI(e,t,r,s){let n=Io(r,e);s.push(n)}a(wI,"searchAll");function MI(e,t,r,s){let n=Io(r,e);s[t]=n}a(MI,"searchAllToMap");function DI(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(DI,"iterateDBI");function Qt(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(Qt,"pushResults");function PI(e,t,r,s,n,i){t.toString().endsWith(e)&&Qt(t,r,s,n,i)}a(PI,"endsWith");function HI(e,t,r,s,n,i){t.toString().includes(e)&&Qt(t,r,s,n,i)}a(HI,"contains");function BI(e,t,r,s,n,i){t>e&&Qt(t,r,s,n,i)}a(BI,"greaterThanCompare");function GI(e,t,r,s,n,i){t>=e&&Qt(t,r,s,n,i)}a(GI,"greaterThanEqualCompare");function vI(e,t,r,s,n,i){t<e&&Qt(t,r,s,n,i)}a(vI,"lessThanCompare");function FI(e,t,r,s,n,i){t<=e&&Qt(t,r,s,n,i)}a(FI,"lessThanEqualCompare");Gl.exports={parseRow:Io,searchAll:wI,searchAllToMap:MI,iterateDBI:DI,endsWith:PI,contains:HI,greaterThanCompare:BI,greaterThanEqualCompare:GI,lessThanCompare:vI,lessThanEqualCompare:FI,pushResults:Qt}});var Xt=h((fB,Yl)=>{"use strict";var Lt=q(),SB=O(),Ce=qt(),zn=ne(),W=Me().LMDB_ERRORS_ENUM,hB=p(),qI=f(),jn=Co(),{parseRow:xI}=jn,TB=require("lmdb"),{OVERFLOW_MARKER:vl,MAX_SEARCH_KEY_LENGTH:VI}=zn;function Fl(e,t,r,s=!1,n=void 0,i=void 0){return Jt(e,t,r,(o,_)=>_.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(Fl,"iterateFullIndex");function Ss(e,t,r,s,n,i=!1,o=void 0,_=void 0,c=!1,u=!1){return Jt(e,t,r,(E,l,S,d)=>{let x={transaction:E,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:_,inclusiveEnd:i===!0?!c:!u,exclusiveStart:i===!0?u:c};return d===r?(x.values=!1,l.getRange(x).map(v=>({value:v}))):l.getRange(x)})}a(Ss,"iterateRangeBetween");function Jt(e,t,r,s){let n=e.database||e,i=Lt.openDBI(n,r);i[zn.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Lt.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let _=s(o,i,n,t);return _.transaction=o,e.database||(_.onDone=()=>{o.done()}),_}a(Jt,"setupTransaction");function ql(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(vl)){if(!n)if(r)n=Lt.openDBI(e,r);else{let c=Lt.listDBIs(e);for(let u=0,E=c.length;u<E&&(n=Lt.openDBI(e,c[u]),!n[zn.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(ql,"getOverflowCheck");function kI(e,t,r,s=!1,n=void 0,i=void 0){if(Ce.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);return Jt(e,t,t,(o,_,c)=>(ei(r),r=hs(c,r),_.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(u=>xI(u.value,r))))}a(kI,"searchAll");function YI(e,t,r,s=!1,n=void 0,i=void 0){if(Ce.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);ei(r),r=hs(e.database||e,r);let o=new Map;for(let{key:_,value:c}of Fl(e,t,t,s,n,i))o.set(_,jn.parseRow(c,r));return o}a(YI,"searchAllToMap");function $I(e,t,r=!1,s=void 0,n=void 0){if(Ce.validateEnv(e),t===void 0)throw new Error(W.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=Fl(e,void 0,t,r,s,n),_=o.transaction,c=ql(_.database,_,void 0,t);for(let{key:u,value:E}of o){let l=c(u,E);i[l]===void 0&&(i[l]=[]),i[l].push(E)}return i}a($I,"iterateDBI");function KI(e,t){if(Ce.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);return Lt.statDBI(e,t).entryCount}a(KI,"countAll");function WI(e,t,r,s,n=!1,i=void 0,o=void 0){return yt(e,r,s),Jt(e,t,r,(_,c,u,E)=>(s=Ce.convertKeyValueToWrite(s),E===r?c.get(s,{transaction:_,lazy:!0})===void 0?[]:[{key:s,value:s}]:c.getValues(s,{transaction:_,reverse:n,limit:i,offset:o}).map(l=>({key:s,value:l}))))}a(WI,"equals");function QI(e,t,r){return yt(e,t,r),Lt.openDBI(e,t).getValuesCount(r)}a(QI,"count");function JI(e,t,r,s,n=!1,i=void 0,o=void 0){return yt(e,r,s),Jt(e,null,r,(_,c)=>{s=Ce.convertKeyValueToWrite(s);let u=!0;typeof s=="number"&&(u=!1);let E;if(n===!0){let l;for(let S of c.getKeys({transaction:_,start:s}))if(!S.startsWith(s)){l=S;break}return l!==void 0&&(Number.isInteger(o)?o++:i++),E=c.getRange({transaction:_,start:l,end:void 0,reverse:n,limit:i,offset:o}).map(S=>{let{key:d}=S;if(d!==l){if(d.toString().startsWith(s))return S;if(u===!0)return E.DONE}}),E.filter(S=>S)}else return E=c.getRange({transaction:_,start:s,reverse:n,limit:i,offset:o}).map(l=>{if(l.key.toString().startsWith(s))return l;if(u===!0)return E.DONE}),u?E:E.filter(l=>l)})}a(JI,"startsWith");function XI(e,t,r,s,n=!1,i=void 0,o=void 0){return xl(e,t,r,s,n,i,o,!0)}a(XI,"endsWith");function xl(e,t,r,s,n=!1,i=void 0,o=void 0,_=!1){return yt(e,r,s),Jt(e,null,r,(c,u,E,l)=>{let S=ql(E,c,l,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:c,end:n?!1:void 0,reverse:n}).flatMap(d=>{let A=d.toString();return A.endsWith(vl)?u.getValues(d,{transaction:c}).map(g=>{let y=S(d,g);if(_?y.endsWith(s):y.includes(s))return{key:y,value:g}}).filter(g=>g):(_?A.endsWith(s):A.includes(s))?u[zn.DBI_DEFINITION_NAME].is_hash_attribute?{key:d,value:d}:u.getValues(d,{transaction:c}).map(g=>({key:d,value:g})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(xl,"contains");function ZI(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),Ss(e,t,r,s,c,n,i,o,!0,!1)}a(ZI,"greaterThan");function zI(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),Ss(e,t,r,s,c,n,i,o,!1,!1)}a(zI,"greaterThanEqual");function jI(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),Ss(e,t,r,c,s,n,i,o,!1,!0)}a(jI,"lessThan");function eC(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),Ss(e,t,r,c,s,n,i,o,!1,!1)}a(eC,"lessThanEqual");function tC(e,t,r,s,n,i=!1,o=void 0,_=void 0){if(Ce.validateEnv(e),r===void 0)throw new Error(W.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(W.START_VALUE_REQUIRED);if(n===void 0)throw new Error(W.END_VALUE_REQUIRED);if(s=Ce.convertKeyValueToWrite(s),n=Ce.convertKeyValueToWrite(n),s>n)throw new Error(W.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ss(e,t,r,s,n,i,o,_)}a(tC,"between");function rC(e,t,r,s){Ce.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);if(ei(r),r=hs(n,r),s===void 0)throw new Error(W.ID_REQUIRED);let o=null,_=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return _&&(o=jn.parseRow(_,r)),o}a(rC,"searchByHash");function sC(e,t,r){Ce.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(W.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(sC,"checkHashExists");function nC(e,t,r,s,n=[]){return kl(e,t,r,s,n),Vl(e,t,r,s,n).map(i=>i[1])}a(nC,"batchSearchByHash");function iC(e,t,r,s,n=[]){kl(e,t,r,s,n);let i=new Map;for(let[o,_]of Vl(e,t,r,s,n))i.set(o,_);return i}a(iC,"batchSearchByHashToMap");function Vl(e,t,r,s,n=[]){return Jt(e,t,t,(i,o,_)=>{r=hs(_,r);let c=r.length<3;return s.map(u=>{let E=_.dbis[t].get(u,{transaction:i,lazy:c});if(E)return[u,jn.parseRow(E,r)];n.push(u)}).filter(u=>u)})}a(Vl,"batchHashSearch");function kl(e,t,r,s,n){if(Ce.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);if(ei(r),s==null)throw new Error(W.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(W.IDS_MUST_BE_ITERABLE)}a(kl,"initializeBatchSearchByHash");function ei(e){if(!Array.isArray(e))throw e===void 0?new Error(W.FETCH_ATTRIBUTES_REQUIRED):new Error(W.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(ei,"validateFetchAttributes");function yt(e,t,r){if(Ce.validateEnv(e),t===void 0)throw new Error(W.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(W.SEARCH_VALUE_REQUIRED);if(r?.length>VI)throw new Error(W.SEARCH_VALUE_TOO_LARGE)}a(yt,"validateComparisonFunctions");function hs(e,t){return t.length===1&&qI.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Lt.listDBIs(e)),t}a(hs,"setGetWholeRowAttributes");Yl.exports={searchAll:kI,searchAllToMap:YI,count:QI,countAll:KI,equals:WI,startsWith:JI,endsWith:XI,contains:xl,searchByHash:rC,setGetWholeRowAttributes:hs,batchSearchByHash:nC,batchSearchByHashToMap:iC,checkHashExists:sC,iterateDBI:$I,greaterThan:ZI,greaterThanEqual:zI,lessThan:jI,lessThanEqual:eC,between:tC}});var ni=h((AB,zl)=>{"use strict";var Kl=Zn(),Ut=O(),Wl=ja(),aC=require("lodash"),oC=ds(),Ql=p(),{promisify:Jl}=require("util"),k=f(),{handleHDBError:ti,hdb_errors:_C}=Q(),{HDB_ERROR_MSGS:ri,HTTP_STATUS_CODES:Xl}=_C,cC=J();cC.initSync();var $l=q(),uC=Xt(),{getSchemaPath:EC}=Y(),Ts=Jl(Kl.searchByValue),lC=Jl(Kl.searchByHash),Ar="name",Zl="hash_attribute",bo="schema",dC="schema_table",SC="attribute";zl.exports={describeAll:hC,describeTable:si,describeSchema:fC};async function hC(e){try{let t=Ql.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:Ar,search_value:k.WILDCARD_SEARCH_VALUE,get_attributes:[Ar]},i=await Ts(n),o={},_={};for(let S of i)o[S.name]=!0,!t&&!s&&(_[S.name]=r[S.name].describe);let c={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:k.ID_ATTRIBUTE_STRING,search_value:k.WILDCARD_SEARCH_VALUE,get_attributes:[Zl,k.ID_ATTRIBUTE_STRING,Ar,bo]},u=await Ts(c),E=[];for(let S of u)try{let d;if(t||s)d=await si({schema:S.schema,table:S.name});else if(r&&r[S.schema].describe&&r[S.schema].tables[S.name].describe){let A=r[S.schema].tables[S.name].attribute_permissions;d=await si({schema:S.schema,table:S.name},A)}d&&E.push(d)}catch(d){Ut.error(d)}let l={};for(let S in E)t||s?(l[E[S].schema]==null&&(l[E[S].schema]={}),l[E[S].schema][E[S].name]=E[S],o[E[S].schema]&&delete o[E[S].schema]):_[E[S].schema]&&(l[E[S].schema]==null&&(l[E[S].schema]={}),l[E[S].schema][E[S].name]=E[S],o[E[S].schema]&&delete o[E[S].schema]);for(let S in o)t||s?l[S]={}:_[S]&&(l[S]={});return l}catch(t){return Ut.error("Got an error in describeAll"),Ut.error(t),ti(new Error,ri.DESCRIBE_ALL_ERR)}}a(hC,"describeAll");async function si(e,t){let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i={},o=Wl.describe_table(e);if(o)throw o;if(r===k.SYSTEM_SCHEMA_NAME)return global.hdb_schema[k.SYSTEM_SCHEMA_NAME][s];let _={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:k.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Ar,search_value:s,hash_values:[],get_attributes:[k.WILDCARD_SEARCH_VALUE]},c=Array.from(await Ts(_));if(!c||c.length===0)throw ti(new Error,ri.TABLE_NOT_FOUND(e.schema,e.table),Xl.NOT_FOUND);for await(let u of c)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw ti(new Error,ri.INVALID_TABLE_ERR(i));let E={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:k.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:dC,search_value:r+"."+s,get_attributes:[SC]},l=Array.from(await Ts(E));l=aC.uniqBy(l,S=>S.attribute),n&&n.length>0&&(l=TC(n)),i.attributes=l,i.clustering_stream_name=oC.createNatsTableStreamName(u.schema,u.name);try{let S=EC(i.schema,i.name),d=await $l.openEnvironment(S,i.name),A=$l.statDBI(d,i.hash_attribute);i.record_count=A.entryCount;for(let{key:g}of uC.lessThan(d,i.hash_attribute,k.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,1/0,!0,1,0))i.last_updated_record=g}catch(S){Ut.warn(`unable to stat table dbi due to ${S}`)}}catch(E){Ut.error(`There was an error getting attributes for table '${u.name}'`),Ut.error(E)}return i}a(si,"descTable");function TC(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(TC,"getAttrsByPerms");async function fC(e){let t=Wl.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:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:k.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:bo,search_value:s,hash_values:[],get_attributes:[Zl,k.ID_ATTRIBUTE_STRING,Ar,bo]},i=Array.from(await Ts(n));if(i&&i.length<1){let o={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:k.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[Ar]},_=Array.from(await lC(o));if(_&&_.length<1)throw ti(new Error,ri.SCHEMA_NOT_FOUND(e.schema),Xl.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async _=>{try{let c;if(r&&r.tables[_.name]&&(c=r.tables[_.name]),Ql.isEmpty(c)||c.describe){let u=await si({schema:e.schema,table:_.name},c?c.attribute_permissions:null);u&&(o[u.name]=u)}}catch(c){Ut.error(`Error describing schema table '${e.schema}.${_}'`),Ut.error(c)}})),o}}a(fC,"describeSchema")});var ii=h((gB,sd)=>{var Rr=Yt(),{callbackify:td,promisify:mC}=require("util");sd.exports={setSchemaDataToGlobal:jl,getTableSchema:gC,getSystemSchema:pC,setSchemaDataToGlobalAsync:mC(jl)};var rd=ni(),AC=td(rd.describeAll),RC=td(rd.describeTable);function jl(e){AC(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Rr),global.hdb_schema=r,e(null,null)})}a(jl,"setSchemaDataToGlobal");function ed(e,t){return e==="system"?Rr[t]:global.hdb_schema[e][t]}a(ed,"returnSchema");function gC(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?NC(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,ed(e,t))}):r(null,ed(e,t))}a(gC,"getTableSchema");function NC(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=Rr:global.hdb_schema={system:Rr},r();return}RC(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:Rr}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(NC,"setTableDataToGlobal");function pC(){return Rr}a(pC,"getSystemSchema")});var ai=h((pB,od)=>{"use strict";var Zt=O(),be=f(),OC=rl(),nd=ii(),IC=ni(),CC=Nr(),{validateEvent:ad}=gr(),fs=Wt(),bC=require("process"),LC={[be.ITC_EVENT_TYPES.SCHEMA]:yC,[be.ITC_EVENT_TYPES.USER]:wC};async function yC(e){let t=ad(e);if(t){Zt.error(t);return}Zt.trace("ITC schemaHandler received schema event:",e),await OC(e.message),await UC(e.message)}a(yC,"schemaHandler");async function UC(e){try{if(fs.resetReadTxn(be.SYSTEM_SCHEMA_NAME,be.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),fs.resetReadTxn(be.SYSTEM_SCHEMA_NAME,be.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),fs.resetReadTxn(be.SYSTEM_SCHEMA_NAME,be.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 IC.describeTable({schema:e.schema,table:e.table});break;default:nd.setSchemaDataToGlobal(id);break}else nd.setSchemaDataToGlobal(id)}catch(t){Zt.error(t)}}a(UC,"syncSchemaMetadata");function id(e){e&&Zt.error(e)}a(id,"handleErrorCallback");async function wC(e){try{fs.resetReadTxn(be.SYSTEM_SCHEMA_NAME,be.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),fs.resetReadTxn(be.SYSTEM_SCHEMA_NAME,be.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME);let t=ad(e);if(t){Zt.error(t);return}Zt.trace(`ITC userHandler ${be.HDB_ITC_CLIENT_PREFIX}${bC.pid} received user event:`,e),await CC.setUsersToGlobal()}catch(t){Zt.error(t)}}a(wC,"userHandler");od.exports=LC});var gr=h((LB,cd)=>{"use strict";var IB=O(),Lo=p(),MC=f(),{ITC_ERRORS:ms}=Me(),{parentPort:CB,threadId:DC,isMainThread:PC,workerData:bB}=require("worker_threads"),{onMessageFromWorkers:HC,broadcast:BC}=Kn();cd.exports={sendItcEvent:GC,validateEvent:_d,SchemaEventMsg:vC,UserEventMsg:FC};var oi;HC(e=>{oi=oi||ai(),_d(e),oi[e.type]&&oi[e.type](e)});function GC(e){!PC&&e.message&&(e.message.originator=DC),BC(e)}a(GC,"sendItcEvent");function _d(e){if(typeof e!="object")return ms.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Lo.isEmpty(e.type))return ms.MISSING_TYPE;if(!e.hasOwnProperty("message")||Lo.isEmpty(e.message))return ms.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Lo.isEmpty(e.message.originator))return ms.MISSING_ORIGIN;if(MC.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ms.INVALID_EVENT(e.type)}a(_d,"validateEvent");function vC(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(vC,"SchemaEventMsg");function FC(e){this.originator=e}a(FC,"UserEventMsg")});var ci=h((wB,dd)=>{"use strict";var ud=f(),UB=p(),_i=O(),Ed=UE(),pr,{sendItcEvent:ld}=gr();function qC(e){try{_i.trace("signalSchemaChange called with message:",e),pr=pr||ai();let t=new Ed(ud.ITC_EVENT_TYPES.SCHEMA,e);pr.schema(t),ld(t)}catch(t){_i.error(t)}}a(qC,"signalSchemaChange");function xC(e){try{_i.trace("signalUserChange called with message:",e),pr=pr||ai();let t=new Ed(ud.ITC_EVENT_TYPES.USER,e);pr.user(t),ld(t)}catch(t){_i.error(t)}}a(xC,"signalUserChange");dd.exports={signalSchemaChange:qC,signalUserChange:xC}});var ui=h((DB,hd)=>{"use strict";var Sd=p(),VC=f(),kC=O(),YC=Pn(),$C=Dn(),KC=ci(),{SchemaEventMsg:WC}=gr(),QC="already exists in";hd.exports=JC;async function JC(e,t,r){if(Sd.isEmptyOrZeroLength(r))return r;let s=[];Sd.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 XC(e,t.schema,t.name,i)})),n}a(JC,"lmdbCheckForNewAttributes");async function XC(e,t,r,s){let n=new $C(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await ZC(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(QC))kC.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(XC,"createNewAttribute");async function ZC(e){let t;return t=await YC(e),KC.signalSchemaChange(new WC(process.pid,VC.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(ZC,"createAttribute")});var Or=h((HB,Td)=>{"use strict";var Ei=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(Ei,"LMDBTransactionObject");Td.exports=Ei});var md=h((GB,fd)=>{"use strict";var zC=Or(),jC=f().OPERATIONS_ENUM,li=class extends zC{constructor(t,r,s,n,i=void 0){super(jC.INSERT,r,s,n,i),this.records=t}};a(li,"LMDBInsertTransactionObject");fd.exports=li});var Rd=h((FB,Ad)=>{"use strict";var eb=Or(),tb=f().OPERATIONS_ENUM,di=class extends eb{constructor(t,r,s,n,i,o=void 0){super(tb.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(di,"LMDBUpdateTransactionObject");Ad.exports=di});var Nd=h((xB,gd)=>{"use strict";var rb=Or(),sb=f().OPERATIONS_ENUM,Si=class extends rb{constructor(t,r,s,n,i,o=void 0){super(sb.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(Si,"LMDBUpsertTransactionObject");gd.exports=Si});var Od=h((kB,pd)=>{"use strict";var nb=Or(),ib=f().OPERATIONS_ENUM,hi=class extends nb{constructor(t,r,s,n,i=void 0){super(ib.DELETE,s,n,t,i),this.original_records=r}};a(hi,"LMDBDeleteTransactionObject");pd.exports=hi});var As=h((KB,Ld)=>{"use strict";var $B=require("path"),Id=q(),ab=md(),ob=Rd(),_b=Nd(),cb=Od(),Ir=ne(),Cd=p(),{CONFIG_PARAMS:ub}=f(),bd=J();bd.initSync();var Ti=f().OPERATIONS_ENUM,{getTransactionAuditStorePath:Eb}=Y();Ld.exports=lb;async function lb(e,t){if(bd.get(ub.LOGGING_AUDITLOG)===!1)return;let r=Eb(e.schema,e.table),s=await Id.openEnvironment(r,e.table,!0),n=db(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Id.initializeDBIs(s,Ir.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ir.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Ir.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Ir.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),Cd.isEmpty(n.user_name)||s.dbis[Ir.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Ir.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(lb,"writeTransaction");function db(e,t){let r=Cd.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Ti.INSERT)return new ab(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Ti.UPDATE)return new ob(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Ti.UPSERT)return new _b(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Ti.DELETE)return new cb(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(db,"createTransactionObject")});var yo=h((JB,yd)=>{"use strict";var Sb=Hn(),QB=Gn(),Rs=f(),hb=Fn(),Tb=hr().insertRecords,fb=q(),mb=O(),Ab=ui(),{getSchemaPath:Rb}=Y(),gb=As();yd.exports=Nb;async function Nb(e){try{let{schema_table:t,attributes:r}=Sb(e);hb(e,r,t.hash_attribute),e.schema!==Rs.SYSTEM_SCHEMA_NAME&&(r.includes(Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Ab(e.hdb_auth_header,t,r),n=Rb(e.schema,e.table),i=await fb.openEnvironment(n,e.table),o=await Tb(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await gb(e,o)}catch(_){mb.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(Nb,"lmdbCreateRecords")});var Md=h((ZB,wd)=>{"use strict";var Ud=f(),pb=yo(),Ob=Gn(),Ib=require("fs-extra"),{getSchemaPath:Cb}=Y();wd.exports=bb;async function bb(e){let t=[{name:e.schema,createddate:Date.now()}],r=new Ob(Ud.SYSTEM_SCHEMA_NAME,Ud.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await pb(r),await Ib.mkdirp(Cb(e.schema))}a(bb,"lmdbCreateSchema")});var Pd=h((jB,Dd)=>{"use strict";var fi=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(fi,"DeleteRecordsResponseObject");Dd.exports=fi});var Mo=h((nG,Gd)=>{"use strict";var Hd=q(),Uo=qt(),wo=Me().LMDB_ERRORS_ENUM,Lb=ne(),Bd=O(),tG=p(),yb=require("lmdb"),Ub=Pd(),wb=f(),{OVERFLOW_MARKER:rG,MAX_SEARCH_KEY_LENGTH:sG}=Lb,Mb=wb.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Db(e,t,r,s){if(Uo.validateEnv(e),t===void 0)throw new Error(wo.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(wo.IDS_REQUIRED):new Error(wo.IDS_MUST_BE_ITERABLE);try{let n=Hd.listDBIs(e);Hd.initializeDBIs(e,t,n);let i=new Ub,o,_=[],c=[];for(let S=0,d=r.length;S<d;S++)try{o=r[S];let A=e.dbis[t].get(o);if(!A||s&&A[Mb]>s){i.skipped.push(o);continue}let g=e.dbis[t].ifVersion(o,yb.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let y=0;y<n.length;y++){let $=n[y];if(!A.hasOwnProperty($)||$===t)continue;let x=e.dbis[$],v=A[$];if(v!=null)try{let we=Uo.getIndexedValues(v);if(we)for(let vt=0,ir=we.length;vt<ir;vt++)x.remove(we[vt],o)}catch{Bd.warn(`cannot delete from attribute: ${$}, ${v}:${o}`)}}});_.push(g),c.push(o),i.original_records.push(A)}catch(A){Bd.warn(A),i.skipped.push(o)}let u=[],E=await Promise.all(_);for(let S=0,d=E.length;S<d;S++)E[S]===!0?i.deleted.push(c[S]):(i.skipped.push(c[S]),u.push(S));let l=0;for(let S=0;S<u.length;S++){let d=u[S];i.original_records.splice(d-l,1),l++}return i.txn_time=Uo.getNextMonotonicTime(),i}catch(n){throw n}}a(Db,"deleteRecords");Gd.exports={deleteRecords:Db}});var gs=h((aG,Fd)=>{"use strict";var Cr=p(),Pb=Mo(),Hb=q(),{getSchemaPath:Bb}=Y(),Gb=As(),vb=O();Fd.exports=Fb;async function Fb(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Cr.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Cr.isEmptyOrZeroLength(e.hash_values)&&!Cr.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let _=0;_<e.records.length;_++){let c=e.records[_][s];Cr.isEmpty(c)||e.hash_values.push(c)}}if(Cr.isEmptyOrZeroLength(e.hash_values))return vd([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Cr.isEmptyOrZeroLength(e.records)){e.records=[];for(let _=0;_<e.hash_values.length;_++)e.records[_]={[s]:e.hash_values[_]}}let n=Bb(e.schema,e.table),i=await Hb.openEnvironment(n,e.table),o=await Pb.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await Gb(e,o)}catch(_){vb.error(`unable to write transaction due to ${_.message}`)}return vd(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(Fb,"lmdbDeleteRecords");function vd(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(vd,"createDeleteResponse")});var Ns=h((cG,kd)=>{var qd=require("lodash"),xd=at(),B=require("joi"),qb=p(),{hdb_schema_table:$e,checkValidTable:Vd}=Er(),{handleHDBError:xb,hdb_errors:Vb}=Q(),{HTTP_STATUS_CODES:kb}=Vb,_G=B.object({schema:$e,table:$e,hash_values:B.array().min(0).items(B.alternatives(B.string(),B.number())).required(),get_attributes:B.array().min(1).items($e).required()}),Yb=B.object({schema:$e,table:$e,search_attribute:$e,search_value:B.any().required(),get_attributes:B.array().min(1).items($e).required(),desc:B.bool(),limit:B.number().integer().min(1),offset:B.number().integer().min(0)}),$b=B.object({schema:$e,table:$e,operator:B.string().valid("and","or").default("and").lowercase(),offset:B.number().integer().min(0),limit:B.number().integer().min(1),get_attributes:B.array().min(1).items($e).required(),conditions:B.array().min(1).items(B.object({search_attribute:$e,search_type:B.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:B.when("search_type",{switch:[{is:"equals",then:B.any()},{is:"between",then:B.array().items(B.alternatives([B.string(),B.number()])).length(2)}],otherwise:B.alternatives(B.string(),B.number())}).required()})).required()});kd.exports=function(e,t){let r=null;switch(t){case"value":r=xd.validateBySchema(e,Yb);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(Vd("schema",e.schema)),i(Vd("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=xd.validateBySchema(e,$b);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=qb.checkGlobalSchemaTable(e.schema,e.table);if(n)return xb(new Error,n,kb.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,_=[...e.get_attributes];if(t==="value"&&_.push(e.search_attribute),t==="conditions")for(let u=0,E=e.conditions.length;u<E;u++){let l=e.conditions[u];_.push(l.search_attribute)}let c=qd.filter(_,u=>u!=="*"&&u.attribute!=="*"&&!qd.some(o,E=>E===u||E.attribute===u||E.attribute===u.attribute));if(c&&c.length>0){let u=c.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var Do=h((EG,Yd)=>{"use strict";var Kb=q(),Wb=Ns(),{getSchemaPath:Qb}=Y();Yd.exports=Jb;function Jb(e){let t=Wb(e,"hashes");if(t)throw t;let r=Qb(e.schema,e.table);return Kb.openEnvironment(r,e.table)}a(Jb,"initialize")});var Po=h((dG,$d)=>{"use strict";var Xb=Xt(),Zb=Do();$d.exports=zb;async function zb(e){let t=await Zb(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return Xb.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(zb,"lmdbGetDataByHash")});var Ai=h((hG,Kd)=>{"use strict";var mi=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(mi,"SearchByHashObject");Kd.exports=mi});var Qd=h((mG,Wd)=>{"use strict";var fG=Ai(),jb=Xt(),eL=Do();Wd.exports=tL;async function tL(e){let t=await eL(e),r=global.hdb_schema[e.schema][e.table];return jb.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(tL,"lmdbSearchByHash")});var dt=h((RG,Jd)=>{"use strict";var Ri=class{constructor(t,r,s,n,i,o,_,c=!1,u=void 0,E=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=_,this.reverse=c,this.limit=u,this.offset=E}};a(Ri,"SearchObject");Jd.exports=Ri});var gi=h((NG,tS)=>{"use strict";var _e=Xt(),rL=q(),sL=p(),R=ne(),zt=f(),nL=Yt(),Xd=Me().LMDB_ERRORS_ENUM,{compareKeys:br}=require("ordered-binary"),{getSchemaPath:iL}=Y(),St=zt.SEARCH_WILDCARDS;async function aL(e,t,r){let s;e.schema===zt.SYSTEM_SCHEMA_NAME?s=nL[e.table]:s=global.hdb_schema[e.schema][e.table];let n=eS(e,s.hash_attribute,r,t);return zd(e,n,s.hash_attribute,r)}a(aL,"prepSearch");async function zd(e,t,r,s){let n=iL(e.schema,e.table),i=await rL.openEnvironment(n,e.table),o=jd(i,e,t,r),_=o.transaction||i;if([R.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,R.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,R.SEARCH_TYPES.SEARCH_ALL,R.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(_L(e,r)===!1){let E=e.search_attribute;if(E===r)return s?Zd(o,()=>!0):o.map(S=>({[r]:S.key}));let l=a(S=>({[r]:S.value,[E]:S.key}),"toObject");return s?Zd(o,l):o.map(l)}let u=e.search_attribute===r?o.map(E=>E.key):o.map(E=>E.value);return s===!0?_e.batchSearchByHashToMap(_,r,e.get_attributes,u):_e.batchSearchByHash(_,r,e.get_attributes,u)}a(zd,"executeSearch");function jd(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:_,offset:c}=t;switch(o=typeof o=="boolean"?o:!1,_=Number.isInteger(_)?_:void 0,c=Number.isInteger(c)?c:void 0,r){case R.SEARCH_TYPES.EQUALS:n=_e.equals(e,i,t.search_attribute,t.search_value,o,_,c);break;case R.SEARCH_TYPES.CONTAINS:n=_e.contains(e,i,t.search_attribute,t.search_value,o,_,c);break;case R.SEARCH_TYPES.ENDS_WITH:case R.SEARCH_TYPES._ENDS_WITH:n=_e.endsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case R.SEARCH_TYPES.STARTS_WITH:case R.SEARCH_TYPES._STARTS_WITH:n=_e.startsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case R.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return _e.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case R.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return _e.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case R.SEARCH_TYPES.SEARCH_ALL:return _e.searchAll(e,s,t.get_attributes,o,_,c);case R.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return _e.searchAllToMap(e,s,t.get_attributes,o,_,c);case R.SEARCH_TYPES.BETWEEN:n=_e.between(e,i,t.search_attribute,t.search_value,t.end_value,o,_,c);break;case R.SEARCH_TYPES.GREATER_THAN:case R.SEARCH_TYPES._GREATER_THAN:n=_e.greaterThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case R.SEARCH_TYPES.GREATER_THAN_EQUAL:case R.SEARCH_TYPES._GREATER_THAN_EQUAL:n=_e.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;case R.SEARCH_TYPES.LESS_THAN:case R.SEARCH_TYPES._LESS_THAN:n=_e.lessThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case R.SEARCH_TYPES.LESS_THAN_EQUAL:case R.SEARCH_TYPES._LESS_THAN_EQUAL:n=_e.lessThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;default:return Object.create(null)}return n}a(jd,"searchByType");function oL(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case R.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case R.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case R.SEARCH_TYPES.ENDS_WITH:case R.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case R.SEARCH_TYPES.STARTS_WITH:case R.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case R.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return br(i,s[0])>=0&&br(i,s[1])<=0};case R.SEARCH_TYPES.GREATER_THAN:case R.SEARCH_TYPES._GREATER_THAN:return n=>br(n[r],s)>0;case R.SEARCH_TYPES.GREATER_THAN_EQUAL:case R.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>br(n[r],s)>=0;case R.SEARCH_TYPES.LESS_THAN:case R.SEARCH_TYPES._LESS_THAN:return n=>br(n[r],s)<0;case R.SEARCH_TYPES.LESS_THAN_EQUAL:case R.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>br(n[r],s)<=0;default:return Object.create(null)}}a(oL,"filterByType");function Zd(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(Zd,"createMapFromIterable");function _L(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(_L,"checkToFetchMore");function eS(e,t,r,s){if(sL.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),_=!1;if(e.search_attribute===t&&(_=!0),St.indexOf(n)>-1)return r===!0?R.SEARCH_TYPES.SEARCH_ALL_TO_MAP:R.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(St[0])<0&&n.indexOf(St[1])<0)return _===!0?r===!0?R.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:R.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:R.SEARCH_TYPES.EQUALS;if(St.indexOf(i)>=0&&St.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),R.SEARCH_TYPES.CONTAINS;if(St.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),R.SEARCH_TYPES.ENDS_WITH;if(St.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),R.SEARCH_TYPES.STARTS_WITH;if(n.includes(St[0])||n.includes(St[1]))return R.SEARCH_TYPES.EQUALS;throw new Error(Xd.UNKNOWN_SEARCH_TYPE)}else switch(s){case zt.VALUE_SEARCH_COMPARATORS.BETWEEN:return R.SEARCH_TYPES.BETWEEN;case zt.VALUE_SEARCH_COMPARATORS.GREATER:return R.SEARCH_TYPES.GREATER_THAN;case zt.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return R.SEARCH_TYPES.GREATER_THAN_EQUAL;case zt.VALUE_SEARCH_COMPARATORS.LESS:return R.SEARCH_TYPES.LESS_THAN;case zt.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return R.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Xd.UNKNOWN_SEARCH_TYPE)}}a(eS,"createSearchTypeFromSearchObject");tS.exports={executeSearch:zd,createSearchTypeFromSearchObject:eS,prepSearch:aL,searchByType:jd,filterByType:oL}});var sS=h((IG,rS)=>{"use strict";var OG=dt(),cL=Ns(),uL=p(),EL=f(),lL=gi();rS.exports=dL;function dL(e,t){if(!uL.isEmpty(t)&&EL.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=cL(e,"value");if(s)throw s;let n=!0;return lL.prepSearch(e,t,n)}a(dL,"lmdbGetDataByValue")});var Lr=h((LG,nS)=>{"use strict";var bG=dt(),SL=Ns(),hL=p(),TL=f(),fL=gi();nS.exports=mL;async function mL(e,t){if(!hL.isEmpty(t)&&TL.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=SL(e,"value");if(s)throw s;return fL.prepSearch(e,t,!1)}a(mL,"lmdbSearchByValue")});var aS=h((wG,iS)=>{"use strict";var UG=ne(),Ni=class{constructor(t,r,s,n,i=void 0,o=void 0,_="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=_}};a(Ni,"SearchByConditionsObject");var pi=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(pi,"SearchCondition");var Oi=class{constructor(t,r){this.attribute=t,this.desc=r}};a(Oi,"SortAttribute");iS.exports={SearchByConditionsObject:Ni,SearchCondition:pi,SortAttribute:Oi}});var ES=h((PG,uS)=>{"use strict";var DG=aS().SearchByConditionsObject,AL=dt(),RL=Ns(),Ho=Xt(),Ii=ne(),cS=gi(),gL=Co(),NL=require("lodash"),{getSchemaPath:pL}=Y(),oS=q(),{handleHDBError:OL,hdb_errors:IL}=Q(),{HTTP_STATUS_CODES:CL}=IL,bL=1e8;uS.exports=LL;async function LL(e){let t=RL(e,"conditions");if(t)throw OL(t,t.message,CL.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=pL(e.schema,e.table),s=await oS.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)oS.openDBI(s,u.search_attribute);let i=NL.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let E=u.search_type;E===Ii.SEARCH_TYPES.EQUALS?u.estimated_count=Ho.count(s,u.search_attribute,u.search_value):E===Ii.SEARCH_TYPES.CONTAINS||E===Ii.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=bL}return u.estimated_count}),o=s.useReadTransaction();o.database=s;let _=await _S(o,e,i[0],n.hash_attribute),c;if(!e.operator||e.operator.toLowerCase()==="and"){let u=s.dbis[n.hash_attribute],E=i.slice(1).map(cS.filterByType),l=E.length,S=Ho.setGetWholeRowAttributes(s,e.get_attributes);c=_.map(d=>u.get(d,{transaction:o,lazy:!0})),l>0&&(c=c.filter(d=>{for(let A=0;A<l;A++)if(!E[A](d))return!1;return!0})),(e.offset||e.limit!==void 0)&&(c=c.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),c=c.map(d=>gL.parseRow(d,S))}else{for(let l=1;l<i.length;l++){let S=i[l],d=await _S(o,e,S,n.hash_attribute);_=_.concat(d)}let u=new Set,E=e.offset||0;_=_.filter(l=>u.has(l)?!1:(u.add(l),!0)).slice(E,e.limit&&e.limit+E),c=Ho.batchSearchByHash(o,n.hash_attribute,e.get_attributes,_)}return c.onDone=()=>{o.done()},c}a(LL,"lmdbSearchByConditions");async function _S(e,t,r,s){let n=new AL(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Ii.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,cS.searchByType(e,n,i,s).map(o=>o.value)}a(_S,"executeConditionSearch")});var bi=h((BG,lS)=>{"use strict";var yL=f().OPERATIONS_ENUM,Ci=class{constructor(t,r,s,n=void 0){this.operation=yL.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(Ci,"DeleteObject");lS.exports=Ci});var Bo=h((vG,RS)=>{"use strict";var TS=dt(),fS=bi(),mS=Lr(),AS=gs(),he=f(),dS=p(),SS=q(),{getTransactionAuditStorePath:UL,getSchemaPath:wL}=Y(),hS=O();RS.exports=ML;async function ML(e){try{if(dS.isEmpty(global.hdb_schema[e.schema])||dS.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await DL(e),await PL(e);let t=wL(e.schema,e.table);try{await SS.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")hS.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=UL(e.schema,e.table);await SS.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")hS.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(ML,"lmdbDropTable");async function DL(e){let t=new TS(he.SYSTEM_SCHEMA_NAME,he.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,he.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[he.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await mS(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 fS(he.SYSTEM_SCHEMA_NAME,he.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await AS(n)}a(DL,"deleteAttributesFromSystem");async function PL(e){let t=new TS(he.SYSTEM_SCHEMA_NAME,he.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,he.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[he.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,he.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,he.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await mS(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 fS(he.SYSTEM_SCHEMA_NAME,he.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await AS(n)}catch(i){throw i}}a(PL,"dropTableFromSystem")});var NS=h((qG,gS)=>{"use strict";var HL=require("fs-extra"),BL=dt(),GL=Ai(),vL=bi(),FL=Bo(),qL=gs(),xL=Po(),VL=Lr(),ht=f(),{getSchemaPath:kL}=Y(),{handleHDBError:YL,hdb_errors:$L}=Q(),{HDB_ERROR_MSGS:KL,HTTP_STATUS_CODES:WL}=$L;gS.exports=QL;async function QL(e){let t;try{t=await JL(e.schema);let r=new BL(ht.SYSTEM_SCHEMA_NAME,ht.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ht.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ht.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await VL(r));for(let o=0;o<s.length;o++){let _={schema:t,table:s[o].name};try{await FL(_)}catch(c){if(c.message!=="invalid environment")throw c}}let n=new vL(ht.SYSTEM_SCHEMA_NAME,ht.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await qL(n);let i=kL(t);await HL.remove(i)}catch(r){throw r}}a(QL,"lmdbDropSchema");async function JL(e){let t=new GL(ht.SYSTEM_SCHEMA_NAME,ht.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ht.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await xL(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw YL(new Error,KL.SCHEMA_NOT_FOUND(e),WL.NOT_FOUND,void 0,void 0,!0);return s}a(JL,"validateDropSchema")});var OS=h((VG,pS)=>{"use strict";var Li=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(Li,"CreateTableObject");pS.exports=Li});var CS=h(($G,IS)=>{"use strict";var XL=require("fs-extra"),yi=q(),{getTransactionAuditStorePath:ZL}=Y(),Go=ne(),YG=OS();IS.exports=zL;async function zL(e){let t;try{let r=ZL(e.schema,e.table);await XL.mkdirp(r),t=await yi.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{yi.createDBI(t,Go.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),yi.createDBI(t,Go.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),yi.createDBI(t,Go.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(zL,"createTransactionsAuditEnvironment")});var US=h((WG,yS)=>{"use strict";var vo=f(),bS=q(),jL=hr(),{getSystemSchemaPath:ey,getSchemaPath:ty}=Y(),ry=Yt(),sy=Pn(),Fo=Dn(),ny=O(),iy=CS(),xo=ry.hdb_table,LS=[];for(let e=0;e<xo.attributes.length;e++)LS.push(xo.attributes[e].attribute);yS.exports=ay;async function ay(e,t){let r=ty(t.schema,t.table),s=new Fo(t.schema,t.table,vo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Fo(t.schema,t.table,vo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Fo(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await bS.createEnvironment(r,t.table),e!==void 0){let o=await bS.openEnvironment(ey(),vo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await jL.insertRecords(o,xo.hash_attribute,LS,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await qo(s),await qo(n),await qo(i)}await iy(t)}catch(o){throw o}}a(ay,"lmdbCreateTable");async function qo(e){try{await sy(e)}catch(t){ny.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(qo,"createAttribute")});var MS=h((JG,wS)=>{"use strict";var oy=Hn(),_y=Fn(),cy=ui(),ps=f(),uy=hr().updateRecords,Ey=q(),{getSchemaPath:ly}=Y(),dy=As(),Sy=O();wS.exports=hy;async function hy(e){try{let{schema_table:t,attributes:r}=oy(e);_y(e,r,t.hash_attribute),e.schema!==ps.SYSTEM_SCHEMA_NAME&&(r.includes(ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await cy(e.hdb_auth_header,t,r),n=ly(e.schema,e.table),i=await Ey.openEnvironment(n,e.table),o=await uy(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await dy(e,o)}catch(_){Sy.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(hy,"lmdbUpdateRecords")});var PS=h((ZG,DS)=>{"use strict";var Ty=f().OPERATIONS_ENUM,Ui=class{constructor(t,r,s,n=void 0){this.operation=Ty.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Ui,"UpsertObject");DS.exports=Ui});var BS=h((ev,HS)=>{"use strict";var jG=PS(),fy=Hn(),my=Fn(),Ay=ui(),Os=f(),Ry=hr().upsertRecords,gy=q(),{getSchemaPath:Ny}=Y(),py=As(),Oy=O(),{handleHDBError:Iy,hdb_errors:Cy}=Q();HS.exports=by;async function by(e){let t;try{t=fy(e)}catch(c){throw Iy(c,c.message,Cy.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;my(e,s,r.hash_attribute),e.schema!==Os.SYSTEM_SCHEMA_NAME&&(s.includes(Os.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Os.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Os.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Os.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Ay(e.hdb_auth_header,r,s),i=Ny(e.schema,e.table),o=await gy.openEnvironment(i,e.table),_=await Ry(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await py(e,_)}catch(c){Oy.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:_.written_hashes,schema_table:r,new_attributes:n,txn_time:_.txn_time}}a(by,"lmdbUpsertRecords")});var VS=h((rv,xS)=>{"use strict";var Ly=dt(),GS=p(),vS=O(),yy=Lr(),FS=f(),Uy=Mo().deleteRecords,wy=q(),{getSchemaPath:My}=Y(),{promisify:Dy}=require("util"),Py=Dy(setTimeout),qS=1e4,Hy=10;xS.exports=By;async function By(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(GS.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 Ly(e.schema,e.table,FS.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=Array.from(await yy(n,FS.VALUE_SEARCH_COMPARATORS.LESS))}catch(n){throw vS.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return GS.isEmptyOrZeroLength(s)?(vS.trace("No records found to delete"),{message:"No records found to delete"}):await Gy(e,s,t)}a(By,"lmdbDeleteRecordsBefore");async function Gy(e,t,r){let s=My(e.schema,e.table),n=await wy.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,_=t.length;o<_;o+=qS){let c=t.slice(o,o+qS),u=[];for(let E=0,l=c.length;E<l;E++)u.push(c[E][r]);try{let E=await Uy(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(E.deleted),i.skipped_hashes=i.skipped_hashes.concat(E.skipped)}catch(E){throw E}await Py(Hy)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(Gy,"chunkDeletes")});var YS=h((nv,kS)=>{"use strict";var wi=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(wi,"DeleteBeforeObject");kS.exports=wi});var KS=h((av,$S)=>{"use strict";var Mi=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(Mi,"DeleteAuditLogsBeforeResults");$S.exports=Mi});var JS=h((cv,QS)=>{"use strict";var Vo=q(),{getTransactionAuditStorePath:vy}=Y(),_v=YS(),Is=ne(),Fy=p(),WS=KS(),qy=require("util").promisify,xy=qy(setTimeout),Vy=1e4,ky=100;QS.exports=Yy;async function Yy(e){let t=vy(e.schema,e.table),r=await Vo.openEnvironment(t,e.table,!0),s=Vo.listDBIs(r);Vo.initializeDBIs(r,Is.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new WS;do n=await $y(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 xy(ky);while(n.transactions_deleted>0);return i}a(Yy,"deleteAuditLogsBefore");async function $y(e,t){let r=new WS;try{let s=e.dbis[Is.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let _=o[Is.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Fy.isEmpty(_)||(n=e.dbis[Is.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(_,i));for(let c=0;c<o.hash_values.length;c++)n=e.dbis[Is.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[c],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>Vy)break}return await n,r}catch(s){throw s}}a($y,"deleteTransactions")});var ZS=h((Ev,XS)=>{"use strict";var Di=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(Di,"DropAttributeObject");XS.exports=Di});var jS=h((Sv,zS)=>{"use strict";var Ky=dt(),Wy=bi(),dv=ZS(),ze=f(),Qy=p(),ko=q(),Jy=Yt(),Xy=Lr(),Zy=gs(),{getSchemaPath:zy}=Y();zS.exports=jy;async function jy(e,t=!0){let r;e.schema===ze.SYSTEM_SCHEMA_NAME?r=Jy[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await tU(e),n=zy(e.schema,e.table),i=await ko.openEnvironment(n,e.table);return t===!0&&await eU(e,i,r.hash_attribute),ko.dropDBI(i,e.attribute),s}a(jy,"lmdbDropAttribute");async function eU(e,t,r){let s=ko.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:_,version:c}of s.getRange({start:!1,versions:!0})){let u={};for(let E in _)E!==i&&(u[E]=_[E]);n=t.dbis[r].put(o,u,c)}await n}a(eU,"removeAttributeFromAllObjects");async function tU(e){let t=new Ky(ze.SYSTEM_SCHEMA_NAME,ze.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ze.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ze.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ze.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await Xy(t)).filter(o=>o[ze.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Qy.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[ze.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Wy(ze.SYSTEM_SCHEMA_NAME,ze.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return Zy(i)}a(tU,"dropAttributeFromSystem")});var ih=h((fv,nh)=>{"use strict";var Yo=q(),yr=ne(),Tv=qt(),$o=f(),eh=p(),{getTransactionAuditStorePath:rU}=Y(),sU=Xt(),Pi=Or(),nU=O();nh.exports=iU;async function iU(e){let t=rU(e.schema,e.table),r=await Yo.openEnvironment(t,e.table,!0),s=Yo.listDBIs(r);Yo.initializeDBIs(r,yr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case $o.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return th(r,e.search_values);case $o.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,oU(r,e.search_values,n);case $o.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return aU(r,e.search_values);default:return th(r)}}a(iU,"readAuditLog");function th(e,t=[0,Date.now()]){eh.isEmpty(t[0])&&(t[0]=0),eh.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[yr.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 Pi,n))}a(th,"searchTransactionsByTimestamp");function aU(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[yr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,sh(e,i))}return Object.fromEntries(r)}a(aU,"searchTransactionsByUsername");function oU(e,t,r){let s=new Map;for(let _=0,c=t.length;_<c;_++){let u=t[_],E=sU.equals(e,yr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,yr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:l}of E){let S=Number(l);s.has(S)?s.get(S).push(u.toString()):s.set(S,[u.toString()])}}let n=Array.from(s.keys()),i=sh(e,n),o=new Map;for(let _=0;_<i.length;_++){let c=i[_],u=c.timestamp,E=s.get(u);rh(c,"records",r,E,o),rh(c,"original_records",r,E,o)}return Object.fromEntries(o)}a(oU,"searchTransactionsByHashValues");function rh(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let _=e[t][o],c=_[r].toString();if(s.indexOf(c)>=0)if(n.has(c)){let u=n.get(c),E=u[u.length-1];if(E.timestamp===i)E[t]=[_];else{let l=new Pi(e.operation,e.user_name,i,void 0);l[t]=[_],u.push(l)}}else{let u=new Pi(e.operation,e.user_name,i,void 0);u[t]=[_],n.set(c,[u])}}}a(rh,"loopRecords");function sh(e,t){let r=[];try{let s=e.dbis[yr.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 Pi,i);r.push(o)}}catch(i){nU.warn(i)}return r}catch(s){throw s}}a(sh,"batchSearchTransactions")});var oh=h((Av,ah)=>{"use strict";var{getSchemaPath:_U}=Y(),cU=q();ah.exports={writeTransaction:uU};async function uU(e,t,r){let s=_U(e,t);return(await cU.openEnvironment(s,t)).transaction(r)}a(uU,"writeTransaction")});var Eh=h((gv,uh)=>{"use strict";var{getSchemaPath:_h}=Y(),ch=q();uh.exports={flush:EU,resetReadTxn:lU};async function EU(e,t){return(await ch.openEnvironment(_h(e,t),t.toString())).flushed}a(EU,"flush");async function lU(e,t){try{(await ch.openEnvironment(_h(e,t),t.toString())).resetReadTxn()}catch{}}a(lU,"resetReadTxn")});var Sh=h((pv,dh)=>{"use strict";var dU=O(),{handleHDBError:SU}=Q(),hU=Pa(),TU=Pn(),fU=yo(),mU=Md(),AU=gs(),RU=Po(),gU=Qd(),NU=sS(),pU=Lr(),OU=ES(),IU=NS(),CU=US(),bU=MS(),LU=BS(),yU=VS(),UU=JS(),wU=Bo(),MU=jS(),DU=ih(),PU=oh(),lh=Eh(),Hi=class extends hU{async searchByConditions(t){return OU(t)}async getDataByHash(t){return await RU(t)}async searchByHash(t){return await gU(t)}async getDataByValue(t,r){return await NU(t,r)}async searchByValue(t){return await pU(t)}async createSchema(t){return await mU(t)}async dropSchema(t){return await IU(t)}async createTable(t,r){return await CU(t,r)}async dropTable(t){return await wU(t)}async createAttribute(t){return await TU(t)}async createRecords(t){return await fU(t)}async updateRecords(t){return await bU(t)}async upsertRecords(t){try{return await LU(t)}catch(r){throw SU(r,null,null,dU.ERR,r)}}async deleteRecords(t){return await AU(t)}async deleteRecordsBefore(t){return await yU(t)}async dropAttribute(t){return await MU(t)}async deleteAuditLogsBefore(t){return await UU(t)}async readAuditLog(t){return await DU(t)}writeTransaction(t,r,s){return PU.writeTransaction(t,r,s)}flush(t,r){return lh.flush(t,r)}resetReadTxn(t,r){return lh.resetReadTxn(t,r)}};a(Hi,"LMDBBridge");dh.exports=Hi});var Wt=h((Iv,Th)=>{"use strict";var HU=Sh(),BU=Pa(),GU=J();GU.initSync();var hh;function vU(){return hh instanceof BU?hh:new HU}a(vU,"getBridge");Th.exports=vU()});var Fi=h((bv,Ah)=>{"use strict";var Gi=Da(),Ge=p(),FU=require("util"),vi=Wt(),qU=ii(),Ko=O(),{handleHDBError:wt,hdb_errors:xU}=Q(),{HTTP_STATUS_CODES:jt}=xU,VU=FU.promisify(qU.getTableSchema),kU="updated",fh="inserted",mh="upserted";Ah.exports={insert:$U,update:KU,upsert:WU,validation:YU,flush:QU};async function YU(e){if(Ge.isEmpty(e))throw new Error("invalid update parameters defined.");if(Ge.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Ge.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await VU(e.schema,e.table),r=Gi(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(_=>{if(o&&Ge.isEmptyOrZeroLength(_[s]))throw Ko.error("a valid hash attribute must be provided with update record:",_),new Error("a valid hash attribute must be provided with update record");if(!Ge.isEmptyOrZeroLength(_[s])&&(_[s]==="null"||_[s]==="undefined"))throw Ko.error(`a valid hash value must be provided with ${e.operation} record:`,_),new Error(`"${_[s]}" is not a valid hash attribute value`);!Ge.isEmpty(_[s])&&_[s]!==""&&n.has(Ge.autoCast(_[s]))&&(_.skip=!0),n.add(Ge.autoCast(_[s]));for(let c in _)i[c]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(YU,"validation");async function $U(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Gi(e);if(t)throw wt(new Error,t.message,jt.BAD_REQUEST);let r=Ge.checkSchemaTableExist(e.schema,e.table);if(r)throw wt(new Error,r,jt.BAD_REQUEST);let s=await vi.createRecords(e);return Bi(fh,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a($U,"insertData");async function KU(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Gi(e);if(t)throw wt(new Error,t.message,jt.BAD_REQUEST);let r=Ge.checkSchemaTableExist(e.schema,e.table);if(r)throw wt(new Error,r,jt.BAD_REQUEST);let s=await vi.updateRecords(e);return Ge.isEmpty(s.existing_rows)?Bi(kU,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Bi(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(KU,"updateData");async function WU(e){if(e.operation!=="upsert")throw wt(new Error,"invalid operation, must be upsert",jt.INTERNAL_SERVER_ERROR);let t=Gi(e);if(t)throw wt(new Error,t.message,jt.BAD_REQUEST);let r=Ge.checkSchemaTableExist(e.schema,e.table);if(r)throw wt(new Error,r,jt.BAD_REQUEST);try{let s=await vi.upsertRecords(e);return Bi(mh,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw wt(s,null,null,Ko.ERR,n)}}a(WU,"upsertData");function Bi(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===fh?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===mh?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Bi,"returnObject");function QU(e){return vi.flush(e.schema,e.table)}a(QU,"flush")});var ph=h((yv,Nh)=>{var JU=at(),Wo=require("joi"),{hdb_schema_table:Rh}=Er(),gh={schema:Rh,table:Rh},XU={date:Wo.date().iso().required()},ZU={timestamp:Wo.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Nh.exports=function(e,t){let r=t==="timestamp"?{...gh,...ZU}:{...gh,...XU},s=Wo.object(r);return JU.validateBySchema(e,s)}});var bh=h((Uv,Ch)=>{var zU=at(),Oh=require("joi"),{hdb_schema_table:Ih}=Er(),jU=Oh.object({schema:Ih,table:Ih,hash_values:Oh.array().required()});Ch.exports=function(e){return zU.validateBySchema(e,jU)}});var yh=h((wv,Lh)=>{"use strict";var qi=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(qi,"InsertObject");var xi=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(xi,"NoSQLSeachObject");var Vi=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(Vi,"DeleteResponseObject");Lh.exports={InsertObject:qi,NoSQLSeachObject:xi,DeleteResponseObject:Vi}});var Hh=h((Dv,Ph)=>{"use strict";var wh=ph(),ew=bh(),ki=p(),Uh=require("moment"),Mh=O(),{promisify:tw,callbackify:rw}=require("util"),er=f(),sw=ii(),Qo=tw(sw.getTableSchema),Jo=Wt(),{DeleteResponseObject:nw}=yh(),{handleHDBError:Mt,hdb_errors:iw}=Q(),{HDB_ERROR_MSGS:Yi,HTTP_STATUS_CODES:Dt}=iw,aw="records successfully deleted",ow=rw(Dh);Ph.exports={delete:ow,deleteRecord:Dh,deleteFilesBefore:_w,deleteAuditLogsBefore:cw};async function _w(e){let t=wh(e,"date");if(t)throw Mt(t,t.message,Dt.BAD_REQUEST,void 0,void 0,!0);if(!Uh(e.date,Uh.ISO_8601).isValid())throw Mt(new Error,Yi.INVALID_DATE,Dt.BAD_REQUEST,er.LOG_LEVELS.ERROR,Yi.INVALID_DATE,!0);let s=ki.checkSchemaTableExist(e.schema,e.table);if(s)throw Mt(new Error,s,Dt.NOT_FOUND,er.LOG_LEVELS.ERROR,s,!0);let n=await Jo.deleteRecordsBefore(e);if(await Qo(e.schema,e.table),Mh.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(_w,"deleteFilesBefore");async function cw(e){let t=wh(e,"timestamp");if(t)throw Mt(t,t.message,Dt.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Mt(new Error,Yi.INVALID_VALUE("Timestamp"),Dt.BAD_REQUEST,er.LOG_LEVELS.ERROR,Yi.INVALID_VALUE("Timestamp"),!0);let r=ki.checkSchemaTableExist(e.schema,e.table);if(r)throw Mt(new Error,r,Dt.NOT_FOUND,er.LOG_LEVELS.ERROR,r,!0);let s=await Jo.deleteAuditLogsBefore(e);return await Qo(e.schema,e.table),Mh.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(cw,"deleteAuditLogsBefore");async function Dh(e){let t=ew(e);if(t)throw Mt(t,t.message,Dt.BAD_REQUEST,void 0,void 0,!0);let r=ki.checkSchemaTableExist(e.schema,e.table);if(r)throw Mt(new Error,r,Dt.NOT_FOUND,er.LOG_LEVELS.ERROR,r,!0);try{await Qo(e.schema,e.table);let s=await Jo.deleteRecords(e);return ki.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${aw}`),s}catch(s){if(s.message===er.SEARCH_NOT_FOUND_MESSAGE){let n=new nw;return n.message=er.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(Dh,"deleteRecord")});var Gh=h((Hv,Bh)=>{var Xo=at(),ce={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 uw(e){return ce.password.presence=!0,ce.username.presence=!0,ce.role.presence=!0,ce.active.presence=!0,Xo.validateObject(e,ce)}a(uw,"addUserValidation");function Ew(e){return ce.password.presence=!1,ce.username.presence=!0,ce.role.presence=!1,ce.active.presence=!1,Xo.validateObject(e,ce)}a(Ew,"alterUserValidation");function lw(e){return ce.password.presence=!1,ce.username.presence=!0,ce.role.presence=!1,ce.active.presence=!1,Xo.validateObject(e,ce)}a(lw,"dropUserValidation");Bh.exports={addUserValidation:uw,alterUserValidation:Ew,dropUserValidation:lw}});var Nr=h((vv,zh)=>{"use strict";var Vh="username is required",kh="nothing to update, must supply active, role or password to update",Yh="password cannot be an empty string",$h="If role is specified, it cannot be empty.",Kh="active must be true or false";zh.exports={addUser:Rw,alterUser:gw,dropUser:pw,userInfo:Ow,listUsers:Ki,listUsersExternal:Iw,setUsersToGlobal:Cs,findAndValidateUser:Lw,getClusterUser:yw,USERNAME_REQUIRED:Vh,ALTERUSER_NOTHING_TO_UPDATE:kh,EMPTY_PASSWORD:Yh,EMPTY_ROLE:$h,ACTIVE_BOOLEAN:Kh};var Wh=Fi(),dw=Hh(),zo=xn(),Qh=Gh(),Jh=Zn(),jo=ci(),Le=p(),Xh=require("validate.js"),C=O(),{promisify:e_}=require("util"),t_=ds(),vh=f(),Fh=it(),Sw=$r(),Gv=J(),hw=kn(),Tw=Yt(),{handleHDBError:je,hdb_errors:fw}=Q(),{HTTP_STATUS_CODES:et,AUTHENTICATION_ERROR_MSGS:Zo,HDB_ERROR_MSGS:Ur}=fw,{UserEventMsg:r_}=gr(),qh=require("lodash"),Zh={username:!0,active:!0,role:!0,password:!0},xh=new Map,$i=e_(Jh.searchByValue),mw=e_(Jh.searchByHash),Aw=e_(dw.delete);async function Rw(e){let t=Xh.cleanAttributes(e,Zh),r=Qh.addUserValidation(t);if(r)throw je(new Error,r.message,et.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 $i(s),n=n&&Array.from(n)}catch(c){throw C.error("There was an error searching for a role in add user"),C.error(c),c}if(!n||n.length<1)throw je(new Error,Ur.ROLE_NAME_NOT_FOUND(t.role),et.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw je(new Error,Ur.DUP_ROLES_FOUND(t.role),et.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=t_.encrypt(t.password)),t.password=zo.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Wh.insert(i)}catch(c){throw C.error("There was an error searching for a user."),C.error(c),c}C.debug(o);try{await Cs()}catch(c){throw C.error("Got an error setting users to global"),C.error(c),c}if(o.skipped_hashes.length===1)throw je(new Error,Ur.USER_ALREADY_EXISTS(t.username),et.CONFLICT,void 0,void 0,!0);let _=Object.assign({},t);return _.role=n[0],jo.signalUserChange(new r_(process.pid)),`${_.username} successfully added`}a(Rw,"addUser");async function gw(e){let t=Xh.cleanAttributes(e,Zh);if(Le.isEmptyOrZeroLength(t.username))throw new Error(Vh);if(Le.isEmptyOrZeroLength(t.password)&&Le.isEmptyOrZeroLength(t.role)&&Le.isEmptyOrZeroLength(t.active))throw new Error(kh);if(!Le.isEmpty(t.password)&&Le.isEmptyOrZeroLength(t.password.trim()))throw new Error(Yh);if(!Le.isEmpty(t.active)&&!Le.isBoolean(t.active))throw new Error(Kh);let r=Nw(t.username);if(!Le.isEmpty(t.password)&&!Le.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=t_.encrypt(t.password)),t.password=zo.hash(t.password)),t.role==="")throw new Error($h);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 $i(i)||[])}catch(_){throw C.error("Got an error searching for a role."),C.error(_),_}if(!o||o.length===0){let _=Ur.ALTER_USER_ROLE_NOT_FOUND(t.role);throw C.error(_),je(new Error,_,et.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let _=Ur.ALTER_USER_DUP_ROLES(t.role);throw C.error(_),je(new Error,_,et.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 Wh.update(s)}catch(i){throw C.error("Error during update."),C.error(i),i}try{await Cs()}catch(i){throw C.error("Got an error setting users to global"),C.error(i),i}return jo.signalUserChange(new r_(process.pid)),n}a(gw,"alterUser");function Nw(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(Nw,"isClusterUser");async function pw(e){try{let t=Qh.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Le.isEmpty(global.hdb_users.get(e.username)))throw je(new Error,Ur.USER_NOT_EXIST(e.username),et.NOT_FOUND,void 0,void 0,!0);let s;try{s=await Aw(r)}catch(n){throw C.error("Got an error deleting a user."),C.error(n),n}C.debug(s);try{await Cs()}catch(n){throw C.error("Got an error setting users to global."),C.error(n),n}return jo.signalUserChange(new r_(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(pw,"dropUser");async function Ow(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 mw(r)}catch(n){throw C.error("Got an error searching for a role."),C.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw C.error(r),r}return t}a(Ow,"userInfo");async function Iw(){let e;try{e=await Ki()}catch(t){throw C.error("Got an error listing users."),C.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(Iw,"listUsersExternal");async function Ki(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await $i(e)}catch(o){throw C.error("Got an error searching for roles."),C.error(o),o}let r={};for(let o of t)r[o.id]=qh.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 $i(s)}catch(o){throw C.error("Got an error searching for users."),C.error(o),o}let i=new Map;for(let o of n)o=qh.cloneDeep(o),o.role=r[o.role],Cw(o.role),i.set(o.username,o);return(await hw.getLicense()).enterprise?i:bw(Array.from(i.values()))}catch(e){throw C.error("got an error listing users"),C.error(e),Le.errorizeMessage(e)}return null}a(Ki,"listUsers");function Cw(e){try{if(!e){C.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(Tw)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){C.error("Got an error trying to set system permissions."),C.error(t)}}a(Cw,"appendSystemTablesToRole");function bw(e){try{if(C.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?(C.warn("No roles found with active users."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return C.error("error filtering users."),C.error(t),new Map}}a(bw,"nonEnterpriseFilter");async function Cs(){try{let e=await Ki();global.hdb_users=e}catch(e){throw C.error(e),e}}a(Cs,"setUsersToGlobal");async function Lw(e,t,r=!0){global.hdb_users||await Cs();let s=global.hdb_users.get(e);if(!s)throw je(new Error,Zo.GENERIC_AUTH_FAIL,et.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw je(new Error,Zo.USER_INACTIVE,et.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(xh.get(t)===s.password)return n;if(zo.validate(s.password,t))xh.set(t,s.password);else throw je(new Error,Zo.GENERIC_AUTH_FAIL,et.UNAUTHORIZED,void 0,void 0,!0)}return n}a(Lw,"findAndValidateUser");async function yw(){let e=await Ki(),t=Sw.getConfigFromFile(vh.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Le.isEmpty(r)&&r?.role?.role===vh.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=t_.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Fh.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Fh.SERVER_SUFFIX.ADMIN,r}a(yw,"getClusterUser")});var eT=h((qv,jh)=>{"use strict";var Uw=Wt();jh.exports={writeTransaction:ww};function ww(e,t,r){return Uw.writeTransaction(e,t,r)}a(ww,"writeTransaction")});var s_=h((Vv,Mw)=>{Mw.exports={name:"harperdb",version:"4.1.1",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{node:">=14.0.0","preferred-node":"18.15.0","go-lang":"1.19.10","nats-server":"2.9.18"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license --storage_type=lmdb && npm run cover:logging && npm run cover:upgrade && npm run cover:nats && npm run cover:cfserver && npm run cover:lmdbbridge && npm run cover:lmdbutility && npm run cover:hdbserver && npm run cover:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license --storage_type=lmdb","cover:main":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","cover:lmdbbridge":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","cover:lmdbutility":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","cover:hdbserver":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","cover:cfserver":"npm run submodules && cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","cover:nats":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","cover:upgrade":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","cover:apitests":"cd bin/ && node harperdb.js stop && node harperdb.js && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*.js' --config '../unitTests/.mocharc.json' && node harperdb.js stop","cover:logging":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.350.0","@aws-sdk/lib-storage":"3.350.0","@aws-sdk/abort-controller":"3.347.0","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.2.0","@fastify/cors":"~8.2.0","@fastify/static":"~6.9.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4","cbor-x":"1.5.1",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2",esbuild:"^0.17.10","fast-glob":"3.2.12",fastify:"~4.17.0","fastify-plugin":"~4.5.0","fs-extra":"11.1.0","human-readable-ids":"1.0.4",inquirer:"8.2.5","is-number":"7.0.0",joi:"17.9.2",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.0",lmdb:"2.8.1",lodash:"4.17.21",mathjs:"11.6.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4",msgpackr:"1.9.5",nats:"2.14.0",needle:"3.2.0","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.0",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.14.1",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.5.1","stream-chain":"2.2.5","stream-json":"1.7.5",systeminformation:"5.17.10","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.0","validate.js":"0.13.1",yaml:"2.2.1"},devDependencies:{axios:"0.27.2",chai:"4.3.7","chai-integer":"0.1.0",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"^1.22.11","newman-reporter-teamcity":"^0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},lmdb:{msgpackr:"1.8.4"},"newman-reporter-html":{newman:"5.3.2"}}}});var h_=h((Zv,mT)=>{"use strict";var ee=J();ee.initSync();var Dw=require("fs-extra"),Pw=require("semver"),ws=require("path"),{monotonicFactory:Hw}=require("ulidx"),__=Hw(),Bw=require("util"),rT=require("child_process"),Gw=Bw.promisify(rT.exec),vw=rT.spawn,M=it(),G=f(),Wi=p(),Pt=O(),Qi=ds(),Fw=eT(),bs=$r(),{encode:a_,decode:c_}=require("msgpackr"),{isEmpty:tr}=Wi,sT=Nr(),nT=12e10,{connect:qw,StorageType:iT,RetentionPolicy:aT,AckPolicy:u_,DeliverPolicy:Ms,DiscardPolicy:xw,NatsConnection:kv,JetStreamManager:Yv,JetStreamClient:$v,StringCodec:Kv,JSONCodec:Vw,createInbox:E_,StreamSource:Wv,headers:kw,toJsMsg:oT,nuid:Qv,JetStreamOptions:Jv,ErrorCode:tT,nanos:Xv}=require("nats"),{PACKAGE_ROOT:Yw}=f(),$w=s_(),_T=Vw(),Kw="clustering",Ww=$w.engines[M.NATS_SERVER_NAME],Qw=ws.join(Yw,"dependencies"),o_=ws.join(Qw,`${process.platform}-${process.arch}`,M.NATS_BINARY_NAME),n_,i_,Ls,ys,Us,Ke;mT.exports={runCommand:cT,checkNATSServerInstalled:Jw,createConnection:l_,getConnection:Ji,getJetStreamManager:Ds,getJetStream:uT,getNATSReferences:ye,getServerList:Zw,createLocalStream:d_,listStreams:ET,deleteLocalStream:zw,getServerConfig:Ps,listRemoteStreams:jw,viewStream:eM,viewStreamIterator:tM,publishToStream:rM,createWorkQueueStream:sM,addSourceToWorkStream:dT,request:nM,removeSourceFromWorkStream:hT,reloadNATS:S_,reloadNATSHub:iM,reloadNATSLeaf:aM,extractServerName:ST,requestErrorHandler:oM,updateWorkStream:_M,createLocalTableStream:TT,createTableStreams:cM,purgeTableStream:fT,purgeSchemaTableStreams:uM,getStreamInfo:EM,updateLocalStreams:dM,closeConnection:Xw,getJsmServerName:Hs,addNatsMsgHeader:lT};async function cT(e,t=void 0){let{stdout:r,stderr:s}=await Gw(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
1
|
+
"use strict";var wf=Object.defineProperty;var a=(e,t)=>wf(e,"name",{value:t,configurable:!0});var h=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var f=h((_P,sc)=>{"use strict";var Fe=require("path"),Mf=require("fs");function Df(){let e=__dirname;for(;!Mf.existsSync(Fe.join(e,"package.json"));){let t=Fe.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(Df,"getHDBPackageRoot");var At=Df(),Y_="js",$s=Y_,Pf="harperdb-config.yaml",Hf="defaultConfig.yaml",Bf="hdb",$_=`harperdb.${$s}`,K_=`customFunctionsServer.${$s}`,Gf=`restartHdb.${$s}`,ga="HarperDB",Ys="Custom Functions",Ks="Clustering Hub",Ws="Clustering Leaf",vf="Clustering Ingest Service",Ff="Clustering Reply Service",qf="foreground.pid",xf="hdb.pid",Vf={HDB:ga,CLUSTERING_HUB:Ks,CLUSTERING_LEAF:Ws,CLUSTERING_INGEST_SERVICE:vf,CLUSTERING_REPLY_SERVICE:Ff,CUSTOM_FUNCTIONS:Ys,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"},kf={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},Yf={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},$f={harperdb:ga,"clustering hub":Ks,"clustering leaf":Ws,"custom functions":Ys,custom_functions:Ys,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},Kf={CLUSTERING_HUB_PROC_DESCRIPTOR:Ks,CLUSTERING_LEAF_PROC_DESCRIPTOR:Ws},Ra={HDB:Fe.join(At,"server/harperdb"),CUSTOM_FUNCTIONS:Fe.join(At,"server/customFunctions"),CLUSTERING_HUB:Fe.join(At,"server/nats"),CLUSTERING_LEAF:Fe.join(At,"server/nats")},Wf={HDB:Fe.join(Ra.HDB,$_),CUSTOM_FUNCTIONS:Fe.join(Ra.CUSTOM_FUNCTIONS,K_)},Qf={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Fe.join(At,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Fe.join(At,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Fe.join(At,"launchServiceScripts/launchUpdateNodes4-0-0.js")},Jf={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},W_="support@harperdb.io",Xf="customer-success@harperdb.io",Q_=1,Zf=4141,J_="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",zf="https://www.harperdb.io/product",jf=`For support, please submit a request at ${J_} or contact ${W_}`,X_=`For license support, please contact ${Xf}`,em="None of the specified records were found.",tm="hash attribute not found",rm=`Your current license only supports ${Q_} role. ${X_}`,sm="Your current license only supports 3 connections to a node.",nm="127.0.0.1",im=1,am=/^\.$/,om=/^\.\.$/,_m="U+002E",cm=/\//g,um="U+002F",Em=/U\+002F/g,lm=/^U\+002E$/,dm=/^U\+002EU\+002E$/,Sm="d",hm=999999,Tm="*",fm="--max-old-space-size=",mm="system",Am="__hdb_hash",Rm=".harperdb",gm=".hdb",Nm="keys",pm="hdb_boot_properties.file",Om=".updateConfig.json",Im="SIGTSTP",Cm=24,bm=6e4,Lm=448,ym="blob",Um="trash",wm="schema",Mm="transactions",Dm=".count",Pm="id",Hm="PROCESS_NAME",Z_={SETTINGS_PATH_KEY:"settings_path"},z_=require("lodash"),Bm={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"},Gm={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},vm={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Fm={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"},qm={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"},ge="hdb_internal:",xm={CREATE_SCHEMA:ge+"create_schema",CREATE_TABLE:ge+"create_table",CREATE_ATTRIBUTE:ge+"create_attribute",ADD_USER:ge+"add_user",ALTER_USER:ge+"alter_user",DROP_USER:ge+"drop_user",HDB_NODES:ge+"hdb_nodes",HDB_USERS:ge+"hdb_users",HDB_WORKERS:ge+"hdb_workers",CATCHUP:ge+"catchup",SCHEMA_CATCHUP:ge+"schema_catchup",WORKER_ROOM:ge+"cluster_workers"},Vm={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"},km="060493.ks",Ym=".license",$m={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},m={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"},Km={CSV:".csv",JSON:".json"},Wm={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},Qm={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Br={};Br[m.INSERT]=m.INSERT;Br[m.UPDATE]=m.UPDATE;Br[m.UPSERT]=m.UPSERT;Br[m.DELETE]=m.DELETE;var F=Object.create(null);F[m.DESCRIBE_ALL]=m.DESCRIBE_ALL;F[m.DESCRIBE_TABLE]=m.DESCRIBE_TABLE;F[m.DESCRIBE_SCHEMA]=m.DESCRIBE_SCHEMA;F[m.READ_LOG]=m.READ_LOG;F[m.ADD_NODE]=m.ADD_NODE;F[m.LIST_USERS]=m.LIST_USERS;F[m.LIST_ROLES]=m.LIST_ROLES;F[m.USER_INFO]=m.USER_INFO;F[m.SQL]=m.SQL;F[m.GET_JOB]=m.GET_JOB;F[m.SEARCH_JOBS_BY_START_DATE]=m.SEARCH_JOBS_BY_START_DATE;F[m.DELETE_FILES_BEFORE]=m.DELETE_FILES_BEFORE;F[m.EXPORT_LOCAL]=m.EXPORT_LOCAL;F[m.EXPORT_TO_S3]=m.EXPORT_TO_S3;F[m.CLUSTER_STATUS]=m.CLUSTER_STATUS;F[m.REMOVE_NODE]=m.REMOVE_NODE;F[m.RESTART]=m.RESTART;F[m.CUSTOM_FUNCTIONS_STATUS]=m.CUSTOM_FUNCTIONS_STATUS;F[m.GET_CUSTOM_FUNCTIONS]=m.GET_CUSTOM_FUNCTIONS;F[m.GET_CUSTOM_FUNCTION]=m.GET_CUSTOM_FUNCTION;F[m.SET_CUSTOM_FUNCTION]=m.SET_CUSTOM_FUNCTION;F[m.DROP_CUSTOM_FUNCTION]=m.DROP_CUSTOM_FUNCTION;F[m.ADD_CUSTOM_FUNCTION_PROJECT]=m.ADD_CUSTOM_FUNCTION_PROJECT;F[m.DROP_CUSTOM_FUNCTION_PROJECT]=m.DROP_CUSTOM_FUNCTION_PROJECT;F[m.PACKAGE_CUSTOM_FUNCTION_PROJECT]=m.PACKAGE_CUSTOM_FUNCTION_PROJECT;F[m.DEPLOY_CUSTOM_FUNCTION_PROJECT]=m.DEPLOY_CUSTOM_FUNCTION_PROJECT;var Jm={RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},Xm={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},j_={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"},Zm=z_.invert(j_),T={CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_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"},ec={settings_path:Z_.SETTINGS_PATH_KEY,hdb_root_key:T.ROOTPATH,hdb_root:T.ROOTPATH,server_port_key:T.OPERATIONSAPI_NETWORK_PORT,server_port:T.OPERATIONSAPI_NETWORK_PORT,cert_key:T.OPERATIONSAPI_TLS_CERTIFICATE,certificate:T.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:T.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:T.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:T.OPERATIONSAPI_NETWORK_HTTPS,https_on:T.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:T.OPERATIONSAPI_NETWORK_CORS,cors_on:T.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:T.LOGGING_LEVEL,log_level:T.LOGGING_LEVEL,log_path_key:T.LOGGING_ROOT,log_path:T.LOGGING_ROOT,props_env_key:T.OPERATIONSAPI_NODEENV,node_env:T.OPERATIONSAPI_NODEENV,clustering_node_name_key:T.CLUSTERING_NODENAME,node_name:T.CLUSTERING_NODENAME,clustering_enabled_key:T.CLUSTERING_ENABLED,clustering:T.CLUSTERING_ENABLED,max_http_threads:T.HTTP_THREADS,max_hdb_processes:T.HTTP_THREADS,server_timeout_key:T.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:T.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:T.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:T.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:T.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:T.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:T.LOGGING_AUDITLOG,disable_transaction_log:T.LOGGING_AUDITLOG,operation_token_timeout_key:T.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:T.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:T.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:T.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_enabled_key:T.CUSTOMFUNCTIONS_ENABLED,custom_functions:T.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:T.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:T.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:T.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:T.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:T.HTTP_THREADS,log_to_file:T.LOGGING_FILE,log_to_stdstreams:T.LOGGING_STDSTREAMS,run_in_foreground:T.OPERATIONSAPI_FOREGROUND,local_studio_on:T.LOCALSTUDIO_ENABLED,clustering_port:T.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:T.CLUSTERING_USER,clustering_enabled:T.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:T.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:T.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:T.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:T.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:T.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:T.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:T.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:T.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:T.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:T.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:T.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:T.CLUSTERING_NODENAME,clustering_tls_certificate:T.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:T.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:T.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:T.CLUSTERING_TLS_INSECURE,clustering_tls_verify:T.CLUSTERING_TLS_VERIFY,clustering_loglevel:T.CLUSTERING_LOGLEVEL,clustering_republishmessages:T.CLUSTERING_REPUBLISHMESSAGES,customfunctions_enabled:T.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:T.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:T.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:T.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:T.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:T.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:T.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:T.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:T.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:T.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:T.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:T.CUSTOMFUNCTIONS_NODEENV,http_threads:T.HTTP_THREADS,http_session_affinity:T.HTTP_SESSION_AFFINITY,customfunctions_processes:T.HTTP_THREADS,customfunctions_root:T.CUSTOMFUNCTIONS_ROOT,localstudio_enabled:T.LOCALSTUDIO_ENABLED,logging_file:T.LOGGING_FILE,logging_level:T.LOGGING_LEVEL,logging_root:T.LOGGING_ROOT,logging_rotation_enabled:T.LOGGING_ROTATION_ENABLED,logging_rotation_compress:T.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:T.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:T.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:T.LOGGING_ROTATION_PATH,logging_stdstreams:T.LOGGING_STDSTREAMS,logging_auditlog:T.LOGGING_AUDITLOG,operationsapi_authentication_operationtokentimeout:T.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:T.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:T.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:T.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:T.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:T.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:T.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:T.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:T.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:T.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:T.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:T.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:T.OPERATIONSAPI_NODEENV,operationsapi_root:T.ROOTPATH,schemas:T.SCHEMAS,storage_path:T.STORAGE_PATH};for(let e in T){let t=T[e];ec[t.toLowerCase()]=t}var zm={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},jm={csv_file_load:"csv_file_load",csv_data_load:m.CSV_DATA_LOAD,csv_url_load:m.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"},eA={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"},tA={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},rA={FILE_SYSTEM:"fs",LMDB:"lmdb"},sA={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},nA={DEVELOPMENT:8192,DEFAULT:512},iA={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"},aA={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"},oA={ENOENT:"ENOENT",EACCES:"EACCES"},tc={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},_A="__clustering__",cA=Object.values(tc),uA=15984864e5,rc={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},EA=z_.invert(rc),lA={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"},dA=111,SA=`\r
|
|
2
|
+
`,hA={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},TA=["*","%"],fA="unauthorized_access",mA="func_val",AA={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},RA={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},gA={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"},NA={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},pA={HTTP:"http"},OA={STOPPED:"stopped",ONLINE:"online"},IA="3.x.x";sc.exports={LOCAL_HARPERDB_OPERATIONS:F,HDB_SUPPORT_ADDRESS:W_,HDB_SUPPORT_URL:J_,HDB_PRICING_URL:zf,SUPPORT_HELP_MSG:jf,LICENSE_HELP_MSG:X_,HDB_PROC_NAME:$_,HDB_PROC_DESCRIPTOR:ga,CLUSTERING_LEAF_PROC_DESCRIPTOR:Ws,CLUSTERING_HUB_PROC_DESCRIPTOR:Ks,SYSTEM_SCHEMA_NAME:mm,HASH_FOLDER_NAME:Am,HDB_HOME_DIR_NAME:Rm,UPDATE_FILE_NAME:Om,LICENSE_KEY_DIR_NAME:Nm,BOOT_PROPS_FILE_NAME:pm,JOB_TYPE_ENUM:jm,JOB_STATUS_ENUM:$m,SYSTEM_TABLE_NAMES:Fm,SYSTEM_TABLE_HASH_ATTRIBUTES:qm,OPERATIONS_ENUM:m,VALID_S3_FILE_TYPES:Km,S3_BUCKET_AUTH_KEYS:Wm,VALID_SQL_OPS_ENUM:Qm,GEO_CONVERSION_ENUM:Xm,HDB_SETTINGS_NAMES:j_,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:Zm,SERVICE_ACTIONS_ENUM:Jm,CLUSTER_MESSAGE_TYPE_ENUM:eA,CLUSTER_CONNECTION_DIRECTION_ENUM:tA,CLUSTER_EVENTS_DEFS_ENUM:iA,PERIOD_REGEX:am,DOUBLE_PERIOD_REGEX:om,UNICODE_PERIOD:_m,FORWARD_SLASH_REGEX:cm,UNICODE_FORWARD_SLASH:um,ESCAPED_FORWARD_SLASH_REGEX:Em,ESCAPED_PERIOD_REGEX:lm,ESCAPED_DOUBLE_PERIOD_REGEX:dm,REG_KEY_FILE_NAME:km,RESTART_TIMEOUT_MS:bm,HDB_FILE_PERMISSIONS:Lm,SCHEMA_DIR_NAME:wm,TRANSACTIONS_DIR_NAME:Mm,LIMIT_COUNT_NAME:Dm,ID_ATTRIBUTE_STRING:Pm,INSERT_MODULE_ENUM:Gm,UPGRADE_JSON_FIELD_NAMES_ENUM:vm,RESTART_CODE:Im,RESTART_CODE_NUM:Cm,CLUSTER_OPERATIONS:Br,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:Vm,HDB_INTERNAL_SC_CHANNEL_PREFIX:ge,INTERNAL_SC_CHANNELS:xm,CLUSTERING_MESSAGE_TYPES:lA,HDB_FILE_SUFFIX:gm,BLOB_FOLDER_NAME:ym,HDB_TRASH_DIR:Um,ORIGINATOR_SET_VALUE:dA,LICENSE_VALUES:sA,RAM_ALLOCATION_ENUM:nA,STORAGE_TYPES_ENUM:rA,TIME_STAMP_NAMES_ENUM:tc,TIME_STAMP_NAMES:cA,PERMS_UPDATE_RELEASE_TIMESTAMP:uA,SEARCH_NOT_FOUND_MESSAGE:em,SEARCH_ATTRIBUTE_NOT_FOUND:tm,LICENSE_ROLE_DENIED_RESPONSE:rm,LICENSE_MAX_CONNS_REACHED:sm,BASIC_LICENSE_MAX_NON_CU_ROLES:Q_,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:Zf,VALUE_SEARCH_COMPARATORS:rc,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:EA,LICENSE_FILE_NAME:Ym,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:aA,NEW_LINE:SA,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:im,MOMENT_DAYS_TAG:Sm,API_TURNOVER_SEC:hm,LOOPBACK:nm,CODE_EXTENSION:$s,WILDCARD_SEARCH_VALUE:Tm,NODE_ERROR_CODES:oA,JAVASCRIPT_EXTENSION:Y_,PERMS_CRUD_ENUM:hA,UNAUTHORIZED_PERMISSION_NAME:fA,SEARCH_WILDCARDS:TA,FUNC_VAL:mA,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:AA,JWT_ENUM:RA,CLUSTERING_FLAG:_A,ITC_EVENT_TYPES:gA,CUSTOM_FUNCTION_PROC_NAME:K_,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Ys,SERVICES:NA,THREAD_TYPES:pA,MEM_SETTING_KEY:fm,HDB_RESTART_SCRIPT:Gf,PROCESS_DESCRIPTORS:Vf,SERVICE_SERVERS:Wf,SERVICE_SERVERS_CWD:Ra,PROCESS_DESCRIPTORS_VALIDATE:$f,LAUNCH_SERVICE_SCRIPTS:Qf,LOG_LEVELS:Yf,PROCESS_NAME_ENV_PROP:Hm,LOG_NAMES:kf,PM2_PROCESS_STATUSES:OA,CONFIG_PARAM_MAP:ec,CONFIG_PARAMS:T,HDB_CONFIG_FILE:Pf,HDB_DEFAULT_CONFIG_FILE:Hf,ROLE_TYPES_ENUM:Jf,BOOT_PROP_PARAMS:Z_,INSTALL_PROMPTS:Bm,HDB_ROOT_DIR_NAME:Bf,CLUSTERING_PROCESSES:Kf,FOREGROUND_PID_FILE:qf,PACKAGE_ROOT:At,PRE_4_0_0_VERSION:IA,SCHEMAS_PARAM_CONFIG:zm,HDB_PID_FILE:xf}});var oc=h((uP,ac)=>{"use strict";var nc=require("minimist");ac.exports=CA;function CA(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=ic(process.env),s=ic(nc(process.argv))):(r=process.env,s=nc(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let _=e[i];s[_]!==void 0?n[_]=s[_].toString().trim():r[_]!==void 0&&(n[_]=r[_].toString().trim())}return n}a(CA,"assignCMDENVVariables");function ic(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(ic,"objKeysToLowerCase")});var O=h((lP,Ac)=>{"use strict";var _r=require("fs-extra"),{workerData:bA,threadId:LA}=require("worker_threads"),Rt=require("path"),uc=require("yaml"),Ec=require("properties-reader"),j=f(),_c=oc(),yA=require("os"),{PACKAGE_ROOT:pa}=f(),lc={};for(let e in console)lc[e]=console[e];var le={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},dc={STDOUT:"stdOut",STDERR:"stdErr"},UA=Rt.join(pa,"logs"),wA=Rt.join(pa,"config/yaml/",j.HDB_DEFAULT_CONFIG_FILE),MA=1e4,rt,st,Ee,Qs,Js,Xs,vr,Gr;Gr===void 0&&Sc();Ac.exports={notify:fc,fatal:mc,error:Fr,warn:ba,info:Zs,debug:Ca,trace:Ia,setLogLevel:FA,log_level:Ee,loggerWithTag:DA,suppressLogging:PA,initLogSettings:Sc,setupConsoleLogging:hc,logCustomLevel:GA,closeLogFile:Oa,getLogFilePath:()=>Xs,OUTPUTS:dc};function Sc(e=!1){try{if(Gr===void 0||e){Oa();let t=vA();Gr=Ec(t);let r=_c(["ROOTPATH"]);({level:Ee,config_log_path:Js,to_file:rt,to_stream:st}=qA(r.ROOTPATH?Rt.join(r.ROOTPATH,j.HDB_CONFIG_FILE):Gr.get("settings_path"))),Qs=j.LOG_NAMES.HDB,Xs=Rt.join(Js,Qs)}}catch(t){if(Gr=void 0,t.code===j.NODE_ERROR_CODES.ENOENT){let r=_c(Object.keys(j.CONFIG_PARAM_MAP),!0);for(let o in r){let _=j.CONFIG_PARAM_MAP[o];_&&_.toLowerCase();let c=r[o];if(_===j.CONFIG_PARAMS.LOGGING_LEVEL){Ee=c;continue}if(_===j.CONFIG_PARAMS.LOGGING_STDSTREAMS){st=c;continue}_===j.CONFIG_PARAMS.LOGGING_FILE&&(rt=_)}let{default_level:s,default_to_file:n,default_to_stream:i}=xA();rt=rt===void 0?n:rt,rt=cc(rt),st=st===void 0?i:st,st=cc(st),Ee=Ee===void 0?s:Ee,Js=UA,Qs=j.LOG_NAMES.INSTALL,Xs=Rt.join(Js,Qs);return}throw Fr("Error initializing log settings"),Fr(t),t}hc()}a(Sc,"initLogSettings");var Na=!0;function hc(){or("error",Fr),or("warn",ba),or("log",Zs),or("info",Zs),or("debug",Ca),or("trace",Ia)}a(hc,"setupConsoleLogging");function or(e,t){console[e]=function(...r){if(Na&&t(...r),!/PM2 log:|App \[/.test(r[0]))return lc[e](...r)}}a(or,"logConsole");function DA(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(fc),fatal:r(mc),error:r(Fr),warn:r(ba),info:r(Zs),debug:r(Ca),trace:r(Ia)};function r(s){return function(...n){return s(t,...n)}}}a(DA,"loggerWithTag");function PA(e){try{Na=!1,e()}finally{Na=!0}}a(PA,"suppressLogging");var HA=bA?.name?.replace(/ /g,"-")||"main";function nt(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,o=[e],_=0,c;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),_++):t[0]?.serviceName&&(c=t[0]?.serviceName,_++)),o.unshift(c||HA+"/"+LA);_<n;_++){let u=t[_];u instanceof Error&&u.stack?s+=u.stack:typeof u=="object"?s+=JSON.stringify(u):s+=u,_<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
|
|
3
|
+
`}a(nt,"createLogRecord");function qr(e){rt&&Tc(e),st&&process.stdout.write(e)}a(qr,"logStdOut");function zs(e){rt&&Tc(e),st&&process.stderr.write(e)}a(zs,"logStdErr");function Tc(e){BA(),_r.appendFileSync(vr,e)}a(Tc,"logToFile");function Oa(){try{_r.closeSync(vr)}catch{}vr=null}a(Oa,"closeLogFile");function BA(){vr||(vr=_r.openSync(Xs,"a"),setTimeout(()=>{Oa()},MA).unref())}a(BA,"openLogFile");function Zs(...e){le[Ee]<=le.info&&qr(nt("info",e))}a(Zs,"info");function Ia(...e){le[Ee]<=le.trace&&qr(nt("trace",e))}a(Ia,"trace");function Fr(...e){le[Ee]<=le.error&&zs(nt("error",e))}a(Fr,"error");function Ca(...e){le[Ee]<=le.debug&&qr(nt("debug",e))}a(Ca,"debug");function fc(...e){le[Ee]<=le.notify&&qr(nt("notify",e))}a(fc,"notify");function mc(...e){le[Ee]<=le.fatal&&zs(nt("fatal",e))}a(mc,"fatal");function ba(...e){le[Ee]<=le.warn&&zs(nt("warn",e))}a(ba,"warn");function GA(e,t,...r){t===dc.STDERR?zs(nt(e,r)):qr(nt(e,r))}a(GA,"logCustomLevel");function vA(){let e;try{e=yA.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Rt.join(e,j.HDB_HOME_DIR_NAME,j.BOOT_PROPS_FILE_NAME);return _r.existsSync(t)||(t=Rt.join(pa,"utility/hdb_boot_properties.file")),t}a(vA,"getPropsFilePath");function FA(e){Ee=e}a(FA,"setLogLevel");function cc(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(cc,"autoCastBoolean");function qA(e){try{if(e.includes("config/settings.js")){let o=Ec(e);return{level:o.get(j.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Rt.dirname(o.get(j.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(j.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(j.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=uc.parseDocument(_r.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===j.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(qA,"getLogConfig");function xA(){try{let e=uc.parseDocument(_r.readFileSync(wA,"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(xA,"getDefaultConfig")});var gc=h((SP,Rc)=>{"use strict";var VA=require("util"),kA=require("path"),YA=require("child_process"),$A=VA.promisify(YA.execFile),KA=1e3*1e3*10;Rc.exports={findPs:WA};async function WA(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await $A("ps",["wwxo",`pid,${r}`],{maxBuffer:KA});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:kA.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(WA,"findPs")});var ne=h((TP,pc)=>{"use strict";var QA="__dbis__",JA="__environment_name__",XA="__dbi_defintion__",ZA={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"},zA=["__createdtime__","__updatedtime__"],jA="\uFFFF",Nc={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},eR=Object.values(Nc);pc.exports={INTERNAL_DBIS_NAME:QA,DBI_DEFINITION_NAME:XA,SEARCH_TYPES:ZA,TIMESTAMP_NAMES:zA,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:JA,TRANSACTIONS_DBI_NAMES_ENUM:Nc,TRANSACTIONS_DBIS:eR,OVERFLOW_MARKER:jA}});var Me=h((fP,Mc)=>{"use strict";var Oc=f(),Ic=ne(),Cc={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},bc=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Lc={500:bc("There was an error processing your request."),400:"Invalid request"},tR=Lc[Cc.INTERNAL_SERVER_ERROR],rR={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.`},sR={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},nR={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"},iR={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 ${Ic.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Ic.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"},aR={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Oc.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes.`,ATTR_NAME_NULLISH_ERR:"transaction aborted due to record(s) with an attribute name that is null, undefined or empty string",HASH_VAL_LENGTH_ERR:`transaction aborted due to record(s) with a hash value that exceeds ${Oc.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes, check log for more info`,INVALID_FORWARD_SLASH_IN_HASH_ERR:"transaction aborted due to record(s) with a hash value that contains a forward slash, check log for more info",RECORD_MISSING_HASH_ERR:"transaction aborted due to record(s) with no hash value, check log for more info"},yc={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"},oR={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."},_R={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`},cR={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"},uR={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},ER={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`},Uc={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`},wc={INVALID_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}`},lR={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."},dR={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},SR={...yc,...nR,...rR,...oR,..._R,...cR,...uR,...ER,...aR,...Uc,...wc,...lR,...dR,...sR};Mc.exports={CHECK_LOGS_WRAPPER:bc,HDB_ERROR_MSGS:SR,DEFAULT_ERROR_MSGS:Lc,DEFAULT_ERROR_RESP:tR,HTTP_STATUS_CODES:Cc,LMDB_ERRORS_ENUM:iR,AUTHENTICATION_ERROR_MSGS:yc,VALIDATION_ERROR_MSGS:Uc,ITC_ERRORS:wc}});var Q=h((AP,Hc)=>{"use strict";var cr=Me(),hR=O(),TR=f(),xr=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Dc),this.http_resp_code=s||cr.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(cr.DEFAULT_ERROR_MSGS[s]?cr.DEFAULT_ERROR_MSGS[s]:cr.DEFAULT_ERROR_MSGS[cr.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&&hR[n](i)}};a(xr,"HdbError");function Dc(e,t,r,s=TR.LOG_LEVELS.ERROR,n=null,i=!1){if(Pc(e))return e;let o=new xr(e,t,r,s,n);return i&&delete o.stack,o}a(Dc,"handleHDBError");function Pc(e){return e.__proto__.constructor.name===xr.name}a(Pc,"isHDBError");Hc.exports={isHDBError:Pc,handleHDBError:Dc,hdb_errors:cr}});var p=h((NP,Jc)=>{"use strict";var qt=require("path"),fR=require("fs-extra"),ae=O(),Bc=require("fs-extra"),Vr=require("os"),mR=require("net"),AR=require("recursive-iterator"),ie=f(),qc=gc(),Gc=require("papaparse"),js=require("moment"),{inspect:RR}=require("util"),vc=require("is-number"),gP=require("lodash"),{hdb_errors:en}=Q(),xc=require("util").promisify(setTimeout),gR=100,NR=5,pR="",OR=4,Fc={true:!0,false:!1,undefined:null,null:null,NaN:NaN};Jc.exports={isEmpty:Ne,isEmptyOrZeroLength:We,arrayHasEmptyValues:bR,arrayHasEmptyOrZeroLengthValues:LR,buildFolderPath:yR,isBoolean:Vc,errorizeMessage:IR,stripFileExtension:wR,autoCast:MR,autoCastJSON:kc,autoCastJSONDeep:La,removeDir:DR,compareVersions:PR,isCompatibleDataVersion:HR,escapeRawValue:BR,unescapeValue:GR,stringifyProps:vR,timeoutPromise:qR,isClusterOperation:VR,getClusterUser:YR,checkGlobalSchemaTable:kR,getHomeDir:$c,getPropsFilePath:FR,promisifyPapaParse:$R,removeBOM:Kc,createEventPromise:KR,checkProcessRunning:WR,checkSchemaTableExist:QR,checkSchemaExists:Wc,checkTableExists:Qc,getStartOfTomorrowInSeconds:JR,getLimitKey:XR,isObject:UR,isNotEmptyAndHasValue:CR,autoCasterIsNumberCheck:Yc,backtickASTSchemaItems:ZR,isPortTaken:xR,stopProcess:zR,createForkArgs:jR,autoCastBoolean:eg,async_set_timeout:xc,getTableHashAttribute:tg,doesSchemaExist:rg,doesTableExist:sg,stringifyObj:ng,ms_to_time:ig,changeExtension:ag,PACKAGE_ROOT:ie.PACKAGE_ROOT};function IR(e){return e instanceof Error?e:new Error(e)}a(IR,"errorizeMessage");function Ne(e){return e==null}a(Ne,"isEmpty");function CR(e){return!Ne(e)&&(e||e===0||e===""||Vc(e))}a(CR,"isNotEmptyAndHasValue");function We(e){return Ne(e)||e.length===0||e.size===0}a(We,"isEmptyOrZeroLength");function bR(e){if(Ne(e))return!0;for(let t=0;t<e.length;t++)if(Ne(e[t]))return!0;return!1}a(bR,"arrayHasEmptyValues");function LR(e){if(We(e))return!0;for(let t=0;t<e.length;t++)if(We(e[t]))return!0;return!1}a(LR,"arrayHasEmptyOrZeroLengthValues");function yR(...e){try{return e.join(qt.sep)}catch{console.error(e)}}a(yR,"buildFolderPath");function Vc(e){return Ne(e)?!1:e===!0||e===!1}a(Vc,"isBoolean");function UR(e){return Ne(e)?!1:typeof e=="object"}a(UR,"isObject");function wR(e){return We(e)?pR:e.slice(0,-OR)}a(wR,"stripFileExtension");function MR(e){return Ne(e)||e===""||typeof e!="string"?e:Fc[e]!==void 0?Fc[e]:Yc(e)===!0?Number(e):e}a(MR,"autoCast");function kc(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(kc,"autoCastJSON");function La(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=La(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=La(r);s!==r&&(e[t]=s)}return e}else return kc(e)}a(La,"autoCastJSONDeep");function Yc(e){if(e.startsWith("0.")&&vc(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&vc(e))}a(Yc,"autoCasterIsNumberCheck");async function DR(e){if(We(e))throw new Error(`Directory path: ${e} does not exist`);try{await Bc.emptyDir(e),await Bc.remove(e)}catch(t){throw ae.error(`Error removing files in ${e} -- ${t}`),t}}a(DR,"removeDir");function PR(e,t){if(We(e)){ae.info("Invalid current version sent as parameter.");return}if(We(t)){ae.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),_=i.replace(s,"").split("."),c=Math.min(o.length,_.length);for(let u=0;u<c;u++)if(r=parseInt(o[u],10)-parseInt(_[u],10),r)return r;return o.length-_.length}a(PR,"compareVersions");function HR(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(HR,"isCompatibleDataVersion");function BR(e){if(Ne(e))return e;let t=String(e);return t==="."?ie.UNICODE_PERIOD:t===".."?ie.UNICODE_PERIOD+ie.UNICODE_PERIOD:t.replace(ie.FORWARD_SLASH_REGEX,ie.UNICODE_FORWARD_SLASH)}a(BR,"escapeRawValue");function GR(e){if(Ne(e))return e;let t=String(e);return t===ie.UNICODE_PERIOD?".":t===ie.UNICODE_PERIOD+ie.UNICODE_PERIOD?"..":String(e).replace(ie.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(GR,"unescapeValue");function vR(e,t){if(Ne(e))return ae.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+Vr.EOL}!We(s)&&s[0]===";"?r+=" "+s+n+Vr.EOL:We(s)||(r+=s+"="+n+Vr.EOL)}catch{ae.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(vR,"stringifyProps");function $c(){let e;try{e=Vr.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a($c,"getHomeDir");function FR(){let e=qt.join($c(),ie.HDB_HOME_DIR_NAME,ie.BOOT_PROPS_FILE_NAME);return fR.existsSync(e)||(e=qt.join(__dirname,"../","hdb_boot_properties.file")),e}a(FR,"getPropsFilePath");function qR(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(qR,"timeoutPromise");async function xR(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=mR.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(xR,"isPortTaken");function VR(e){try{return ie.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){ae.error(`Error checking operation against cluster ops ${t}`)}return!1}a(VR,"isClusterOperation");function kR(e,t){if(!global.hdb_schema[e])return en.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return en.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(kR,"checkGlobalSchemaTable");function YR(e,t){if(Ne(t)){ae.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Ne(e)||We(e)){ae.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){ae.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){ae.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(YR,"getClusterUser");function $R(){Gc.parsePromise=function(e,t){return new Promise(function(r,s){Gc.parse(e,{header:!0,transformHeader:Kc,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a($R,"promisifyPapaParse");function Kc(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Kc,"removeBOM");function KR(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;ae.info(`Got cluster status event response: ${RR(n)}`);try{i.cancel()}catch{ae.error("Error trying to cancel timeout.")}s(n)})})}a(KR,"createEventPromise");async function WR(e){let t=!0,r=0;do await xc(gR*r++),(await qc.findPs(e)).length>0&&(t=!1);while(t&&r<NR);if(t)throw new Error(`process ${e} was not started`)}a(WR,"checkProcessRunning");function QR(e,t){let r=Wc(e);if(r)return r;let s=Qc(e,t);if(s)return s}a(QR,"checkSchemaTableExist");function Wc(e){if(!global.hdb_schema[e])return en.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Wc,"checkSchemaExists");function Qc(e,t){if(!global.hdb_schema[e][t])return en.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Qc,"checkTableExists");function JR(){let e=js().utc().add(1,ie.MOMENT_DAYS_TAG).startOf(ie.MOMENT_DAYS_TAG).unix(),t=js().utc().unix();return e-t}a(JR,"getStartOfTomorrowInSeconds");function XR(){return js().utc().format("DD-MM-YYYY")}a(XR,"getLimitKey");function ZR(e){try{let t=new AR(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){ae.error("Got an error back ticking items."),ae.error(t)}}a(ZR,"backtickASTSchemaItems");async function zR(e){let t=Vr.userInfo();(await qc.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),ae.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(zR,"stopProcess");function jR(e){return[e]}a(jR,"createForkArgs");function eg(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(eg,"autoCastBoolean");function tg(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(tg,"getTableHashAttribute");function rg(e){return global?.hdb_schema?.[e]!==void 0}a(rg,"doesSchemaExist");function sg(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(sg,"doesTableExist");function ng(e){try{return JSON.stringify(e)}catch{return e}}a(ng,"stringifyObj");function ig(e){let t=js.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(ig,"ms_to_time");function ag(e,t){let r=qt.basename(e,qt.extname(e));return qt.join(qt.dirname(e),r+t)}a(ag,"changeExtension")});var it=h((IP,Zc)=>{"use strict";var{platform:OP}=require("os"),og="nats-server.zip",ya="nats-server",_g=process.platform==="win32"?`${ya}.exe`:ya,Ua="HDB",cg=/^[^\s.,*>]+$/,Xc="__request__",ug=a(e=>`${e}.${Xc}`,"REQUEST_SUBJECT"),Eg={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},lg={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},dg={HUB:"hub.pid",LEAF:"leaf.pid"},Sg={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},hg={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Ua,deliver_subject:"__HDB__.WORKQUEUE"},Tg={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Ua,deliver_subject:"HDB.SCHEMAQUEUE"},fg={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Ua,deliver_subject:"HDB.USERQUEUE"},mg={SUCCESS:"success",ERROR:"error"},Ag={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Rg={TXN:"txn",MSGID:"msgid"},ur={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},gg={[ur.ERR]:1,[ur.WRN]:2,[ur.INF]:3,[ur.DBG]:4,[ur.TRC]:5},Ng={debug:"-D",trace:"-DVV"};Zc.exports={NATS_SERVER_ZIP:og,NATS_SERVER_NAME:ya,NATS_BINARY_NAME:_g,PID_FILES:dg,NATS_CONFIG_FILES:lg,SERVER_SUFFIX:Sg,WORK_QUEUE_CONSUMER_NAMES:hg,SCHEMA_QUEUE_CONSUMER_NAMES:Tg,USER_QUEUE_CONSUMER_NAMES:fg,NATS_TERM_CONSTRAINTS_RX:cg,REQUEST_SUFFIX:Xc,UPDATE_REMOTE_RESPONSE_STATUSES:mg,CLUSTER_STATUS_STATUSES:Ag,REQUEST_SUBJECT:ug,SUBJECT_PREFIXES:Rg,MSG_HEADERS:Eg,LOG_LEVELS:ur,LOG_LEVEL_FLAGS:Ng,LOG_LEVEL_HIERARCHY:gg}});var jc=h((bP,zc)=>{"use strict";var pg=it(),tn=class{constructor(t,r,s,n,i,o,_,c,u,E,l,S,d,A){this.port=t,o===null&&(o=void 0),this.server_name=r+pg.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:_,verify:c},this.leafnodes={port:u,tls:{cert_file:n,key_file:i,ca_file:o,insecure:_}},this.cluster={name:E,port:l,routes:S,tls:{cert_file:n,key_file:i,ca_file:o,insecure:_,verify:c}},this.accounts={SYS:{users:d},HDB:{users:A}},this.system_account="SYS"}};a(tn,"HubConfigObject");zc.exports=tn});var ru=h((yP,tu)=>{"use strict";var eu=it(),rn=class{constructor(t,r,s,n,i,o,_,c,u,E,l){this.port=t,l===null&&(l=void 0),this.server_name=r+eu.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+eu.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:E,ca_file:l,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:l,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:l,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:_},HDB:{users:c,jetstream:"enabled"}},this.system_account="SYS"}};a(rn,"LeafConfigObject");tu.exports=rn});var nu=h((wP,su)=>{"use strict";var sn=class{constructor(t,r){this.user=t,this.password=r}};a(sn,"HdbUserObject");su.exports=sn});var au=h((DP,iu)=>{"use strict";var Og=it(),nn=class{constructor(t,r){this.user=t+Og.SERVER_SUFFIX.ADMIN,this.password=r}};a(nn,"SysUserObject");iu.exports=nn});var Er=h((HP,cu)=>{"use strict";var _u=p(),ou=f(),on=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,wa=require("joi"),an={schema_format:{pattern:on,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},Ig=wa.alternatives(wa.string().min(1).max(an.schema_length.maximum).pattern(on).messages({"string.pattern.base":"{:#label} "+an.schema_format.message}),wa.number()).required();function Cg(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>an.schema_length.maximum?`'${e}' maximum of 250 characters`:on.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(Cg,"checkValidTable");function bg(e,t){return _u.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(bg,"validateSchemaExists");function Lg(e,t){let r=t.state.ancestors[0].schema;return _u.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Lg,"validateTableExists");function yg(e,t){return e.toLowerCase()===ou.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${ou.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(yg,"validateSchemaName");cu.exports={common_validators:an,schema_regex:on,hdb_schema_table:Ig,validateSchemaExists:bg,validateTableExists:Lg,validateSchemaName:yg,checkValidTable:Cg}});var at=h((GP,uu)=>{"use strict";var de=require("validate.js");de.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||de.validators.type.checks[t](e)?null:` must be a '${t}' value`};de.validators.type.checks={Object:function(e){return de.isObject(e)&&!de.isArray(e)},Array:de.isArray,Integer:de.isInteger,Number:de.isNumber,String:de.isString,Date:de.isDate,Boolean:function(e){return typeof e=="boolean"}};de.validators.hasValidFileExt=function(e,t){return de.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};uu.exports={validateObject:Ug,validateObjectAsync:wg,validateBySchema:Mg};function Ug(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=de(e,t,{format:"flat"});return r?new Error(r):null}a(Ug,"validateObject");async function wg(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await de.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(wg,"validateObjectAsync");function Mg(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(Mg,"validateBySchema")});var Da=h((FP,lu)=>{var{hdb_schema_table:Eu}=Er(),Dg=at(),Ma=require("joi"),Pg={undefined:"undefined",null:"null"},Hg=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||Pg[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"),Bg=Ma.object({schema:Eu,table:Eu,records:Ma.array().items(Ma.object().custom(Hg)).required()});lu.exports=function(e){return Dg.validateBySchema(e,Bg)}});var Pa=h((xP,du)=>{"use strict";var _n=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(_n,"BridgeMethods");du.exports=_n});var xt=h(($P,Au)=>{"use strict";var Su=Me().LMDB_ERRORS_ENUM,kP=require("lmdb"),Gg=ne(),YP=require("buffer").Buffer,{OVERFLOW_MARKER:hu,MAX_SEARCH_KEY_LENGTH:cn}=Gg,Tu=["number","string","symbol","boolean","bigint"];function vg(e){if(e=e?.database||e,!e)throw new Error(Su.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(Su.INVALID_ENVIRONMENT)}a(vg,"validateEnv");function Fg(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(Fg,"stringifyData");function qg(e){return e instanceof Date?e.valueOf():e}a(qg,"convertKeyValueToWrite");function xg(e){if(e==null)return;if(Tu.includes(typeof e))return e.length>cn?[e.slice(0,cn)+hu]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];Tu.includes(typeof n)&&(n.length>cn?t.push(n.slice(0,cn)+hu):t.push(n))}}return t}a(xg,"getIndexedValues");var un=0,fu=0;function mu(){fu=Date.now()-performance.now()}a(mu,"adjustStartTime");mu();var Vg=6e4;setInterval(mu,Vg).unref();function kg(){let e=performance.now()+fu;return e>un?(un=e,e):(un+=488e-6,un)}a(kg,"getNextMonotonicTime");Au.exports={validateEnv:vg,stringifyData:Fg,convertKeyValueToWrite:qg,getNextMonotonicTime:kg,getIndexedValues:xg}});var gu=h((WP,Ru)=>{"use strict";var En=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(En,"DBIDefinition");Ru.exports=En});var pu=h((JP,Nu)=>{"use strict";var Yg={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))},$g="certificate.pem",Kg="privateKey.pem",Wg="ca.pem";Nu.exports={CERTIFICATE_VALUES:Yg,CERTIFICATE_PEM_NAME:$g,PRIVATEKEY_PEM_NAME:Kg,CA_PEM_NAME:Wg}});var Lu=h((ZP,bu)=>{"use strict";var Qg=require("fs-extra"),b=require("joi"),Jg=require("os"),{boolean:K,string:ot,number:qe,array:Ha}=b.types(),{totalmem:Ou}=require("os"),kr=require("path"),Xg=O(),dn=p(),XP=pu(),Zg=f(),zg=at(),Iu="log",jg="custom_functions",eN="Invalid logging.rotation.maxSize unit. Available units are G, M or K",tN="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",rN="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",sN="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",nN="rootPath config parameter is undefined",iN="clustering.enabled config parameter is undefined",Vt=qe.min(0).required(),Sn=Ha.items({host:ot.required(),port:Vt}).empty(null),gt;bu.exports={configValidator:aN,routesValidator:lN,route_constraints:Sn};function aN(e){if(gt=e.rootPath,dn.isEmpty(gt))throw nN;let t=K.required(),r=b.valid("production","development").required(),s=qe.min(1).max(1e3).empty(null).default(EN),n=ot.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(ln),i=b.custom(oN).messages({"any.custom":"{:#label} {:#error}"}),o=ot.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),_=b.string().empty(null).default(ln),c=b.custom(_N).empty(null).default(ln),u=e.clustering?.enabled;if(dn.isEmpty(u))throw iN;let E;return u===!0?E=b.object({enabled:t,hubServer:b.object({cluster:b.object({name:b.required().empty(null),network:b.object({port:Vt,routes:Sn}).required()}).required(),leafNodes:b.object({network:b.object({port:Vt}).required()}).required(),network:b.object({port:Vt}).required()}).required(),leafServer:b.object({network:b.object({port:Vt,routes:Sn}).required(),streams:b.object({maxAge:qe.min(120).allow(null).optional(),maxBytes:qe.min(1).allow(null).optional(),maxMsgs:qe.min(1).allow(null).optional(),path:_}).required()}).required(),logLevel:b.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:K.optional(),tls:b.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:K.required(),verify:K.optional()}),user:ot.optional().empty(null)}).required():E=b.object({enabled:t,tls:b.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:K.required()})}).required(),b.object({clustering:E,customFunctions:b.object({enabled:t,network:b.object({cors:K.required(),corsAccessList:Ha.required(),headersTimeout:qe.min(1).required(),https:K.required(),keepAliveTimeout:qe.min(1).required(),port:Vt,timeout:qe.min(1).required()}),nodeEnv:r,root:n,tls:b.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:b.object({enabled:t}).required(),logging:b.object({file:K.required(),level:b.valid("notify","fatal","error","warn","info","debug","trace"),rotation:b.object({enabled:K.optional(),compress:K.optional(),interval:ot.custom(uN).optional().empty(null),maxSize:ot.custom(cN).optional().empty(null),path:ot.optional().empty(null).default(ln)}).required(),root:n,stdStreams:K.required(),auditLog:K.required()}).required(),operationsApi:b.object({authentication:b.object({operationTokenTimeout:b.required(),refreshTokenTimeout:b.required()}).required(),foreground:K.required(),network:b.object({cors:K.required(),corsAccessList:Ha.required(),headersTimeout:qe.min(1).required(),https:K.required(),keepAliveTimeout:qe.min(1).required(),port:Vt,timeout:qe.min(1).required()}).required(),nodeEnv:r,tls:b.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:ot.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:b.object({threads:s}).required(),storage:b.object({writeAsync:K.required(),overlappingSync:K.optional(),caching:K.optional(),compression:K.optional(),noReadAhead:K.optional(),path:c,prefetchWrites:K.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(aN,"configValidator");function Cu(e){return Qg.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Cu,"doesPathExist");function oN(e,t){if(e===null)return;let r=Cu(e);return r?t.message(r):e}a(oN,"validatePemFile");function _N(e,t){b.assert(e,ot.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Cu(e);if(r)return t.message(r)}a(_N,"validatePath");function cN(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(eN);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(rN):e}a(cN,"validateRotationMaxSize");function uN(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(tN);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(sN):e}a(uN,"validateRotationInterval");function EN(e,t){let r=t.state.path.join("."),s=Jg.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Ou();return i=Math.round(Math.min(i,Ou())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),Xg.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(EN,"setDefaultThreads");function ln(e,t){if(!dn.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(dn.isEmpty(gt))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return kr.join(gt,jg);case"logging.root":return kr.join(gt,Iu);case"clustering.leafServer.streams.path":return kr.join(gt,"clustering","leaf");case"storage.path":return kr.join(gt,Zg.SCHEMA_DIR_NAME);case"logging.rotation.path":return kr.join(gt,Iu);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(ln,"setDefaultRoot");function lN(e){let t=b.object({routes:Sn});return zg.validateBySchema({routes:e},t)}a(lN,"routesValidator")});var $r=h((jP,vu)=>{"use strict";var Pe=f(),pe=p(),z=O(),{configValidator:dN,routesValidator:yu}=Lu(),De=require("fs-extra"),SN=require("yaml"),Qe=require("path"),hN=require("is-number"),wu=require("properties-reader"),TN=require("lodash"),{handleHDBError:fN}=Q(),{HTTP_STATUS_CODES:mN,HDB_ERROR_MSGS:hn}=Me(),AN=require("minimist"),{SCHEMAS_PARAM_CONFIG:Yr,CONFIG_PARAMS:Nt,CONFIG_PARAM_MAP:_t}=Pe,RN="Unable to get config value because config is uninitialized",gN="Config successfully initialized",NN="Error backing up config file",pN="Empty parameter sent to getConfigValue",Mu=Qe.join(Pe.PACKAGE_ROOT,"config","yaml",Pe.HDB_DEFAULT_CONFIG_FILE),ON="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Uu={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"},Tn,te;vu.exports={createConfigFile:IN,getDefaultConfig:CN,getConfigValue:Pu,initConfig:Hu,flattenConfig:kt,updateConfigValue:Bu,updateConfigObject:LN,getConfiguration:wN,setConfiguration:MN,readConfigFile:Fa,getClusteringRoutes:DN,initOldConfig:Gu,getConfigFromFile:PN};function IN(e){let t=lr(Mu);Tn=kt(t.toJSON());let r;for(let o in e){let _=_t[o.toLowerCase()];if(_===Nt.SCHEMAS){r=e[o];continue}if(_!==void 0){let c=_.split("_"),u=Ba(_,e[o]);try{t.setIn([...c],u)}catch(E){z.error(E)}}}r&&Du(t,r),va(t);let s=t.toJSON();te=kt(s);let n=t.getIn(["rootPath"]),i=Qe.join(n,Pe.HDB_CONFIG_FILE);De.createFileSync(i),De.writeFileSync(i,String(t)),z.trace(`Config file written to ${i}`)}a(IN,"createConfigFile");function Du(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!pe.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Yr.TABLES))for(let i in s[n][Yr.TABLES])for(let o in s[n][Yr.TABLES][i]){let _=s[n][Yr.TABLES][i][o],c=[Nt.SCHEMAS,n,Yr.TABLES,i,o];e.hasIn(c)?e.setIn(c,_):e.addIn(c,_)}else for(let i in s[n]){let o=s[n][i],_=[Nt.SCHEMAS,n,i];e.hasIn(_)?e.setIn(_,o):e.addIn(_,o)}}}catch(s){z.error("Error parsing schemas CLI/env config arguments",s)}}a(Du,"setSchemasConfig");function CN(e){if(Tn===void 0){let r=lr(Mu);Tn=kt(r.toJSON())}let t=_t[e.toLowerCase()];if(t!==void 0)return Tn[t.toLowerCase()]}a(CN,"getDefaultConfig");function Pu(e){if(pe.isEmpty(e)){z.error(pN);return}if(te===void 0){z.trace(RN);return}let t=_t[e.toLowerCase()];if(t!==void 0)return te[t.toLowerCase()]}a(Pu,"getConfigValue");function Ga(e){let t=AN(process.argv);return t.ROOTPATH?Qe.join(t.ROOTPATH,Pe.HDB_CONFIG_FILE):wu(e).get(Pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Ga,"getConfigFilePath");function Hu(e=!1){if(te===void 0||e){let t=pe.getPropsFilePath();try{De.accessSync(t,De.constants.F_OK|De.constants.R_OK)}catch(i){throw z.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}let r=Ga(t),s;if(r.includes("config/settings.js"))try{Gu(r);return}catch(i){if(i.code!==Pe.NODE_ERROR_CODES.ENOENT)throw i}try{s=lr(r)}catch(i){if(i.code===Pe.NODE_ERROR_CODES.ENOENT){z.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 z.error(i),new Error(`Error reading HarperDB config file at ${r}`)}bN(s,r),va(s);let n=s.toJSON();if(te=kt(n),te.logging_rotation_rotate)for(let i in Uu)te[i]&&z.error(`Config ${Uu[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);z.trace(gN)}}a(Hu,"initConfig");function bN(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Qe.join(r,Pe.SCHEMA_DIR_NAME)),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Qe.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Qe.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(z.trace("Updating config file with missing config params"),De.writeFileSync(t,String(e)))}a(bN,"checkForUpdatedConfig");function va(e){let t=e.toJSON(),r=dN(t);if(r.error)throw hn.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(va,"validateConfig");function LN(e,t){te===void 0&&(te={});let r=_t[e.toLowerCase()];if(r===void 0){z.trace(`Unable to update config object because config param '${e}' does not exist`);return}te[r.toLowerCase()]=t}a(LN,"updateConfigObject");function Bu(e,t,r=void 0,s=!1,n=!1){te===void 0&&Hu();let i=Pu(_t.hdb_root),o=Qe.join(i,Pe.HDB_CONFIG_FILE),_=lr(o),c;if(r===void 0&&e.toLowerCase()===Nt.SCHEMAS)c=t;else if(r===void 0){let l=_t[e.toLowerCase()];if(l===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let S=l.split("_"),d=Ba(l,t);_.setIn([...S],d)}else for(let l in r){let S=_t[l.toLowerCase()];if(S===Nt.SCHEMAS){c=r[l];continue}if(S!==void 0){let d=S.split("_"),A=Ba(S,r[l]);try{_.setIn([...d],A)}catch(g){z.error(g)}}}c&&Du(_,c),va(_);let u=_.getIn(["rootPath"]),E=Qe.join(u,Pe.HDB_CONFIG_FILE);s===!0&&yN(o,u),De.writeFileSync(E,String(_)),n&&(te=kt(_.toJSON())),z.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Bu,"updateConfigValue");function yN(e,t){try{let r=Qe.join(t,"backup",`${Pe.HDB_CONFIG_FILE}.bak`);De.copySync(e,r),z.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){z.error(NN),z.error(r)}}a(yN,"backupConfigFile");var UN=["schemas"];function kt(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!UN.includes(r)){let s=kt(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(kt,"flattenConfig");function Ba(e,t){if(e===Nt.CLUSTERING_NODENAME||e===Nt.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(hN(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||pe.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 pe.autoCast(t)}a(Ba,"castConfigValue");function wN(){let e=pe.getPropsFilePath(),t=Ga(e);return lr(t).toJSON()}a(wN,"getConfiguration");async function MN(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Bu(void 0,void 0,n,!0),ON}catch(i){throw typeof i=="string"||i instanceof String?fN(i,i,mN.BAD_REQUEST,void 0,void 0,!0):i}}a(MN,"setConfiguration");function Fa(){let e=pe.getPropsFilePath();try{De.accessSync(e,De.constants.F_OK|De.constants.R_OK)}catch(s){throw z.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Ga(e);return lr(t).toJSON()}a(Fa,"readConfigFile");function lr(e){return SN.parseDocument(De.readFileSync(e,"utf8"),{simpleKeys:!0})}a(lr,"parseYamlDoc");function DN(){let e=Fa(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=pe.isEmptyOrZeroLength(t)?[]:t;let r=yu(t);if(r)throw hn.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=pe.isEmptyOrZeroLength(s)?[]:s;let n=yu(s);if(n)throw hn.CONFIG_VALIDATION(n.message);if(!pe.isEmptyOrZeroLength(s)&&!pe.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(_=>_.host===o.host&&_.port===o.port));if(!pe.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw hn.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(DN,"getClusteringRoutes");function Gu(e){let t=wu(e);te={};for(let r in _t){let s=t.get(r.toUpperCase());if(pe.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=_t[r].toLowerCase();n===Nt.LOGGING_ROOT?te[n]=Qe.dirname(s):te[n]=s}return te}a(Gu,"initOldConfig");function PN(e){let t=Fa();return TN.get(t,e.replaceAll("_","."))}a(PN,"getConfigFromFile")});var J=h((tH,qu)=>{"use strict";var qa=require("fs-extra"),Je=require("path"),HN=require("os"),BN=require("properties-reader"),Kr=O(),dr=p(),N=f(),fn=$r(),GN="Error initializing environment manager",mn="BOOT_PROPS_FILE_PATH",Fu=!1,vN={[N.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[N.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[N.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},ct={};qu.exports={BOOT_PROPS_FILE_PATH:mn,getHdbBasePath:FN,setHdbBasePath:qN,get:xN,initSync:kN,setProperty:D,initTestEnvironment:YN};function FN(){return ct[N.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(FN,"getHdbBasePath");function qN(e){ct[N.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(qN,"setHdbBasePath");function xN(e){let t=fn.getConfigValue(e);return t===void 0?ct[e]:t}a(xN,"get");function D(e,t){vN[e]&&(ct[e]=t),fn.updateConfigObject(e,t)}a(D,"setProperty");function VN(){let e;try{e=dr.getPropsFilePath(),qa.accessSync(e,qa.constants.F_OK|qa.constants.R_OK),Fu=!0;let t=BN(e);return ct[N.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(N.HDB_SETTINGS_NAMES.INSTALL_USER),ct[N.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(N.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),ct[mn]=e,!0}catch{return Kr.trace(`Environment manager found no properties file at ${e}`),!1}}a(VN,"doesPropFileExist");function kN(e=!1){try{(Fu||VN())&&(fn.initConfig(e),ct[N.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=fn.getConfigValue(N.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Kr.error(GN),Kr.error(t),console.error(t),process.exit(1)}}a(kN,"initSync");function YN(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:_}=e,c=Je.join(__dirname,"../../","unitTests");ct[mn]=Je.join(c,"hdb_boot_properties.file"),D(N.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Je.join(c,"settings.test")),D(N.HDB_SETTINGS_NAMES.INSTALL_USER,HN.userInfo().username),D(N.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Je.join(c,"envDir","utility","keys","privateKey.pem")),D(N.HDB_SETTINGS_NAMES.CERT_KEY,Je.join(c,"envDir","utility","keys","certificate.pem")),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Je.join(c,"envDir","utility","keys","privateKey.pem")),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Je.join(c,"envDir","utility","keys","certificate.pem")),D(N.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),D(N.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Je.join(c,"envDir","log")),D(N.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),D(N.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),D(N.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),D(N.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Je.join(c,"envDir")),D(N.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,dr.isEmpty(n)?!0:n),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,dr.isEmpty(n)?!0:n),D(N.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),D(N.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,dr.isEmpty(i)?!1:i),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,dr.isEmpty(i)?!1:i),D(N.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),D(N.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),D(N.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),D(N.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),D(N.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Je.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),D(N.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,dr.isEmpty(_)?!1:_),o&&(D("CORS_ACCESSLIST",o),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(D(N.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(D(N.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(D(N.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${mn}. Please check your boot props and settings files`;Kr.fatal(r),Kr.error(t)}}a(YN,"initTestEnvironment")});var ku=h((sH,Vu)=>{"use strict";var xa=J(),xu=f();xa.initSync();var $N=xa.get(xu.CONFIG_PARAMS.STORAGE_COMPRESSION),KN=xa.get(xu.CONFIG_PARAMS.STORAGE_CACHING)!==!1,An=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=$N&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=KN&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(An,"OpenDBIObject");Vu.exports=An});var Ku=h((iH,$u)=>{"use strict";var Sr=J(),Wr=f();Sr.initSync();var WN=Sr.get(Wr.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Sr.get(Wr.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Sr.get(Wr.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Yu=Sr.get(Wr.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),QN=Sr.get(Wr.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Rn=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=WN,Yu!==void 0&&(this.overlappingSync=Yu),this.noReadAhead=QN}};a(Rn,"OpenEnvironmentObject");$u.exports=Rn});var q=h((oH,ju)=>{"use strict";var Va=require("lmdb"),He=require("fs-extra"),xe=require("path"),Nn=xt(),Wu=O(),re=Me().LMDB_ERRORS_ENUM,pn=gu(),ka=ku(),Qu=Ku(),pt=ne(),Ve=pt.INTERNAL_DBIS_NAME,Ju=pt.DBI_DEFINITION_NAME,JN="data.mdb",XN="lock.mdb",Qr=".mdb",ZN="-lock",gn=class{constructor(t,r,s=!1){this.dbi=Be(t,r),this.key_type=this.dbi[pt.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[pt.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Va.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(gn,"TransactionCursor");function Ya(e,t){if(e===void 0)throw new Error(re.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(re.ENV_NAME_REQUIRED)}a(Ya,"pathEnvNameValidation");async function $a(e,t,r=!0){try{await He.access(e)}catch(s){throw s.code==="ENOENT"?new Error(re.INVALID_BASE_PATH):s}try{let s=xe.join(e,t+Qr);return await He.access(s,He.constants.R_OK|He.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await He.access(xe.join(e,t,JN),He.constants.R_OK|He.constants.F_OK),xe.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(re.INVALID_ENVIRONMENT)}else throw new Error(re.INVALID_ENVIRONMENT);throw s}}a($a,"validateEnvironmentPath");function On(e,t){if(Nn.validateEnv(e),t===void 0)throw new Error(re.DBI_NAME_REQUIRED)}a(On,"validateEnvDBIName");async function zN(e,t,r=!1,s=!1){Ya(e,t),t=t.toString();try{return await $a(e,t,s),Ka(e,t,r)}catch(n){if(n.message===re.INVALID_ENVIRONMENT){let i=xe.join(e,t);await He.mkdirp(s?i:e);let o=new Qu(s?i:i+Qr,!1),_=Va.open(o);_.dbis=Object.create(null);let c=new ka(!1);_.openDB(Ve,c),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=Wa(e,t,r);return _[pt.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=_,_}throw n}}a(zN,"createEnvironment");async function jN(e,t,r,s=!0){let n=await Ka(e,t);if(r===void 0)throw new Error(re.DESTINATION_PATH_REQUIRED);try{await He.access(xe.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(re.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(jN,"copyEnvironment");async function Ka(e,t,r=!1){Ya(e,t),t=t.toString();let s=Wa(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 $a(e,t),i=xe.join(e,t+Qr),o=n!=i,_=new Qu(n,o),c=Va.open(_);c.dbis=Object.create(null);let u=Zu(c);for(let E=0;E<u.length;E++)Be(c,u[E]);return c[pt.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=c,c}a(Ka,"openEnvironment");async function ep(e,t,r=!1){Ya(e,t),t=t.toString();let s=xe.join(e,t+Qr),n=await $a(e,t);if(global.lmdb_map!==void 0){let i=Wa(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Xu(o),delete global.lmdb_map[i]}}await He.remove(n),await He.remove(n===s?n+ZN:xe.join(xe.dirname(n),XN))}a(ep,"deleteEnvironment");async function Xu(e){Nn.validateEnv(e);let t=e[pt.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Xu,"closeEnvironment");function Wa(e,t,r=!1){let n=`${xe.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Wa,"getCachedEnvironmentName");function tp(e){Nn.validateEnv(e);let t=Object.create(null),r=Be(e,Ve);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Ve)try{t[s]=Object.assign(new pn,n)}catch{Wu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(tp,"listDBIDefinitions");function Zu(e){Nn.validateEnv(e);let t=[],r=Be(e,Ve);for(let{key:s}of r.getRange({start:!1}))s!==Ve&&t.push(s);return t}a(Zu,"listDBIs");function rp(e,t){let s=Be(e,Ve).getEntry(t),n=new pn;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{Wu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(rp,"getDBIDefinition");function zu(e,t,r,s=!1){if(On(e,t),t=t.toString(),t===Ve)throw new Error(re.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Be(e,t)}catch(n){if(n.message===re.DBI_DOES_NOT_EXIST){let i=new ka(r,s===!0),o=e.openDB(t,i),_=new pn(r===!0,s);return o[Ju]=_,Be(e,Ve).putSync(t,_),e.dbis[t]=o,o}throw n}}a(zu,"createDBI");function Be(e,t){if(On(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Ve?r=rp(e,t):r=new pn,r===void 0)throw new Error(re.DBI_DOES_NOT_EXIST);let s;try{let n=new ka(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(re.DBI_DOES_NOT_EXIST):n}return s[Ju]=r,e.dbis[t]=s,s}a(Be,"openDBI");function sp(e,t){On(e,t),t=t.toString();let r=Be(e,t),s=r.getStats();return r[pt.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(sp,"statDBI");async function np(e,t){try{let r=xe.join(e,t+Qr);return(await He.stat(r)).size}catch{throw new Error(re.INVALID_ENVIRONMENT)}}a(np,"environmentDataSize");function ip(e,t){if(On(e,t),t=t.toString(),t===Ve)throw new Error(re.CANNOT_DROP_INTERNAL_DBIS_NAME);Be(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Be(e,Ve).removeSync(t)}a(ip,"dropDBI");function ap(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{Be(e,n)}catch(i){if(i.message===re.DBI_DOES_NOT_EXIST)zu(e,n,n!==t,n===t);else throw i}}}a(ap,"initializeDBIs");ju.exports={openDBI:Be,openEnvironment:Ka,createEnvironment:zN,listDBIs:Zu,listDBIDefinitions:tp,createDBI:zu,dropDBI:ip,statDBI:sp,deleteEnvironment:ep,initializeDBIs:ap,TransactionCursor:gn,environmentDataSize:np,copyEnvironment:jN,closeEnvironment:Xu}});var tE=h((cH,eE)=>{"use strict";var In=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(In,"InsertRecordsResponseObject");eE.exports=In});var sE=h((EH,rE)=>{"use strict";var Cn=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(Cn,"UpdateRecordsResponseObject");rE.exports=Cn});var iE=h((dH,nE)=>{"use strict";var bn=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(bn,"UpsertRecordsResponseObject");nE.exports=bn});var hr=h((mH,_E)=>{"use strict";var op=q(),_p=tE(),cp=sE(),up=iE(),Xe=xt(),Jr=Me().LMDB_ERRORS_ENUM,Ep=ne(),ut=f(),lp=p(),dp=require("uuid"),hH=require("lmdb"),{handleHDBError:Sp,hdb_errors:hp}=Q(),{OVERFLOW_MARKER:TH,MAX_SEARCH_KEY_LENGTH:fH}=Ep,aE=J();aE.initSync();var Ln=aE.get(ut.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Qa=ut.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Yt=ut.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Tp(e,t,r,s,n=Xe.getNextMonotonicTime()){za(e,t,r,s),Ja(e,t,r);let i=new _p,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c];oE(u,!0,n);let E=fp(e,t,r,u),l=u[t];o.push(E),_.push(l)}return Xa(o,_,s,i,n)}a(Tp,"insertRecords");function fp(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let _=s[o];if(typeof _=="function"){let E=_([[{}]]);Array.isArray(E)&&(_=E[0][ut.FUNC_VAL],s[o]=_)}let c=Xe.getIndexedValues(_),u=e.dbis[o];if(c){Ln&&u.prefetch(c.map(E=>({key:E,value:n})),yn);for(let E=0,l=c.length;E<l;E++)u.put(c[E],n)}}Ln&&e.dbis[t].prefetch([n],yn),e.dbis[t].put(n,s,s[Yt])})}a(fp,"insertRecord");function mp(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(mp,"removeSkippedRecords");function oE(e,t,r){let s=r>0;(s||!Number.isInteger(e[Yt]))&&(e[Yt]=r||(r=Xe.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Qa]))&&(e[Qa]=r||Xe.getNextMonotonicTime()):delete e[Qa]}a(oE,"setTimestamps");function Ja(e,t,r){r.indexOf(ut.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ut.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ut.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ut.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),op.initializeDBIs(e,t,r)}a(Ja,"initializeTransaction");async function Ap(e,t,r,s,n=Xe.getNextMonotonicTime()){za(e,t,r,s),Ja(e,t,r);let i=new cp,o=[],_=[],c=[];for(let u=0;u<s.length;u++){let E=s[u],l=E[t],S;try{S=Za(e,t,E,l,i,!0,n)}catch{i.skipped_hashes.push(l),o.push(u);continue}_.push(S),c.push(l)}return Xa(_,c,s,i,n,o)}a(Ap,"updateRecords");async function Rp(e,t,r,s,n=Xe.getNextMonotonicTime()){try{za(e,t,r,s)}catch(c){throw Sp(c,c.message,hp.HTTP_STATUS_CODES.BAD_REQUEST)}Ja(e,t,r);let i=new up,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c],E;lp.isEmpty(u[t])?(E=dp.v4(),u[t]=E):E=u[t];let l=Za(e,t,u,E,i,!1,n);o.push(l),_.push(E)}return Xa(o,_,s,i,n)}a(Rp,"upsertRecords");async function Xa(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let _=0,c=o.length;_<c;_++)o[_]===!0?s.written_hashes.push(t[_]):(s.skipped_hashes.push(t[_]),i.push(_));return s.txn_time=n||Xe.getNextMonotonicTime(),mp(r,i),s}a(Xa,"finalizeWrite");function Za(e,t,r,s,n,i=!1,o){let _=e.dbis[t],c=_.getEntry(s),u=c?.value,E=u;if(!u){if(i)return!1;u={}}if(oE(r,!E,o),Number.isInteger(r[Yt])&&u[Yt]>r[Yt])return!1;E&&n.original_records.push(u);let l,S=a(()=>{for(let A in r){if(!r.hasOwnProperty(A)||A===t)continue;let g=r[A],y=e.dbis[A];if(y===void 0)continue;let $=u[A];if(typeof g=="function"){let v=g([[u]]);Array.isArray(v)&&(g=v[0][ut.FUNC_VAL],r[A]=g)}if(g===$)continue;let x=Xe.getIndexedValues($);if(x){Ln&&y.prefetch(x.map(v=>({key:v,value:s})),yn);for(let v=0,we=x.length;v<we;v++)y.remove(x[v],s)}if(x=Xe.getIndexedValues(g),x){Ln&&y.prefetch(x.map(v=>({key:v,value:s})),yn);for(let v=0,we=x.length;v<we;v++)y.put(x[v],s)}}let d=Object.assign({},u,r);_.put(s,d,d[Yt])},"do_put");return c?l=_.ifVersion(s,c.version,S):l=_.ifNoExists(s,S),l.then(d=>d?!0:Za(e,t,r,s,n,i,o))}a(Za,"updateUpsertRecord");function gp(e,t,r){if(Xe.validateEnv(e),t===void 0)throw new Error(Jr.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Jr.WRITE_ATTRIBUTES_REQUIRED):new Error(Jr.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(gp,"validateBasic");function za(e,t,r,s){if(gp(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Jr.RECORDS_REQUIRED):new Error(Jr.RECORDS_MUST_BE_ARRAY)}a(za,"validateWrite");function yn(){}a(yn,"noop");_E.exports={insertRecords:Tp,updateRecords:Ap,upsertRecords:Rp}});var Y=h((RH,SE)=>{"use strict";var es=f(),Np=p(),Se=J(),ts=require("path"),pp=require("minimist"),cE=require("fs-extra"),uE=require("lodash");Se.initSync();var{CONFIG_PARAMS:Ot,SCHEMAS_PARAM_CONFIG:Xr,SYSTEM_SCHEMA_NAME:Un}=es,Zr,zr,jr;function EE(){if(Zr!==void 0)return Zr;if(Se.getHdbBasePath()!==void 0)return Zr=Se.get(Ot.STORAGE_PATH)||ts.join(Se.getHdbBasePath(),es.SCHEMA_DIR_NAME),Zr}a(EE,"getBaseSchemaPath");function lE(){if(zr!==void 0)return zr;if(Se.getHdbBasePath()!==void 0)return zr=dE(Un),zr}a(lE,"getSystemSchemaPath");function Op(){if(jr!==void 0)return jr;if(Se.getHdbBasePath()!==void 0)return jr=Se.get(es.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||ts.join(Se.getHdbBasePath(),es.TRANSACTIONS_DIR_NAME),jr}a(Op,"getTransactionAuditStoreBasePath");function Ip(e,t){let r=Se.get(Ot.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||ts.join(Op(),e.toString())}a(Ip,"getTransactionAuditStorePath");function dE(e,t){e=e.toString(),t=t&&t.toString();let r=Se.get(es.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||ts.join(EE(),e)}a(dE,"getSchemaPath");function Cp(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,pp(process.argv));let s=r[Ot.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!Np.isObject(s))throw o;i=s}for(let o of i){let _=o[Un];if(!_)continue;let c=Se.get(Ot.SCHEMAS);c=c??{};let u=_?.tables?.[t]?.[Xr.PATH];if(u)return uE.set(c,[Un,Xr.TABLES,t,Xr.PATH],u),Se.setProperty(Ot.SCHEMAS,c),u;let E=_?.[Xr.PATH];if(E)return uE.set(c,[Un,Xr.PATH],E),Se.setProperty(Ot.SCHEMAS,c),E}}let n=r[Ot.STORAGE_PATH.toUpperCase()];if(n){if(!cE.pathExistsSync(n))throw new Error(n+" does not exist");let i=ts.join(n,e);return cE.mkdirsSync(i),Se.setProperty(Ot.STORAGE_PATH,n),i}return lE()}a(Cp,"initSystemSchemaPaths");function bp(){Zr=void 0,zr=void 0,jr=void 0}a(bp,"resetPaths");SE.exports={getBaseSchemaPath:EE,getSystemSchemaPath:lE,getTransactionAuditStorePath:Ip,getSchemaPath:dE,initSystemSchemaPaths:Cp,resetPaths:bp}});var $t=h((NH,Lp)=>{Lp.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 ja=h((pH,hE)=>{var{common_validators:It}=Er(),rs=at(),ke="is required",V={schema:{presence:!0,format:It.schema_format,length:It.schema_length},table:{presence:!0,format:It.schema_format,length:It.schema_length},attribute:{presence:!0,format:It.schema_format,length:It.schema_length},hash_attribute:{presence:!0,format:It.schema_format,length:It.schema_length}};function ss(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(ss,"makeAttributesStrings");function yp(e){return e=ss(e),V.schema.presence={message:ke},V.table.presence=!1,V.attribute.presence=!1,V.hash_attribute.presence=!1,rs.validateObject(e,V)}a(yp,"schema_object");function Up(e){return e=ss(e),V.schema.presence={message:ke},V.table.presence={message:ke},V.attribute.presence=!1,V.hash_attribute.presence=!1,rs.validateObject(e,V)}a(Up,"table_object");function wp(e){return e=ss(e),V.schema.presence={message:ke},V.table.presence={message:ke},V.attribute.presence=!1,V.hash_attribute.presence={message:ke},rs.validateObject(e,V)}a(wp,"create_table_object");function Mp(e){return e=ss(e),V.schema.presence={message:ke},V.table.presence={message:ke},V.attribute.presence={message:ke},V.hash_attribute.presence=!1,rs.validateObject(e,V)}a(Mp,"attribute_object");function Dp(e){return e=ss(e),V.schema.presence={message:ke},V.table.presence={message:ke},V.attribute.presence=!1,V.hash_attribute.presence=!1,rs.validateObject(e,V)}a(Dp,"describe_table");function Pp(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(Pp,"validateTableResidence");hE.exports={schema_object:yp,create_table_object:wp,table_object:Up,attribute_object:Mp,describe_table:Dp,validateTableResidence:Pp}});var fE=h((IH,TE)=>{"use strict";var Hp=require("uuid"),wn=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Hp.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(wn,"CreateAttributeObject");TE.exports=wn});var Dn=h((bH,mE)=>{"use strict";var Bp=fE(),Mn=class extends Bp{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(Mn,"LMDBCreateAttributeObject");mE.exports=Mn});var RE=h((yH,AE)=>{"use strict";AE.exports=vp;var Gp="inserted";function vp(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Gp?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(vp,"returnObject")});var Pn=h((wH,IE)=>{"use strict";var Fp=f(),eo=q(),qp=hr(),{getSystemSchemaPath:xp,getSchemaPath:Vp}=Y(),kp=$t(),Yp=ja(),$p=Dn(),Kp=RE(),{handleHDBError:gE,hdb_errors:pE}=Q(),NE=p(),{HTTP_STATUS_CODES:Wp}=pE,to=kp.hdb_attribute,OE=[];for(let e=0;e<to.attributes.length;e++)OE.push(to.attributes[e].attribute);var Qp="inserted";IE.exports=Jp;async function Jp(e){let t=Yp.attribute_object(e);if(t)throw gE(new Error,t.message,pE.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&NE.checkGlobalSchemaTable(e.schema,e.table);if(r)throw gE(new Error,r,Wp.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=NE.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 $p(e.schema,e.table,e.attribute,e.id);try{let i=await eo.openEnvironment(Vp(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}`);eo.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await eo.openEnvironment(xp(),Fp.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:_,skipped_hashes:c}=await qp.insertRecords(o,to.hash_attribute,OE,[n]);return Kp(Qp,_,{records:[n]},c)}catch(i){throw i}}a(Jp,"lmdbCreateAttribute")});var Hn=h((PH,bE)=>{"use strict";var Et=p(),CE=O(),DH=Da();bE.exports=Xp;function Xp(e){if(Et.isEmpty(e))throw new Error("invalid update parameters defined.");if(Et.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Et.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(Et.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&&Et.isEmptyOrZeroLength(o[r]))throw CE.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(!Et.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw CE.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`);!Et.isEmpty(o[r])&&o[r]!==""&&s.has(Et.autoCast(o[r]))&&(o.skip=!0),s.add(Et.autoCast(o[r]));for(let _ in o)n[_]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(Xp,"insertUpdateValidate")});var Gn=h((BH,LE)=>{"use strict";var Zp=f().OPERATIONS_ENUM,Bn=class{constructor(t,r,s,n,i=void 0){this.operation=Zp.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(Bn,"InsertObject");LE.exports=Bn});var Fn=h((FH,yE)=>{"use strict";var vH=Gn(),vn=f(),so=p(),ro=O(),zp=require("uuid"),{handleHDBError:ns,hdb_errors:jp}=Q(),{HDB_ERROR_MSGS:is,HTTP_STATUS_CODES:as}=jp;yE.exports=eO;function eO(e,t,r){for(let n=0;n<t.length;n++)tO(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];rO(i,r,e.operation)}}a(eO,"processRows");function tO(e){if(Buffer.byteLength(String(e))>vn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ns(new Error,is.ATTR_NAME_LENGTH_ERR(e),as.BAD_REQUEST,void 0,void 0,!0);if(so.isEmptyOrZeroLength(e)||so.isEmpty(e.trim()))throw ns(new Error,is.ATTR_NAME_NULLISH_ERR,as.BAD_REQUEST,void 0,void 0,!0)}a(tO,"validateAttribute");function rO(e,t,r){if(!e.hasOwnProperty(t)||so.isEmptyOrZeroLength(e[t])){if(r===vn.OPERATIONS_ENUM.INSERT||r===vn.OPERATIONS_ENUM.UPSERT){e[t]=zp.v4();return}throw ro.error("Update transaction aborted due to record with no hash value:",e),ns(new Error,is.RECORD_MISSING_HASH_ERR,as.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>vn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ro.error(e),ns(new Error,is.HASH_VAL_LENGTH_ERR,as.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw ro.error(e),ns(new Error,is.INVALID_FORWARD_SLASH_IN_HASH_ERR,as.BAD_REQUEST,void 0,void 0,!0)}a(rO,"validateHash")});var wE=h((xH,UE)=>{"use strict";var qn=class{constructor(t,r){this.type=t,this.message=r}};a(qn,"ITCEventObject");UE.exports=qn});var xn=h((kH,PE)=>{var sO=require("crypto"),ME=9;function nO(e){let t=aO(ME),r=DE(e+t);return t+r}a(nO,"createHash");function iO(e,t){let r=e.substr(0,ME),s=r+DE(t+r);return e===s}a(iO,"validateHash");function aO(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(aO,"generateSalt");function DE(e){return sO.createHash("md5").update(e).digest("hex")}a(DE,"md5");PE.exports={hash:nO,validate:iO}});var BE=h(($H,HE)=>{"use strict";var Ct=f(),os=class{constructor(t=0,r=Ct.STORAGE_TYPES_ENUM.LMDB,s=Ct.LICENSE_VALUES.API_CALL_DEFAULT,n=Ct.RAM_ALLOCATION_ENUM.DEFAULT,i=Ct.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(os,"BaseLicense");var Vn=class extends os{constructor(t=0,r=Ct.STORAGE_TYPES_ENUM.LMDB,s=Ct.LICENSE_VALUES.API_CALL_DEFAULT,n=Ct.RAM_ALLOCATION_ENUM.DEFAULT,i=Ct.LICENSE_VALUES.VERSION_DEFAULT,o,_=!1){super(t,r,s,n,i,o),this.enterprise=_}};a(Vn,"ExtendedLicense");HE.exports={BaseLicense:os,ExtendedLicense:Vn}});var kn=h((WH,VE)=>{"use strict";var fr=require("fs-extra"),GE=xn(),vE=require("crypto"),oO=require("moment"),_O=require("uuid").v4,oe=O(),io=require("path"),cO=p(),Oe=f(),uO=BE().ExtendedLicense,Tr="invalid license key format",EO="061183",lO="mofi25",dO="aes-256-cbc",SO=16,hO=32,FE=J();FE.initSync();var no;VE.exports={validateLicense:qE,generateFingerPrint:fO,licenseSearch:xE,getLicense:RO};function ao(){return io.join(FE.getHdbBasePath(),Oe.LICENSE_KEY_DIR_NAME,Oe.LICENSE_FILE_NAME)}a(ao,"getLicenseDirPath");function TO(){let e=ao();return io.join(e,Oe.LICENSE_FILE_NAME)}a(TO,"getLicenseFilePath");function oo(){let e=ao();return io.join(e,Oe.REG_KEY_FILE_NAME)}a(oo,"getFingerPrintFilePath");async function fO(){let e=oo();try{return await fr.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await mO();throw oe.error(`Error writing fingerprint file to ${e}`),oe.error(t),new Error("There was an error generating the fingerprint")}}a(fO,"generateFingerPrint");async function mO(){let e=_O(),t=GE.hash(e),r=oo();try{await fr.mkdirp(ao()),await fr.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw oe.error(`Error writing fingerprint file to ${r}`),oe.error(s),new Error("There was an error generating the fingerprint")}return t}a(mO,"writeFingerprint");function qE(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Oe.STORAGE_TYPES_ENUM.LMDB,api_call:Oe.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Oe.RAM_ALLOCATION_ENUM.DEFAULT,version:Oe.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return oe.error("empty license key passed to validate."),r;let s=oo(),n=!1;try{n=fr.statSync(s)}catch(i){oe.error(i)}if(n){let i;try{i=fr.readFileSync(s,"utf8")}catch{oe.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(lO),_=o[1];_=Buffer.concat([Buffer.from(_)],SO);let c=Buffer.concat([Buffer.from(i)],hO),u=vE.createDecipheriv(dO,c,_);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let E=null;try{E=u.update(o[0],"hex","utf8"),E.trim(),E+=u.final("utf8")}catch{let d=AO(o[0],i);if(d)E=d;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Tr),oe.error(Tr),new Error(Tr)}let l;if(isNaN(E))try{l=JSON.parse(E),r.api_call=l.api_call,r.version=l.version,r.storage_type=l.storage_type,r.exp_date=l.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),l.ram_allocation&&(r.ram_allocation=l.ram_allocation)}catch{throw console.error(Tr),oe.error(Tr),new Error(Tr)}else r.exp_date=E;r.exp_date<oO().valueOf()&&(r.valid_date=!1),GE.validate(o[1],`${EO}${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||oe.error("Invalid licence"),r}a(qE,"validateLicense");function AO(e,t){try{let r=vE.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{oe.warn("Check old license failed")}}a(AO,"checkOldLicense");function xE(){let e=new uO;e.api_call=0;let t=[];try{t=fr.readFileSync(TO(),"utf-8").split(Oe.NEW_LINE)}catch(r){r.code==="ENOENT"?oe.info("no license file found"):oe.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(cO.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=qE(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){oe.error("There was an error parsing the license string."),oe.error(n),e.api_call=Oe.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Oe.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Oe.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Oe.LICENSE_VALUES.API_CALL_DEFAULT),no=e,e}a(xE,"licenseSearch");async function RO(){return no||await xE(),no}a(RO,"getLicense")});var Kn=h((JH,So)=>{"use strict";var{Worker:gO,MessageChannel:NO,parentPort:lt,isMainThread:$E,threadId:pO,workerData:OO}=require("worker_threads"),{PACKAGE_ROOT:IO}=f(),{join:CO,isAbsolute:bO,extname:LO}=require("path"),{totalmem:kE}=require("os"),Eo=f(),KE=J(),yO=kn(),Yn=O(),UO=f();KE.initSync();var wO=KE.get(Eo.CONFIG_PARAMS.HTTP_THREADS)||1,MO=1024*1024,bt=[],Kt=[],DO=50,WE=1e4,QE="restart",JE="request_thread_info",XE="resource_report",ZE="thread_info",zE="added-port",_o;So.exports={startWorker:co,restartWorkers:lo,shutdownWorkers:HO,workers:bt,setMonitorListener:qO,onMessageFromWorkers:BO,broadcast:GO};function co(e,t={}){let s=yO.licenseSearch().ram_allocation,n=process.constrainedMemory?.()||kE();n=Math.min(n,kE());let i=Math.min(Math.max(Math.floor(n/MO/(1+wO/4)),512),s||1/0),o=Math.min(Math.max(i>>7,16),64),_=[];for(let u of Kt){let{port1:E,port2:l}=new NO;u.postMessage({type:zE,port:E},[E]),_.push(l)}LO(e)||(e+=".js");let c=new gO(bO(e)?e:CO(IO,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:i,maxYoungGenerationSizeMb:o},argv:process.argv.slice(2),workerData:{addPorts:_,name:t.name},transferList:_},t));return $n(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>{co(e,t)},c.on("error",u=>{console.error("Worker error:",u),Yn.error("Worker error:",u)}),c.on("exit",u=>{bt.splice(bt.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<DO?(t.unexpectedRestarts=c.unexpectedRestarts+1,co(e,t)):Yn.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{u.type===QE&&lo(u.workerType),u.type===JE&&vO(c),u.type===XE&&FO(c,u)}),bt.push(c),VO(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(co,"startWorker");var PO=[Eo.THREAD_TYPES.HTTP];async function lo(e=null,t=2,r=!0){if($E){t<1&&(t=t*bt.length);let s=[];for(let n of bt.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({type:Eo.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=PO.indexOf(n.name)>-1,o=new Promise(_=>{let c=setTimeout(()=>n.terminate(),WE*2).unref();n.on("exit",()=>{clearTimeout(c),s.splice(s.indexOf(o)),!i&&r&&n.startCopy(),_()})});s.push(o),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else lt.postMessage({type:QE,workerType:e})}a(lo,"restartWorkers");function HO(e){return lo(e,1/0,!1)}a(HO,"shutdownWorkers");var jE=[];function BO(e){jE.push(e)}a(BO,"onMessageFromWorkers");function GO(e){for(let t of Kt)try{t.postMessage(e)}catch(r){Yn.error("Unable to send message to worker",r)}}a(GO,"broadcast");function vO(e){e.postMessage({type:ZE,workers:el()})}a(vO,"sendThreadInfo");function el(){let e=Date.now();return bt.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(el,"getChildWorkerInfo");function FO(e,t){e.resources=t,e.resources.updated=Date.now()}a(FO,"recordResourceReport");var uo;function qO(e){uo=e}a(qO,"setMonitorListener");var xO=1e3,YE=!1;function VO(){YE||(YE=!0,setInterval(()=>{for(let e of bt){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}uo&&uo()},xO).unref())}a(VO,"startMonitoring");var kO=1e3;if(lt){$n(lt);for(let e of OO.addPorts)$n(e);setInterval(()=>{let e=process.memoryUsage();lt.postMessage({type:XE,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},kO).unref(),_o=a(()=>new Promise((e,t)=>{lt.on("message",r),lt.postMessage({type:JE});function r(s){s.type===ZE&&(lt.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else _o=el;So.exports.getThreadInfo=_o;function $n(e,t){Kt.push(e),e.on("message",r=>{if(r.type===zE)$n(r.port);else for(let s of jE)s(r)}).on("close",()=>{Kt.splice(Kt.indexOf(e),1)}).on("exit",()=>{Kt.splice(Kt.indexOf(e),1)}),t||e.unref()}a($n,"addPort");$E||lt.on("message",async e=>{let{type:t}=e;t===UO.ITC_EVENT_TYPES.SHUTDOWN&&(lt.unref(),setTimeout(()=>{Yn.warn("Thread did not voluntarily terminate",pO),process.exit(0)},WE).unref())})});var sl=h((ZH,rl)=>{"use strict";var ho=q(),YO=O(),tl=Me().LMDB_ERRORS_ENUM;rl.exports=$O;async function $O(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 ho.closeEnvironment(global.lmdb_map[o])}catch(_){if(_.message!==tl.ENV_REQUIRED)throw _}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await ho.closeEnvironment(global.lmdb_map[s]),await ho.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==tl.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){YO.error(t)}}a($O,"cleanLMDBMap")});var Tl=h((eB,hl)=>{"use strict";var To=require("recursive-iterator"),KO=require("alasql"),fo=require("clone"),nl=p(),{handleHDBError:il,hdb_errors:WO}=Q(),{HDB_ERROR_MSGS:al,HTTP_STATUS_CODES:ol}=WO,QO=["DISTINCT_ARRAY"],_l=Symbol("validateTables"),mo=Symbol("validateTable"),jH=Symbol("getAllColumns"),cl=Symbol("validateAllColumns"),Wn=Symbol("findColumn"),ul=Symbol("validateOrderBy"),_s=Symbol("validateSegment"),Ao=Symbol("validateColumn"),El=Symbol("setColumnsForTable"),ll=Symbol("checkColumnsForAsterisk"),dl=Symbol("validateGroupBy"),Sl=Symbol("hasColumns"),Qn=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[_l](),this[ll](),this[cl]()}[_l](){if(this[Sl]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[mo](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[mo](t.table)})}}[Sl](){let t=!1,r=new To(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[mo](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw il(new Error,al.SCHEMA_NOT_FOUND(t.databaseid),ol.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw il(new Error,al.TABLE_NOT_FOUND(t.databaseid,t.tableid),ol.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=fo(s);n.table=fo(t),this.attributes.push(n)})}[Wn](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)}[ll](){let t=new To(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[El](r.tableid)}[El](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new KO.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[cl](){this[_s](this.statement.columns,!1),this[_s](this.statement.joins,!1),this[_s](this.statement.where,!1),this[dl](this.statement.group,!1),this[_s](this.statement.order,!0)}[_s](t,r){if(!t)return;let s=new To(t),n=[];for(let{node:i,path:o}of s)!nl.isEmpty(i)&&!nl.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[ul](i):n.push(this[Ao](i)));return n}[dl](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&QO.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=fo(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Wn](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[Wn](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,_)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(_,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[ul](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[Ao](t)}[Ao](t){let r=this[Wn](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(Qn,"SelectValidator");hl.exports=Qn});var Rl=h((rB,Al)=>{"use strict";var fl=require("lodash"),cs=require("mathjs"),JO=require("jsonata"),ml=p();Al.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?fl.uniqWith(e,fl.isEqual):e,searchJSON:XO,mad:us.bind(null,cs.mad),mean:us.bind(null,cs.mean),mode:us.bind(null,cs.mode),prod:us.bind(null,cs.prod),median:us.bind(null,cs.median)};function us(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(us,"aggregateFunction");function XO(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(ml.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),ml.isEmpty(this.__ala__.res[r])){let s=JO(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(XO,"searchJSON")});var Nl=h((nB,gl)=>{"use strict";var X=require("moment"),Ro="YYYY-MM-DDTHH:mm:ss.SSSZZ";X.suppressDeprecationWarnings=!0;gl.exports={current_date:()=>X().utc().format("YYYY-MM-DD"),current_time:()=>X().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return X(e).utc().format("YYYY");case"month":return X(e).utc().format("MM");case"day":return X(e).utc().format("DD");case"hour":return X(e).utc().format("HH");case"minute":return X(e).utc().format("mm");case"second":return X(e).utc().format("ss");case"millisecond":return X(e).utc().format("SSS");default:break}},date:e=>X(e).utc().format(Ro),date_format:(e,t)=>X(e).utc().format(t),date_add:(e,t,r)=>X(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>X(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=X(e).utc(),n=X(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>X().utc().valueOf(),get_server_time:()=>X().format(Ro),offset_utc:(e,t)=>X(e).utc().utcOffset(t).format(Ro)}});var Cl=h((iB,Il)=>{"use strict";var ZO=require("@turf/area"),zO=require("@turf/length"),jO=require("@turf/circle"),eI=require("@turf/difference"),tI=require("@turf/distance"),rI=require("@turf/boolean-contains"),sI=require("@turf/boolean-equal"),nI=require("@turf/boolean-disjoint"),iI=require("@turf/helpers"),pl=f(),U=p();Il.exports={geoArea:aI,geoLength:oI,geoCircle:_I,geoDifference:cI,geoDistance:Ol,geoNear:uI,geoContains:EI,geoEqual:lI,geoCrosses:dI,geoConvert:SI};var go="geo1 is required",No="geo2 is required";function aI(e){if(U.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),ZO.default(e)}a(aI,"geoArea");function oI(e,t){if(U.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),zO.default(e,{units:t||"kilometers"})}a(oI,"geoLength");function _I(e,t,r){if(U.isEmpty(e))throw new Error("point is required");if(U.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),jO.default(e,t,{units:r||"kilometers"})}a(_I,"geoCircle");function cI(e,t){if(U.isEmpty(e))throw new Error("poly1 is required");if(U.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),eI(e,t)}a(cI,"geoDifference");function Ol(e,t,r){if(U.isEmpty(e))throw new Error("point1 is required");if(U.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),tI.default(e,t,{units:r||"kilometers"})}a(Ol,"geoDistance");function uI(e,t,r,s){if(U.isEmpty(e))throw new Error("point1 is required");if(U.isEmpty(t))throw new Error("point2 is required");if(U.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return Ol(e,t,s)<=r}a(uI,"geoNear");function EI(e,t){if(U.isEmpty(e))throw new Error(go);if(U.isEmpty(e))throw new Error(No);return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),rI.default(e,t)}a(EI,"geoContains");function lI(e,t){if(U.isEmpty(e))throw new Error(go);if(U.isEmpty(e))throw new Error(No);return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),sI.default(e,t)}a(lI,"geoEqual");function dI(e,t){if(U.isEmpty(e))throw new Error(go);if(U.isEmpty(e))throw new Error(No);return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),!nI.default(e,t)}a(dI,"geoCrosses");function SI(e,t,r){if(U.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(U.isEmpty(t))throw new Error("geo_type is required");if(U.isEmpty(pl.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(pl.GEO_CONVERSION_ENUM).join(",")}`);return iI[t](e,r)}a(SI,"geoConvert")});var Ll=h((oB,bl)=>{var Wt=Rl(),Ie=Nl(),Ze=Cl();bl.exports=e=>{e.aggr.mad=e.aggr.MAD=Wt.mad,e.aggr.mean=e.aggr.MEAN=Wt.mean,e.aggr.mode=e.aggr.MODE=Wt.mode,e.aggr.prod=e.aggr.PROD=Wt.prod,e.aggr.median=e.aggr.MEDIAN=Wt.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Wt.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Wt.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Ie.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Ie.current_time,e.fn.extract=e.fn.EXTRACT=Ie.extract,e.fn.date=e.fn.DATE=Ie.date,e.fn.date_format=e.fn.DATE_FORMAT=Ie.date_format,e.fn.date_add=e.fn.DATE_ADD=Ie.date_add,e.fn.date_sub=e.fn.DATE_SUB=Ie.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Ie.date_diff,e.fn.now=e.fn.NOW=Ie.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Ie.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Ie.get_server_time,e.fn.getdate=e.fn.GETDATE=Ie.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Ie.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Ze.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ze.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ze.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ze.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ze.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ze.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ze.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ze.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ze.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ze.geoNear}});var wl=h((_B,Ul)=>{"use strict";var Es=require("lodash"),se=require("alasql");se.options.cache=!1;var hI=Ll(),yl=require("clone"),Jn=require("recursive-iterator"),I=O(),L=p(),mr=Qt(),TI=f(),{hdb_errors:fI}=Q(),mI="IS NULL",Ye="There was a problem performing this search. Please check the logs and try again.";hI(se);var Xn=class{constructor(t,r){if(L.isEmpty(t))throw I.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(),L.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!L.isEmptyOrZeroLength(s))return I.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw I.error("Error thrown from checkEmptySQL in SQLSearch class method search."),I.error(s),new Error(Ye)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw I.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),I.error(s),new Error(Ye)}if(Object.keys(this.data).length===0)return I.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw I.error("Error thrown from processJoins in SQLSearch class method search."),I.error(s),new Error(Ye)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw I.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),I.error(s),new Error(Ye)}try{return t=await this._finalSQL(),t}catch(s){throw I.error("Error thrown from finalSQL in SQLSearch class method search."),I.error(s),new Error(Ye)}}_getColumns(){let t=new Jn(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(yl(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Es.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(L.isEmpty(this.statement.where)){I.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Jn(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!L.isEmpty(r)&&r.right)if(L.isNotEmptyAndHasValue(r.right.value)){let s=L.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new se.yy.LogicValue({value:s}):r.right instanceof se.yy.StringValue&&!L.isEmpty(s)&&L.autoCasterIsNumberCheck(s.toString())&&(r.right=new se.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=L.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new se.yy.LogicValue({value:i}):s instanceof se.yy.StringValue&&L.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new se.yy.NumValue({value:i}))});if(t){I.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Jn(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(!L.isEmpty(TI.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(L.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(L.isEmptyOrZeroLength(r.left.columnid)||L.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(L.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let _=!1;switch(r.op){case"=":!L.isEmpty(r.right.value)||!L.isEmpty(r.left.value)?s.add(L.isEmpty(r.right.value)?r.left.value:r.right.value):_=!0;break;case"IN":let c=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<c.length;u++)if(c[u].value)s.add(c[u].value);else{_=!0;break}break;default:_=!0;break}this.exact_search_values[o].ignore=_,_?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(L.isEmptyOrZeroLength(this.all_table_attributes)&&L.isEmptyOrZeroLength(this.statement.from)&&L.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&&Es.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(L.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);L.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(L.isEmptyOrZeroLength(this.all_table_attributes)&&!L.isEmptyOrZeroLength(this.columns.columns))return t;if(L.isEmptyOrZeroLength(this.all_table_attributes)&&L.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await se.promise(r)}catch(r){throw I.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),I.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(yl(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(L.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(mI)>-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=Es.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,_=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,_)),i.attribute!==_&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,_={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},c=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(c=!0),!L.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!L.isEmptyOrZeroLength(this.exact_search_values[u].values))if(c)try{_.hash_values=Array.from(this.exact_search_values[u].values);let E=await mr.getDataByHash(_);for(let l of _.hash_values)E.get(l)&&!this.data[i].__merged_data[l]&&(this.data[i].__merged_data[l]=[...s[i]],this._setMergedHashAttribute(i,l))}catch(E){throw I.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),I.error(E),new Error(Ye)}else try{_.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async E=>{let l=Object.assign({},_);l.search_value=E;let S=await mr.getDataByValue(l);for(let[d,A]of S)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,A[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,A[n.attribute]),this._setMergedHashAttribute(i,L.autoCast(d)))}))}catch(E){throw I.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),I.error(E),new Error(Ye)}else if(!L.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!L.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let E=this.comparator_search_values[u].comparators;for(let l=0,S=E.length;l<S;l++){let d=E[l];_.search_attribute=d.attribute,_.search_value=d.search_value;let A=await mr.getDataByValue(_,d.operation);if(c)for(let[g]of A)this.data[i].__merged_data[g]||(this.data[i].__merged_data[g]=[...s[i]],this._setMergedHashAttribute(i,L.autoCast(g)));else for(let[g,y]of A)this.data[i].__merged_data[g]?this._updateMergedAttribute(i,g,n.attribute,y[n.attribute]):(this.data[i].__merged_data[g]=[...s[i]],this._updateMergedAttribute(i,g,n.attribute,y[n.attribute]),this._setMergedHashAttribute(i,L.autoCast(g)))}}catch(E){throw I.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),I.error(E),new Error(Ye)}else try{_.search_attribute=n.attribute,_.search_value="*";let E=await mr.getDataByValue(_);if(c)for(let[l]of E)this.data[i].__merged_data[l]||(this.data[i].__merged_data[l]=[...s[i]],this._setMergedHashAttribute(i,L.autoCast(l)));else for(let[l,S]of E)this.data[i].__merged_data[l]?this._updateMergedAttribute(i,l,n.attribute,S[n.attribute]):(this.data[i].__merged_data[l]=[...s[i]],this._updateMergedAttribute(i,l,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,L.autoCast(l)))}catch(E){throw I.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),I.error(E),new Error(Ye)}}}_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 se.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 se.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new se.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 se.yy.FuncValue:new se.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(d=>{d.joinmode&&d.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(d.table);let A=d.joinmode+" JOIN ? AS "+(d.as?d.as:d.table.tableid);d.on&&(A+=" ON "+d.on.toString()),i.push(A),t.push(Object.values(this.data[`${d.table.databaseid_orig}_${d.table.as?d.table.as_orig:d.table.tableid_orig}`].__merged_data))});let o=[],_={};n.forEach(d=>{let A=this.data[`${d.databaseid_orig}_${d.as?d.as_orig:d.tableid_orig}`].__hash_name,g=d.as?d.as_orig:d.tableid_orig;o.push({key:`'${g}.${A}'`,schema:d.databaseid_orig,table:d.as?d.as_orig:d.tableid_orig,keys:new Set}),r.push(`${d.as?d.as:d.tableid}.\`${A}\` AS "${g}.${A}"`),_[d.as?d.as_orig:d.tableid_orig]=this.data[`${d.databaseid_orig}_${d.as?d.as_orig:d.tableid_orig}`].__merged_attributes});let c=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(d=>{d.is_func?r.push(d.initial_select_column.toString()):d.initial_select_column.tableid?r.push(`${d.initial_select_column.tableid}.${d.initial_select_column.columnid} AS ${d.expression.columnid}`):r.push(`${d.initial_select_column.columnid} AS ${d.expression.columnid}`)}));let E="",l="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(E=this.statement.limit?"LIMIT "+this.statement.limit:"",l=this.statement.offset?"OFFSET "+this.statement.offset:"");let S=[];try{let d=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${c} ${u} ${E} ${l}`,A=this._convertColumnsToIndexes(d,n);S=await se.promise(A,t),t=null}catch(d){throw I.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),I.error(d),new Error("There was a problem processing the data.")}if(S&&S.length>0){for(let d=0,A=S.length;d<A;d++){let g=S[d];o.forEach(y=>{g[y.key]!==null&&g[y.key]!==void 0&&y.keys.add(g[y.key])})}o.forEach(d=>{let A=Object.keys(this.data[`${d.schema}_${d.table}`].__merged_data),g=Es.difference(A,[...d.keys].map(y=>y.toString()));for(let y=0,$=g.length;y<$;y++){let x=g[y];delete this.data[`${d.schema}_${d.table}`].__merged_data[x]}})}return{existing_attributes:_,joined_length:S?S.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Jn(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let _=o.table.as?o.table.as:o.table.tableid;(!t[_]||t[_].indexOf(o.attribute)<0)&&s.push(o)}}s=Es.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 I.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),I.error(i),new Error(Ye)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let E in i)o.push(i[E][0]);this.data[s].__merged_attributes.push(...n.columns);let _={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},c=await mr.getDataByHash(_),u=n.columns.length;for(let E=0,l=o.length;E<l;E++){let S=o[E],d=c.get(S);for(let A=0;A<u;A++){let g=n.columns[A],y=d[g]===void 0?null:d[g];this.data[s].__merged_data[S].push(y)}}}}catch(r){throw I.error("Error thrown from getDataByHash function in SQLSearch class method getData."),I.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let _=o.aggregatorid?o.expression:o,c=o.aggregatorid?o.as_orig:_.as_orig;return n.expression.tableid?_.columnid_orig===n.expression.columnid_orig&&_.tableid_orig===n.expression.tableid_orig:_.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===c}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();I.trace(`Final SQL: ${n}`),s=await se.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),I.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw I.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),I.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 I.error(fI.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),I.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=n[i],u=new RegExp(`${c}.\`${o}\``,"g"),E=`${c}.[${_}]`;s=s.replace(u,E)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=new RegExp(`\`${o}\``,"g"),u=`[${_}]`;s=s.replace(c,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await mr.getDataByValue(i);for(let[_,c]of o)this.data[n].__merged_data[_]||(this.data[n].__merged_data[_]=Object.assign({},r[n])),this.data[n].__merged_data[_][t[s.attribute]]=c[s.attribute]}catch(o){throw I.error("There was an error when processing this SQL operation. Check your logs"),I.error(o),new Error(Ye)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(Xn,"SQLSearch");Ul.exports=Xn});var Zn=h((uB,Dl)=>{"use strict";var AI=Tl();Dl.exports={searchByConditions:pI,searchByHash:OI,searchByValue:II,search:CI};var po=Qt(),Ml=require("util"),RI=Ml.callbackify(po.searchByHash),gI=Ml.callbackify(po.searchByValue),NI=wl();async function pI(e){return po.searchByConditions(e)}a(pI,"searchByConditions");function OI(e,t){try{RI(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(OI,"searchByHash");function II(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),gI(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(II,"searchByValue");function CI(e,t){try{let r=new AI(e);r.validate(),new NI(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(CI,"search")});var ds=h((lB,Gl)=>{"use strict";var ls=require("crypto"),Hl="aes-256-cbc",bI=32,LI=16,Oo=64,Bl=32,yI=Oo+Bl,Pl=new Map;Gl.exports={encrypt:UI,decrypt:wI,createNatsTableStreamName:MI};function UI(e){let t=ls.randomBytes(bI),r=ls.randomBytes(LI),s=ls.createCipheriv(Hl,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),_=n.toString("hex");return i+o+_}a(UI,"encrypt");function wI(e){let t=e.substr(0,Oo),r=e.substr(Oo,Bl),s=e.substr(yI,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=ls.createDecipheriv(Hl,Buffer.from(t,"hex"),n),_=o.update(i);return _=Buffer.concat([_,o.final()]),_.toString()}a(wI,"decrypt");function MI(e,t){let r=`${e}.${t}`,s=Pl.get(r);return s||(s=ls.createHash("md5").update(`${e}.${t}`).digest("hex"),Pl.set(r,s)),s}a(MI,"createNatsTableStreamName")});var Co=h((hB,vl)=>{"use strict";var DI=f(),SB=xt();function Io(e,t){let r=Object.create(null);if(t.length===1&&DI.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(Io,"parseRow");function PI(e,t,r,s){let n=Io(r,e);s.push(n)}a(PI,"searchAll");function HI(e,t,r,s){let n=Io(r,e);s[t]=n}a(HI,"searchAllToMap");function BI(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(BI,"iterateDBI");function Jt(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(Jt,"pushResults");function GI(e,t,r,s,n,i){t.toString().endsWith(e)&&Jt(t,r,s,n,i)}a(GI,"endsWith");function vI(e,t,r,s,n,i){t.toString().includes(e)&&Jt(t,r,s,n,i)}a(vI,"contains");function FI(e,t,r,s,n,i){t>e&&Jt(t,r,s,n,i)}a(FI,"greaterThanCompare");function qI(e,t,r,s,n,i){t>=e&&Jt(t,r,s,n,i)}a(qI,"greaterThanEqualCompare");function xI(e,t,r,s,n,i){t<e&&Jt(t,r,s,n,i)}a(xI,"lessThanCompare");function VI(e,t,r,s,n,i){t<=e&&Jt(t,r,s,n,i)}a(VI,"lessThanEqualCompare");vl.exports={parseRow:Io,searchAll:PI,searchAllToMap:HI,iterateDBI:BI,endsWith:GI,contains:vI,greaterThanCompare:FI,greaterThanEqualCompare:qI,lessThanCompare:xI,lessThanEqualCompare:VI,pushResults:Jt}});var Zt=h((RB,$l)=>{"use strict";var Lt=q(),fB=O(),Ce=xt(),zn=ne(),W=Me().LMDB_ERRORS_ENUM,mB=p(),kI=f(),jn=Co(),{parseRow:YI}=jn,AB=require("lmdb"),{OVERFLOW_MARKER:Fl,MAX_SEARCH_KEY_LENGTH:$I}=zn;function ql(e,t,r,s=!1,n=void 0,i=void 0){return Xt(e,t,r,(o,_)=>_.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(ql,"iterateFullIndex");function Ss(e,t,r,s,n,i=!1,o=void 0,_=void 0,c=!1,u=!1){return Xt(e,t,r,(E,l,S,d)=>{let x={transaction:E,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:_,inclusiveEnd:i===!0?!c:!u,exclusiveStart:i===!0?u:c};return d===r?(x.values=!1,l.getRange(x).map(v=>({value:v}))):l.getRange(x)})}a(Ss,"iterateRangeBetween");function Xt(e,t,r,s){let n=e.database||e,i=Lt.openDBI(n,r);i[zn.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Lt.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let _=s(o,i,n,t);return _.transaction=o,e.database||(_.onDone=()=>{o.done()}),_}a(Xt,"setupTransaction");function xl(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(Fl)){if(!n)if(r)n=Lt.openDBI(e,r);else{let c=Lt.listDBIs(e);for(let u=0,E=c.length;u<E&&(n=Lt.openDBI(e,c[u]),!n[zn.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(xl,"getOverflowCheck");function KI(e,t,r,s=!1,n=void 0,i=void 0){if(Ce.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);return Xt(e,t,t,(o,_,c)=>(ei(r),r=hs(c,r),_.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(u=>YI(u.value,r))))}a(KI,"searchAll");function WI(e,t,r,s=!1,n=void 0,i=void 0){if(Ce.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);ei(r),r=hs(e.database||e,r);let o=new Map;for(let{key:_,value:c}of ql(e,t,t,s,n,i))o.set(_,jn.parseRow(c,r));return o}a(WI,"searchAllToMap");function QI(e,t,r=!1,s=void 0,n=void 0){if(Ce.validateEnv(e),t===void 0)throw new Error(W.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=ql(e,void 0,t,r,s,n),_=o.transaction,c=xl(_.database,_,void 0,t);for(let{key:u,value:E}of o){let l=c(u,E);i[l]===void 0&&(i[l]=[]),i[l].push(E)}return i}a(QI,"iterateDBI");function JI(e,t){if(Ce.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);return Lt.statDBI(e,t).entryCount}a(JI,"countAll");function XI(e,t,r,s,n=!1,i=void 0,o=void 0){return yt(e,r,s),Xt(e,t,r,(_,c,u,E)=>(s=Ce.convertKeyValueToWrite(s),E===r?c.get(s,{transaction:_,lazy:!0})===void 0?[]:[{key:s,value:s}]:c.getValues(s,{transaction:_,reverse:n,limit:i,offset:o}).map(l=>({key:s,value:l}))))}a(XI,"equals");function ZI(e,t,r){return yt(e,t,r),Lt.openDBI(e,t).getValuesCount(r)}a(ZI,"count");function zI(e,t,r,s,n=!1,i=void 0,o=void 0){return yt(e,r,s),Xt(e,null,r,(_,c)=>{s=Ce.convertKeyValueToWrite(s);let u=!0;typeof s=="number"&&(u=!1);let E;if(n===!0){let l;for(let S of c.getKeys({transaction:_,start:s}))if(!S.startsWith(s)){l=S;break}return l!==void 0&&(Number.isInteger(o)?o++:i++),E=c.getRange({transaction:_,start:l,end:void 0,reverse:n,limit:i,offset:o}).map(S=>{let{key:d}=S;if(d!==l){if(d.toString().startsWith(s))return S;if(u===!0)return E.DONE}}),E.filter(S=>S)}else return E=c.getRange({transaction:_,start:s,reverse:n,limit:i,offset:o}).map(l=>{if(l.key.toString().startsWith(s))return l;if(u===!0)return E.DONE}),u?E:E.filter(l=>l)})}a(zI,"startsWith");function jI(e,t,r,s,n=!1,i=void 0,o=void 0){return Vl(e,t,r,s,n,i,o,!0)}a(jI,"endsWith");function Vl(e,t,r,s,n=!1,i=void 0,o=void 0,_=!1){return yt(e,r,s),Xt(e,null,r,(c,u,E,l)=>{let S=xl(E,c,l,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:c,end:n?!1:void 0,reverse:n}).flatMap(d=>{let A=d.toString();return A.endsWith(Fl)?u.getValues(d,{transaction:c}).map(g=>{let y=S(d,g);if(_?y.endsWith(s):y.includes(s))return{key:y,value:g}}).filter(g=>g):(_?A.endsWith(s):A.includes(s))?u[zn.DBI_DEFINITION_NAME].is_hash_attribute?{key:d,value:d}:u.getValues(d,{transaction:c}).map(g=>({key:d,value:g})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(Vl,"contains");function eC(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),Ss(e,t,r,s,c,n,i,o,!0,!1)}a(eC,"greaterThan");function tC(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),Ss(e,t,r,s,c,n,i,o,!1,!1)}a(tC,"greaterThanEqual");function rC(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),Ss(e,t,r,c,s,n,i,o,!1,!0)}a(rC,"lessThan");function sC(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),Ss(e,t,r,c,s,n,i,o,!1,!1)}a(sC,"lessThanEqual");function nC(e,t,r,s,n,i=!1,o=void 0,_=void 0){if(Ce.validateEnv(e),r===void 0)throw new Error(W.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(W.START_VALUE_REQUIRED);if(n===void 0)throw new Error(W.END_VALUE_REQUIRED);if(s=Ce.convertKeyValueToWrite(s),n=Ce.convertKeyValueToWrite(n),s>n)throw new Error(W.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ss(e,t,r,s,n,i,o,_)}a(nC,"between");function iC(e,t,r,s){Ce.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);if(ei(r),r=hs(n,r),s===void 0)throw new Error(W.ID_REQUIRED);let o=null,_=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return _&&(o=jn.parseRow(_,r)),o}a(iC,"searchByHash");function aC(e,t,r){Ce.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(W.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(aC,"checkHashExists");function oC(e,t,r,s,n=[]){return Yl(e,t,r,s,n),kl(e,t,r,s,n).map(i=>i[1])}a(oC,"batchSearchByHash");function _C(e,t,r,s,n=[]){Yl(e,t,r,s,n);let i=new Map;for(let[o,_]of kl(e,t,r,s,n))i.set(o,_);return i}a(_C,"batchSearchByHashToMap");function kl(e,t,r,s,n=[]){return Xt(e,t,t,(i,o,_)=>{r=hs(_,r);let c=r.length<3;return s.map(u=>{let E=_.dbis[t].get(u,{transaction:i,lazy:c});if(E)return[u,jn.parseRow(E,r)];n.push(u)}).filter(u=>u)})}a(kl,"batchHashSearch");function Yl(e,t,r,s,n){if(Ce.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);if(ei(r),s==null)throw new Error(W.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(W.IDS_MUST_BE_ITERABLE)}a(Yl,"initializeBatchSearchByHash");function ei(e){if(!Array.isArray(e))throw e===void 0?new Error(W.FETCH_ATTRIBUTES_REQUIRED):new Error(W.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(ei,"validateFetchAttributes");function yt(e,t,r){if(Ce.validateEnv(e),t===void 0)throw new Error(W.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(W.SEARCH_VALUE_REQUIRED);if(r?.length>$I)throw new Error(W.SEARCH_VALUE_TOO_LARGE)}a(yt,"validateComparisonFunctions");function hs(e,t){return t.length===1&&kI.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Lt.listDBIs(e)),t}a(hs,"setGetWholeRowAttributes");$l.exports={searchAll:KI,searchAllToMap:WI,count:ZI,countAll:JI,equals:XI,startsWith:zI,endsWith:jI,contains:Vl,searchByHash:iC,setGetWholeRowAttributes:hs,batchSearchByHash:oC,batchSearchByHashToMap:_C,checkHashExists:aC,iterateDBI:QI,greaterThan:eC,greaterThanEqual:tC,lessThan:rC,lessThanEqual:sC,between:nC}});var ni=h((NB,jl)=>{"use strict";var Wl=Zn(),Ut=O(),Ql=ja(),cC=require("lodash"),uC=ds(),Jl=p(),{promisify:Xl}=require("util"),k=f(),{handleHDBError:ti,hdb_errors:EC}=Q(),{HDB_ERROR_MSGS:ri,HTTP_STATUS_CODES:Zl}=EC,lC=J();lC.initSync();var Kl=q(),dC=Zt(),{getSchemaPath:SC}=Y(),Ts=Xl(Wl.searchByValue),hC=Xl(Wl.searchByHash),Ar="name",zl="hash_attribute",bo="schema",TC="schema_table",fC="attribute";jl.exports={describeAll:mC,describeTable:si,describeSchema:RC};async function mC(e){try{let t=Jl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:Ar,search_value:k.WILDCARD_SEARCH_VALUE,get_attributes:[Ar]},i=await Ts(n),o={},_={};for(let S of i)o[S.name]=!0,!t&&!s&&(_[S.name]=r[S.name].describe);let c={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:k.ID_ATTRIBUTE_STRING,search_value:k.WILDCARD_SEARCH_VALUE,get_attributes:[zl,k.ID_ATTRIBUTE_STRING,Ar,bo]},u=await Ts(c),E=[];for(let S of u)try{let d;if(t||s)d=await si({schema:S.schema,table:S.name});else if(r&&r[S.schema].describe&&r[S.schema].tables[S.name].describe){let A=r[S.schema].tables[S.name].attribute_permissions;d=await si({schema:S.schema,table:S.name},A)}d&&E.push(d)}catch(d){Ut.error(d)}let l={};for(let S in E)t||s?(l[E[S].schema]==null&&(l[E[S].schema]={}),l[E[S].schema][E[S].name]=E[S],o[E[S].schema]&&delete o[E[S].schema]):_[E[S].schema]&&(l[E[S].schema]==null&&(l[E[S].schema]={}),l[E[S].schema][E[S].name]=E[S],o[E[S].schema]&&delete o[E[S].schema]);for(let S in o)t||s?l[S]={}:_[S]&&(l[S]={});return l}catch(t){return Ut.error("Got an error in describeAll"),Ut.error(t),ti(new Error,ri.DESCRIBE_ALL_ERR)}}a(mC,"describeAll");async function si(e,t){let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i={},o=Ql.describe_table(e);if(o)throw o;if(r===k.SYSTEM_SCHEMA_NAME)return global.hdb_schema[k.SYSTEM_SCHEMA_NAME][s];let _={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:k.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Ar,search_value:s,hash_values:[],get_attributes:[k.WILDCARD_SEARCH_VALUE]},c=Array.from(await Ts(_));if(!c||c.length===0)throw ti(new Error,ri.TABLE_NOT_FOUND(e.schema,e.table),Zl.NOT_FOUND);for await(let u of c)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw ti(new Error,ri.INVALID_TABLE_ERR(i));let E={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:k.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:TC,search_value:r+"."+s,get_attributes:[fC]},l=Array.from(await Ts(E));l=cC.uniqBy(l,S=>S.attribute),n&&n.length>0&&(l=AC(n)),i.attributes=l,i.clustering_stream_name=uC.createNatsTableStreamName(u.schema,u.name);try{let S=SC(i.schema,i.name),d=await Kl.openEnvironment(S,i.name),A=Kl.statDBI(d,i.hash_attribute);i.record_count=A.entryCount;for(let{key:g}of dC.lessThan(d,i.hash_attribute,k.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,1/0,!0,1,0))i.last_updated_record=g}catch(S){Ut.warn(`unable to stat table dbi due to ${S}`)}}catch(E){Ut.error(`There was an error getting attributes for table '${u.name}'`),Ut.error(E)}return i}a(si,"descTable");function AC(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(AC,"getAttrsByPerms");async function RC(e){let t=Ql.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:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:k.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:bo,search_value:s,hash_values:[],get_attributes:[zl,k.ID_ATTRIBUTE_STRING,Ar,bo]},i=Array.from(await Ts(n));if(i&&i.length<1){let o={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:k.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[Ar]},_=Array.from(await hC(o));if(_&&_.length<1)throw ti(new Error,ri.SCHEMA_NOT_FOUND(e.schema),Zl.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async _=>{try{let c;if(r&&r.tables[_.name]&&(c=r.tables[_.name]),Jl.isEmpty(c)||c.describe){let u=await si({schema:e.schema,table:_.name},c?c.attribute_permissions:null);u&&(o[u.name]=u)}}catch(c){Ut.error(`Error describing schema table '${e.schema}.${_}'`),Ut.error(c)}})),o}}a(RC,"describeSchema")});var ii=h((OB,nd)=>{var Rr=$t(),{callbackify:rd,promisify:gC}=require("util");nd.exports={setSchemaDataToGlobal:ed,getTableSchema:OC,getSystemSchema:CC,setSchemaDataToGlobalAsync:gC(ed)};var sd=ni(),NC=rd(sd.describeAll),pC=rd(sd.describeTable);function ed(e){NC(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Rr),global.hdb_schema=r,e(null,null)})}a(ed,"setSchemaDataToGlobal");function td(e,t){return e==="system"?Rr[t]:global.hdb_schema[e][t]}a(td,"returnSchema");function OC(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?IC(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,td(e,t))}):r(null,td(e,t))}a(OC,"getTableSchema");function IC(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=Rr:global.hdb_schema={system:Rr},r();return}pC(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:Rr}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(IC,"setTableDataToGlobal");function CC(){return Rr}a(CC,"getSystemSchema")});var ai=h((CB,_d)=>{"use strict";var zt=O(),be=f(),bC=sl(),id=ii(),LC=ni(),yC=Nr(),{validateEvent:od}=gr(),fs=Qt(),UC=require("process"),wC={[be.ITC_EVENT_TYPES.SCHEMA]:MC,[be.ITC_EVENT_TYPES.USER]:PC};async function MC(e){let t=od(e);if(t){zt.error(t);return}zt.trace("ITC schemaHandler received schema event:",e),await bC(e.message),await DC(e.message)}a(MC,"schemaHandler");async function DC(e){try{if(fs.resetReadTxn(be.SYSTEM_SCHEMA_NAME,be.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),fs.resetReadTxn(be.SYSTEM_SCHEMA_NAME,be.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),fs.resetReadTxn(be.SYSTEM_SCHEMA_NAME,be.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 LC.describeTable({schema:e.schema,table:e.table});break;default:id.setSchemaDataToGlobal(ad);break}else id.setSchemaDataToGlobal(ad)}catch(t){zt.error(t)}}a(DC,"syncSchemaMetadata");function ad(e){e&&zt.error(e)}a(ad,"handleErrorCallback");async function PC(e){try{fs.resetReadTxn(be.SYSTEM_SCHEMA_NAME,be.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),fs.resetReadTxn(be.SYSTEM_SCHEMA_NAME,be.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME);let t=od(e);if(t){zt.error(t);return}zt.trace(`ITC userHandler ${be.HDB_ITC_CLIENT_PREFIX}${UC.pid} received user event:`,e),await yC.setUsersToGlobal()}catch(t){zt.error(t)}}a(PC,"userHandler");_d.exports=wC});var gr=h((wB,ud)=>{"use strict";var LB=O(),Lo=p(),HC=f(),{ITC_ERRORS:ms}=Me(),{parentPort:yB,threadId:BC,isMainThread:GC,workerData:UB}=require("worker_threads"),{onMessageFromWorkers:vC,broadcast:FC}=Kn();ud.exports={sendItcEvent:qC,validateEvent:cd,SchemaEventMsg:xC,UserEventMsg:VC};var oi;vC(e=>{oi=oi||ai(),cd(e),oi[e.type]&&oi[e.type](e)});function qC(e){!GC&&e.message&&(e.message.originator=BC),FC(e)}a(qC,"sendItcEvent");function cd(e){if(typeof e!="object")return ms.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Lo.isEmpty(e.type))return ms.MISSING_TYPE;if(!e.hasOwnProperty("message")||Lo.isEmpty(e.message))return ms.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Lo.isEmpty(e.message.originator))return ms.MISSING_ORIGIN;if(HC.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ms.INVALID_EVENT(e.type)}a(cd,"validateEvent");function xC(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(xC,"SchemaEventMsg");function VC(e){this.originator=e}a(VC,"UserEventMsg")});var ci=h((PB,Sd)=>{"use strict";var Ed=f(),DB=p(),_i=O(),ld=wE(),pr,{sendItcEvent:dd}=gr();function kC(e){try{_i.trace("signalSchemaChange called with message:",e),pr=pr||ai();let t=new ld(Ed.ITC_EVENT_TYPES.SCHEMA,e);pr.schema(t),dd(t)}catch(t){_i.error(t)}}a(kC,"signalSchemaChange");function YC(e){try{_i.trace("signalUserChange called with message:",e),pr=pr||ai();let t=new ld(Ed.ITC_EVENT_TYPES.USER,e);pr.user(t),dd(t)}catch(t){_i.error(t)}}a(YC,"signalUserChange");Sd.exports={signalSchemaChange:kC,signalUserChange:YC}});var ui=h((BB,Td)=>{"use strict";var hd=p(),$C=f(),KC=O(),WC=Pn(),QC=Dn(),JC=ci(),{SchemaEventMsg:XC}=gr(),ZC="already exists in";Td.exports=zC;async function zC(e,t,r){if(hd.isEmptyOrZeroLength(r))return r;let s=[];hd.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 jC(e,t.schema,t.name,i)})),n}a(zC,"lmdbCheckForNewAttributes");async function jC(e,t,r,s){let n=new QC(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await eb(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(ZC))KC.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(jC,"createNewAttribute");async function eb(e){let t;return t=await WC(e),JC.signalSchemaChange(new XC(process.pid,$C.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(eb,"createAttribute")});var Or=h((vB,fd)=>{"use strict";var Ei=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(Ei,"LMDBTransactionObject");fd.exports=Ei});var Ad=h((qB,md)=>{"use strict";var tb=Or(),rb=f().OPERATIONS_ENUM,li=class extends tb{constructor(t,r,s,n,i=void 0){super(rb.INSERT,r,s,n,i),this.records=t}};a(li,"LMDBInsertTransactionObject");md.exports=li});var gd=h((VB,Rd)=>{"use strict";var sb=Or(),nb=f().OPERATIONS_ENUM,di=class extends sb{constructor(t,r,s,n,i,o=void 0){super(nb.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(di,"LMDBUpdateTransactionObject");Rd.exports=di});var pd=h((YB,Nd)=>{"use strict";var ib=Or(),ab=f().OPERATIONS_ENUM,Si=class extends ib{constructor(t,r,s,n,i,o=void 0){super(ab.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(Si,"LMDBUpsertTransactionObject");Nd.exports=Si});var Id=h((KB,Od)=>{"use strict";var ob=Or(),_b=f().OPERATIONS_ENUM,hi=class extends ob{constructor(t,r,s,n,i=void 0){super(_b.DELETE,s,n,t,i),this.original_records=r}};a(hi,"LMDBDeleteTransactionObject");Od.exports=hi});var As=h((JB,yd)=>{"use strict";var QB=require("path"),Cd=q(),cb=Ad(),ub=gd(),Eb=pd(),lb=Id(),Ir=ne(),bd=p(),{CONFIG_PARAMS:db}=f(),Ld=J();Ld.initSync();var Ti=f().OPERATIONS_ENUM,{getTransactionAuditStorePath:Sb}=Y();yd.exports=hb;async function hb(e,t){if(Ld.get(db.LOGGING_AUDITLOG)===!1)return;let r=Sb(e.schema,e.table),s=await Cd.openEnvironment(r,e.table,!0),n=Tb(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Cd.initializeDBIs(s,Ir.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ir.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Ir.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Ir.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),bd.isEmpty(n.user_name)||s.dbis[Ir.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Ir.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(hb,"writeTransaction");function Tb(e,t){let r=bd.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Ti.INSERT)return new cb(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Ti.UPDATE)return new ub(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Ti.UPSERT)return new Eb(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Ti.DELETE)return new lb(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(Tb,"createTransactionObject")});var yo=h((zB,Ud)=>{"use strict";var fb=Hn(),ZB=Gn(),Rs=f(),mb=Fn(),Ab=hr().insertRecords,Rb=q(),gb=O(),Nb=ui(),{getSchemaPath:pb}=Y(),Ob=As();Ud.exports=Ib;async function Ib(e){try{let{schema_table:t,attributes:r}=fb(e);mb(e,r,t.hash_attribute),e.schema!==Rs.SYSTEM_SCHEMA_NAME&&(r.includes(Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Nb(e.hdb_auth_header,t,r),n=pb(e.schema,e.table),i=await Rb.openEnvironment(n,e.table),o=await Ab(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Ob(e,o)}catch(_){gb.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(Ib,"lmdbCreateRecords")});var Dd=h((eG,Md)=>{"use strict";var wd=f(),Cb=yo(),bb=Gn(),Lb=require("fs-extra"),{getSchemaPath:yb}=Y();Md.exports=Ub;async function Ub(e){let t=[{name:e.schema,createddate:Date.now()}],r=new bb(wd.SYSTEM_SCHEMA_NAME,wd.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Cb(r),await Lb.mkdirp(yb(e.schema))}a(Ub,"lmdbCreateSchema")});var Hd=h((rG,Pd)=>{"use strict";var fi=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(fi,"DeleteRecordsResponseObject");Pd.exports=fi});var Mo=h((oG,vd)=>{"use strict";var Bd=q(),Uo=xt(),wo=Me().LMDB_ERRORS_ENUM,wb=ne(),Gd=O(),nG=p(),Mb=require("lmdb"),Db=Hd(),Pb=f(),{OVERFLOW_MARKER:iG,MAX_SEARCH_KEY_LENGTH:aG}=wb,Hb=Pb.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Bb(e,t,r,s){if(Uo.validateEnv(e),t===void 0)throw new Error(wo.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(wo.IDS_REQUIRED):new Error(wo.IDS_MUST_BE_ITERABLE);try{let n=Bd.listDBIs(e);Bd.initializeDBIs(e,t,n);let i=new Db,o,_=[],c=[];for(let S=0,d=r.length;S<d;S++)try{o=r[S];let A=e.dbis[t].get(o);if(!A||s&&A[Hb]>s){i.skipped.push(o);continue}let g=e.dbis[t].ifVersion(o,Mb.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let y=0;y<n.length;y++){let $=n[y];if(!A.hasOwnProperty($)||$===t)continue;let x=e.dbis[$],v=A[$];if(v!=null)try{let we=Uo.getIndexedValues(v);if(we)for(let Ft=0,ir=we.length;Ft<ir;Ft++)x.remove(we[Ft],o)}catch{Gd.warn(`cannot delete from attribute: ${$}, ${v}:${o}`)}}});_.push(g),c.push(o),i.original_records.push(A)}catch(A){Gd.warn(A),i.skipped.push(o)}let u=[],E=await Promise.all(_);for(let S=0,d=E.length;S<d;S++)E[S]===!0?i.deleted.push(c[S]):(i.skipped.push(c[S]),u.push(S));let l=0;for(let S=0;S<u.length;S++){let d=u[S];i.original_records.splice(d-l,1),l++}return i.txn_time=Uo.getNextMonotonicTime(),i}catch(n){throw n}}a(Bb,"deleteRecords");vd.exports={deleteRecords:Bb}});var gs=h((cG,qd)=>{"use strict";var Cr=p(),Gb=Mo(),vb=q(),{getSchemaPath:Fb}=Y(),qb=As(),xb=O();qd.exports=Vb;async function Vb(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Cr.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Cr.isEmptyOrZeroLength(e.hash_values)&&!Cr.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let _=0;_<e.records.length;_++){let c=e.records[_][s];Cr.isEmpty(c)||e.hash_values.push(c)}}if(Cr.isEmptyOrZeroLength(e.hash_values))return Fd([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Cr.isEmptyOrZeroLength(e.records)){e.records=[];for(let _=0;_<e.hash_values.length;_++)e.records[_]={[s]:e.hash_values[_]}}let n=Fb(e.schema,e.table),i=await vb.openEnvironment(n,e.table),o=await Gb.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await qb(e,o)}catch(_){xb.error(`unable to write transaction due to ${_.message}`)}return Fd(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(Vb,"lmdbDeleteRecords");function Fd(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(Fd,"createDeleteResponse")});var Ns=h((lG,Yd)=>{var xd=require("lodash"),Vd=at(),B=require("joi"),kb=p(),{hdb_schema_table:$e,checkValidTable:kd}=Er(),{handleHDBError:Yb,hdb_errors:$b}=Q(),{HTTP_STATUS_CODES:Kb}=$b,EG=B.object({schema:$e,table:$e,hash_values:B.array().min(0).items(B.alternatives(B.string(),B.number())).required(),get_attributes:B.array().min(1).items($e).required()}),Wb=B.object({schema:$e,table:$e,search_attribute:$e,search_value:B.any().required(),get_attributes:B.array().min(1).items($e).required(),desc:B.bool(),limit:B.number().integer().min(1),offset:B.number().integer().min(0)}),Qb=B.object({schema:$e,table:$e,operator:B.string().valid("and","or").default("and").lowercase(),offset:B.number().integer().min(0),limit:B.number().integer().min(1),get_attributes:B.array().min(1).items($e).required(),conditions:B.array().min(1).items(B.object({search_attribute:$e,search_type:B.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:B.when("search_type",{switch:[{is:"equals",then:B.any()},{is:"between",then:B.array().items(B.alternatives([B.string(),B.number()])).length(2)}],otherwise:B.alternatives(B.string(),B.number())}).required()})).required()});Yd.exports=function(e,t){let r=null;switch(t){case"value":r=Vd.validateBySchema(e,Wb);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(kd("schema",e.schema)),i(kd("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=Vd.validateBySchema(e,Qb);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=kb.checkGlobalSchemaTable(e.schema,e.table);if(n)return Yb(new Error,n,Kb.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,_=[...e.get_attributes];if(t==="value"&&_.push(e.search_attribute),t==="conditions")for(let u=0,E=e.conditions.length;u<E;u++){let l=e.conditions[u];_.push(l.search_attribute)}let c=xd.filter(_,u=>u!=="*"&&u.attribute!=="*"&&!xd.some(o,E=>E===u||E.attribute===u||E.attribute===u.attribute));if(c&&c.length>0){let u=c.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var Do=h((SG,$d)=>{"use strict";var Jb=q(),Xb=Ns(),{getSchemaPath:Zb}=Y();$d.exports=zb;function zb(e){let t=Xb(e,"hashes");if(t)throw t;let r=Zb(e.schema,e.table);return Jb.openEnvironment(r,e.table)}a(zb,"initialize")});var Po=h((TG,Kd)=>{"use strict";var jb=Zt(),eL=Do();Kd.exports=tL;async function tL(e){let t=await eL(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return jb.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(tL,"lmdbGetDataByHash")});var Ai=h((mG,Wd)=>{"use strict";var mi=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(mi,"SearchByHashObject");Wd.exports=mi});var Jd=h((gG,Qd)=>{"use strict";var RG=Ai(),rL=Zt(),sL=Do();Qd.exports=nL;async function nL(e){let t=await sL(e),r=global.hdb_schema[e.schema][e.table];return rL.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(nL,"lmdbSearchByHash")});var dt=h((pG,Xd)=>{"use strict";var Ri=class{constructor(t,r,s,n,i,o,_,c=!1,u=void 0,E=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=_,this.reverse=c,this.limit=u,this.offset=E}};a(Ri,"SearchObject");Xd.exports=Ri});var gi=h((IG,rS)=>{"use strict";var _e=Zt(),iL=q(),aL=p(),R=ne(),jt=f(),oL=$t(),Zd=Me().LMDB_ERRORS_ENUM,{compareKeys:br}=require("ordered-binary"),{getSchemaPath:_L}=Y(),St=jt.SEARCH_WILDCARDS;async function cL(e,t,r){let s;e.schema===jt.SYSTEM_SCHEMA_NAME?s=oL[e.table]:s=global.hdb_schema[e.schema][e.table];let n=tS(e,s.hash_attribute,r,t);return jd(e,n,s.hash_attribute,r)}a(cL,"prepSearch");async function jd(e,t,r,s){let n=_L(e.schema,e.table),i=await iL.openEnvironment(n,e.table),o=eS(i,e,t,r),_=o.transaction||i;if([R.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,R.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,R.SEARCH_TYPES.SEARCH_ALL,R.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(EL(e,r)===!1){let E=e.search_attribute;if(E===r)return s?zd(o,()=>!0):o.map(S=>({[r]:S.key}));let l=a(S=>({[r]:S.value,[E]:S.key}),"toObject");return s?zd(o,l):o.map(l)}let u=e.search_attribute===r?o.map(E=>E.key):o.map(E=>E.value);return s===!0?_e.batchSearchByHashToMap(_,r,e.get_attributes,u):_e.batchSearchByHash(_,r,e.get_attributes,u)}a(jd,"executeSearch");function eS(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:_,offset:c}=t;switch(o=typeof o=="boolean"?o:!1,_=Number.isInteger(_)?_:void 0,c=Number.isInteger(c)?c:void 0,r){case R.SEARCH_TYPES.EQUALS:n=_e.equals(e,i,t.search_attribute,t.search_value,o,_,c);break;case R.SEARCH_TYPES.CONTAINS:n=_e.contains(e,i,t.search_attribute,t.search_value,o,_,c);break;case R.SEARCH_TYPES.ENDS_WITH:case R.SEARCH_TYPES._ENDS_WITH:n=_e.endsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case R.SEARCH_TYPES.STARTS_WITH:case R.SEARCH_TYPES._STARTS_WITH:n=_e.startsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case R.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return _e.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case R.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return _e.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case R.SEARCH_TYPES.SEARCH_ALL:return _e.searchAll(e,s,t.get_attributes,o,_,c);case R.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return _e.searchAllToMap(e,s,t.get_attributes,o,_,c);case R.SEARCH_TYPES.BETWEEN:n=_e.between(e,i,t.search_attribute,t.search_value,t.end_value,o,_,c);break;case R.SEARCH_TYPES.GREATER_THAN:case R.SEARCH_TYPES._GREATER_THAN:n=_e.greaterThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case R.SEARCH_TYPES.GREATER_THAN_EQUAL:case R.SEARCH_TYPES._GREATER_THAN_EQUAL:n=_e.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;case R.SEARCH_TYPES.LESS_THAN:case R.SEARCH_TYPES._LESS_THAN:n=_e.lessThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case R.SEARCH_TYPES.LESS_THAN_EQUAL:case R.SEARCH_TYPES._LESS_THAN_EQUAL:n=_e.lessThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;default:return Object.create(null)}return n}a(eS,"searchByType");function uL(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case R.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case R.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case R.SEARCH_TYPES.ENDS_WITH:case R.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case R.SEARCH_TYPES.STARTS_WITH:case R.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case R.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return br(i,s[0])>=0&&br(i,s[1])<=0};case R.SEARCH_TYPES.GREATER_THAN:case R.SEARCH_TYPES._GREATER_THAN:return n=>br(n[r],s)>0;case R.SEARCH_TYPES.GREATER_THAN_EQUAL:case R.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>br(n[r],s)>=0;case R.SEARCH_TYPES.LESS_THAN:case R.SEARCH_TYPES._LESS_THAN:return n=>br(n[r],s)<0;case R.SEARCH_TYPES.LESS_THAN_EQUAL:case R.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>br(n[r],s)<=0;default:return Object.create(null)}}a(uL,"filterByType");function zd(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(zd,"createMapFromIterable");function EL(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(EL,"checkToFetchMore");function tS(e,t,r,s){if(aL.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),_=!1;if(e.search_attribute===t&&(_=!0),St.indexOf(n)>-1)return r===!0?R.SEARCH_TYPES.SEARCH_ALL_TO_MAP:R.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(St[0])<0&&n.indexOf(St[1])<0)return _===!0?r===!0?R.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:R.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:R.SEARCH_TYPES.EQUALS;if(St.indexOf(i)>=0&&St.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),R.SEARCH_TYPES.CONTAINS;if(St.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),R.SEARCH_TYPES.ENDS_WITH;if(St.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),R.SEARCH_TYPES.STARTS_WITH;if(n.includes(St[0])||n.includes(St[1]))return R.SEARCH_TYPES.EQUALS;throw new Error(Zd.UNKNOWN_SEARCH_TYPE)}else switch(s){case jt.VALUE_SEARCH_COMPARATORS.BETWEEN:return R.SEARCH_TYPES.BETWEEN;case jt.VALUE_SEARCH_COMPARATORS.GREATER:return R.SEARCH_TYPES.GREATER_THAN;case jt.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return R.SEARCH_TYPES.GREATER_THAN_EQUAL;case jt.VALUE_SEARCH_COMPARATORS.LESS:return R.SEARCH_TYPES.LESS_THAN;case jt.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return R.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Zd.UNKNOWN_SEARCH_TYPE)}}a(tS,"createSearchTypeFromSearchObject");rS.exports={executeSearch:jd,createSearchTypeFromSearchObject:tS,prepSearch:cL,searchByType:eS,filterByType:uL}});var nS=h((LG,sS)=>{"use strict";var bG=dt(),lL=Ns(),dL=p(),SL=f(),hL=gi();sS.exports=TL;function TL(e,t){if(!dL.isEmpty(t)&&SL.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=lL(e,"value");if(s)throw s;let n=!0;return hL.prepSearch(e,t,n)}a(TL,"lmdbGetDataByValue")});var Lr=h((wG,iS)=>{"use strict";var UG=dt(),fL=Ns(),mL=p(),AL=f(),RL=gi();iS.exports=gL;async function gL(e,t){if(!mL.isEmpty(t)&&AL.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=fL(e,"value");if(s)throw s;return RL.prepSearch(e,t,!1)}a(gL,"lmdbSearchByValue")});var oS=h((PG,aS)=>{"use strict";var DG=ne(),Ni=class{constructor(t,r,s,n,i=void 0,o=void 0,_="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=_}};a(Ni,"SearchByConditionsObject");var pi=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(pi,"SearchCondition");var Oi=class{constructor(t,r){this.attribute=t,this.desc=r}};a(Oi,"SortAttribute");aS.exports={SearchByConditionsObject:Ni,SearchCondition:pi,SortAttribute:Oi}});var lS=h((GG,ES)=>{"use strict";var BG=oS().SearchByConditionsObject,NL=dt(),pL=Ns(),Ho=Zt(),Ii=ne(),uS=gi(),OL=Co(),IL=require("lodash"),{getSchemaPath:CL}=Y(),_S=q(),{handleHDBError:bL,hdb_errors:LL}=Q(),{HTTP_STATUS_CODES:yL}=LL,UL=1e8;ES.exports=wL;async function wL(e){let t=pL(e,"conditions");if(t)throw bL(t,t.message,yL.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=CL(e.schema,e.table),s=await _S.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)_S.openDBI(s,u.search_attribute);let i=IL.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let E=u.search_type;E===Ii.SEARCH_TYPES.EQUALS?u.estimated_count=Ho.count(s,u.search_attribute,u.search_value):E===Ii.SEARCH_TYPES.CONTAINS||E===Ii.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=UL}return u.estimated_count}),o=s.useReadTransaction();o.database=s;let _=await cS(o,e,i[0],n.hash_attribute),c;if(!e.operator||e.operator.toLowerCase()==="and"){let u=s.dbis[n.hash_attribute],E=i.slice(1).map(uS.filterByType),l=E.length,S=Ho.setGetWholeRowAttributes(s,e.get_attributes);c=_.map(d=>u.get(d,{transaction:o,lazy:!0})),l>0&&(c=c.filter(d=>{for(let A=0;A<l;A++)if(!E[A](d))return!1;return!0})),(e.offset||e.limit!==void 0)&&(c=c.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),c=c.map(d=>OL.parseRow(d,S))}else{for(let l=1;l<i.length;l++){let S=i[l],d=await cS(o,e,S,n.hash_attribute);_=_.concat(d)}let u=new Set,E=e.offset||0;_=_.filter(l=>u.has(l)?!1:(u.add(l),!0)).slice(E,e.limit&&e.limit+E),c=Ho.batchSearchByHash(o,n.hash_attribute,e.get_attributes,_)}return c.onDone=()=>{o.done()},c}a(wL,"lmdbSearchByConditions");async function cS(e,t,r,s){let n=new NL(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Ii.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,uS.searchByType(e,n,i,s).map(o=>o.value)}a(cS,"executeConditionSearch")});var bi=h((FG,dS)=>{"use strict";var ML=f().OPERATIONS_ENUM,Ci=class{constructor(t,r,s,n=void 0){this.operation=ML.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(Ci,"DeleteObject");dS.exports=Ci});var Bo=h((xG,gS)=>{"use strict";var fS=dt(),mS=bi(),AS=Lr(),RS=gs(),he=f(),SS=p(),hS=q(),{getTransactionAuditStorePath:DL,getSchemaPath:PL}=Y(),TS=O();gS.exports=HL;async function HL(e){try{if(SS.isEmpty(global.hdb_schema[e.schema])||SS.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await BL(e),await GL(e);let t=PL(e.schema,e.table);try{await hS.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")TS.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=DL(e.schema,e.table);await hS.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")TS.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(HL,"lmdbDropTable");async function BL(e){let t=new fS(he.SYSTEM_SCHEMA_NAME,he.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,he.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[he.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await AS(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 mS(he.SYSTEM_SCHEMA_NAME,he.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await RS(n)}a(BL,"deleteAttributesFromSystem");async function GL(e){let t=new fS(he.SYSTEM_SCHEMA_NAME,he.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,he.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[he.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,he.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,he.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await AS(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 mS(he.SYSTEM_SCHEMA_NAME,he.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await RS(n)}catch(i){throw i}}a(GL,"dropTableFromSystem")});var pS=h((kG,NS)=>{"use strict";var vL=require("fs-extra"),FL=dt(),qL=Ai(),xL=bi(),VL=Bo(),kL=gs(),YL=Po(),$L=Lr(),ht=f(),{getSchemaPath:KL}=Y(),{handleHDBError:WL,hdb_errors:QL}=Q(),{HDB_ERROR_MSGS:JL,HTTP_STATUS_CODES:XL}=QL;NS.exports=ZL;async function ZL(e){let t;try{t=await zL(e.schema);let r=new FL(ht.SYSTEM_SCHEMA_NAME,ht.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ht.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ht.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await $L(r));for(let o=0;o<s.length;o++){let _={schema:t,table:s[o].name};try{await VL(_)}catch(c){if(c.message!=="invalid environment")throw c}}let n=new xL(ht.SYSTEM_SCHEMA_NAME,ht.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await kL(n);let i=KL(t);await vL.remove(i)}catch(r){throw r}}a(ZL,"lmdbDropSchema");async function zL(e){let t=new qL(ht.SYSTEM_SCHEMA_NAME,ht.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ht.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await YL(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw WL(new Error,JL.SCHEMA_NOT_FOUND(e),XL.NOT_FOUND,void 0,void 0,!0);return s}a(zL,"validateDropSchema")});var IS=h(($G,OS)=>{"use strict";var Li=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(Li,"CreateTableObject");OS.exports=Li});var bS=h((QG,CS)=>{"use strict";var jL=require("fs-extra"),yi=q(),{getTransactionAuditStorePath:ey}=Y(),Go=ne(),WG=IS();CS.exports=ty;async function ty(e){let t;try{let r=ey(e.schema,e.table);await jL.mkdirp(r),t=await yi.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{yi.createDBI(t,Go.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),yi.createDBI(t,Go.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),yi.createDBI(t,Go.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(ty,"createTransactionsAuditEnvironment")});var wS=h((XG,US)=>{"use strict";var vo=f(),LS=q(),ry=hr(),{getSystemSchemaPath:sy,getSchemaPath:ny}=Y(),iy=$t(),ay=Pn(),Fo=Dn(),oy=O(),_y=bS(),xo=iy.hdb_table,yS=[];for(let e=0;e<xo.attributes.length;e++)yS.push(xo.attributes[e].attribute);US.exports=cy;async function cy(e,t){let r=ny(t.schema,t.table),s=new Fo(t.schema,t.table,vo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Fo(t.schema,t.table,vo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Fo(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await LS.createEnvironment(r,t.table),e!==void 0){let o=await LS.openEnvironment(sy(),vo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await ry.insertRecords(o,xo.hash_attribute,yS,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await qo(s),await qo(n),await qo(i)}await _y(t)}catch(o){throw o}}a(cy,"lmdbCreateTable");async function qo(e){try{await ay(e)}catch(t){oy.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(qo,"createAttribute")});var DS=h((zG,MS)=>{"use strict";var uy=Hn(),Ey=Fn(),ly=ui(),ps=f(),dy=hr().updateRecords,Sy=q(),{getSchemaPath:hy}=Y(),Ty=As(),fy=O();MS.exports=my;async function my(e){try{let{schema_table:t,attributes:r}=uy(e);Ey(e,r,t.hash_attribute),e.schema!==ps.SYSTEM_SCHEMA_NAME&&(r.includes(ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await ly(e.hdb_auth_header,t,r),n=hy(e.schema,e.table),i=await Sy.openEnvironment(n,e.table),o=await dy(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Ty(e,o)}catch(_){fy.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(my,"lmdbUpdateRecords")});var HS=h((ev,PS)=>{"use strict";var Ay=f().OPERATIONS_ENUM,Ui=class{constructor(t,r,s,n=void 0){this.operation=Ay.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Ui,"UpsertObject");PS.exports=Ui});var GS=h((sv,BS)=>{"use strict";var rv=HS(),Ry=Hn(),gy=Fn(),Ny=ui(),Os=f(),py=hr().upsertRecords,Oy=q(),{getSchemaPath:Iy}=Y(),Cy=As(),by=O(),{handleHDBError:Ly,hdb_errors:yy}=Q();BS.exports=Uy;async function Uy(e){let t;try{t=Ry(e)}catch(c){throw Ly(c,c.message,yy.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;gy(e,s,r.hash_attribute),e.schema!==Os.SYSTEM_SCHEMA_NAME&&(s.includes(Os.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Os.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Os.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Os.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Ny(e.hdb_auth_header,r,s),i=Iy(e.schema,e.table),o=await Oy.openEnvironment(i,e.table),_=await py(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await Cy(e,_)}catch(c){by.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:_.written_hashes,schema_table:r,new_attributes:n,txn_time:_.txn_time}}a(Uy,"lmdbUpsertRecords")});var kS=h((iv,VS)=>{"use strict";var wy=dt(),vS=p(),FS=O(),My=Lr(),qS=f(),Dy=Mo().deleteRecords,Py=q(),{getSchemaPath:Hy}=Y(),{promisify:By}=require("util"),Gy=By(setTimeout),xS=1e4,vy=10;VS.exports=Fy;async function Fy(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(vS.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 wy(e.schema,e.table,qS.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=Array.from(await My(n,qS.VALUE_SEARCH_COMPARATORS.LESS))}catch(n){throw FS.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return vS.isEmptyOrZeroLength(s)?(FS.trace("No records found to delete"),{message:"No records found to delete"}):await qy(e,s,t)}a(Fy,"lmdbDeleteRecordsBefore");async function qy(e,t,r){let s=Hy(e.schema,e.table),n=await Py.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,_=t.length;o<_;o+=xS){let c=t.slice(o,o+xS),u=[];for(let E=0,l=c.length;E<l;E++)u.push(c[E][r]);try{let E=await Dy(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(E.deleted),i.skipped_hashes=i.skipped_hashes.concat(E.skipped)}catch(E){throw E}await Gy(vy)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(qy,"chunkDeletes")});var $S=h((ov,YS)=>{"use strict";var wi=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(wi,"DeleteBeforeObject");YS.exports=wi});var WS=h((cv,KS)=>{"use strict";var Mi=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(Mi,"DeleteAuditLogsBeforeResults");KS.exports=Mi});var XS=h((lv,JS)=>{"use strict";var Vo=q(),{getTransactionAuditStorePath:xy}=Y(),Ev=$S(),Is=ne(),Vy=p(),QS=WS(),ky=require("util").promisify,Yy=ky(setTimeout),$y=1e4,Ky=100;JS.exports=Wy;async function Wy(e){let t=xy(e.schema,e.table),r=await Vo.openEnvironment(t,e.table,!0),s=Vo.listDBIs(r);Vo.initializeDBIs(r,Is.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new QS;do n=await Qy(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 Yy(Ky);while(n.transactions_deleted>0);return i}a(Wy,"deleteAuditLogsBefore");async function Qy(e,t){let r=new QS;try{let s=e.dbis[Is.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let _=o[Is.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Vy.isEmpty(_)||(n=e.dbis[Is.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(_,i));for(let c=0;c<o.hash_values.length;c++)n=e.dbis[Is.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[c],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>$y)break}return await n,r}catch(s){throw s}}a(Qy,"deleteTransactions")});var zS=h((Sv,ZS)=>{"use strict";var Di=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(Di,"DropAttributeObject");ZS.exports=Di});var eh=h((fv,jS)=>{"use strict";var Jy=dt(),Xy=bi(),Tv=zS(),ze=f(),Zy=p(),ko=q(),zy=$t(),jy=Lr(),eU=gs(),{getSchemaPath:tU}=Y();jS.exports=rU;async function rU(e,t=!0){let r;e.schema===ze.SYSTEM_SCHEMA_NAME?r=zy[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await nU(e),n=tU(e.schema,e.table),i=await ko.openEnvironment(n,e.table);return t===!0&&await sU(e,i,r.hash_attribute),ko.dropDBI(i,e.attribute),s}a(rU,"lmdbDropAttribute");async function sU(e,t,r){let s=ko.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:_,version:c}of s.getRange({start:!1,versions:!0})){let u={};for(let E in _)E!==i&&(u[E]=_[E]);n=t.dbis[r].put(o,u,c)}await n}a(sU,"removeAttributeFromAllObjects");async function nU(e){let t=new Jy(ze.SYSTEM_SCHEMA_NAME,ze.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ze.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ze.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ze.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await jy(t)).filter(o=>o[ze.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Zy.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[ze.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Xy(ze.SYSTEM_SCHEMA_NAME,ze.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return eU(i)}a(nU,"dropAttributeFromSystem")});var ah=h((Rv,ih)=>{"use strict";var Yo=q(),yr=ne(),Av=xt(),$o=f(),th=p(),{getTransactionAuditStorePath:iU}=Y(),aU=Zt(),Pi=Or(),oU=O();ih.exports=_U;async function _U(e){let t=iU(e.schema,e.table),r=await Yo.openEnvironment(t,e.table,!0),s=Yo.listDBIs(r);Yo.initializeDBIs(r,yr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case $o.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return rh(r,e.search_values);case $o.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,uU(r,e.search_values,n);case $o.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return cU(r,e.search_values);default:return rh(r)}}a(_U,"readAuditLog");function rh(e,t=[0,Date.now()]){th.isEmpty(t[0])&&(t[0]=0),th.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[yr.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 Pi,n))}a(rh,"searchTransactionsByTimestamp");function cU(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[yr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,nh(e,i))}return Object.fromEntries(r)}a(cU,"searchTransactionsByUsername");function uU(e,t,r){let s=new Map;for(let _=0,c=t.length;_<c;_++){let u=t[_],E=aU.equals(e,yr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,yr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:l}of E){let S=Number(l);s.has(S)?s.get(S).push(u.toString()):s.set(S,[u.toString()])}}let n=Array.from(s.keys()),i=nh(e,n),o=new Map;for(let _=0;_<i.length;_++){let c=i[_],u=c.timestamp,E=s.get(u);sh(c,"records",r,E,o),sh(c,"original_records",r,E,o)}return Object.fromEntries(o)}a(uU,"searchTransactionsByHashValues");function sh(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let _=e[t][o],c=_[r].toString();if(s.indexOf(c)>=0)if(n.has(c)){let u=n.get(c),E=u[u.length-1];if(E.timestamp===i)E[t]=[_];else{let l=new Pi(e.operation,e.user_name,i,void 0);l[t]=[_],u.push(l)}}else{let u=new Pi(e.operation,e.user_name,i,void 0);u[t]=[_],n.set(c,[u])}}}a(sh,"loopRecords");function nh(e,t){let r=[];try{let s=e.dbis[yr.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 Pi,i);r.push(o)}}catch(i){oU.warn(i)}return r}catch(s){throw s}}a(nh,"batchSearchTransactions")});var _h=h((Nv,oh)=>{"use strict";var{getSchemaPath:EU}=Y(),lU=q();oh.exports={writeTransaction:dU};async function dU(e,t,r){let s=EU(e,t);return(await lU.openEnvironment(s,t)).transaction(r)}a(dU,"writeTransaction")});var lh=h((Ov,Eh)=>{"use strict";var{getSchemaPath:ch}=Y(),uh=q();Eh.exports={flush:SU,resetReadTxn:hU};async function SU(e,t){return(await uh.openEnvironment(ch(e,t),t.toString())).flushed}a(SU,"flush");async function hU(e,t){try{(await uh.openEnvironment(ch(e,t),t.toString())).resetReadTxn()}catch{}}a(hU,"resetReadTxn")});var hh=h((Cv,Sh)=>{"use strict";var TU=O(),{handleHDBError:fU}=Q(),mU=Pa(),AU=Pn(),RU=yo(),gU=Dd(),NU=gs(),pU=Po(),OU=Jd(),IU=nS(),CU=Lr(),bU=lS(),LU=pS(),yU=wS(),UU=DS(),wU=GS(),MU=kS(),DU=XS(),PU=Bo(),HU=eh(),BU=ah(),GU=_h(),dh=lh(),Hi=class extends mU{async searchByConditions(t){return bU(t)}async getDataByHash(t){return await pU(t)}async searchByHash(t){return await OU(t)}async getDataByValue(t,r){return await IU(t,r)}async searchByValue(t){return await CU(t)}async createSchema(t){return await gU(t)}async dropSchema(t){return await LU(t)}async createTable(t,r){return await yU(t,r)}async dropTable(t){return await PU(t)}async createAttribute(t){return await AU(t)}async createRecords(t){return await RU(t)}async updateRecords(t){return await UU(t)}async upsertRecords(t){try{return await wU(t)}catch(r){throw fU(r,null,null,TU.ERR,r)}}async deleteRecords(t){return await NU(t)}async deleteRecordsBefore(t){return await MU(t)}async dropAttribute(t){return await HU(t)}async deleteAuditLogsBefore(t){return await DU(t)}async readAuditLog(t){return await BU(t)}writeTransaction(t,r,s){return GU.writeTransaction(t,r,s)}flush(t,r){return dh.flush(t,r)}resetReadTxn(t,r){return dh.resetReadTxn(t,r)}};a(Hi,"LMDBBridge");Sh.exports=Hi});var Qt=h((Lv,fh)=>{"use strict";var vU=hh(),FU=Pa(),qU=J();qU.initSync();var Th;function xU(){return Th instanceof FU?Th:new vU}a(xU,"getBridge");fh.exports=xU()});var Fi=h((Uv,Rh)=>{"use strict";var Gi=Da(),Ge=p(),VU=require("util"),vi=Qt(),kU=ii(),Ko=O(),{handleHDBError:wt,hdb_errors:YU}=Q(),{HTTP_STATUS_CODES:er}=YU,$U=VU.promisify(kU.getTableSchema),KU="updated",mh="inserted",Ah="upserted";Rh.exports={insert:QU,update:JU,upsert:XU,validation:WU,flush:ZU};async function WU(e){if(Ge.isEmpty(e))throw new Error("invalid update parameters defined.");if(Ge.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Ge.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await $U(e.schema,e.table),r=Gi(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(_=>{if(o&&Ge.isEmptyOrZeroLength(_[s]))throw Ko.error("a valid hash attribute must be provided with update record:",_),new Error("a valid hash attribute must be provided with update record");if(!Ge.isEmptyOrZeroLength(_[s])&&(_[s]==="null"||_[s]==="undefined"))throw Ko.error(`a valid hash value must be provided with ${e.operation} record:`,_),new Error(`"${_[s]}" is not a valid hash attribute value`);!Ge.isEmpty(_[s])&&_[s]!==""&&n.has(Ge.autoCast(_[s]))&&(_.skip=!0),n.add(Ge.autoCast(_[s]));for(let c in _)i[c]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(WU,"validation");async function QU(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Gi(e);if(t)throw wt(new Error,t.message,er.BAD_REQUEST);let r=Ge.checkSchemaTableExist(e.schema,e.table);if(r)throw wt(new Error,r,er.BAD_REQUEST);let s=await vi.createRecords(e);return Bi(mh,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(QU,"insertData");async function JU(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Gi(e);if(t)throw wt(new Error,t.message,er.BAD_REQUEST);let r=Ge.checkSchemaTableExist(e.schema,e.table);if(r)throw wt(new Error,r,er.BAD_REQUEST);let s=await vi.updateRecords(e);return Ge.isEmpty(s.existing_rows)?Bi(KU,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Bi(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(JU,"updateData");async function XU(e){if(e.operation!=="upsert")throw wt(new Error,"invalid operation, must be upsert",er.INTERNAL_SERVER_ERROR);let t=Gi(e);if(t)throw wt(new Error,t.message,er.BAD_REQUEST);let r=Ge.checkSchemaTableExist(e.schema,e.table);if(r)throw wt(new Error,r,er.BAD_REQUEST);try{let s=await vi.upsertRecords(e);return Bi(Ah,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw wt(s,null,null,Ko.ERR,n)}}a(XU,"upsertData");function Bi(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===mh?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===Ah?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Bi,"returnObject");function ZU(e){return vi.flush(e.schema,e.table)}a(ZU,"flush")});var Oh=h((Mv,ph)=>{var zU=at(),Wo=require("joi"),{hdb_schema_table:gh}=Er(),Nh={schema:gh,table:gh},jU={date:Wo.date().iso().required()},ew={timestamp:Wo.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};ph.exports=function(e,t){let r=t==="timestamp"?{...Nh,...ew}:{...Nh,...jU},s=Wo.object(r);return zU.validateBySchema(e,s)}});var Lh=h((Dv,bh)=>{var tw=at(),Ih=require("joi"),{hdb_schema_table:Ch}=Er(),rw=Ih.object({schema:Ch,table:Ch,hash_values:Ih.array().required()});bh.exports=function(e){return tw.validateBySchema(e,rw)}});var Uh=h((Pv,yh)=>{"use strict";var qi=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(qi,"InsertObject");var xi=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(xi,"NoSQLSeachObject");var Vi=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(Vi,"DeleteResponseObject");yh.exports={InsertObject:qi,NoSQLSeachObject:xi,DeleteResponseObject:Vi}});var Bh=h((Bv,Hh)=>{"use strict";var Mh=Oh(),sw=Lh(),ki=p(),wh=require("moment"),Dh=O(),{promisify:nw,callbackify:iw}=require("util"),tr=f(),aw=ii(),Qo=nw(aw.getTableSchema),Jo=Qt(),{DeleteResponseObject:ow}=Uh(),{handleHDBError:Mt,hdb_errors:_w}=Q(),{HDB_ERROR_MSGS:Yi,HTTP_STATUS_CODES:Dt}=_w,cw="records successfully deleted",uw=iw(Ph);Hh.exports={delete:uw,deleteRecord:Ph,deleteFilesBefore:Ew,deleteAuditLogsBefore:lw};async function Ew(e){let t=Mh(e,"date");if(t)throw Mt(t,t.message,Dt.BAD_REQUEST,void 0,void 0,!0);if(!wh(e.date,wh.ISO_8601).isValid())throw Mt(new Error,Yi.INVALID_DATE,Dt.BAD_REQUEST,tr.LOG_LEVELS.ERROR,Yi.INVALID_DATE,!0);let s=ki.checkSchemaTableExist(e.schema,e.table);if(s)throw Mt(new Error,s,Dt.NOT_FOUND,tr.LOG_LEVELS.ERROR,s,!0);let n=await Jo.deleteRecordsBefore(e);if(await Qo(e.schema,e.table),Dh.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(Ew,"deleteFilesBefore");async function lw(e){let t=Mh(e,"timestamp");if(t)throw Mt(t,t.message,Dt.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Mt(new Error,Yi.INVALID_VALUE("Timestamp"),Dt.BAD_REQUEST,tr.LOG_LEVELS.ERROR,Yi.INVALID_VALUE("Timestamp"),!0);let r=ki.checkSchemaTableExist(e.schema,e.table);if(r)throw Mt(new Error,r,Dt.NOT_FOUND,tr.LOG_LEVELS.ERROR,r,!0);let s=await Jo.deleteAuditLogsBefore(e);return await Qo(e.schema,e.table),Dh.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(lw,"deleteAuditLogsBefore");async function Ph(e){let t=sw(e);if(t)throw Mt(t,t.message,Dt.BAD_REQUEST,void 0,void 0,!0);let r=ki.checkSchemaTableExist(e.schema,e.table);if(r)throw Mt(new Error,r,Dt.NOT_FOUND,tr.LOG_LEVELS.ERROR,r,!0);try{await Qo(e.schema,e.table);let s=await Jo.deleteRecords(e);return ki.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${cw}`),s}catch(s){if(s.message===tr.SEARCH_NOT_FOUND_MESSAGE){let n=new ow;return n.message=tr.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(Ph,"deleteRecord")});var vh=h((vv,Gh)=>{var Xo=at(),ce={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 dw(e){return ce.password.presence=!0,ce.username.presence=!0,ce.role.presence=!0,ce.active.presence=!0,Xo.validateObject(e,ce)}a(dw,"addUserValidation");function Sw(e){return ce.password.presence=!1,ce.username.presence=!0,ce.role.presence=!1,ce.active.presence=!1,Xo.validateObject(e,ce)}a(Sw,"alterUserValidation");function hw(e){return ce.password.presence=!1,ce.username.presence=!0,ce.role.presence=!1,ce.active.presence=!1,Xo.validateObject(e,ce)}a(hw,"dropUserValidation");Gh.exports={addUserValidation:dw,alterUserValidation:Sw,dropUserValidation:hw}});var Nr=h((xv,jh)=>{"use strict";var kh="username is required",Yh="nothing to update, must supply active, role or password to update",$h="password cannot be an empty string",Kh="If role is specified, it cannot be empty.",Wh="active must be true or false";jh.exports={addUser:pw,alterUser:Ow,dropUser:Cw,userInfo:bw,listUsers:Ki,listUsersExternal:Lw,setUsersToGlobal:Cs,findAndValidateUser:ww,getClusterUser:Mw,USERNAME_REQUIRED:kh,ALTERUSER_NOTHING_TO_UPDATE:Yh,EMPTY_PASSWORD:$h,EMPTY_ROLE:Kh,ACTIVE_BOOLEAN:Wh};var Qh=Fi(),Tw=Bh(),zo=xn(),Jh=vh(),Xh=Zn(),jo=ci(),Le=p(),Zh=require("validate.js"),C=O(),{promisify:e_}=require("util"),t_=ds(),Fh=f(),qh=it(),fw=$r(),qv=J(),mw=kn(),Aw=$t(),{handleHDBError:je,hdb_errors:Rw}=Q(),{HTTP_STATUS_CODES:et,AUTHENTICATION_ERROR_MSGS:Zo,HDB_ERROR_MSGS:Ur}=Rw,{UserEventMsg:r_}=gr(),xh=require("lodash"),zh={username:!0,active:!0,role:!0,password:!0},Vh=new Map,$i=e_(Xh.searchByValue),gw=e_(Xh.searchByHash),Nw=e_(Tw.delete);async function pw(e){let t=Zh.cleanAttributes(e,zh),r=Jh.addUserValidation(t);if(r)throw je(new Error,r.message,et.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 $i(s),n=n&&Array.from(n)}catch(c){throw C.error("There was an error searching for a role in add user"),C.error(c),c}if(!n||n.length<1)throw je(new Error,Ur.ROLE_NAME_NOT_FOUND(t.role),et.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw je(new Error,Ur.DUP_ROLES_FOUND(t.role),et.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=t_.encrypt(t.password)),t.password=zo.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Qh.insert(i)}catch(c){throw C.error("There was an error searching for a user."),C.error(c),c}C.debug(o);try{await Cs()}catch(c){throw C.error("Got an error setting users to global"),C.error(c),c}if(o.skipped_hashes.length===1)throw je(new Error,Ur.USER_ALREADY_EXISTS(t.username),et.CONFLICT,void 0,void 0,!0);let _=Object.assign({},t);return _.role=n[0],jo.signalUserChange(new r_(process.pid)),`${_.username} successfully added`}a(pw,"addUser");async function Ow(e){let t=Zh.cleanAttributes(e,zh);if(Le.isEmptyOrZeroLength(t.username))throw new Error(kh);if(Le.isEmptyOrZeroLength(t.password)&&Le.isEmptyOrZeroLength(t.role)&&Le.isEmptyOrZeroLength(t.active))throw new Error(Yh);if(!Le.isEmpty(t.password)&&Le.isEmptyOrZeroLength(t.password.trim()))throw new Error($h);if(!Le.isEmpty(t.active)&&!Le.isBoolean(t.active))throw new Error(Wh);let r=Iw(t.username);if(!Le.isEmpty(t.password)&&!Le.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=t_.encrypt(t.password)),t.password=zo.hash(t.password)),t.role==="")throw new Error(Kh);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 $i(i)||[])}catch(_){throw C.error("Got an error searching for a role."),C.error(_),_}if(!o||o.length===0){let _=Ur.ALTER_USER_ROLE_NOT_FOUND(t.role);throw C.error(_),je(new Error,_,et.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let _=Ur.ALTER_USER_DUP_ROLES(t.role);throw C.error(_),je(new Error,_,et.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 Qh.update(s)}catch(i){throw C.error("Error during update."),C.error(i),i}try{await Cs()}catch(i){throw C.error("Got an error setting users to global"),C.error(i),i}return jo.signalUserChange(new r_(process.pid)),n}a(Ow,"alterUser");function Iw(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(Iw,"isClusterUser");async function Cw(e){try{let t=Jh.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Le.isEmpty(global.hdb_users.get(e.username)))throw je(new Error,Ur.USER_NOT_EXIST(e.username),et.NOT_FOUND,void 0,void 0,!0);let s;try{s=await Nw(r)}catch(n){throw C.error("Got an error deleting a user."),C.error(n),n}C.debug(s);try{await Cs()}catch(n){throw C.error("Got an error setting users to global."),C.error(n),n}return jo.signalUserChange(new r_(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(Cw,"dropUser");async function bw(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 gw(r)}catch(n){throw C.error("Got an error searching for a role."),C.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw C.error(r),r}return t}a(bw,"userInfo");async function Lw(){let e;try{e=await Ki()}catch(t){throw C.error("Got an error listing users."),C.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(Lw,"listUsersExternal");async function Ki(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await $i(e)}catch(o){throw C.error("Got an error searching for roles."),C.error(o),o}let r={};for(let o of t)r[o.id]=xh.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 $i(s)}catch(o){throw C.error("Got an error searching for users."),C.error(o),o}let i=new Map;for(let o of n)o=xh.cloneDeep(o),o.role=r[o.role],yw(o.role),i.set(o.username,o);return(await mw.getLicense()).enterprise?i:Uw(Array.from(i.values()))}catch(e){throw C.error("got an error listing users"),C.error(e),Le.errorizeMessage(e)}return null}a(Ki,"listUsers");function yw(e){try{if(!e){C.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(Aw)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){C.error("Got an error trying to set system permissions."),C.error(t)}}a(yw,"appendSystemTablesToRole");function Uw(e){try{if(C.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?(C.warn("No roles found with active users."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return C.error("error filtering users."),C.error(t),new Map}}a(Uw,"nonEnterpriseFilter");async function Cs(){try{let e=await Ki();global.hdb_users=e}catch(e){throw C.error(e),e}}a(Cs,"setUsersToGlobal");async function ww(e,t,r=!0){global.hdb_users||await Cs();let s=global.hdb_users.get(e);if(!s)throw je(new Error,Zo.GENERIC_AUTH_FAIL,et.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw je(new Error,Zo.USER_INACTIVE,et.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(Vh.get(t)===s.password)return n;if(zo.validate(s.password,t))Vh.set(t,s.password);else throw je(new Error,Zo.GENERIC_AUTH_FAIL,et.UNAUTHORIZED,void 0,void 0,!0)}return n}a(ww,"findAndValidateUser");async function Mw(){let e=await Ki(),t=fw.getConfigFromFile(Fh.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Le.isEmpty(r)&&r?.role?.role===Fh.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=t_.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+qh.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+qh.SERVER_SUFFIX.ADMIN,r}a(Mw,"getClusterUser")});var tT=h((kv,eT)=>{"use strict";var Dw=Qt();eT.exports={writeTransaction:Pw};function Pw(e,t,r){return Dw.writeTransaction(e,t,r)}a(Pw,"writeTransaction")});var s_=h(($v,Hw)=>{Hw.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 h_=h((eF,AT)=>{"use strict";var ee=J();ee.initSync();var Bw=require("fs-extra"),Gw=require("semver"),ws=require("path"),{monotonicFactory:vw}=require("ulidx"),__=vw(),Fw=require("util"),sT=require("child_process"),qw=Fw.promisify(sT.exec),xw=sT.spawn,M=it(),G=f(),Wi=p(),Pt=O(),Qi=ds(),Vw=tT(),bs=$r(),{encode:a_,decode:c_}=require("msgpackr"),{isEmpty:rr}=Wi,nT=Nr(),iT=12e10,{connect:kw,StorageType:aT,RetentionPolicy:oT,AckPolicy:u_,DeliverPolicy:Ms,DiscardPolicy:Yw,NatsConnection:Kv,JetStreamManager:Wv,JetStreamClient:Qv,StringCodec:Jv,JSONCodec:$w,createInbox:E_,StreamSource:Xv,headers:Kw,toJsMsg:_T,nuid:Zv,JetStreamOptions:zv,ErrorCode:rT,nanos:jv}=require("nats"),{PACKAGE_ROOT:Ww}=f(),Qw=s_(),cT=$w(),Jw="clustering",Xw=Qw.engines[M.NATS_SERVER_NAME],Zw=ws.join(Ww,"dependencies"),o_=ws.join(Zw,`${process.platform}-${process.arch}`,M.NATS_BINARY_NAME),n_,i_,Ls,ys,Us,Ke;AT.exports={runCommand:uT,checkNATSServerInstalled:zw,createConnection:l_,getConnection:Ji,getJetStreamManager:Ds,getJetStream:ET,getNATSReferences:ye,getServerList:eM,createLocalStream:d_,listStreams:lT,deleteLocalStream:tM,getServerConfig:Ps,listRemoteStreams:rM,viewStream:sM,viewStreamIterator:nM,publishToStream:iM,createWorkQueueStream:aM,addSourceToWorkStream:ST,request:oM,removeSourceFromWorkStream:TT,reloadNATS:S_,reloadNATSHub:_M,reloadNATSLeaf:cM,extractServerName:hT,requestErrorHandler:uM,updateWorkStream:EM,createLocalTableStream:fT,createTableStreams:lM,purgeTableStream:mT,purgeSchemaTableStreams:dM,getStreamInfo:SM,updateLocalStreams:TM,closeConnection:jw,getJsmServerName:Hs,addNatsMsgHeader:dT};async function uT(e,t=void 0){let{stdout:r,stderr:s}=await qw(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
6
6
|
`,""));return r.replace(`
|
|
7
|
-
`,"")}a(cT,"runCommand");async function Jw(){try{await Dw.access(o_)}catch{return!1}let e=await cT(`${o_} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Pw.eq(t,Ww)}a(Jw,"checkNATSServerInstalled");async function l_(e,t,r,s=!0,n="127.0.0.1"){return qw({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:ee.get(G.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:ee.get(G.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:ee.get(G.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}a(l_,"createConnection");async function Xw(){Ke&&(await Ke.drain(),Ke=void 0)}a(Xw,"closeConnection");async function Ji(){if(!Ke){let e=await sT.getClusterUser();if(tr(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=ee.get(G.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);Ke=await l_(t,e.username,e.decrypt_hash)}return Ke}a(Ji,"getConnection");async function Ds(){if(ys)return ys;tr(Ke)&&await Ji();let{domain:e}=Ps(G.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(tr(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ys=await Ke.jetstreamManager({domain:e}),ys}a(Ds,"getJetStreamManager");async function uT(){if(Us)return Us;tr(Ke)&&await Ji();let{domain:e}=Ps(G.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(tr(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Us=Ke.jetstream({domain:e}),Us}a(uT,"getJetStream");async function ye(){let e=Ke||await Ji(),t=ys||await Ds(),r=Us||await uT();return{connection:e,jsm:t,js:r}}a(ye,"getNATSReferences");async function Zw(e){let t=ee.get(G.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await sT.getClusterUser(),n=await l_(t,r,s),i=E_(),o=n.subscribe(i),_=[],c,u=(async()=>{for await(let E of o){let l=_T.decode(E.data);l.response_time=Date.now()-c,_.push(l)}})();return c=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 Wi.async_set_timeout(e),await o.drain(),await n.close(),await u,_}a(Zw,"getServerList");async function d_(e,t){let{jsm:r}=await ye(),s=ee.get(G.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=ee.get(G.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=ee.get(G.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:iT.File,retention:aT.Limits,subjects:t,discard:xw.Old,duplicate_window:nT,max_msgs:n,max_bytes:i,max_age:s})}a(d_,"createLocalStream");async function ET(){let{jsm:e}=await ye(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(ET,"listStreams");async function zw(e){let{jsm:t}=await ye();await t.streams.delete(e)}a(zw,"deleteLocalStream");async function jw(e){let{connection:t}=await ye(),r=[],s=E_(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(_T.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(jw,"listRemoteStreams");async function eM(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await ye(),i=__(),o=[],_={ack_policy:u_.None,durable_name:i,deliver_subject:i,deliver_policy:Ms.All};t&&(_.deliver_policy=Ms.StartTime,_.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,_);let c={timeout:2e3};r&&(c.max=r);let u=await n.subscribe(i,c);for await(let E of u){let l=oT(E),S=c_(l.data),d={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:S};l.headers&&(d.origin=l.headers.get(M.MSG_HEADERS.ORIGIN),d.nats_msg_id=l.headers.get(M.MSG_HEADERS.NATS_MSG_ID)),o.push(d),u.getPending()===1&&l.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),o}catch(c){if(await s.consumers.delete(e,i),c.code==="TIMEOUT")return o;throw c}}a(eM,"viewStream");async function*tM(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await ye(),i=__(),o={ack_policy:u_.None,durable_name:i,deliver_subject:i,deliver_policy:Ms.All};t&&(o.deliver_policy=Ms.StartTime,o.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,o);let _={timeout:2e3};r&&(_.max=r);let c=await n.subscribe(i,_);for await(let u of c){let E=oT(u),l=c_(E.data);l[0]||(l=[l]);for(let S of l){let d={nats_timestamp:E.info.timestampNanos,nats_sequence:E.info.streamSequence,entry:S};E.headers&&(d.origin=E.headers.get(M.MSG_HEADERS.ORIGIN),d.nats_msg_id=E.headers.get(M.MSG_HEADERS.NATS_MSG_ID)),yield d}c.getPending()===1&&E.info.pending===0&&c.stop()}await s.consumers.delete(e,i)}catch(_){if(await s.consumers.delete(e,i),_.code==="TIMEOUT")return[];throw _}}a(tM,"viewStreamIterator");async function rM(e,t,r,s){Pt.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s);let n=!0;ee.get(G.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)===!1&&r&&r.has(M.MSG_HEADERS.NATS_MSG_ID)&&(n=!1),r=lT(s,r);let{js:i}=await ye(),o=await Hs(),_=`${e}.${o}`;try{Pt.trace(`publishToStream publishing to subject: ${_}, data:`,s),n&&await i.publish(_,a_(s),{headers:r})}catch(c){if(c.code&&c.code.toString()==="503")Pt.trace(`publishToStream creating stream: ${t}`),await d_(t,[_]),n&&await i.publish(_,a_(s),{headers:r});else throw c}}a(rM,"publishToStream");function lT(e,t){t===void 0&&(t=kw());let r=ee.get(G.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(M.MSG_HEADERS.NATS_MSG_ID)){let s=Wi.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${__()}`;t.append(M.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(M.MSG_HEADERS.ORIGIN)||t.append(M.MSG_HEADERS.ORIGIN,r),t}a(lT,"addNatsMsgHeader");function Ps(e){e=e.toLowerCase();let t=ws.join(ee.get(G.CONFIG_PARAMS.ROOTPATH),Kw);if(e===G.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return tr(i_)&&(i_={port:bs.getConfigFromFile(G.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:bs.getConfigFromFile(G.CONFIG_PARAMS.CLUSTERING_NODENAME)+M.SERVER_SUFFIX.HUB,config_file:M.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:ws.join(t,M.PID_FILES.HUB),hdb_nats_path:t}),i_;if(e===G.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return tr(n_)&&(n_={port:bs.getConfigFromFile(G.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:bs.getConfigFromFile(G.CONFIG_PARAMS.CLUSTERING_NODENAME)+M.SERVER_SUFFIX.LEAF,config_file:M.NATS_CONFIG_FILES.LEAF_SERVER,domain:bs.getConfigFromFile(G.CONFIG_PARAMS.CLUSTERING_NODENAME)+M.SERVER_SUFFIX.LEAF,pid_file_path:ws.join(t,M.PID_FILES.LEAF),hdb_nats_path:t}),n_;Pt.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Ps,"getServerConfig");async function sM(e){let{jsm:t}=await ye(),r=await Hs();try{await t.streams.add({name:e.stream_name,storage:iT.File,retention:aT.Workqueue,duplicate_window:nT,subjects:[`${M.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:u_.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:Ms.All,max_ack_pending:1e4,deliver_group:e.deliver_group});else throw s}}a(sM,"createWorkQueueStream");async function dT(e,t,r){let{jsm:s}=await ye(),n=await s.streams.info(t),i=ST(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:_,table:c}=r,u=Qi.createNatsTableStreamName(_,c),E=i===e,l,S,d=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let g=0,y=n.config.sources.length;g<y;g++)if(l=n.config.sources[g],S=g,E&&l.name===u||!E&&l.name===u&&l.external&&l.external.api===`$JS.${e}.API`){d=!0;break}if(d===!0){if(l.opt_start_time===o)return;n.config.sources.splice(S,1),await s.streams.update(t,n.config)}let A={name:u,opt_start_time:o,filter_subject:`${M.SUBJECT_PREFIXES.TXN}.>`};E||(A.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(A),await s.streams.update(t,n.config)}a(dT,"addSourceToWorkStream");function ST(e){return e.split(".")[1]}a(ST,"extractServerName");async function hT(e,t,r){let{schema:s,table:n}=r,i=Qi.createNatsTableStreamName(s,n),{jsm:o}=await ye(),_=await o.streams.info(t);if(!Array.isArray(_.config.sources)||_.config.sources.length===0)return;let c=_.config.sources.length,u;for(;c--;)if(u=_.config.sources[c],u.name===i&&u.external.api===`$JS.${e}.API`){_.config.sources.splice(c,1);break}await o.streams.update(t,_.config)}a(hT,"removeSourceFromWorkStream");async function nM(e,t,r=2e3,s=E_()){if(!Wi.isObject(t))throw new Error("data param must be an object");let n=a_(t),{connection:i}=await ye(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let _=await i.request(e,n,o);return c_(_.data)}a(nM,"request");function S_(e){return new Promise(async(t,r)=>{let s=vw(o_,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(S_,"reloadNATS");async function iM(){let{pid_file_path:e}=Ps(G.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await S_(e)}a(iM,"reloadNATSHub");async function aM(){let{pid_file_path:e}=Ps(G.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await S_(e)}a(aM,"reloadNATSLeaf");function oM(e,t,r){let s;switch(e.code){case tT.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case tT.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(oM,"requestErrorHandler");async function _M(e,t){let r=t+M.SERVER_SUFFIX.LEAF;await Fw.writeTransaction(G.SYSTEM_SCHEMA_NAME,G.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await dT(r,M.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await hT(r,M.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(_M,"updateWorkStream");async function TT(e,t){let r=Qi.createNatsTableStreamName(e,t),s=await Hs(),n=lM(e,t,s);await d_(r,[n])}a(TT,"createLocalTableStream");async function cM(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await TT(s,n)}}a(cM,"createTableStreams");async function fT(e,t){if(ee.get(G.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Qi.createNatsTableStreamName(e,t),{jsm:s}=await ye();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Pt.warn(r);else throw r}}a(fT,"purgeTableStream");async function uM(e,t){if(ee.get(G.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await fT(e,t[r])}a(uM,"purgeSchemaTableStreams");async function EM(e){return(await Ds()).streams.info(e)}a(EM,"getStreamInfo");function lM(e,t,r){return`${M.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(lM,"createSubjectName");async function Hs(){if(Ls)return Ls;if(Ls=(await Ds())?.nc?.info?.server_name,Ls===void 0)throw new Error("Unable to get jetstream manager server name");return Ls}a(Hs,"getJsmServerName");async function dM(){let e=await Ds(),t=await Hs(),r=await ET();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=SM(s),_=i.split(".");if(!(_[_.length-1]===t&&!o)){if(n.name===M.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let u=`${M.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Pt.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}else if(n.name===M.WORK_QUEUE_CONSUMER_NAMES.stream_name){let u=`${M.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Pt.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u,await e.consumers.update(M.WORK_QUEUE_CONSUMER_NAMES.stream_name,M.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${M.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let u=i.split(".");u[u.length-1]=t;let E=u.join(".");Pt.trace(`Updating stream subject name from: ${i} to: ${E}`),n.subjects[0]=E}await e.streams.update(n.name,n)}}}a(dM,"updateLocalStreams");function SM(e){let{config:t}=e,r=!1;if(t.name===M.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===M.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=ee.get(G.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=ee.get(G.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=ee.get(G.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(SM,"updateStreamLimits")});var NT=h((jv,gT)=>{"use strict";var Bs=require("path"),ji=require("fs-extra"),hM=zc(),TM=tu(),fM=su(),mM=iu(),T_=Nr(),wr=p(),Te=$r(),zi=f(),Xi=it(),{CONFIG_PARAMS:Z}=zi,vs=O(),ea=J(),AT=ds(),f_=h_(),Gs="clustering",AM=1e4,RT=5;gT.exports={generateNatsConfig:RM,removeNatsConfig:gM};async function RM(e=!1,t=void 0){ea.initSync();let r=ea.get(Z.ROOTPATH),s=Bs.join(r,Gs,Xi.PID_FILES.HUB),n=Bs.join(r,Gs,Xi.PID_FILES.LEAF),i=Te.getConfigFromFile(Z.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Bs.join(r,Gs,Xi.NATS_CONFIG_FILES.HUB_SERVER),_=Bs.join(r,Gs,Xi.NATS_CONFIG_FILES.LEAF_SERVER),c=Te.getConfigFromFile(Z.CLUSTERING_TLS_CERTIFICATE),u=Te.getConfigFromFile(Z.CLUSTERING_TLS_PRIVATEKEY),E=Te.getConfigFromFile(Z.CLUSTERING_TLS_CERT_AUTH),l=Te.getConfigFromFile(Z.CLUSTERING_TLS_INSECURE),S=Te.getConfigFromFile(Z.CLUSTERING_TLS_VERIFY),d=Te.getConfigFromFile(Z.CLUSTERING_NODENAME),A=Te.getConfigFromFile(Z.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await f_.checkNATSServerInstalled()||ta("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let g=await T_.listUsers(),y=Te.getConfigFromFile(Z.CLUSTERING_USER),$=await T_.getClusterUser();(wr.isEmpty($)||$.active!==!0)&&ta(`Invalid cluster user '${y}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Zi(Z.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Zi(Z.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Zi(Z.CLUSTERING_HUBSERVER_NETWORK_PORT),await Zi(Z.CLUSTERING_LEAFSERVER_NETWORK_PORT));let x=[],v=[];for(let[Hr,ar]of g.entries())ar.role.role===zi.ROLE_TYPES_ENUM.CLUSTER_USER&&ar.active&&(x.push(new mM(ar.username,AT.decrypt(ar.hash))),v.push(new fM(ar.username,AT.decrypt(ar.hash))));let we=[],{hub_routes:vt}=Te.getClusteringRoutes();if(!wr.isEmptyOrZeroLength(vt))for(let Hr of vt)we.push(`tls://${$.sys_name_encoded}:${$.uri_encoded_d_hash}@${Hr.host}:${Hr.port}`);let ir=new hM(Te.getConfigFromFile(Z.CLUSTERING_HUBSERVER_NETWORK_PORT),d,s,c,u,E,l,S,A,Te.getConfigFromFile(Z.CLUSTERING_HUBSERVER_CLUSTER_NAME),Te.getConfigFromFile(Z.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),we,x,v);E==null&&(delete ir.tls.ca_file,delete ir.leafnodes.tls.ca_file),t=wr.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===zi.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await ji.writeJson(o,ir),vs.trace(`Hub server config written to ${o}`));let x_=`tls://${$.sys_name_encoded}:${$.uri_encoded_d_hash}@0.0.0.0:${A}`,V_=`tls://${$.uri_encoded_name}:${$.uri_encoded_d_hash}@0.0.0.0:${A}`,Aa=new TM(Te.getConfigFromFile(Z.CLUSTERING_LEAFSERVER_NETWORK_PORT),d,n,i,[x_],[V_],x,v,c,u,E,l);E==null&&delete Aa.tls.ca_file,(t===void 0||t===zi.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await ji.writeJson(_,Aa),vs.trace(`Leaf server config written to ${_}`))}a(RM,"generateNatsConfig");async function Zi(e){let t=ea.get(e);return wr.isEmpty(t)&&ta(`port undefined for '${e}'`),await wr.isPortTaken(t)&&ta(`'${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(Zi,"isPortAvailable");function ta(e){let t=`Error generating clustering config: ${e}`;vs.error(t),console.error(t),process.exit(1)}a(ta,"generateNatsConfigError");async function gM(e){let{port:t,config_file:r}=f_.getServerConfig(e),{username:s,decrypt_hash:n}=await T_.getClusterUser(),i=0,o=500;for(;i<RT;){try{let u=await f_.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){vs.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=RT)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 wr.async_set_timeout(o*i)}let _="0".repeat(AM),c=Bs.join(ea.get(Z.ROOTPATH),Gs,r);await ji.writeFile(c,_),await ji.remove(c),vs.notify(e,"started.")}a(gM,"removeNatsConfig")});var LT=h((tF,bT)=>{"use strict";var Ue=J(),NM=kn(),w=f(),Fs=it(),Tt=require("path"),{PACKAGE_ROOT:ra}=f(),pT=J(),Mr="/dev/null",pM=Tt.join(ra,"launchServiceScripts"),OT=Tt.join(ra,"utility/scripts"),OM=Tt.join(OT,w.HDB_RESTART_SCRIPT),IT=Tt.resolve(ra,"dependencies",`${process.platform}-${process.arch}`,Fs.NATS_BINARY_NAME);function CT(){let t=NM.licenseSearch().ram_allocation||w.RAM_ALLOCATION_ENUM.DEFAULT,r=w.MEM_SETTING_KEY+t;return{name:w.PROCESS_DESCRIPTORS.HDB,script:w.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0},node_args:r,cwd:ra}}a(CT,"generateMainServerConfig");var IM=9930;function CM(){Ue.initSync(!0);let e=Ue.get(w.CONFIG_PARAMS.ROOTPATH),t=Tt.join(e,"clustering",Fs.NATS_CONFIG_FILES.HUB_SERVER),r=Tt.join(Ue.get(w.HDB_SETTINGS_NAMES.LOG_PATH_KEY),w.LOG_NAMES.HDB),s=pT.get(w.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Fs.LOG_LEVEL_FLAGS[Ue.get(w.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:w.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==IM?"-"+s:""),script:IT,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Ue.get(w.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Mr,i.error_file=Mr),i}a(CM,"generateNatsHubServerConfig");var bM=9940;function LM(){Ue.initSync(!0);let e=Ue.get(w.CONFIG_PARAMS.ROOTPATH),t=Tt.join(e,"clustering",Fs.NATS_CONFIG_FILES.LEAF_SERVER),r=Tt.join(Ue.get(w.HDB_SETTINGS_NAMES.LOG_PATH_KEY),w.LOG_NAMES.HDB),s=pT.get(w.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Fs.LOG_LEVEL_FLAGS[Ue.get(w.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:w.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==bM?"-"+s:""),script:IT,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Ue.get(w.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Mr,i.error_file=Mr),i}a(LM,"generateNatsLeafServerConfig");function yM(){Ue.initSync();let e=Tt.join(Ue.get(w.CONFIG_PARAMS.LOGGING_ROOT),w.LOG_NAMES.HDB),t={name:w.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:w.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:pM,autorestart:!1};return Ue.get(w.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Mr,t.error_file=Mr),t}a(yM,"generateClusteringUpgradeV4ServiceConfig");function UM(){return{...{name:w.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.RESTART_HDB},instances:1,autorestart:!1,cwd:OT},script:OM}}a(UM,"generateRestart");function wM(){return{apps:[CT()]}}a(wM,"generateAllServiceConfigs");bT.exports={generateAllServiceConfigs:wM,generateMainServerConfig:CT,generateRestart:UM,generateNatsHubServerConfig:CM,generateNatsLeafServerConfig:LM,generateClusteringUpgradeV4ServiceConfig:yM}});var UT=h((sF,yT)=>{var MM=at(),DM={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};yT.exports=function(e){return MM.validateObject(e,DM)}});var MT=h((nF,wT)=>{"use strict";var PM=f().OPERATIONS_ENUM,sa=class{constructor(t,r,s,n=void 0){this.operation=PM.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(sa,"UpdateObject");wT.exports=sa});var PT=h((aF,DT)=>{"use strict";var HM={OPERATION:"operation",REFRESH:"refresh"},na=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(na,"JWTTokens");var ia=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(ia,"JWTRSAKeys");DT.exports={JWTTokens:na,TOKEN_TYPE_ENUM:HM,JWTRSAKeys:ia}});var FT=h((_F,vT)=>{"use strict";var xs=require("jsonwebtoken"),m_=require("fs-extra"),A_=p(),ve=f(),{handleHDBError:fe,hdb_errors:BM}=Q(),{HTTP_STATUS_CODES:me,AUTHENTICATION_ERROR_MSGS:Ae}=BM,qs=O(),HT=xn(),N_=Nr(),GM=Fi().update,vM=MT(),FM=ci(),{UserEventMsg:qM}=gr(),Ht=J();Ht.initSync();var R_=require("path"),{JWTTokens:xM,JWTRSAKeys:VM,TOKEN_TYPE_ENUM:aa}=PT(),kM=Ht.get(ve.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Ht.get(ve.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",YM=Ht.get(ve.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Ht.get(ve.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",oa="RS256",g_;vT.exports={createTokens:$M,validateOperationToken:WM,refreshOperationToken:KM,validateRefreshToken:GT};async function $M(e){if(A_.isEmpty(e)||typeof e!="object")throw fe(new Error,Ae.INVALID_AUTH_OBJECT,me.BAD_REQUEST,void 0,void 0,!0);if(A_.isEmpty(e.username))throw fe(new Error,Ae.USERNAME_REQUIRED,me.BAD_REQUEST,void 0,void 0,!0);if(A_.isEmpty(e.password))throw fe(new Error,Ae.PASSWORD_REQUIRED,me.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await N_.findAndValidateUser(e.username,e.password),!t)throw fe(new Error,Ae.INVALID_CREDENTIALS,me.UNAUTHORIZED,void 0,void 0,!0)}catch(S){throw qs.error(S),fe(new Error,Ae.INVALID_CREDENTIALS,me.UNAUTHORIZED,void 0,void 0,!0)}let r=await _a(),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 BT(i,r.private_key,r.passphrase),_=await xs.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:YM,algorithm:oa,subject:aa.REFRESH}),c=HT.hash(_),u=new vM(ve.SYSTEM_SCHEMA_NAME,ve.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:c}]),E,l;try{E=await GM(u)}catch(S){qs.error(S),l=S}if(l!==void 0||E.skipped_hashes.length>0)throw fe(new Error,Ae.REFRESH_TOKEN_SAVE_FAILED,me.INTERNAL_SERVER_ERROR);return FM.signalUserChange(new qM(process.pid)),new xM(o,_)}a($M,"createTokens");async function BT(e,t,r){return await xs.sign(e,{key:t,passphrase:r},{expiresIn:kM,algorithm:oa,subject:aa.OPERATION})}a(BT,"signOperationToken");async function _a(){if(g_===void 0)try{let e=R_.join(Ht.getHdbBasePath(),ve.LICENSE_KEY_DIR_NAME,ve.JWT_ENUM.JWT_PASSPHRASE_NAME),t=R_.join(Ht.getHdbBasePath(),ve.LICENSE_KEY_DIR_NAME,ve.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=R_.join(Ht.getHdbBasePath(),ve.LICENSE_KEY_DIR_NAME,ve.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await m_.readFile(e)).toString(),n=(await m_.readFile(t)).toString(),i=(await m_.readFile(r)).toString();g_=new VM(i,n,s)}catch(e){throw qs.error(e),fe(new Error,Ae.NO_ENCRYPTION_KEYS,me.INTERNAL_SERVER_ERROR)}return g_}a(_a,"getJWTRSAKeys");async function KM(e){if(!e)throw fe(new Error,Ae.INVALID_BODY,me.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw fe(new Error,Ae.REFRESH_TOKEN_REQUIRED,me.BAD_REQUEST,void 0,void 0,!0);await GT(e.refresh_token);let t=await _a(),r=await xs.decode(e.refresh_token);return{operation_token:await BT({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(KM,"refreshOperationToken");async function WM(e){try{let t=await _a(),r=await xs.verify(e,t.public_key,{algorithms:oa,subject:aa.OPERATION});return await N_.findAndValidateUser(r.username,void 0,!1)}catch(t){throw qs.warn(t),t.name&&t.name==="TokenExpiredError"?fe(new Error,Ae.TOKEN_EXPIRED,me.FORBIDDEN):fe(new Error,Ae.INVALID_TOKEN,me.UNAUTHORIZED)}}a(WM,"validateOperationToken");async function GT(e){let t;try{let r=await _a(),s=await xs.verify(e,r.public_key,{algorithms:oa,subject:aa.REFRESH});t=await N_.findAndValidateUser(s.username,void 0,!1)}catch(r){throw qs.warn(r),r.name&&r.name==="TokenExpiredError"?fe(new Error,Ae.TOKEN_EXPIRED,me.FORBIDDEN):fe(new Error,Ae.INVALID_TOKEN,me.UNAUTHORIZED)}if(!HT.validate(t.refresh_token,e))throw fe(new Error,Ae.INVALID_TOKEN,me.UNAUTHORIZED);return t}a(GT,"validateRefreshToken")});var kT=h((EF,VT)=>{"use strict";var QM=UT(),Dr=require("passport"),JM=require("passport-local").Strategy,XM=require("passport-http").BasicStrategy,ZM=require("util"),zM=Nr(),xT=ZM.callbackify(zM.findAndValidateUser),uF=Me(),jM=f(),qT=FT();Dr.use(new JM(function(e,t,r){xT(e,t,r)}));Dr.use(new XM(function(e,t,r){xT(e,t,r)}));Dr.serializeUser(function(e,t){t(null,e)});Dr.deserializeUser(function(e,t){t(null,e)});function eD(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,_){return o?r(o):_?r(null,_):r("User not found")}switch(a(i,"handleResponse"),s){case"Basic":Dr.authenticate("basic",{session:!1},(o,_)=>{i(o,_)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===jM.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?qT.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):qT.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Dr.authenticate("local",{session:!1},function(o,_){i(o,_)})(e,t,r);break}}a(eD,"authorize");function tD(e,t){let r=QM(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n||!n.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let _ in o)e.attributes.indexOf(o[_].attribute_name)>-1&&!o[_][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[_].attribute_name} `))}return t(null,s)}a(tD,"checkPermissions");VT.exports={authorize:eD,checkPermissions:tD}});var $T=h((dF,YT)=>{"use strict";var ca=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(ca,"Node");var ua=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(ua,"NodeSubscription");YT.exports={Node:ca,NodeSubscription:ua}});var WT=h((hF,KT)=>{"use strict";var rD=f().OPERATIONS_ENUM,Ea=class{constructor(t,r,s,n=void 0){this.operation=rD.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Ea,"UpsertObject");KT.exports=Ea});var JT=h((fF,QT)=>{"use strict";var la=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(la,"RemotePayloadObject");var da=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(da,"RemotePayloadSubscription");QT.exports={RemotePayloadObject:la,RemotePayloadSubscription:da}});var ZT=h((AF,XT)=>{"use strict";var Sa=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(Sa,"TableSizeObject");XT.exports=Sa});var jT=h((gF,zT)=>{"use strict";var sD=ZT(),nD=ne(),Pr=q(),iD=O(),{getSchemaPath:aD,getTransactionAuditStorePath:oD}=Y();zT.exports=_D;async function _D(e){let t=new sD;try{let r=aD(e.schema,e.name),s=await Pr.openEnvironment(r,e.name),n=Pr.statDBI(s,e.hash_attribute),i=oD(e.schema,e.name),o=await Pr.openEnvironment(i,e.name,!0),_=Pr.statDBI(o,nD.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),c=await Pr.environmentDataSize(r,e.name),u=await Pr.environmentDataSize(i,e.name);t.schema=e.schema,t.table=e.name,t.table_size=c,t.record_count=n.entryCount,t.transaction_log_size=u,t.transaction_log_record_count=_.entryCount}catch(r){iD.warn(`unable to stat table dbi due to ${r}`)}return t}a(_D,"lmdbGetTableSize")});var tf=h((pF,ef)=>{"use strict";var ha=class{constructor(t,r,s,n,i,o,_){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=_}};a(ha,"SystemInformationObject");ef.exports=ha});var M_=h((IF,nf)=>{"use strict";var ue=require("systeminformation"),rr=O(),cD=f(),uD=jT(),sf=ni(),{getThreadInfo:rf}=Kn(),ED=J();ED.initSync();var lD=tf(),{openEnvironment:dD}=q(),{getSchemaPath:SD}=Y(),Ta;nf.exports={getHDBProcessInfo:C_,getNetworkInfo:L_,getDiskInfo:b_,getMemoryInfo:I_,getCPUInfo:O_,getTimeInfo:p_,getSystemInformation:y_,systemInformation:hD,getTableSize:U_,getMetrics:w_};function p_(){return ue.time()}a(p_,"getTimeInfo");async function O_(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:_,socket:c,cache:u,...E}=await ue.cpu();E.cpu_speed=await ue.cpuCurrentSpeed();let{raw_currentload:l,raw_currentload_idle:S,raw_currentload_irq:d,raw_currentload_nice:A,raw_currentload_system:g,raw_currentload_user:y,cpus:$,...x}=await ue.currentLoad();return x.cpus=[],$.forEach(v=>{let{raw_load:we,raw_load_idle:vt,raw_load_irq:ir,raw_load_nice:x_,raw_load_system:V_,raw_load_user:Aa,...Hr}=v;x.cpus.push(Hr)}),E.current_load=x,E}catch(e){return rr.error(`error in getCPUInfo: ${e}`),{}}}a(O_,"getCPUInfo");async function I_(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await ue.mem();return Object.assign(n,process.memoryUsage())}catch(e){return rr.error(`error in getMemoryInfo: ${e}`),{}}}a(I_,"getMemoryInfo");async function C_(){let e={core:[],clustering:[]};try{return(await ue.processes()).list.forEach(r=>{r.params.includes(cD.HDB_PROC_NAME)||r.name.includes("harperdb")?e.core.push(r):r.name==="nats-server"&&e.clustering.push(r)}),e}catch(t){return rr.error(`error in getHDBProcessInfo: ${t}`),e}}a(C_,"getHDBProcessInfo");async function b_(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await ue.disksIO();e.io=i;let{rx_sec:o,tx_sec:_,wx_sec:c,...u}=await ue.fsStats();return e.read_write=u,e.size=await ue.fsSize(),e}catch(t){return rr.error(`error in getDiskInfo: ${t}`),e}}a(b_,"getDiskInfo");async function L_(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await ue.networkInterfaceDefault(),e.latency=await ue.inetChecksite("google.com"),(await ue.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:_,dnsSuffix:c,ieee8021xAuth:u,ieee8021xState:E,carrier_changes:l,...S}=s;e.interfaces.push(S)}),(await ue.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,..._}=s;e.stats.push(_)}),e}catch(t){return rr.error(`error in getNetworkInfo: ${t}`),e}}a(L_,"getNetworkInfo");async function y_(){if(Ta!==void 0)return Ta;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,..._}=await ue.osInfo();e=_;let c=await ue.versions("node, npm");return e.node_version=c.node,e.npm_version=c.npm,Ta=e,Ta}catch(t){return rr.error(`error in getSystemInformation: ${t}`),e}}a(y_,"getSystemInformation");async function U_(){let e=[],t=await sf.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await uD(s));return e}a(U_,"getTableSize");async function w_(){let e=await sf.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=SD(r,n),_=(await dD(i,n)).getStats();s[n]={puts:_.puts,deletes:_.deletes,txns:_.txns,pageFlushes:_.pageFlushes,writes:_.writes,pagesWritten:_.pagesWritten,timeDuringTxns:_.timeDuringTxns,timeStartTxns:_.timeStartTxns,timePageFlushes:_.timePageFlushes,timeSync:_.timeSync}}catch(i){rr.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(w_,"getMetrics");async function hD(e){let t=new lD;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await y_(),t.time=p_(),t.cpu=await O_(),t.memory=await I_(),t.disk=await b_(),t.network=await L_(),t.harperdb_processes=await C_(),t.table_size=await U_(),t.metrics=await w_(),t.threads=await rf(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await y_();break;case"time":t.time=p_();break;case"cpu":t.cpu=await O_();break;case"memory":t.memory=await I_();break;case"disk":t.disk=await b_();break;case"network":t.network=await L_();break;case"harperdb_processes":t.harperdb_processes=await C_();break;case"table_size":t.table_size=await U_();break;case"database_metrics":t.metrics=await w_();break;case"threads":t.threads=await rf();break;default:break}return t}a(hD,"systemInformation")});var of=h((yF,af)=>{"use strict";var bF=require("fs-extra"),LF=O();af.exports={version:TD,printVersion:mD,nodeVersion:fD};var Bt=s_();function TD(){if(Bt)return Bt.version}a(TD,"version");function fD(){if(Bt&&Bt.engines&&Bt.engines["preferred-node"])return Bt.engines["preferred-node"]}a(fD,"nodeVersion");function mD(){Bt&&console.log(`HarperDB Version ${Bt.version}`)}a(mD,"printVersion")});var lf=h((DF,Ef)=>{"use strict";var AD=Fi(),D_=p(),P_=require("util"),sr=f(),_f=J();_f.initSync();var RD=kT(),cf=Zn(),{Node:wF,NodeSubscription:MF}=$T(),gD=Ai(),ND=WT(),{RemotePayloadObject:pD,RemotePayloadSubscription:OD}=JT(),{handleHDBError:ID,hdb_errors:CD}=Q(),{HTTP_STATUS_CODES:bD,HDB_ERROR_MSGS:LD}=CD,yD=dt(),UD=M_(),wD=of(),MD=P_.promisify(RD.authorize),DD=P_.promisify(cf.searchByHash),PD=P_.promisify(cf.searchByValue);Ef.exports={authHeaderToUser:HD,isEmpty:BD,getNodeRecord:GD,upsertNodeRecord:vD,buildNodePayloads:FD,checkClusteringEnabled:qD,getAllNodeRecords:xD,getSystemInfo:VD,reverseSubscription:uf};async function HD(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await MD(t,null),e}a(HD,"authHeaderToUser");function BD(e){return e==null}a(BD,"isEmpty");async function GD(e){let t=new gD(sr.SYSTEM_SCHEMA_NAME,sr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return DD(t)}a(GD,"getNodeRecord");async function vD(e){let t=new ND(sr.SYSTEM_SCHEMA_NAME,sr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return AD.upsert(t)}a(vD,"upsertNodeRecord");function uf(e){if(D_.isEmpty(e.subscribe)||D_.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(uf,"reverseSubscription");function FD(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let _=e[i],{schema:c,table:u}=_,E=D_.getTableHashAttribute(c,u),{subscribe:l,publish:S}=uf(_),d=new OD(c,u,E,S,l,_.start_time);n.push(d)}return new pD(r,t,n,s)}a(FD,"buildNodePayloads");function qD(){if(!_f.get(sr.CONFIG_PARAMS.CLUSTERING_ENABLED))throw ID(new Error,LD.CLUSTERING_NOT_ENABLED,bD.BAD_REQUEST,void 0,void 0,!0)}a(qD,"checkClusteringEnabled");async function xD(){let e=new yD(sr.SYSTEM_SCHEMA_NAME,sr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await PD(e))}a(xD,"getAllNodeRecords");async function VD(){let e=await UD.getSystemInformation();return{hdb_version:wD.version(),node_version:e.node_version,platform:e.platform}}a(VD,"getSystemInfo")});var bf=h((xF,Cf)=>{"use strict";var P=f(),Sf=p(),Vs=NT(),fa=h_(),tt=it(),H=require("pm2"),Gt=LT(),ma=J(),ft=O(),kD=lf(),{startWorker:H_,onMessageFromWorkers:YD}=Kn(),HF=M_(),$D=require("util"),hf=require("child_process"),{execFile:KD}=hf,BF=$D.promisify(hf.exec),GF=require("systeminformation");Cf.exports={enterPM2Mode:WD,start:nr,stop:B_,reload:Tf,restart:ff,list:G_,describe:v_,connect:mt,kill:zD,startAllServices:jD,startService:F_,getUniqueServicesList:Af,restartAllServices:eP,isServiceRegistered:Rf,reloadStopStart:gf,restartHdb:mf,deleteProcess:XD,startClusteringProcesses:Of,startClusteringThreads:If,isHdbRestartRunning:ZD,isClusteringRunning:rP,stopClustering:tP,reloadClustering:sP};var{PACKAGE_ROOT:vF}=f(),FF=f(),{loggerWithTag:qF}=ft,ks=!1;YD(e=>{e.type==="restart"&&ma.initSync(!0)});function WD(){ks=!0}a(WD,"enterPM2Mode");function mt(){return new Promise((e,t)=>{H.connect((r,s)=>{ft.setupConsoleLogging(),r&&t(r),e(s)})})}a(mt,"connect");var Re,QD=10,df;function nr(e){if(ks)return JD(e);let t=KD(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=Re.indexOf(t);i>-1&&Re.splice(i,1),!df&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<QD&&nr(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=ma.get(P.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,_,c=0,u;for(;_=o.exec(n);){if(_.index&&tt.LOG_LEVEL_HIERARCHY[i]>=tt.LOG_LEVEL_HIERARCHY[u||"info"]){let S=u===tt.LOG_LEVELS.ERR||u===tt.LOG_LEVELS.WRN?ft.OUTPUTS.STDERR:ft.OUTPUTS.STDOUT;ft.logCustomLevel(u||"info",S,r,n.slice(c,_.index).trim())}let[E,l]=_;c=_.index+E.length,u=tt.LOG_LEVELS[l]}if(tt.LOG_LEVEL_HIERARCHY[i]>=tt.LOG_LEVEL_HIERARCHY[u||"info"]){let E=u===tt.LOG_LEVELS.ERR||u===tt.LOG_LEVELS.WRN?ft.OUTPUTS.STDERR:ft.OUTPUTS.STDOUT;ft.logCustomLevel(u||"info",E,r,n.slice(c).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!Re){Re=[];let n=a(()=>{df=!0,Re&&(Re.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)}Re.push(t)}a(nr,"start");function JD(e){return new Promise(async(t,r)=>{try{await mt()}catch(s){r(s)}H.start(e,(s,n)=>{s&&(H.disconnect(),r(s)),H.disconnect(),t(n)})})}a(JD,"startWithPM2");function B_(e){if(!ks){for(let t of Re||[])t.name===e&&(Re.splice(Re.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await mt()}catch(s){r(s)}H.stop(e,async(s,n)=>{s&&(H.disconnect(),r(s)),H.delete(e,(i,o)=>{i&&(H.disconnect(),r(s)),H.disconnect(),t(o)})})})}a(B_,"stop");function Tf(e){return new Promise(async(t,r)=>{try{await mt()}catch(s){r(s)}H.reload(e,(s,n)=>{s&&(H.disconnect(),r(s)),H.disconnect(),t(n)})})}a(Tf,"reload");function ff(e){if(!ks)for(let t of Re||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await mt()}catch(s){r(s)}H.restart(e,(s,n)=>{H.disconnect(),t(n)})})}a(ff,"restart");function XD(e){return new Promise(async(t,r)=>{try{await mt()}catch(s){r(s)}H.delete(e,(s,n)=>{s&&(H.disconnect(),r(s)),H.disconnect(),t(n)})})}a(XD,"deleteProcess");async function mf(){await nr(Gt.generateRestart())}a(mf,"restartHdb");async function ZD(){let e=await G_();for(let t in e)if(e[t].name===P.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(ZD,"isHdbRestartRunning");function G_(){return new Promise(async(e,t)=>{try{await mt()}catch(r){t(r)}H.list((r,s)=>{r&&(H.disconnect(),t(r)),H.disconnect(),e(s)})})}a(G_,"list");function v_(e){return new Promise(async(t,r)=>{try{await mt()}catch(s){r(s)}H.describe(e,(s,n)=>{s&&(H.disconnect(),r(s)),H.disconnect(),t(n)})})}a(v_,"describe");function zD(){if(!ks){for(let e of Re||[])e.kill();Re=[];return}return new Promise(async(e,t)=>{try{await mt()}catch(r){t(r)}H.killDaemon((r,s)=>{r&&(H.disconnect(),t(r)),H.disconnect(),e(s)})})}a(zD,"kill");async function jD(){try{await Of(),await If(),await nr(Gt.generateAllServiceConfigs())}catch(e){throw H.disconnect(),e}}a(jD,"startAllServices");async function F_(e){try{let t;switch(e=e.toLowerCase(),e){case P.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=Gt.generateMainServerConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=Gt.generateNatsIngestServiceConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=Gt.generateNatsReplyServiceConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=Gt.generateNatsHubServerConfig(),await nr(t),await Vs.removeNatsConfig(e);return;case P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=Gt.generateNatsLeafServerConfig(),await nr(t),await Vs.removeNatsConfig(e);return;case P.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=Gt.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await nr(t)}catch(t){throw H.disconnect(),t}}a(F_,"startService");async function Af(){try{let e=await G_(),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 H.disconnect(),e}}a(Af,"getUniqueServicesList");async function eP(e=[]){try{let t=!1,r=await Af();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===P.PROCESS_DESCRIPTORS.HDB?t=!0:await ff(o))}t&&await gf(P.PROCESS_DESCRIPTORS.HDB)}catch(t){throw H.disconnect(),t}}a(eP,"restartAllServices");async function Rf(e){return Re?.find(t=>t.name===e)?!0:!Sf.isEmptyOrZeroLength(await v_(e))}a(Rf,"isServiceRegistered");async function gf(e){let t=e===P.PROCESS_DESCRIPTORS.HDB?ma.get(P.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):ma.get(P.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await v_(e),s=Sf.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await B_(e),await F_(e)):e===P.PROCESS_DESCRIPTORS.HDB?await mf():await Tf(e)}a(gf,"reloadStopStart");var Nf,pf;async function Of(){for(let e in P.CLUSTERING_PROCESSES){let t=P.CLUSTERING_PROCESSES[e];await F_(t)}}a(Of,"startClusteringProcesses");async function If(){Nf=H_(P.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,{name:P.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE}),pf=H_(P.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:P.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await fa.createWorkQueueStream(tt.WORK_QUEUE_CONSUMER_NAMES),await fa.updateLocalStreams();let e=await kD.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===P.PRE_4_0_0_VERSION){ft.info("Starting clustering upgrade 4.0.0 process"),H_(P.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(If,"startClusteringThreads");async function tP(){for(let e in P.CLUSTERING_PROCESSES)if(e===P.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)await Nf.terminate();else if(e===P.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await pf.terminate();else{let t=P.CLUSTERING_PROCESSES[e];await B_(t)}}a(tP,"stopClustering");async function rP(){for(let e in P.CLUSTERING_PROCESSES){let t=P.CLUSTERING_PROCESSES[e];if(await Rf(t)===!1)return!1}return!0}a(rP,"isClusteringRunning");async function sP(){await Vs.generateNatsConfig(!0),await fa.reloadNATSHub(),await fa.reloadNATSLeaf(),await Vs.removeNatsConfig(P.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Vs.removeNatsConfig(P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(sP,"reloadClustering")});var q_=bf(),Lf=f();a(async function(){try{let t=await q_.describe(Lf.PROCESS_DESCRIPTORS.HDB);for(let r of t)await q_.reload(r.pm_id);await q_.deleteProcess(Lf.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}},"restartHdb")();
|
|
7
|
+
`,"")}a(uT,"runCommand");async function zw(){try{await Bw.access(o_)}catch{return!1}let e=await uT(`${o_} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Gw.eq(t,Xw)}a(zw,"checkNATSServerInstalled");async function l_(e,t,r,s=!0,n="127.0.0.1"){return kw({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:ee.get(G.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:ee.get(G.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:ee.get(G.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}a(l_,"createConnection");async function jw(){Ke&&(await Ke.drain(),Ke=void 0)}a(jw,"closeConnection");async function Ji(){if(!Ke){let e=await nT.getClusterUser();if(rr(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=ee.get(G.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);Ke=await l_(t,e.username,e.decrypt_hash)}return Ke}a(Ji,"getConnection");async function Ds(){if(ys)return ys;rr(Ke)&&await Ji();let{domain:e}=Ps(G.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(rr(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ys=await Ke.jetstreamManager({domain:e}),ys}a(Ds,"getJetStreamManager");async function ET(){if(Us)return Us;rr(Ke)&&await Ji();let{domain:e}=Ps(G.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(rr(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Us=Ke.jetstream({domain:e}),Us}a(ET,"getJetStream");async function ye(){let e=Ke||await Ji(),t=ys||await Ds(),r=Us||await ET();return{connection:e,jsm:t,js:r}}a(ye,"getNATSReferences");async function eM(e){let t=ee.get(G.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await nT.getClusterUser(),n=await l_(t,r,s),i=E_(),o=n.subscribe(i),_=[],c,u=(async()=>{for await(let E of o){let l=cT.decode(E.data);l.response_time=Date.now()-c,_.push(l)}})();return c=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 Wi.async_set_timeout(e),await o.drain(),await n.close(),await u,_}a(eM,"getServerList");async function d_(e,t){let{jsm:r}=await ye(),s=ee.get(G.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=ee.get(G.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=ee.get(G.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:aT.File,retention:oT.Limits,subjects:t,discard:Yw.Old,duplicate_window:iT,max_msgs:n,max_bytes:i,max_age:s})}a(d_,"createLocalStream");async function lT(){let{jsm:e}=await ye(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(lT,"listStreams");async function tM(e){let{jsm:t}=await ye();await t.streams.delete(e)}a(tM,"deleteLocalStream");async function rM(e){let{connection:t}=await ye(),r=[],s=E_(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(cT.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(rM,"listRemoteStreams");async function sM(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await ye(),i=__(),o=[],_={ack_policy:u_.None,durable_name:i,deliver_subject:i,deliver_policy:Ms.All};t&&(_.deliver_policy=Ms.StartTime,_.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,_);let c={timeout:2e3};r&&(c.max=r);let u=await n.subscribe(i,c);for await(let E of u){let l=_T(E),S=c_(l.data),d={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:S};l.headers&&(d.origin=l.headers.get(M.MSG_HEADERS.ORIGIN),d.nats_msg_id=l.headers.get(M.MSG_HEADERS.NATS_MSG_ID)),o.push(d),u.getPending()===1&&l.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),o}catch(c){if(await s.consumers.delete(e,i),c.code==="TIMEOUT")return o;throw c}}a(sM,"viewStream");async function*nM(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await ye(),i=__(),o={ack_policy:u_.None,durable_name:i,deliver_subject:i,deliver_policy:Ms.All};t&&(o.deliver_policy=Ms.StartTime,o.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,o);let _={timeout:2e3};r&&(_.max=r);let c=await n.subscribe(i,_);for await(let u of c){let E=_T(u),l=c_(E.data);l[0]||(l=[l]);for(let S of l){let d={nats_timestamp:E.info.timestampNanos,nats_sequence:E.info.streamSequence,entry:S};E.headers&&(d.origin=E.headers.get(M.MSG_HEADERS.ORIGIN),d.nats_msg_id=E.headers.get(M.MSG_HEADERS.NATS_MSG_ID)),yield d}c.getPending()===1&&E.info.pending===0&&c.stop()}await s.consumers.delete(e,i)}catch(_){if(await s.consumers.delete(e,i),_.code==="TIMEOUT")return[];throw _}}a(nM,"viewStreamIterator");async function iM(e,t,r,s){Pt.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s);let n=!0;ee.get(G.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)===!1&&r&&r.has(M.MSG_HEADERS.NATS_MSG_ID)&&(n=!1),r=dT(s,r);let{js:i}=await ye(),o=await Hs(),_=`${e}.${o}`;try{Pt.trace(`publishToStream publishing to subject: ${_}, data:`,s),n&&await i.publish(_,a_(s),{headers:r})}catch(c){if(c.code&&c.code.toString()==="503")Pt.trace(`publishToStream creating stream: ${t}`),await d_(t,[_]),n&&await i.publish(_,a_(s),{headers:r});else throw c}}a(iM,"publishToStream");function dT(e,t){t===void 0&&(t=Kw());let r=ee.get(G.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(M.MSG_HEADERS.NATS_MSG_ID)){let s=Wi.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${__()}`;t.append(M.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(M.MSG_HEADERS.ORIGIN)||t.append(M.MSG_HEADERS.ORIGIN,r),t}a(dT,"addNatsMsgHeader");function Ps(e){e=e.toLowerCase();let t=ws.join(ee.get(G.CONFIG_PARAMS.ROOTPATH),Jw);if(e===G.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return rr(i_)&&(i_={port:bs.getConfigFromFile(G.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:bs.getConfigFromFile(G.CONFIG_PARAMS.CLUSTERING_NODENAME)+M.SERVER_SUFFIX.HUB,config_file:M.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:ws.join(t,M.PID_FILES.HUB),hdb_nats_path:t}),i_;if(e===G.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return rr(n_)&&(n_={port:bs.getConfigFromFile(G.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:bs.getConfigFromFile(G.CONFIG_PARAMS.CLUSTERING_NODENAME)+M.SERVER_SUFFIX.LEAF,config_file:M.NATS_CONFIG_FILES.LEAF_SERVER,domain:bs.getConfigFromFile(G.CONFIG_PARAMS.CLUSTERING_NODENAME)+M.SERVER_SUFFIX.LEAF,pid_file_path:ws.join(t,M.PID_FILES.LEAF),hdb_nats_path:t}),n_;Pt.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Ps,"getServerConfig");async function aM(e){let{jsm:t}=await ye(),r=await Hs();try{await t.streams.add({name:e.stream_name,storage:aT.File,retention:oT.Workqueue,duplicate_window:iT,subjects:[`${M.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:u_.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:Ms.All,max_ack_pending:1e4,deliver_group:e.deliver_group});else throw s}}a(aM,"createWorkQueueStream");async function ST(e,t,r){let{jsm:s}=await ye(),n=await s.streams.info(t),i=hT(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:_,table:c}=r,u=Qi.createNatsTableStreamName(_,c),E=i===e,l,S,d=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let g=0,y=n.config.sources.length;g<y;g++)if(l=n.config.sources[g],S=g,E&&l.name===u||!E&&l.name===u&&l.external&&l.external.api===`$JS.${e}.API`){d=!0;break}if(d===!0){if(l.opt_start_time===o)return;n.config.sources.splice(S,1),await s.streams.update(t,n.config)}let A={name:u,opt_start_time:o,filter_subject:`${M.SUBJECT_PREFIXES.TXN}.>`};E||(A.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(A),await s.streams.update(t,n.config)}a(ST,"addSourceToWorkStream");function hT(e){return e.split(".")[1]}a(hT,"extractServerName");async function TT(e,t,r){let{schema:s,table:n}=r,i=Qi.createNatsTableStreamName(s,n),{jsm:o}=await ye(),_=await o.streams.info(t);if(!Array.isArray(_.config.sources)||_.config.sources.length===0)return;let c=_.config.sources.length,u;for(;c--;)if(u=_.config.sources[c],u.name===i&&u.external.api===`$JS.${e}.API`){_.config.sources.splice(c,1);break}await o.streams.update(t,_.config)}a(TT,"removeSourceFromWorkStream");async function oM(e,t,r=2e3,s=E_()){if(!Wi.isObject(t))throw new Error("data param must be an object");let n=a_(t),{connection:i}=await ye(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let _=await i.request(e,n,o);return c_(_.data)}a(oM,"request");function S_(e){return new Promise(async(t,r)=>{let s=xw(o_,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(S_,"reloadNATS");async function _M(){let{pid_file_path:e}=Ps(G.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await S_(e)}a(_M,"reloadNATSHub");async function cM(){let{pid_file_path:e}=Ps(G.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await S_(e)}a(cM,"reloadNATSLeaf");function uM(e,t,r){let s;switch(e.code){case rT.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case rT.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(uM,"requestErrorHandler");async function EM(e,t){let r=t+M.SERVER_SUFFIX.LEAF;await Vw.writeTransaction(G.SYSTEM_SCHEMA_NAME,G.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await ST(r,M.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await TT(r,M.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(EM,"updateWorkStream");async function fT(e,t){let r=Qi.createNatsTableStreamName(e,t),s=await Hs(),n=hM(e,t,s);await d_(r,[n])}a(fT,"createLocalTableStream");async function lM(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await fT(s,n)}}a(lM,"createTableStreams");async function mT(e,t){if(ee.get(G.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Qi.createNatsTableStreamName(e,t),{jsm:s}=await ye();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Pt.warn(r);else throw r}}a(mT,"purgeTableStream");async function dM(e,t){if(ee.get(G.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await mT(e,t[r])}a(dM,"purgeSchemaTableStreams");async function SM(e){return(await Ds()).streams.info(e)}a(SM,"getStreamInfo");function hM(e,t,r){return`${M.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(hM,"createSubjectName");async function Hs(){if(Ls)return Ls;if(Ls=(await Ds())?.nc?.info?.server_name,Ls===void 0)throw new Error("Unable to get jetstream manager server name");return Ls}a(Hs,"getJsmServerName");async function TM(){let e=await Ds(),t=await Hs(),r=await lT();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=fM(s),_=i.split(".");if(!(_[_.length-1]===t&&!o)){if(n.name===M.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let u=`${M.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Pt.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}else if(n.name===M.WORK_QUEUE_CONSUMER_NAMES.stream_name){let u=`${M.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Pt.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u,await e.consumers.update(M.WORK_QUEUE_CONSUMER_NAMES.stream_name,M.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${M.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let u=i.split(".");u[u.length-1]=t;let E=u.join(".");Pt.trace(`Updating stream subject name from: ${i} to: ${E}`),n.subjects[0]=E}await e.streams.update(n.name,n)}}}a(TM,"updateLocalStreams");function fM(e){let{config:t}=e,r=!1;if(t.name===M.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===M.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=ee.get(G.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=ee.get(G.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=ee.get(G.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(fM,"updateStreamLimits")});var pT=h((rF,NT)=>{"use strict";var Bs=require("path"),ji=require("fs-extra"),mM=jc(),AM=ru(),RM=nu(),gM=au(),T_=Nr(),wr=p(),Te=$r(),zi=f(),Xi=it(),{CONFIG_PARAMS:Z}=zi,vs=O(),ea=J(),RT=ds(),f_=h_(),Gs="clustering",NM=1e4,gT=5;NT.exports={generateNatsConfig:pM,removeNatsConfig:OM};async function pM(e=!1,t=void 0){ea.initSync();let r=ea.get(Z.ROOTPATH),s=Bs.join(r,Gs,Xi.PID_FILES.HUB),n=Bs.join(r,Gs,Xi.PID_FILES.LEAF),i=Te.getConfigFromFile(Z.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Bs.join(r,Gs,Xi.NATS_CONFIG_FILES.HUB_SERVER),_=Bs.join(r,Gs,Xi.NATS_CONFIG_FILES.LEAF_SERVER),c=Te.getConfigFromFile(Z.CLUSTERING_TLS_CERTIFICATE),u=Te.getConfigFromFile(Z.CLUSTERING_TLS_PRIVATEKEY),E=Te.getConfigFromFile(Z.CLUSTERING_TLS_CERT_AUTH),l=Te.getConfigFromFile(Z.CLUSTERING_TLS_INSECURE),S=Te.getConfigFromFile(Z.CLUSTERING_TLS_VERIFY),d=Te.getConfigFromFile(Z.CLUSTERING_NODENAME),A=Te.getConfigFromFile(Z.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await f_.checkNATSServerInstalled()||ta("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let g=await T_.listUsers(),y=Te.getConfigFromFile(Z.CLUSTERING_USER),$=await T_.getClusterUser();(wr.isEmpty($)||$.active!==!0)&&ta(`Invalid cluster user '${y}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Zi(Z.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Zi(Z.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Zi(Z.CLUSTERING_HUBSERVER_NETWORK_PORT),await Zi(Z.CLUSTERING_LEAFSERVER_NETWORK_PORT));let x=[],v=[];for(let[Hr,ar]of g.entries())ar.role.role===zi.ROLE_TYPES_ENUM.CLUSTER_USER&&ar.active&&(x.push(new gM(ar.username,RT.decrypt(ar.hash))),v.push(new RM(ar.username,RT.decrypt(ar.hash))));let we=[],{hub_routes:Ft}=Te.getClusteringRoutes();if(!wr.isEmptyOrZeroLength(Ft))for(let Hr of Ft)we.push(`tls://${$.sys_name_encoded}:${$.uri_encoded_d_hash}@${Hr.host}:${Hr.port}`);let ir=new mM(Te.getConfigFromFile(Z.CLUSTERING_HUBSERVER_NETWORK_PORT),d,s,c,u,E,l,S,A,Te.getConfigFromFile(Z.CLUSTERING_HUBSERVER_CLUSTER_NAME),Te.getConfigFromFile(Z.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),we,x,v);E==null&&(delete ir.tls.ca_file,delete ir.leafnodes.tls.ca_file),t=wr.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===zi.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await ji.writeJson(o,ir),vs.trace(`Hub server config written to ${o}`));let V_=`tls://${$.sys_name_encoded}:${$.uri_encoded_d_hash}@0.0.0.0:${A}`,k_=`tls://${$.uri_encoded_name}:${$.uri_encoded_d_hash}@0.0.0.0:${A}`,Aa=new AM(Te.getConfigFromFile(Z.CLUSTERING_LEAFSERVER_NETWORK_PORT),d,n,i,[V_],[k_],x,v,c,u,E,l);E==null&&delete Aa.tls.ca_file,(t===void 0||t===zi.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await ji.writeJson(_,Aa),vs.trace(`Leaf server config written to ${_}`))}a(pM,"generateNatsConfig");async function Zi(e){let t=ea.get(e);return wr.isEmpty(t)&&ta(`port undefined for '${e}'`),await wr.isPortTaken(t)&&ta(`'${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(Zi,"isPortAvailable");function ta(e){let t=`Error generating clustering config: ${e}`;vs.error(t),console.error(t),process.exit(1)}a(ta,"generateNatsConfigError");async function OM(e){let{port:t,config_file:r}=f_.getServerConfig(e),{username:s,decrypt_hash:n}=await T_.getClusterUser(),i=0,o=500;for(;i<gT;){try{let u=await f_.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){vs.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=gT)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 wr.async_set_timeout(o*i)}let _="0".repeat(NM),c=Bs.join(ea.get(Z.ROOTPATH),Gs,r);await ji.writeFile(c,_),await ji.remove(c),vs.notify(e,"started.")}a(OM,"removeNatsConfig")});var yT=h((nF,LT)=>{"use strict";var Ue=J(),IM=kn(),w=f(),Fs=it(),Tt=require("path"),{PACKAGE_ROOT:ra}=f(),OT=J(),Mr="/dev/null",CM=Tt.join(ra,"launchServiceScripts"),IT=Tt.join(ra,"utility/scripts"),bM=Tt.join(IT,w.HDB_RESTART_SCRIPT),CT=Tt.resolve(ra,"dependencies",`${process.platform}-${process.arch}`,Fs.NATS_BINARY_NAME);function bT(){let t=IM.licenseSearch().ram_allocation||w.RAM_ALLOCATION_ENUM.DEFAULT,r=w.MEM_SETTING_KEY+t;return{name:w.PROCESS_DESCRIPTORS.HDB,script:w.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0},node_args:r,cwd:ra}}a(bT,"generateMainServerConfig");var LM=9930;function yM(){Ue.initSync(!0);let e=Ue.get(w.CONFIG_PARAMS.ROOTPATH),t=Tt.join(e,"clustering",Fs.NATS_CONFIG_FILES.HUB_SERVER),r=Tt.join(Ue.get(w.HDB_SETTINGS_NAMES.LOG_PATH_KEY),w.LOG_NAMES.HDB),s=OT.get(w.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Fs.LOG_LEVEL_FLAGS[Ue.get(w.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:w.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==LM?"-"+s:""),script:CT,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Ue.get(w.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Mr,i.error_file=Mr),i}a(yM,"generateNatsHubServerConfig");var UM=9940;function wM(){Ue.initSync(!0);let e=Ue.get(w.CONFIG_PARAMS.ROOTPATH),t=Tt.join(e,"clustering",Fs.NATS_CONFIG_FILES.LEAF_SERVER),r=Tt.join(Ue.get(w.HDB_SETTINGS_NAMES.LOG_PATH_KEY),w.LOG_NAMES.HDB),s=OT.get(w.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Fs.LOG_LEVEL_FLAGS[Ue.get(w.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:w.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==UM?"-"+s:""),script:CT,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Ue.get(w.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Mr,i.error_file=Mr),i}a(wM,"generateNatsLeafServerConfig");function MM(){Ue.initSync();let e=Tt.join(Ue.get(w.CONFIG_PARAMS.LOGGING_ROOT),w.LOG_NAMES.HDB),t={name:w.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:w.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:CM,autorestart:!1};return Ue.get(w.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Mr,t.error_file=Mr),t}a(MM,"generateClusteringUpgradeV4ServiceConfig");function DM(){return{...{name:w.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.RESTART_HDB},instances:1,autorestart:!1,cwd:IT},script:bM}}a(DM,"generateRestart");function PM(){return{apps:[bT()]}}a(PM,"generateAllServiceConfigs");LT.exports={generateAllServiceConfigs:PM,generateMainServerConfig:bT,generateRestart:DM,generateNatsHubServerConfig:yM,generateNatsLeafServerConfig:wM,generateClusteringUpgradeV4ServiceConfig:MM}});var wT=h((aF,UT)=>{var HM=at(),BM={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};UT.exports=function(e){return HM.validateObject(e,BM)}});var DT=h((oF,MT)=>{"use strict";var GM=f().OPERATIONS_ENUM,sa=class{constructor(t,r,s,n=void 0){this.operation=GM.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(sa,"UpdateObject");MT.exports=sa});var HT=h((cF,PT)=>{"use strict";var vM={OPERATION:"operation",REFRESH:"refresh"},na=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(na,"JWTTokens");var ia=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(ia,"JWTRSAKeys");PT.exports={JWTTokens:na,TOKEN_TYPE_ENUM:vM,JWTRSAKeys:ia}});var qT=h((EF,FT)=>{"use strict";var xs=require("jsonwebtoken"),m_=require("fs-extra"),A_=p(),ve=f(),{handleHDBError:fe,hdb_errors:FM}=Q(),{HTTP_STATUS_CODES:me,AUTHENTICATION_ERROR_MSGS:Ae}=FM,qs=O(),BT=xn(),N_=Nr(),qM=Fi().update,xM=DT(),VM=ci(),{UserEventMsg:kM}=gr(),Ht=J();Ht.initSync();var R_=require("path"),{JWTTokens:YM,JWTRSAKeys:$M,TOKEN_TYPE_ENUM:aa}=HT(),KM=Ht.get(ve.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Ht.get(ve.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",WM=Ht.get(ve.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Ht.get(ve.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",oa="RS256",g_;FT.exports={createTokens:QM,validateOperationToken:XM,refreshOperationToken:JM,validateRefreshToken:vT};async function QM(e){if(A_.isEmpty(e)||typeof e!="object")throw fe(new Error,Ae.INVALID_AUTH_OBJECT,me.BAD_REQUEST,void 0,void 0,!0);if(A_.isEmpty(e.username))throw fe(new Error,Ae.USERNAME_REQUIRED,me.BAD_REQUEST,void 0,void 0,!0);if(A_.isEmpty(e.password))throw fe(new Error,Ae.PASSWORD_REQUIRED,me.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await N_.findAndValidateUser(e.username,e.password),!t)throw fe(new Error,Ae.INVALID_CREDENTIALS,me.UNAUTHORIZED,void 0,void 0,!0)}catch(S){throw qs.error(S),fe(new Error,Ae.INVALID_CREDENTIALS,me.UNAUTHORIZED,void 0,void 0,!0)}let r=await _a(),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 GT(i,r.private_key,r.passphrase),_=await xs.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:WM,algorithm:oa,subject:aa.REFRESH}),c=BT.hash(_),u=new xM(ve.SYSTEM_SCHEMA_NAME,ve.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:c}]),E,l;try{E=await qM(u)}catch(S){qs.error(S),l=S}if(l!==void 0||E.skipped_hashes.length>0)throw fe(new Error,Ae.REFRESH_TOKEN_SAVE_FAILED,me.INTERNAL_SERVER_ERROR);return VM.signalUserChange(new kM(process.pid)),new YM(o,_)}a(QM,"createTokens");async function GT(e,t,r){return await xs.sign(e,{key:t,passphrase:r},{expiresIn:KM,algorithm:oa,subject:aa.OPERATION})}a(GT,"signOperationToken");async function _a(){if(g_===void 0)try{let e=R_.join(Ht.getHdbBasePath(),ve.LICENSE_KEY_DIR_NAME,ve.JWT_ENUM.JWT_PASSPHRASE_NAME),t=R_.join(Ht.getHdbBasePath(),ve.LICENSE_KEY_DIR_NAME,ve.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=R_.join(Ht.getHdbBasePath(),ve.LICENSE_KEY_DIR_NAME,ve.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await m_.readFile(e)).toString(),n=(await m_.readFile(t)).toString(),i=(await m_.readFile(r)).toString();g_=new $M(i,n,s)}catch(e){throw qs.error(e),fe(new Error,Ae.NO_ENCRYPTION_KEYS,me.INTERNAL_SERVER_ERROR)}return g_}a(_a,"getJWTRSAKeys");async function JM(e){if(!e)throw fe(new Error,Ae.INVALID_BODY,me.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw fe(new Error,Ae.REFRESH_TOKEN_REQUIRED,me.BAD_REQUEST,void 0,void 0,!0);await vT(e.refresh_token);let t=await _a(),r=await xs.decode(e.refresh_token);return{operation_token:await GT({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(JM,"refreshOperationToken");async function XM(e){try{let t=await _a(),r=await xs.verify(e,t.public_key,{algorithms:oa,subject:aa.OPERATION});return await N_.findAndValidateUser(r.username,void 0,!1)}catch(t){throw qs.warn(t),t.name&&t.name==="TokenExpiredError"?fe(new Error,Ae.TOKEN_EXPIRED,me.FORBIDDEN):fe(new Error,Ae.INVALID_TOKEN,me.UNAUTHORIZED)}}a(XM,"validateOperationToken");async function vT(e){let t;try{let r=await _a(),s=await xs.verify(e,r.public_key,{algorithms:oa,subject:aa.REFRESH});t=await N_.findAndValidateUser(s.username,void 0,!1)}catch(r){throw qs.warn(r),r.name&&r.name==="TokenExpiredError"?fe(new Error,Ae.TOKEN_EXPIRED,me.FORBIDDEN):fe(new Error,Ae.INVALID_TOKEN,me.UNAUTHORIZED)}if(!BT.validate(t.refresh_token,e))throw fe(new Error,Ae.INVALID_TOKEN,me.UNAUTHORIZED);return t}a(vT,"validateRefreshToken")});var YT=h((SF,kT)=>{"use strict";var ZM=wT(),Dr=require("passport"),zM=require("passport-local").Strategy,jM=require("passport-http").BasicStrategy,eD=require("util"),tD=Nr(),VT=eD.callbackify(tD.findAndValidateUser),dF=Me(),rD=f(),xT=qT();Dr.use(new zM(function(e,t,r){VT(e,t,r)}));Dr.use(new jM(function(e,t,r){VT(e,t,r)}));Dr.serializeUser(function(e,t){t(null,e)});Dr.deserializeUser(function(e,t){t(null,e)});function sD(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,_){return o?r(o):_?r(null,_):r("User not found")}switch(a(i,"handleResponse"),s){case"Basic":Dr.authenticate("basic",{session:!1},(o,_)=>{i(o,_)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===rD.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?xT.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):xT.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Dr.authenticate("local",{session:!1},function(o,_){i(o,_)})(e,t,r);break}}a(sD,"authorize");function nD(e,t){let r=ZM(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n||!n.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let _ in o)e.attributes.indexOf(o[_].attribute_name)>-1&&!o[_][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[_].attribute_name} `))}return t(null,s)}a(nD,"checkPermissions");kT.exports={authorize:sD,checkPermissions:nD}});var KT=h((TF,$T)=>{"use strict";var ca=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(ca,"Node");var ua=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(ua,"NodeSubscription");$T.exports={Node:ca,NodeSubscription:ua}});var QT=h((mF,WT)=>{"use strict";var iD=f().OPERATIONS_ENUM,Ea=class{constructor(t,r,s,n=void 0){this.operation=iD.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Ea,"UpsertObject");WT.exports=Ea});var XT=h((RF,JT)=>{"use strict";var la=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(la,"RemotePayloadObject");var da=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(da,"RemotePayloadSubscription");JT.exports={RemotePayloadObject:la,RemotePayloadSubscription:da}});var zT=h((NF,ZT)=>{"use strict";var Sa=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(Sa,"TableSizeObject");ZT.exports=Sa});var ef=h((OF,jT)=>{"use strict";var aD=zT(),oD=ne(),Pr=q(),_D=O(),{getSchemaPath:cD,getTransactionAuditStorePath:uD}=Y();jT.exports=ED;async function ED(e){let t=new aD;try{let r=cD(e.schema,e.name),s=await Pr.openEnvironment(r,e.name),n=Pr.statDBI(s,e.hash_attribute),i=uD(e.schema,e.name),o=await Pr.openEnvironment(i,e.name,!0),_=Pr.statDBI(o,oD.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),c=await Pr.environmentDataSize(r,e.name),u=await Pr.environmentDataSize(i,e.name);t.schema=e.schema,t.table=e.name,t.table_size=c,t.record_count=n.entryCount,t.transaction_log_size=u,t.transaction_log_record_count=_.entryCount}catch(r){_D.warn(`unable to stat table dbi due to ${r}`)}return t}a(ED,"lmdbGetTableSize")});var rf=h((CF,tf)=>{"use strict";var ha=class{constructor(t,r,s,n,i,o,_){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=_}};a(ha,"SystemInformationObject");tf.exports=ha});var D_=h((LF,of)=>{"use strict";var lD=require("fs-extra"),dD=require("path"),ue=require("systeminformation"),Bt=O(),p_=f(),SD=ef(),nf=ni(),{getThreadInfo:sf}=Kn(),af=J();af.initSync();var hD=rf(),{openEnvironment:TD}=q(),{getSchemaPath:fD}=Y(),Ta;of.exports={getHDBProcessInfo:b_,getNetworkInfo:y_,getDiskInfo:L_,getMemoryInfo:C_,getCPUInfo:I_,getTimeInfo:O_,getSystemInformation:U_,systemInformation:mD,getTableSize:w_,getMetrics:M_};function O_(){return ue.time()}a(O_,"getTimeInfo");async function I_(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:_,socket:c,cache:u,...E}=await ue.cpu();E.cpu_speed=await ue.cpuCurrentSpeed();let{raw_currentload:l,raw_currentload_idle:S,raw_currentload_irq:d,raw_currentload_nice:A,raw_currentload_system:g,raw_currentload_user:y,cpus:$,...x}=await ue.currentLoad();return x.cpus=[],$.forEach(v=>{let{raw_load:we,raw_load_idle:Ft,raw_load_irq:ir,raw_load_nice:V_,raw_load_system:k_,raw_load_user:Aa,...Hr}=v;x.cpus.push(Hr)}),E.current_load=x,E}catch(e){return Bt.error(`error in getCPUInfo: ${e}`),{}}}a(I_,"getCPUInfo");async function C_(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await ue.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Bt.error(`error in getMemoryInfo: ${e}`),{}}}a(C_,"getMemoryInfo");async function b_(){let e={core:[],clustering:[]};try{let t=await ue.processes(),r;try{r=Number.parseInt(await lD.readFile(dD.join(af.get(p_.CONFIG_PARAMS.ROOTPATH),p_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===p_.NODE_ERROR_CODES.ENOENT)Bt.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 Bt.error(`error in getHDBProcessInfo: ${t}`),e}}a(b_,"getHDBProcessInfo");async function L_(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await ue.disksIO();e.io=i;let{rx_sec:o,tx_sec:_,wx_sec:c,...u}=await ue.fsStats();return e.read_write=u,e.size=await ue.fsSize(),e}catch(t){return Bt.error(`error in getDiskInfo: ${t}`),e}}a(L_,"getDiskInfo");async function y_(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await ue.networkInterfaceDefault(),e.latency=await ue.inetChecksite("google.com"),(await ue.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:_,dnsSuffix:c,ieee8021xAuth:u,ieee8021xState:E,carrier_changes:l,...S}=s;e.interfaces.push(S)}),(await ue.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,..._}=s;e.stats.push(_)}),e}catch(t){return Bt.error(`error in getNetworkInfo: ${t}`),e}}a(y_,"getNetworkInfo");async function U_(){if(Ta!==void 0)return Ta;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,..._}=await ue.osInfo();e=_;let c=await ue.versions("node, npm");return e.node_version=c.node,e.npm_version=c.npm,Ta=e,Ta}catch(t){return Bt.error(`error in getSystemInformation: ${t}`),e}}a(U_,"getSystemInformation");async function w_(){let e=[],t=await nf.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await SD(s));return e}a(w_,"getTableSize");async function M_(){let e=await nf.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=fD(r,n),_=(await TD(i,n)).getStats();s[n]={puts:_.puts,deletes:_.deletes,txns:_.txns,pageFlushes:_.pageFlushes,writes:_.writes,pagesWritten:_.pagesWritten,timeDuringTxns:_.timeDuringTxns,timeStartTxns:_.timeStartTxns,timePageFlushes:_.timePageFlushes,timeSync:_.timeSync}}catch(i){Bt.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(M_,"getMetrics");async function mD(e){let t=new hD;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await U_(),t.time=O_(),t.cpu=await I_(),t.memory=await C_(),t.disk=await L_(),t.network=await y_(),t.harperdb_processes=await b_(),t.table_size=await w_(),t.metrics=await M_(),t.threads=await sf(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await U_();break;case"time":t.time=O_();break;case"cpu":t.cpu=await I_();break;case"memory":t.memory=await C_();break;case"disk":t.disk=await L_();break;case"network":t.network=await y_();break;case"harperdb_processes":t.harperdb_processes=await b_();break;case"table_size":t.table_size=await w_();break;case"database_metrics":case"metrics":t.metrics=await M_();break;case"threads":t.threads=await sf();break;default:break}return t}a(mD,"systemInformation")});var cf=h((MF,_f)=>{"use strict";var UF=require("fs-extra"),wF=O();_f.exports={version:AD,printVersion:gD,nodeVersion:RD};var Gt=s_();function AD(){if(Gt)return Gt.version}a(AD,"version");function RD(){if(Gt&&Gt.engines&&Gt.engines["preferred-node"])return Gt.engines["preferred-node"]}a(RD,"nodeVersion");function gD(){Gt&&console.log(`HarperDB Version ${Gt.version}`)}a(gD,"printVersion")});var Sf=h((BF,df)=>{"use strict";var ND=Fi(),P_=p(),H_=require("util"),sr=f(),uf=J();uf.initSync();var pD=YT(),Ef=Zn(),{Node:PF,NodeSubscription:HF}=KT(),OD=Ai(),ID=QT(),{RemotePayloadObject:CD,RemotePayloadSubscription:bD}=XT(),{handleHDBError:LD,hdb_errors:yD}=Q(),{HTTP_STATUS_CODES:UD,HDB_ERROR_MSGS:wD}=yD,MD=dt(),DD=D_(),PD=cf(),HD=H_.promisify(pD.authorize),BD=H_.promisify(Ef.searchByHash),GD=H_.promisify(Ef.searchByValue);df.exports={authHeaderToUser:vD,isEmpty:FD,getNodeRecord:qD,upsertNodeRecord:xD,buildNodePayloads:VD,checkClusteringEnabled:kD,getAllNodeRecords:YD,getSystemInfo:$D,reverseSubscription:lf};async function vD(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await HD(t,null),e}a(vD,"authHeaderToUser");function FD(e){return e==null}a(FD,"isEmpty");async function qD(e){let t=new OD(sr.SYSTEM_SCHEMA_NAME,sr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return BD(t)}a(qD,"getNodeRecord");async function xD(e){let t=new ID(sr.SYSTEM_SCHEMA_NAME,sr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return ND.upsert(t)}a(xD,"upsertNodeRecord");function lf(e){if(P_.isEmpty(e.subscribe)||P_.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(lf,"reverseSubscription");function VD(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let _=e[i],{schema:c,table:u}=_,E=P_.getTableHashAttribute(c,u),{subscribe:l,publish:S}=lf(_),d=new bD(c,u,E,S,l,_.start_time);n.push(d)}return new CD(r,t,n,s)}a(VD,"buildNodePayloads");function kD(){if(!uf.get(sr.CONFIG_PARAMS.CLUSTERING_ENABLED))throw LD(new Error,wD.CLUSTERING_NOT_ENABLED,UD.BAD_REQUEST,void 0,void 0,!0)}a(kD,"checkClusteringEnabled");async function YD(){let e=new MD(sr.SYSTEM_SCHEMA_NAME,sr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await GD(e))}a(YD,"getAllNodeRecords");async function $D(){let e=await DD.getSystemInformation();return{hdb_version:PD.version(),node_version:e.node_version,platform:e.platform}}a($D,"getSystemInfo")});var yf=h((YF,Lf)=>{"use strict";var P=f(),Tf=p(),Vs=pT(),fa=h_(),tt=it(),H=require("pm2"),vt=yT(),ma=J(),ft=O(),KD=Sf(),{startWorker:B_,onMessageFromWorkers:WD}=Kn(),vF=D_(),QD=require("util"),ff=require("child_process"),{execFile:JD}=ff,FF=QD.promisify(ff.exec),qF=require("systeminformation");Lf.exports={enterPM2Mode:XD,start:nr,stop:G_,reload:mf,restart:Af,list:v_,describe:F_,connect:mt,kill:tP,startAllServices:rP,startService:q_,getUniqueServicesList:gf,restartAllServices:sP,isServiceRegistered:Nf,reloadStopStart:pf,restartHdb:Rf,deleteProcess:jD,startClusteringProcesses:Cf,startClusteringThreads:bf,isHdbRestartRunning:eP,isClusteringRunning:iP,stopClustering:nP,reloadClustering:aP};var{PACKAGE_ROOT:xF}=f(),VF=f(),{loggerWithTag:kF}=ft,ks=!1;WD(e=>{e.type==="restart"&&ma.initSync(!0)});function XD(){ks=!0}a(XD,"enterPM2Mode");function mt(){return new Promise((e,t)=>{H.connect((r,s)=>{ft.setupConsoleLogging(),r&&t(r),e(s)})})}a(mt,"connect");var Re,ZD=10,hf;function nr(e){if(ks)return zD(e);let t=JD(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=Re.indexOf(t);i>-1&&Re.splice(i,1),!hf&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<ZD&&nr(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=ma.get(P.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,_,c=0,u;for(;_=o.exec(n);){if(_.index&&tt.LOG_LEVEL_HIERARCHY[i]>=tt.LOG_LEVEL_HIERARCHY[u||"info"]){let S=u===tt.LOG_LEVELS.ERR||u===tt.LOG_LEVELS.WRN?ft.OUTPUTS.STDERR:ft.OUTPUTS.STDOUT;ft.logCustomLevel(u||"info",S,r,n.slice(c,_.index).trim())}let[E,l]=_;c=_.index+E.length,u=tt.LOG_LEVELS[l]}if(tt.LOG_LEVEL_HIERARCHY[i]>=tt.LOG_LEVEL_HIERARCHY[u||"info"]){let E=u===tt.LOG_LEVELS.ERR||u===tt.LOG_LEVELS.WRN?ft.OUTPUTS.STDERR:ft.OUTPUTS.STDOUT;ft.logCustomLevel(u||"info",E,r,n.slice(c).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!Re){Re=[];let n=a(()=>{hf=!0,Re&&(Re.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)}Re.push(t)}a(nr,"start");function zD(e){return new Promise(async(t,r)=>{try{await mt()}catch(s){r(s)}H.start(e,(s,n)=>{s&&(H.disconnect(),r(s)),H.disconnect(),t(n)})})}a(zD,"startWithPM2");function G_(e){if(!ks){for(let t of Re||[])t.name===e&&(Re.splice(Re.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await mt()}catch(s){r(s)}H.stop(e,async(s,n)=>{s&&(H.disconnect(),r(s)),H.delete(e,(i,o)=>{i&&(H.disconnect(),r(s)),H.disconnect(),t(o)})})})}a(G_,"stop");function mf(e){return new Promise(async(t,r)=>{try{await mt()}catch(s){r(s)}H.reload(e,(s,n)=>{s&&(H.disconnect(),r(s)),H.disconnect(),t(n)})})}a(mf,"reload");function Af(e){if(!ks)for(let t of Re||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await mt()}catch(s){r(s)}H.restart(e,(s,n)=>{H.disconnect(),t(n)})})}a(Af,"restart");function jD(e){return new Promise(async(t,r)=>{try{await mt()}catch(s){r(s)}H.delete(e,(s,n)=>{s&&(H.disconnect(),r(s)),H.disconnect(),t(n)})})}a(jD,"deleteProcess");async function Rf(){await nr(vt.generateRestart())}a(Rf,"restartHdb");async function eP(){let e=await v_();for(let t in e)if(e[t].name===P.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(eP,"isHdbRestartRunning");function v_(){return new Promise(async(e,t)=>{try{await mt()}catch(r){t(r)}H.list((r,s)=>{r&&(H.disconnect(),t(r)),H.disconnect(),e(s)})})}a(v_,"list");function F_(e){return new Promise(async(t,r)=>{try{await mt()}catch(s){r(s)}H.describe(e,(s,n)=>{s&&(H.disconnect(),r(s)),H.disconnect(),t(n)})})}a(F_,"describe");function tP(){if(!ks){for(let e of Re||[])e.kill();Re=[];return}return new Promise(async(e,t)=>{try{await mt()}catch(r){t(r)}H.killDaemon((r,s)=>{r&&(H.disconnect(),t(r)),H.disconnect(),e(s)})})}a(tP,"kill");async function rP(){try{await Cf(),await bf(),await nr(vt.generateAllServiceConfigs())}catch(e){throw H.disconnect(),e}}a(rP,"startAllServices");async function q_(e){try{let t;switch(e=e.toLowerCase(),e){case P.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=vt.generateMainServerConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=vt.generateNatsIngestServiceConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=vt.generateNatsReplyServiceConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=vt.generateNatsHubServerConfig(),await nr(t),await Vs.removeNatsConfig(e);return;case P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=vt.generateNatsLeafServerConfig(),await nr(t),await Vs.removeNatsConfig(e);return;case P.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=vt.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await nr(t)}catch(t){throw H.disconnect(),t}}a(q_,"startService");async function gf(){try{let e=await v_(),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 H.disconnect(),e}}a(gf,"getUniqueServicesList");async function sP(e=[]){try{let t=!1,r=await gf();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===P.PROCESS_DESCRIPTORS.HDB?t=!0:await Af(o))}t&&await pf(P.PROCESS_DESCRIPTORS.HDB)}catch(t){throw H.disconnect(),t}}a(sP,"restartAllServices");async function Nf(e){return Re?.find(t=>t.name===e)?!0:!Tf.isEmptyOrZeroLength(await F_(e))}a(Nf,"isServiceRegistered");async function pf(e){let t=e===P.PROCESS_DESCRIPTORS.HDB?ma.get(P.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):ma.get(P.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await F_(e),s=Tf.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await G_(e),await q_(e)):e===P.PROCESS_DESCRIPTORS.HDB?await Rf():await mf(e)}a(pf,"reloadStopStart");var Of,If;async function Cf(){for(let e in P.CLUSTERING_PROCESSES){let t=P.CLUSTERING_PROCESSES[e];await q_(t)}}a(Cf,"startClusteringProcesses");async function bf(){Of=B_(P.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,{name:P.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE}),If=B_(P.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:P.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await fa.createWorkQueueStream(tt.WORK_QUEUE_CONSUMER_NAMES),await fa.updateLocalStreams();let e=await KD.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===P.PRE_4_0_0_VERSION){ft.info("Starting clustering upgrade 4.0.0 process"),B_(P.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(bf,"startClusteringThreads");async function nP(){for(let e in P.CLUSTERING_PROCESSES)if(e===P.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)await Of.terminate();else if(e===P.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await If.terminate();else{let t=P.CLUSTERING_PROCESSES[e];await G_(t)}}a(nP,"stopClustering");async function iP(){for(let e in P.CLUSTERING_PROCESSES){let t=P.CLUSTERING_PROCESSES[e];if(await Nf(t)===!1)return!1}return!0}a(iP,"isClusteringRunning");async function aP(){await Vs.generateNatsConfig(!0),await fa.reloadNATSHub(),await fa.reloadNATSLeaf(),await Vs.removeNatsConfig(P.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Vs.removeNatsConfig(P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(aP,"reloadClustering")});var x_=yf(),Uf=f();a(async function(){try{let t=await x_.describe(Uf.PROCESS_DESCRIPTORS.HDB);for(let r of t)await x_.reload(r.pm_id);await x_.deleteProcess(Uf.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}},"restartHdb")();
|