harperdb 4.1.0 → 4.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/harperdb.js CHANGED
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var tN=Object.defineProperty;var o=(e,t)=>tN(e,"name",{value:t,configurable:!0});var f=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var T=f((Ek,TE)=>{"use strict";var at=require("path"),rN=require("fs");function sN(){let e=__dirname;for(;!rN.existsSync(at.join(e,"package.json"));){let t=at.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}o(sN,"getHDBPackageRoot");var ar=sN(),nE="js",$i=nE,nN="harperdb-config.yaml",iN="defaultConfig.yaml",oN="hdb",iE=`harperdb.${$i}`,oE=`customFunctionsServer.${$i}`,aN=`restartHdb.${$i}`,V_="HarperDB",Yi="Custom Functions",Ki="Clustering Hub",Wi="Clustering Leaf",_N="Clustering Ingest Service",cN="Clustering Reply Service",uN="foreground.pid",lN={HDB:V_,CLUSTERING_HUB:Ki,CLUSTERING_LEAF:Wi,CLUSTERING_INGEST_SERVICE:_N,CLUSTERING_REPLY_SERVICE:cN,CUSTOM_FUNCTIONS:Yi,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"},EN={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},dN={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},SN={harperdb:V_,"clustering hub":Ki,"clustering leaf":Wi,"custom functions":Yi,custom_functions:Yi,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},fN={CLUSTERING_HUB_PROC_DESCRIPTOR:Ki,CLUSTERING_LEAF_PROC_DESCRIPTOR:Wi},x_={HDB:at.join(ar,"server/harperdb"),CUSTOM_FUNCTIONS:at.join(ar,"server/customFunctions"),CLUSTERING_HUB:at.join(ar,"server/nats"),CLUSTERING_LEAF:at.join(ar,"server/nats")},hN={HDB:at.join(x_.HDB,iE),CUSTOM_FUNCTIONS:at.join(x_.CUSTOM_FUNCTIONS,oE)},TN={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:at.join(ar,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:at.join(ar,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:at.join(ar,"launchServiceScripts/launchUpdateNodes4-0-0.js")},RN={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},aE="support@harperdb.io",mN="customer-success@harperdb.io",_E=1,AN=4141,cE="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",gN="https://www.harperdb.io/product",pN=`For support, please submit a request at ${cE} or contact ${aE}`,uE=`For license support, please contact ${mN}`,NN="None of the specified records were found.",ON="hash attribute not found",IN=`Your current license only supports ${_E} role. ${uE}`,CN="Your current license only supports 3 connections to a node.",bN="127.0.0.1",LN=1,yN=/^\.$/,wN=/^\.\.$/,MN="U+002E",DN=/\//g,UN="U+002F",PN=/U\+002F/g,HN=/^U\+002E$/,BN=/^U\+002EU\+002E$/,vN="d",GN=999999,qN="*",FN="--max-old-space-size=",xN="system",VN="__hdb_hash",kN=".harperdb",YN=".hdb",$N="keys",KN="hdb_boot_properties.file",WN=".updateConfig.json",QN="SIGTSTP",jN=24,JN=6e4,XN=448,ZN="blob",zN="trash",eO="schema",tO="transactions",rO=".count",sO="id",nO="PROCESS_NAME",lE={SETTINGS_PATH_KEY:"settings_path"},EE=require("lodash"),iO={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"},oO={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},aO={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},_O={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"},cO={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"},ve="hdb_internal:",uO={CREATE_SCHEMA:ve+"create_schema",CREATE_TABLE:ve+"create_table",CREATE_ATTRIBUTE:ve+"create_attribute",ADD_USER:ve+"add_user",ALTER_USER:ve+"alter_user",DROP_USER:ve+"drop_user",HDB_NODES:ve+"hdb_nodes",HDB_USERS:ve+"hdb_users",HDB_WORKERS:ve+"hdb_workers",CATCHUP:ve+"catchup",SCHEMA_CATCHUP:ve+"schema_catchup",WORKER_ROOM:ve+"cluster_workers"},lO={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"},EO="060493.ks",dO=".license",SO={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},g={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"},fO={CSV:".csv",JSON:".json"},hO={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},TO={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Sn={};Sn[g.INSERT]=g.INSERT;Sn[g.UPDATE]=g.UPDATE;Sn[g.UPSERT]=g.UPSERT;Sn[g.DELETE]=g.DELETE;var Y=Object.create(null);Y[g.DESCRIBE_ALL]=g.DESCRIBE_ALL;Y[g.DESCRIBE_TABLE]=g.DESCRIBE_TABLE;Y[g.DESCRIBE_SCHEMA]=g.DESCRIBE_SCHEMA;Y[g.READ_LOG]=g.READ_LOG;Y[g.ADD_NODE]=g.ADD_NODE;Y[g.LIST_USERS]=g.LIST_USERS;Y[g.LIST_ROLES]=g.LIST_ROLES;Y[g.USER_INFO]=g.USER_INFO;Y[g.SQL]=g.SQL;Y[g.GET_JOB]=g.GET_JOB;Y[g.SEARCH_JOBS_BY_START_DATE]=g.SEARCH_JOBS_BY_START_DATE;Y[g.DELETE_FILES_BEFORE]=g.DELETE_FILES_BEFORE;Y[g.EXPORT_LOCAL]=g.EXPORT_LOCAL;Y[g.EXPORT_TO_S3]=g.EXPORT_TO_S3;Y[g.CLUSTER_STATUS]=g.CLUSTER_STATUS;Y[g.REMOVE_NODE]=g.REMOVE_NODE;Y[g.RESTART]=g.RESTART;Y[g.CUSTOM_FUNCTIONS_STATUS]=g.CUSTOM_FUNCTIONS_STATUS;Y[g.GET_CUSTOM_FUNCTIONS]=g.GET_CUSTOM_FUNCTIONS;Y[g.GET_CUSTOM_FUNCTION]=g.GET_CUSTOM_FUNCTION;Y[g.SET_CUSTOM_FUNCTION]=g.SET_CUSTOM_FUNCTION;Y[g.DROP_CUSTOM_FUNCTION]=g.DROP_CUSTOM_FUNCTION;Y[g.ADD_CUSTOM_FUNCTION_PROJECT]=g.ADD_CUSTOM_FUNCTION_PROJECT;Y[g.DROP_CUSTOM_FUNCTION_PROJECT]=g.DROP_CUSTOM_FUNCTION_PROJECT;Y[g.PACKAGE_CUSTOM_FUNCTION_PROJECT]=g.PACKAGE_CUSTOM_FUNCTION_PROJECT;Y[g.DEPLOY_CUSTOM_FUNCTION_PROJECT]=g.DEPLOY_CUSTOM_FUNCTION_PROJECT;var RO={RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help"},mO={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},dE={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"},AO=EE.invert(dE),h={CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root",HTTP_THREADS:"http_threads",HTTP_SESSION_AFFINITY:"http_sessionAffinity",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT:"operationsApi_authentication_operationTokenTimeout",OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT:"operationsApi_authentication_refreshTokenTimeout",OPERATIONSAPI_FOREGROUND:"operationsApi_foreground",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERT_AUTH:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_NODEENV:"operationsApi_nodeEnv",ROOTPATH:"rootPath",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",SCHEMAS:"schemas"},SE={settings_path:lE.SETTINGS_PATH_KEY,hdb_root_key:h.ROOTPATH,hdb_root:h.ROOTPATH,server_port_key:h.OPERATIONSAPI_NETWORK_PORT,server_port:h.OPERATIONSAPI_NETWORK_PORT,cert_key:h.OPERATIONSAPI_TLS_CERTIFICATE,certificate:h.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:h.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:h.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:h.OPERATIONSAPI_NETWORK_HTTPS,https_on:h.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:h.OPERATIONSAPI_NETWORK_CORS,cors_on:h.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:h.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:h.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:h.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:h.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:h.LOGGING_LEVEL,log_level:h.LOGGING_LEVEL,log_path_key:h.LOGGING_ROOT,log_path:h.LOGGING_ROOT,props_env_key:h.OPERATIONSAPI_NODEENV,node_env:h.OPERATIONSAPI_NODEENV,clustering_node_name_key:h.CLUSTERING_NODENAME,node_name:h.CLUSTERING_NODENAME,clustering_enabled_key:h.CLUSTERING_ENABLED,clustering:h.CLUSTERING_ENABLED,max_http_threads:h.HTTP_THREADS,max_hdb_processes:h.HTTP_THREADS,server_timeout_key:h.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:h.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:h.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:h.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:h.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:h.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:h.LOGGING_AUDITLOG,disable_transaction_log:h.LOGGING_AUDITLOG,operation_token_timeout_key:h.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:h.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:h.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:h.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_enabled_key:h.CUSTOMFUNCTIONS_ENABLED,custom_functions:h.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:h.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:h.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:h.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:h.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:h.HTTP_THREADS,log_to_file:h.LOGGING_FILE,log_to_stdstreams:h.LOGGING_STDSTREAMS,run_in_foreground:h.OPERATIONSAPI_FOREGROUND,local_studio_on:h.LOCALSTUDIO_ENABLED,clustering_port:h.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:h.CLUSTERING_USER,clustering_enabled:h.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:h.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:h.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:h.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:h.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:h.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:h.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:h.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:h.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:h.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:h.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:h.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:h.CLUSTERING_NODENAME,clustering_tls_certificate:h.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:h.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:h.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:h.CLUSTERING_TLS_INSECURE,clustering_tls_verify:h.CLUSTERING_TLS_VERIFY,clustering_loglevel:h.CLUSTERING_LOGLEVEL,customfunctions_enabled:h.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:h.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:h.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:h.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:h.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:h.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:h.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:h.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:h.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:h.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:h.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:h.CUSTOMFUNCTIONS_NODEENV,http_threads:h.HTTP_THREADS,http_session_affinity:h.HTTP_SESSION_AFFINITY,customfunctions_processes:h.HTTP_THREADS,customfunctions_root:h.CUSTOMFUNCTIONS_ROOT,localstudio_enabled:h.LOCALSTUDIO_ENABLED,logging_file:h.LOGGING_FILE,logging_level:h.LOGGING_LEVEL,logging_root:h.LOGGING_ROOT,logging_rotation_enabled:h.LOGGING_ROTATION_ENABLED,logging_rotation_compress:h.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:h.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:h.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:h.LOGGING_ROTATION_PATH,logging_stdstreams:h.LOGGING_STDSTREAMS,logging_auditlog:h.LOGGING_AUDITLOG,operationsapi_authentication_operationtokentimeout:h.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:h.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:h.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:h.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:h.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:h.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:h.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:h.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:h.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:h.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:h.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:h.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:h.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:h.OPERATIONSAPI_NODEENV,operationsapi_root:h.ROOTPATH,schemas:h.SCHEMAS,storage_path:h.STORAGE_PATH};for(let e in h){let t=h[e];SE[t.toLowerCase()]=t}var gO={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},pO={csv_file_load:"csv_file_load",csv_data_load:g.CSV_DATA_LOAD,csv_url_load:g.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"},NO={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"},OO={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},IO={FILE_SYSTEM:"fs",LMDB:"lmdb"},CO={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},bO={DEVELOPMENT:8192,DEFAULT:512},LO={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"},yO={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"},wO={ENOENT:"ENOENT",EACCES:"EACCES"},fE={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},MO="__clustering__",DO=Object.values(fE),UO=15984864e5,hE={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},PO=EE.invert(hE),HO={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"},BO=111,vO=`\r
3
- `,GO={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},qO=["*","%"],FO="unauthorized_access",xO="func_val",VO={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},kO={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},YO={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"},$O={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},KO={HTTP:"http"},WO={STOPPED:"stopped",ONLINE:"online"},QO="3.x.x";TE.exports={LOCAL_HARPERDB_OPERATIONS:Y,HDB_SUPPORT_ADDRESS:aE,HDB_SUPPORT_URL:cE,HDB_PRICING_URL:gN,SUPPORT_HELP_MSG:pN,LICENSE_HELP_MSG:uE,HDB_PROC_NAME:iE,HDB_PROC_DESCRIPTOR:V_,CLUSTERING_LEAF_PROC_DESCRIPTOR:Wi,CLUSTERING_HUB_PROC_DESCRIPTOR:Ki,SYSTEM_SCHEMA_NAME:xN,HASH_FOLDER_NAME:VN,HDB_HOME_DIR_NAME:kN,UPDATE_FILE_NAME:WN,LICENSE_KEY_DIR_NAME:$N,BOOT_PROPS_FILE_NAME:KN,JOB_TYPE_ENUM:pO,JOB_STATUS_ENUM:SO,SYSTEM_TABLE_NAMES:_O,SYSTEM_TABLE_HASH_ATTRIBUTES:cO,OPERATIONS_ENUM:g,VALID_S3_FILE_TYPES:fO,S3_BUCKET_AUTH_KEYS:hO,VALID_SQL_OPS_ENUM:TO,GEO_CONVERSION_ENUM:mO,HDB_SETTINGS_NAMES:dE,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:AO,SERVICE_ACTIONS_ENUM:RO,CLUSTER_MESSAGE_TYPE_ENUM:NO,CLUSTER_CONNECTION_DIRECTION_ENUM:OO,CLUSTER_EVENTS_DEFS_ENUM:LO,PERIOD_REGEX:yN,DOUBLE_PERIOD_REGEX:wN,UNICODE_PERIOD:MN,FORWARD_SLASH_REGEX:DN,UNICODE_FORWARD_SLASH:UN,ESCAPED_FORWARD_SLASH_REGEX:PN,ESCAPED_PERIOD_REGEX:HN,ESCAPED_DOUBLE_PERIOD_REGEX:BN,REG_KEY_FILE_NAME:EO,RESTART_TIMEOUT_MS:JN,HDB_FILE_PERMISSIONS:XN,SCHEMA_DIR_NAME:eO,TRANSACTIONS_DIR_NAME:tO,LIMIT_COUNT_NAME:rO,ID_ATTRIBUTE_STRING:sO,INSERT_MODULE_ENUM:oO,UPGRADE_JSON_FIELD_NAMES_ENUM:aO,RESTART_CODE:QN,RESTART_CODE_NUM:jN,CLUSTER_OPERATIONS:Sn,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:lO,HDB_INTERNAL_SC_CHANNEL_PREFIX:ve,INTERNAL_SC_CHANNELS:uO,CLUSTERING_MESSAGE_TYPES:HO,HDB_FILE_SUFFIX:YN,BLOB_FOLDER_NAME:ZN,HDB_TRASH_DIR:zN,ORIGINATOR_SET_VALUE:BO,LICENSE_VALUES:CO,RAM_ALLOCATION_ENUM:bO,STORAGE_TYPES_ENUM:IO,TIME_STAMP_NAMES_ENUM:fE,TIME_STAMP_NAMES:DO,PERMS_UPDATE_RELEASE_TIMESTAMP:UO,SEARCH_NOT_FOUND_MESSAGE:NN,SEARCH_ATTRIBUTE_NOT_FOUND:ON,LICENSE_ROLE_DENIED_RESPONSE:IN,LICENSE_MAX_CONNS_REACHED:CN,BASIC_LICENSE_MAX_NON_CU_ROLES:_E,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:AN,VALUE_SEARCH_COMPARATORS:hE,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:PO,LICENSE_FILE_NAME:dO,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:yO,NEW_LINE:vO,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:LN,MOMENT_DAYS_TAG:vN,API_TURNOVER_SEC:GN,LOOPBACK:bN,CODE_EXTENSION:$i,WILDCARD_SEARCH_VALUE:qN,NODE_ERROR_CODES:wO,JAVASCRIPT_EXTENSION:nE,PERMS_CRUD_ENUM:GO,UNAUTHORIZED_PERMISSION_NAME:FO,SEARCH_WILDCARDS:qO,FUNC_VAL:xO,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:VO,JWT_ENUM:kO,CLUSTERING_FLAG:MO,ITC_EVENT_TYPES:YO,CUSTOM_FUNCTION_PROC_NAME:oE,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Yi,SERVICES:$O,THREAD_TYPES:KO,MEM_SETTING_KEY:FN,HDB_RESTART_SCRIPT:aN,PROCESS_DESCRIPTORS:lN,SERVICE_SERVERS:hN,SERVICE_SERVERS_CWD:x_,PROCESS_DESCRIPTORS_VALIDATE:SN,LAUNCH_SERVICE_SCRIPTS:TN,LOG_LEVELS:dN,PROCESS_NAME_ENV_PROP:nO,LOG_NAMES:EN,PM2_PROCESS_STATUSES:WO,CONFIG_PARAM_MAP:SE,CONFIG_PARAMS:h,HDB_CONFIG_FILE:nN,HDB_DEFAULT_CONFIG_FILE:iN,ROLE_TYPES_ENUM:RN,BOOT_PROP_PARAMS:lE,INSTALL_PROMPTS:iO,HDB_ROOT_DIR_NAME:oN,CLUSTERING_PROCESSES:fN,FOREGROUND_PID_FILE:uN,PACKAGE_ROOT:ar,PRE_4_0_0_VERSION:QO,SCHEMAS_PARAM_CONFIG:gO}});var qr=f((Sk,AE)=>{"use strict";var RE=require("minimist");AE.exports=jO;function jO(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=mE(process.env),s=mE(RE(process.argv))):(r=process.env,s=RE(process.argv));let n={};for(let i=0,a=e.length;i<a;i++){let _=e[i];s[_]!==void 0?n[_]=s[_].toString().trim():r[_]!==void 0&&(n[_]=r[_].toString().trim())}return n}o(jO,"assignCMDENVVariables");function mE(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}o(mE,"objKeysToLowerCase")});var p=f((hk,DE)=>{"use strict";var bs=require("fs-extra"),{workerData:JO,threadId:XO}=require("worker_threads"),_r=require("path"),NE=require("yaml"),OE=require("properties-reader"),ue=T(),gE=qr(),ZO=require("os"),{PACKAGE_ROOT:Y_}=T(),IE={};for(let e in console)IE[e]=console[e];var Ce={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},CE={STDOUT:"stdOut",STDERR:"stdErr"},zO=_r.join(Y_,"logs"),eI=_r.join(Y_,"config/yaml/",ue.HDB_DEFAULT_CONFIG_FILE),tI=1e4,qt,Ft,Ie,Qi,ji,Ji,hn,fn;fn===void 0&&bE();DE.exports={notify:wE,fatal:ME,error:Tn,warn:Q_,info:Xi,debug:W_,trace:K_,setLogLevel:_I,log_level:Ie,loggerWithTag:rI,suppressLogging:sI,initLogSettings:bE,setupConsoleLogging:LE,logCustomLevel:oI,closeLogFile:$_,getLogFilePath:()=>Ji,OUTPUTS:CE};function bE(e=!1){try{if(fn===void 0||e){$_();let t=aI();fn=OE(t);let r=gE(["ROOTPATH"]);({level:Ie,config_log_path:ji,to_file:qt,to_stream:Ft}=cI(r.ROOTPATH?_r.join(r.ROOTPATH,ue.HDB_CONFIG_FILE):fn.get("settings_path"))),Qi=ue.LOG_NAMES.HDB,Ji=_r.join(ji,Qi)}}catch(t){if(fn=void 0,t.code===ue.NODE_ERROR_CODES.ENOENT){let r=gE(Object.keys(ue.CONFIG_PARAM_MAP),!0);for(let a in r){let _=ue.CONFIG_PARAM_MAP[a];_&&_.toLowerCase();let c=r[a];if(_===ue.CONFIG_PARAMS.LOGGING_LEVEL){Ie=c;continue}if(_===ue.CONFIG_PARAMS.LOGGING_STDSTREAMS){Ft=c;continue}_===ue.CONFIG_PARAMS.LOGGING_FILE&&(qt=_)}let{default_level:s,default_to_file:n,default_to_stream:i}=uI();qt=qt===void 0?n:qt,qt=pE(qt),Ft=Ft===void 0?i:Ft,Ft=pE(Ft),Ie=Ie===void 0?s:Ie,ji=zO,Qi=ue.LOG_NAMES.INSTALL,Ji=_r.join(ji,Qi);return}throw Tn("Error initializing log settings"),Tn(t),t}LE()}o(bE,"initLogSettings");var k_=!0;function LE(){Cs("error",Tn),Cs("warn",Q_),Cs("log",Xi),Cs("info",Xi),Cs("debug",W_),Cs("trace",K_)}o(LE,"setupConsoleLogging");function Cs(e,t){console[e]=function(...r){if(k_&&t(...r),!/PM2 log:|App \[/.test(r[0]))return IE[e](...r)}}o(Cs,"logConsole");function rI(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(wE),fatal:r(ME),error:r(Tn),warn:r(Q_),info:r(Xi),debug:r(W_),trace:r(K_)};function r(s){return function(...n){return s(t,...n)}}}o(rI,"loggerWithTag");function sI(e){try{k_=!1,e()}finally{k_=!0}}o(sI,"suppressLogging");var nI=JO?.name?.replace(/ /g,"-")||"main";function xt(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,a=[e],_=0,c;for(typeof t[0]=="object"&&(t[0]?.tagName?(a.push(t[0]?.tagName),_++):t[0]?.serviceName&&(c=t[0]?.serviceName,_++)),a.unshift(c||nI+"/"+XO);_<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} [${a.join("] [")}]: ${s}
4
- `}o(xt,"createLogRecord");function Rn(e){qt&&yE(e),Ft&&process.stdout.write(e)}o(Rn,"logStdOut");function Zi(e){qt&&yE(e),Ft&&process.stderr.write(e)}o(Zi,"logStdErr");function yE(e){iI(),bs.appendFileSync(hn,e)}o(yE,"logToFile");function $_(){try{bs.closeSync(hn)}catch{}hn=null}o($_,"closeLogFile");function iI(){hn||(hn=bs.openSync(Ji,"a"),setTimeout(()=>{$_()},tI).unref())}o(iI,"openLogFile");function Xi(...e){Ce[Ie]<=Ce.info&&Rn(xt("info",e))}o(Xi,"info");function K_(...e){Ce[Ie]<=Ce.trace&&Rn(xt("trace",e))}o(K_,"trace");function Tn(...e){Ce[Ie]<=Ce.error&&Zi(xt("error",e))}o(Tn,"error");function W_(...e){Ce[Ie]<=Ce.debug&&Rn(xt("debug",e))}o(W_,"debug");function wE(...e){Ce[Ie]<=Ce.notify&&Rn(xt("notify",e))}o(wE,"notify");function ME(...e){Ce[Ie]<=Ce.fatal&&Zi(xt("fatal",e))}o(ME,"fatal");function Q_(...e){Ce[Ie]<=Ce.warn&&Zi(xt("warn",e))}o(Q_,"warn");function oI(e,t,...r){t===CE.STDERR?Zi(xt(e,r)):Rn(xt(e,r))}o(oI,"logCustomLevel");function aI(){let e;try{e=ZO.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=_r.join(e,ue.HDB_HOME_DIR_NAME,ue.BOOT_PROPS_FILE_NAME);return bs.existsSync(t)||(t=_r.join(Y_,"utility/hdb_boot_properties.file")),t}o(aI,"getPropsFilePath");function _I(e){Ie=e}o(_I,"setLogLevel");function pE(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(pE,"autoCastBoolean");function cI(e){try{if(e.includes("config/settings.js")){let a=OE(e);return{level:a.get(ue.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:_r.dirname(a.get(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:a.get(ue.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:a.get(ue.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=NE.parseDocument(bs.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===ue.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(cI,"getLogConfig");function uI(){try{let e=NE.parseDocument(bs.readFileSync(eI,"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)}}o(uI,"getDefaultConfig")});var Ls=f((Rk,lI)=>{lI.exports={name:"harperdb",version:"4.1.0",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{node:">=14.0.0","preferred-node":"18.15.0","go-lang":"1.19.6","nats-server":"2.9.15"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license --storage_type=lmdb && npm run cover:logging && npm run cover:upgrade && npm run cover:nats && npm run cover:cfserver && npm run cover:lmdbbridge && npm run cover:lmdbutility && npm run cover:hdbserver && npm run cover:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license --storage_type=lmdb","cover:main":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","cover:lmdbbridge":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","cover:lmdbutility":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","cover:hdbserver":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","cover:cfserver":"npm run submodules && cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","cover:nats":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","cover:upgrade":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","cover:apitests":"cd bin/ && node harperdb.js stop && node harperdb.js && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*.js' --config '../unitTests/.mocharc.json' && node harperdb.js stop","cover:logging":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.299.0","@aws-sdk/lib-storage":"3.300.0","@aws-sdk/abort-controller":"3.0.0","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.2.0","@fastify/cors":"~8.2.0","@fastify/static":"~6.9.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4","cbor-x":"1.5.1",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2",esbuild:"^0.17.10","fast-glob":"3.2.12",fastify:"~4.14.1","fastify-plugin":"~4.5.0","fs-extra":"11.1.0","human-readable-ids":"1.0.4",inquirer:"8.2.2","is-number":"7.0.0",joi:"17.8.3",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.0",lmdb:"2.7.10",lodash:"4.17.21",mathjs:"11.6.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4",msgpackr:"1.8.5",nats:"2.12.1",needle:"3.2.0","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.0",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.11.0",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.3.8","stream-chain":"2.2.5","stream-json":"1.7.5",systeminformation:"5.17.10","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.0","validate.js":"0.13.1",yaml:"2.2.1"},devDependencies:{axios:"0.27.2",chai:"4.3.7","chai-integer":"0.1.0",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"^1.22.11","newman-reporter-teamcity":"^0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},lmdb:{msgpackr:"1.8.4"},"newman-reporter-html":{newman:"5.3.2"}}}});var Fr=f((gk,UE)=>{"use strict";var mk=require("fs-extra"),Ak=p();UE.exports={version:EI,printVersion:SI,nodeVersion:dI};var cr=Ls();function EI(){if(cr)return cr.version}o(EI,"version");function dI(){if(cr&&cr.engines&&cr.engines["preferred-node"])return cr.engines["preferred-node"]}o(dI,"nodeVersion");function SI(){cr&&console.log(`HarperDB Version ${cr.version}`)}o(SI,"printVersion")});var vE=f((Nk,BE)=>{"use strict";var PE=require("semver/functions/major"),fI=require("semver/functions/satisfies"),HE=Ls(),mn=process.versions&&process.versions.node?process.versions.node:void 0;BE.exports=hI;function hI(){let e=HE.engines.node,t=HE.engines["preferred-node"];if(mn){if(e&&!fI(mn,e))return{error:`This version of HarperDB supports Node.js versions: ${e}, the currently installed Node.js version is: ${mn}. Please install a version of Node.js that is withing the defined range.`};if(t&&PE(mn)!==PE(t))return{warn:`This version of HarperDB is tested against Node.js version ${t}, the currently installed Node.js version is: ${mn}. Some issues may occur with untested versions of Node.js.`}}}o(hI,"checkNodeVersion")});var j_=f((Ik,GE)=>{"use strict";var TI=require("util"),RI=require("path"),mI=require("child_process"),AI=TI.promisify(mI.execFile),gI=1e3*1e3*10;GE.exports={findPs:pI};async function pI(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await AI("ps",["wwxo",`pid,${r}`],{maxBuffer:gI});for(let n of s.trim().split(`
5
- `).slice(1)){n=n.trim();let[i]=n.split(" ",1),a=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=a}}))}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:RI.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"])}))}o(pI,"findPs")});var Ee=f((bk,FE)=>{"use strict";var NI="__dbis__",OI="__environment_name__",II="__dbi_defintion__",CI={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"},bI=["__createdtime__","__updatedtime__"],LI="\uFFFF",qE={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},yI=Object.values(qE);FE.exports={INTERNAL_DBIS_NAME:NI,DBI_DEFINITION_NAME:II,SEARCH_TYPES:CI,TIMESTAMP_NAMES:bI,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:OI,TRANSACTIONS_DBI_NAMES_ENUM:qE,TRANSACTIONS_DBIS:yI,OVERFLOW_MARKER:LI}});var Xe=f((Lk,jE)=>{"use strict";var xE=T(),VE=Ee(),kE={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},YE=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),$E={500:YE("There was an error processing your request."),400:"Invalid request"},wI=$E[kE.INTERNAL_SERVER_ERROR],MI={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.`},DI={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},UI={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"},PI={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 ${VE.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${VE.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"},HI={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${xE.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 ${xE.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"},KE={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"},BI={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."},vI={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`},GI={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"},qI={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},FI={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`},WE={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.`},QE={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}`},xI={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."},VI={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},kI={...KE,...UI,...MI,...BI,...vI,...GI,...qI,...FI,...HI,...WE,...QE,...xI,...VI,...DI};jE.exports={CHECK_LOGS_WRAPPER:YE,HDB_ERROR_MSGS:kI,DEFAULT_ERROR_MSGS:$E,DEFAULT_ERROR_RESP:wI,HTTP_STATUS_CODES:kE,LMDB_ERRORS_ENUM:PI,AUTHENTICATION_ERROR_MSGS:KE,VALIDATION_ERROR_MSGS:WE,ITC_ERRORS:QE}});var X=f((wk,ZE)=>{"use strict";var ys=Xe(),YI=p(),$I=T(),An=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,JE),this.http_resp_code=s||ys.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(ys.DEFAULT_ERROR_MSGS[s]?ys.DEFAULT_ERROR_MSGS[s]:ys.DEFAULT_ERROR_MSGS[ys.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&&YI[n](i)}};o(An,"HdbError");function JE(e,t,r,s=$I.LOG_LEVELS.ERROR,n=null,i=!1){if(XE(e))return e;let a=new An(e,t,r,s,n);return i&&delete a.stack,a}o(JE,"handleHDBError");function XE(e){return e.__proto__.constructor.name===An.name}o(XE,"isHDBError");ZE.exports={isHDBError:XE,handleHDBError:JE,hdb_errors:ys}});var O=f((Uk,Ed)=>{"use strict";var xr=require("path"),KI=require("fs-extra"),Re=p(),zE=require("fs-extra"),gn=require("os"),WI=require("net"),QI=require("recursive-iterator"),Te=T(),sd=j_(),ed=require("papaparse"),zi=require("moment"),{inspect:jI}=require("util"),td=require("is-number"),Dk=require("lodash"),{hdb_errors:eo}=X(),nd=require("util").promisify(setTimeout),JI=100,XI=5,ZI="",zI=4,rd={true:!0,false:!1,undefined:null,null:null,NaN:NaN};Ed.exports={isEmpty:Ge,isEmptyOrZeroLength:Nt,arrayHasEmptyValues:rC,arrayHasEmptyOrZeroLengthValues:sC,buildFolderPath:nC,isBoolean:id,errorizeMessage:eC,stripFileExtension:oC,autoCast:aC,autoCastJSON:od,autoCastJSONDeep:J_,removeDir:_C,compareVersions:cC,isCompatibleDataVersion:uC,escapeRawValue:lC,unescapeValue:EC,stringifyProps:dC,timeoutPromise:fC,isClusterOperation:TC,getClusterUser:mC,checkGlobalSchemaTable:RC,getHomeDir:_d,getPropsFilePath:SC,promisifyPapaParse:AC,removeBOM:cd,createEventPromise:gC,checkProcessRunning:pC,checkSchemaTableExist:NC,checkSchemaExists:ud,checkTableExists:ld,getStartOfTomorrowInSeconds:OC,getLimitKey:IC,isObject:iC,isNotEmptyAndHasValue:tC,autoCasterIsNumberCheck:ad,backtickASTSchemaItems:CC,isPortTaken:hC,stopProcess:bC,createForkArgs:LC,autoCastBoolean:yC,async_set_timeout:nd,getTableHashAttribute:wC,doesSchemaExist:MC,doesTableExist:DC,stringifyObj:UC,ms_to_time:PC,changeExtension:HC,PACKAGE_ROOT:Te.PACKAGE_ROOT};function eC(e){return e instanceof Error?e:new Error(e)}o(eC,"errorizeMessage");function Ge(e){return e==null}o(Ge,"isEmpty");function tC(e){return!Ge(e)&&(e||e===0||e===""||id(e))}o(tC,"isNotEmptyAndHasValue");function Nt(e){return Ge(e)||e.length===0||e.size===0}o(Nt,"isEmptyOrZeroLength");function rC(e){if(Ge(e))return!0;for(let t=0;t<e.length;t++)if(Ge(e[t]))return!0;return!1}o(rC,"arrayHasEmptyValues");function sC(e){if(Nt(e))return!0;for(let t=0;t<e.length;t++)if(Nt(e[t]))return!0;return!1}o(sC,"arrayHasEmptyOrZeroLengthValues");function nC(...e){try{return e.join(xr.sep)}catch{console.error(e)}}o(nC,"buildFolderPath");function id(e){return Ge(e)?!1:e===!0||e===!1}o(id,"isBoolean");function iC(e){return Ge(e)?!1:typeof e=="object"}o(iC,"isObject");function oC(e){return Nt(e)?ZI:e.slice(0,-zI)}o(oC,"stripFileExtension");function aC(e){return Ge(e)||e===""||typeof e!="string"?e:rd[e]!==void 0?rd[e]:ad(e)===!0?Number(e):e}o(aC,"autoCast");function od(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(od,"autoCastJSON");function J_(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=J_(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=J_(r);s!==r&&(e[t]=s)}return e}else return od(e)}o(J_,"autoCastJSONDeep");function ad(e){if(e.startsWith("0.")&&td(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&td(e))}o(ad,"autoCasterIsNumberCheck");async function _C(e){if(Nt(e))throw new Error(`Directory path: ${e} does not exist`);try{await zE.emptyDir(e),await zE.remove(e)}catch(t){throw Re.error(`Error removing files in ${e} -- ${t}`),t}}o(_C,"removeDir");function cC(e,t){if(Nt(e)){Re.info("Invalid current version sent as parameter.");return}if(Nt(t)){Re.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,a=n.replace(s,"").split("."),_=i.replace(s,"").split("."),c=Math.min(a.length,_.length);for(let u=0;u<c;u++)if(r=parseInt(a[u],10)-parseInt(_[u],10),r)return r;return a.length-_.length}o(cC,"compareVersions");function uC(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}o(uC,"isCompatibleDataVersion");function lC(e){if(Ge(e))return e;let t=String(e);return t==="."?Te.UNICODE_PERIOD:t===".."?Te.UNICODE_PERIOD+Te.UNICODE_PERIOD:t.replace(Te.FORWARD_SLASH_REGEX,Te.UNICODE_FORWARD_SLASH)}o(lC,"escapeRawValue");function EC(e){if(Ge(e))return e;let t=String(e);return t===Te.UNICODE_PERIOD?".":t===Te.UNICODE_PERIOD+Te.UNICODE_PERIOD?"..":String(e).replace(Te.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(EC,"unescapeValue");function dC(e,t){if(Ge(e))return Re.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let a of i)r+=";"+a+gn.EOL}!Nt(s)&&s[0]===";"?r+=" "+s+n+gn.EOL:Nt(s)||(r+=s+"="+n+gn.EOL)}catch{Re.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}o(dC,"stringifyProps");function _d(){let e;try{e=gn.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}o(_d,"getHomeDir");function SC(){let e=xr.join(_d(),Te.HDB_HOME_DIR_NAME,Te.BOOT_PROPS_FILE_NAME);return KI.existsSync(e)||(e=xr.join(__dirname,"../","hdb_boot_properties.file")),e}o(SC,"getPropsFilePath");function fC(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}o(fC,"timeoutPromise");async function hC(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=WI.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}o(hC,"isPortTaken");function TC(e){try{return Te.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Re.error(`Error checking operation against cluster ops ${t}`)}return!1}o(TC,"isClusterOperation");function RC(e,t){if(!global.hdb_schema[e])return eo.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return eo.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(RC,"checkGlobalSchemaTable");function mC(e,t){if(Ge(t)){Re.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Ge(e)||Nt(e)){Re.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){Re.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){Re.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(mC,"getClusterUser");function AC(){ed.parsePromise=function(e,t){return new Promise(function(r,s){ed.parse(e,{header:!0,transformHeader:cd,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}o(AC,"promisifyPapaParse");function cd(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(cd,"removeBOM");function gC(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;Re.info(`Got cluster status event response: ${jI(n)}`);try{i.cancel()}catch{Re.error("Error trying to cancel timeout.")}s(n)})})}o(gC,"createEventPromise");async function pC(e){let t=!0,r=0;do await nd(JI*r++),(await sd.findPs(e)).length>0&&(t=!1);while(t&&r<XI);if(t)throw new Error(`process ${e} was not started`)}o(pC,"checkProcessRunning");function NC(e,t){let r=ud(e);if(r)return r;let s=ld(e,t);if(s)return s}o(NC,"checkSchemaTableExist");function ud(e){if(!global.hdb_schema[e])return eo.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(ud,"checkSchemaExists");function ld(e,t){if(!global.hdb_schema[e][t])return eo.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(ld,"checkTableExists");function OC(){let e=zi().utc().add(1,Te.MOMENT_DAYS_TAG).startOf(Te.MOMENT_DAYS_TAG).unix(),t=zi().utc().unix();return e-t}o(OC,"getStartOfTomorrowInSeconds");function IC(){return zi().utc().format("DD-MM-YYYY")}o(IC,"getLimitKey");function CC(e){try{let t=new QI(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){Re.error("Got an error back ticking items."),Re.error(t)}}o(CC,"backtickASTSchemaItems");async function bC(e){let t=gn.userInfo();(await sd.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),Re.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}o(bC,"stopProcess");function LC(e){return[e]}o(LC,"createForkArgs");function yC(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(yC,"autoCastBoolean");function wC(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}o(wC,"getTableHashAttribute");function MC(e){return global?.hdb_schema?.[e]!==void 0}o(MC,"doesSchemaExist");function DC(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}o(DC,"doesTableExist");function UC(e){try{return JSON.stringify(e)}catch{return e}}o(UC,"stringifyObj");function PC(e){let t=zi.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}o(PC,"ms_to_time");function HC(e,t){let r=xr.basename(e,xr.extname(e));return xr.join(xr.dirname(e),r+t)}o(HC,"changeExtension")});var X_=f((Hk,dd)=>{"use strict";var BC={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))},vC="certificate.pem",GC="privateKey.pem",qC="ca.pem";dd.exports={CERTIFICATE_VALUES:BC,CERTIFICATE_PEM_NAME:vC,PRIVATEKEY_PEM_NAME:GC,CA_PEM_NAME:qC}});var Ze=f((Bk,Sd)=>{"use strict";var be=require("validate.js");be.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||be.validators.type.checks[t](e)?null:` must be a '${t}' value`};be.validators.type.checks={Object:function(e){return be.isObject(e)&&!be.isArray(e)},Array:be.isArray,Integer:be.isInteger,Number:be.isNumber,String:be.isString,Date:be.isDate,Boolean:function(e){return typeof e=="boolean"}};be.validators.hasValidFileExt=function(e,t){return be.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};Sd.exports={validateObject:FC,validateObjectAsync:xC,validateBySchema:VC};function FC(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=be(e,t,{format:"flat"});return r?new Error(r):null}o(FC,"validateObject");async function xC(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await be.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}o(xC,"validateObjectAsync");function VC(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(VC,"validateBySchema")});var z_=f((qk,Td)=>{"use strict";var kC=require("fs-extra"),M=require("joi"),YC=require("os"),{boolean:z,string:Vt,number:_t,array:Z_}=M.types(),pn=require("path"),$C=p(),ro=O(),Gk=X_(),KC=T(),WC=Ze(),fd="log",QC="custom_functions",jC="Invalid logging.rotation.maxSize unit. Available units are G, M or K",JC="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",XC="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",ZC="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",zC="rootPath config parameter is undefined",eb="clustering.enabled config parameter is undefined",Vr=_t.min(0).required(),so=Z_.items({host:Vt.required(),port:Vr}).empty(null),ur;Td.exports={configValidator:tb,routesValidator:ab,route_constraints:so};function tb(e){if(ur=e.rootPath,ro.isEmpty(ur))throw zC;let t=z.required(),r=M.valid("production","development").required(),s=_t.min(1).max(1e3).empty(null).default(ob),n=Vt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(to),i=M.custom(rb).messages({"any.custom":"{:#label} {:#error}"}),a=Vt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),_=M.string().empty(null).default(to),c=M.custom(sb).empty(null).default(to),u=e.clustering?.enabled;if(ro.isEmpty(u))throw eb;let l;return u===!0?l=M.object({enabled:t,hubServer:M.object({cluster:M.object({name:M.required().empty(null),network:M.object({port:Vr,routes:so}).required()}).required(),leafNodes:M.object({network:M.object({port:Vr}).required()}).required(),network:M.object({port:Vr}).required()}).required(),leafServer:M.object({network:M.object({port:Vr,routes:so}).required(),streams:M.object({maxAge:_t.min(120).allow(null).optional(),maxBytes:_t.min(1).allow(null).optional(),maxMsgs:_t.min(1).allow(null).optional(),path:_}).required()}).required(),logLevel:M.valid("error","warn","info","debug","trace"),nodeName:a,tls:M.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:z.required(),verify:z.optional()}),user:Vt.optional().empty(null)}).required():l=M.object({enabled:t,tls:M.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:z.required()})}).required(),M.object({clustering:l,customFunctions:M.object({enabled:t,network:M.object({cors:z.required(),corsAccessList:Z_.required(),headersTimeout:_t.min(1).required(),https:z.required(),keepAliveTimeout:_t.min(1).required(),port:Vr,timeout:_t.min(1).required()}),nodeEnv:r,root:n,tls:M.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:M.object({enabled:t}).required(),logging:M.object({file:z.required(),level:M.valid("notify","fatal","error","warn","info","debug","trace"),rotation:M.object({enabled:z.optional(),compress:z.optional(),interval:Vt.custom(ib).optional().empty(null),maxSize:Vt.custom(nb).optional().empty(null),path:Vt.optional().empty(null).default(to)}).required(),root:n,stdStreams:z.required(),auditLog:z.required()}).required(),operationsApi:M.object({authentication:M.object({operationTokenTimeout:M.required(),refreshTokenTimeout:M.required()}).required(),foreground:z.required(),network:M.object({cors:z.required(),corsAccessList:Z_.required(),headersTimeout:_t.min(1).required(),https:z.required(),keepAliveTimeout:_t.min(1).required(),port:Vr,timeout:_t.min(1).required()}).required(),nodeEnv:r,tls:M.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:Vt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:M.object({threads:s}).required(),storage:M.object({writeAsync:z.required(),overlappingSync:z.optional(),caching:z.optional(),compression:z.optional(),noReadAhead:z.optional(),path:c,prefetchWrites:z.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(tb,"configValidator");function hd(e){return kC.existsSync(e)?null:`Specified path ${e} does not exist.`}o(hd,"doesPathExist");function rb(e,t){if(e===null)return;let r=hd(e);return r?t.message(r):e}o(rb,"validatePemFile");function sb(e,t){M.assert(e,Vt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=hd(e);if(r)return t.message(r)}o(sb,"validatePath");function nb(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(jC);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(XC):e}o(nb,"validateRotationMaxSize");function ib(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(JC);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(ZC):e}o(ib,"validateRotationInterval");function ob(e,t){let r=t.state.path.join("."),s=YC.cpus().length,n=s-1;return n<=2&&(n=2),$C.info(`Detected ${s} cores on this machine, defaulting ${r} to ${n}`),n}o(ob,"setDefaultThreads");function to(e,t){if(!ro.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(ro.isEmpty(ur))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return pn.join(ur,QC);case"logging.root":return pn.join(ur,fd);case"clustering.leafServer.streams.path":return pn.join(ur,"clustering","leaf");case"storage.path":return pn.join(ur,KC.SCHEMA_DIR_NAME);case"logging.rotation.path":return pn.join(ur,fd);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(to,"setDefaultRoot");function ab(e){let t=M.object({routes:so});return WC.validateBySchema({routes:e},t)}o(ab,"routesValidator")});var Fe=f((xk,bd)=>{"use strict";var et=T(),qe=O(),_e=p(),{configValidator:_b,routesValidator:Rd}=z_(),ze=require("fs-extra"),cb=require("yaml"),Ot=require("path"),ub=require("is-number"),Ad=require("properties-reader"),lb=require("lodash"),{handleHDBError:Eb}=X(),{HTTP_STATUS_CODES:db,HDB_ERROR_MSGS:no}=Xe(),Sb=require("minimist"),{SCHEMAS_PARAM_CONFIG:Nn,CONFIG_PARAMS:lr,CONFIG_PARAM_MAP:kt}=et,fb="Unable to get config value because config is uninitialized",hb="Config successfully initialized",Tb="Error backing up config file",Rb="Empty parameter sent to getConfigValue",gd=Ot.join(et.PACKAGE_ROOT,"config","yaml",et.HDB_DEFAULT_CONFIG_FILE),mb="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",md={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"},io,de;bd.exports={createConfigFile:Ab,getDefaultConfig:gb,getConfigValue:Nd,initConfig:Od,flattenConfig:kr,updateConfigValue:Id,updateConfigObject:Nb,getConfiguration:Cb,setConfiguration:bb,readConfigFile:sc,getClusteringRoutes:Lb,initOldConfig:Cd,getConfigFromFile:yb};function Ab(e){let t=ws(gd);io=kr(t.toJSON());let r;for(let a in e){let _=kt[a.toLowerCase()];if(_===lr.SCHEMAS){r=e[a];continue}if(_!==void 0){let c=_.split("_"),u=ec(_,e[a]);try{t.setIn([...c],u)}catch(l){_e.error(l)}}}r&&pd(t,r),rc(t);let s=t.toJSON();de=kr(s);let n=t.getIn(["rootPath"]),i=Ot.join(n,et.HDB_CONFIG_FILE);ze.createFileSync(i),ze.writeFileSync(i,String(t)),_e.trace(`Config file written to ${i}`)}o(Ab,"createConfigFile");function pd(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!qe.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Nn.TABLES))for(let i in s[n][Nn.TABLES])for(let a in s[n][Nn.TABLES][i]){let _=s[n][Nn.TABLES][i][a],c=[lr.SCHEMAS,n,Nn.TABLES,i,a];e.hasIn(c)?e.setIn(c,_):e.addIn(c,_)}else for(let i in s[n]){let a=s[n][i],_=[lr.SCHEMAS,n,i];e.hasIn(_)?e.setIn(_,a):e.addIn(_,a)}}}catch(s){_e.error("Error parsing schemas CLI/env config arguments",s)}}o(pd,"setSchemasConfig");function gb(e){if(io===void 0){let r=ws(gd);io=kr(r.toJSON())}let t=kt[e.toLowerCase()];if(t!==void 0)return io[t.toLowerCase()]}o(gb,"getDefaultConfig");function Nd(e){if(qe.isEmpty(e)){_e.error(Rb);return}if(de===void 0){_e.trace(fb);return}let t=kt[e.toLowerCase()];if(t!==void 0)return de[t.toLowerCase()]}o(Nd,"getConfigValue");function tc(e){let t=Sb(process.argv);return t.ROOTPATH?Ot.join(t.ROOTPATH,et.HDB_CONFIG_FILE):Ad(e).get(et.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}o(tc,"getConfigFilePath");function Od(e=!1){if(de===void 0||e){let t=qe.getPropsFilePath();try{ze.accessSync(t,ze.constants.F_OK|ze.constants.R_OK)}catch(i){throw _e.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}let r=tc(t),s;if(r.includes("config/settings.js"))try{Cd(r);return}catch(i){if(i.code!==et.NODE_ERROR_CODES.ENOENT)throw i}try{s=ws(r)}catch(i){if(i.code===et.NODE_ERROR_CODES.ENOENT){_e.trace(`HarperDB config file not found at ${r}.
6
- This can occur during early stages of install where the config file has not yet been created`);return}else throw _e.error(i),new Error(`Error reading HarperDB config file at ${r}`)}pb(s,r),rc(s);let n=s.toJSON();if(de=kr(n),de.logging_rotation_rotate)for(let i in md)de[i]&&_e.error(`Config ${md[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);_e.trace(hb)}}o(Od,"initConfig");function pb(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Ot.join(r,et.SCHEMA_DIR_NAME)),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Ot.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Ot.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(_e.trace("Updating config file with missing config params"),ze.writeFileSync(t,String(e)))}o(pb,"checkForUpdatedConfig");function rc(e){let t=e.toJSON(),r=_b(t);if(r.error)throw no.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)}o(rc,"validateConfig");function Nb(e,t){de===void 0&&(de={});let r=kt[e.toLowerCase()];if(r===void 0){_e.trace(`Unable to update config object because config param '${e}' does not exist`);return}de[r.toLowerCase()]=t}o(Nb,"updateConfigObject");function Id(e,t,r=void 0,s=!1,n=!1){de===void 0&&Od();let i=Nd(kt.hdb_root),a=Ot.join(i,et.HDB_CONFIG_FILE),_=ws(a),c;if(r===void 0&&e.toLowerCase()===lr.SCHEMAS)c=t;else if(r===void 0){let E=kt[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let d=E.split("_"),S=ec(E,t);_.setIn([...d],S)}else for(let E in r){let d=kt[E.toLowerCase()];if(d===lr.SCHEMAS){c=r[E];continue}if(d!==void 0){let S=d.split("_"),R=ec(d,r[E]);try{_.setIn([...S],R)}catch(m){_e.error(m)}}}c&&pd(_,c),rc(_);let u=_.getIn(["rootPath"]),l=Ot.join(u,et.HDB_CONFIG_FILE);s===!0&&Ob(a,u),ze.writeFileSync(l,String(_)),n&&(de=kr(_.toJSON())),_e.trace(`Config parameter: ${e} updated with value: ${t}`)}o(Id,"updateConfigValue");function Ob(e,t){try{let r=Ot.join(t,"backup",`${et.HDB_CONFIG_FILE}.bak`);ze.copySync(e,r),_e.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){_e.error(Tb),_e.error(r)}}o(Ob,"backupConfigFile");var Ib=["schemas"];function kr(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!Ib.includes(r)){let s=kr(e[r]);for(let n in s)s.hasOwnProperty(n)&&(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}o(kr,"flattenConfig");function ec(e,t){if(e===lr.CLUSTERING_NODENAME||e===lr.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(ub(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||qe.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 qe.autoCast(t)}o(ec,"castConfigValue");function Cb(){let e=qe.getPropsFilePath(),t=tc(e);return ws(t).toJSON()}o(Cb,"getConfiguration");async function bb(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Id(void 0,void 0,n,!0),mb}catch(i){throw typeof i=="string"||i instanceof String?Eb(i,i,db.BAD_REQUEST,void 0,void 0,!0):i}}o(bb,"setConfiguration");function sc(){let e=qe.getPropsFilePath();try{ze.accessSync(e,ze.constants.F_OK|ze.constants.R_OK)}catch(s){throw _e.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=tc(e);return ws(t).toJSON()}o(sc,"readConfigFile");function ws(e){return cb.parseDocument(ze.readFileSync(e,"utf8"),{simpleKeys:!0})}o(ws,"parseYamlDoc");function Lb(){let e=sc(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=qe.isEmptyOrZeroLength(t)?[]:t;let r=Rd(t);if(r)throw no.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=qe.isEmptyOrZeroLength(s)?[]:s;let n=Rd(s);if(n)throw no.CONFIG_VALIDATION(n.message);if(!qe.isEmptyOrZeroLength(s)&&!qe.isEmptyOrZeroLength(t)){let i=t.filter(a=>s.some(_=>_.host===a.host&&_.port===a.port));if(!qe.isEmptyOrZeroLength(i)){let a=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw no.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:s}}o(Lb,"getClusteringRoutes");function Cd(e){let t=Ad(e);de={};for(let r in kt){let s=t.get(r.toUpperCase());if(qe.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=kt[r].toLowerCase();n===lr.LOGGING_ROOT?de[n]=Ot.dirname(s):de[n]=s}return de}o(Cd,"initOldConfig");function yb(e){let t=sc();return lb.get(t,e.replaceAll("_","."))}o(yb,"getConfigFromFile")});var v=f((kk,yd)=>{"use strict";var nc=require("fs-extra"),It=require("path"),wb=require("os"),Mb=require("properties-reader"),On=p(),Ms=O(),L=T(),oo=Fe(),Db="Error initializing environment manager",ao="BOOT_PROPS_FILE_PATH",Ld=!1,Ub={[L.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Yt={};yd.exports={BOOT_PROPS_FILE_PATH:ao,getHdbBasePath:Pb,setHdbBasePath:Hb,get:Bb,initSync:Gb,setProperty:B,initTestEnvironment:qb};function Pb(){return Yt[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(Pb,"getHdbBasePath");function Hb(e){Yt[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(Hb,"setHdbBasePath");function Bb(e){let t=oo.getConfigValue(e);return t===void 0?Yt[e]:t}o(Bb,"get");function B(e,t){Ub[e]&&(Yt[e]=t),oo.updateConfigObject(e,t)}o(B,"setProperty");function vb(){let e;try{e=Ms.getPropsFilePath(),nc.accessSync(e,nc.constants.F_OK|nc.constants.R_OK),Ld=!0;let t=Mb(e);return Yt[L.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(L.HDB_SETTINGS_NAMES.INSTALL_USER),Yt[L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Yt[ao]=e,!0}catch{return On.trace(`Environment manager found no properties file at ${e}`),!1}}o(vb,"doesPropFileExist");function Gb(e=!1){try{(Ld||vb())&&(oo.initConfig(e),Yt[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=oo.getConfigValue(L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){On.error(Db),On.error(t),console.error(t),process.exit(1)}}o(Gb,"initSync");function qb(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:a,local_studio_on:_}=e,c=It.join(__dirname,"../../","unitTests");Yt[ao]=It.join(c,"hdb_boot_properties.file"),B(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,It.join(c,"settings.test")),B(L.HDB_SETTINGS_NAMES.INSTALL_USER,wb.userInfo().username),B(L.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,It.join(c,"envDir","utility","keys","privateKey.pem")),B(L.HDB_SETTINGS_NAMES.CERT_KEY,It.join(c,"envDir","utility","keys","certificate.pem")),B(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,It.join(c,"envDir","utility","keys","privateKey.pem")),B(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,It.join(c,"envDir","utility","keys","certificate.pem")),B(L.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),B(L.HDB_SETTINGS_NAMES.LOG_PATH_KEY,It.join(c,"envDir","log")),B(L.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),B(L.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),B(L.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),B(L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,It.join(c,"envDir")),B(L.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Ms.isEmpty(n)?!0:n),B(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Ms.isEmpty(n)?!0:n),B(L.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),B(L.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Ms.isEmpty(i)?!1:i),B(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Ms.isEmpty(i)?!1:i),B(L.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),B(L.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),B(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),B(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),B(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,It.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),B(L.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Ms.isEmpty(_)?!1:_),a&&(B("CORS_ACCESSLIST",a),B(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,a)),s&&(B(L.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),B(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(B(L.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),B(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(B(L.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),B(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${ao}. Please check your boot props and settings files`;On.fatal(r),On.error(t)}}o(qb,"initTestEnvironment")});var ct=f((Kk,Md)=>{"use strict";var{platform:$k}=require("os"),Fb="nats-server.zip",ic="nats-server",xb=process.platform==="win32"?`${ic}.exe`:ic,oc="HDB",Vb=/^[^\s.,*>]+$/,wd="__request__",kb=o(e=>`${e}.${wd}`,"REQUEST_SUBJECT"),Yb={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},$b={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Kb={HUB:"hub.pid",LEAF:"leaf.pid"},Wb={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Qb={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:oc,deliver_subject:"__HDB__.WORKQUEUE"},jb={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:oc,deliver_subject:"HDB.SCHEMAQUEUE"},Jb={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:oc,deliver_subject:"HDB.USERQUEUE"},Xb={SUCCESS:"success",ERROR:"error"},Zb={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},zb={TXN:"txn",MSGID:"msgid"},Ds={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},eL={[Ds.ERR]:1,[Ds.WRN]:2,[Ds.INF]:3,[Ds.DBG]:4,[Ds.TRC]:5},tL={debug:"-D",trace:"-DVV"};Md.exports={NATS_SERVER_ZIP:Fb,NATS_SERVER_NAME:ic,NATS_BINARY_NAME:xb,PID_FILES:Kb,NATS_CONFIG_FILES:$b,SERVER_SUFFIX:Wb,WORK_QUEUE_CONSUMER_NAMES:Qb,SCHEMA_QUEUE_CONSUMER_NAMES:jb,USER_QUEUE_CONSUMER_NAMES:Jb,NATS_TERM_CONSTRAINTS_RX:Vb,REQUEST_SUFFIX:wd,UPDATE_REMOTE_RESPONSE_STATUSES:Xb,CLUSTER_STATUS_STATUSES:Zb,REQUEST_SUBJECT:kb,SUBJECT_PREFIXES:zb,MSG_HEADERS:Yb,LOG_LEVELS:Ds,LOG_LEVEL_FLAGS:tL,LOG_LEVEL_HIERARCHY:eL}});var Ud=f((Qk,Dd)=>{"use strict";var rL=ct(),_o=class{constructor(t,r,s,n,i,a,_,c,u,l,E,d,S,R){this.port=t,a===null&&(a=void 0),this.server_name=r+rL.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:a,insecure:_,verify:c},this.leafnodes={port:u,tls:{cert_file:n,key_file:i,ca_file:a,insecure:_}},this.cluster={name:l,port:E,routes:d,tls:{cert_file:n,key_file:i,ca_file:a,insecure:_,verify:c}},this.accounts={SYS:{users:S},HDB:{users:R}},this.system_account="SYS"}};o(_o,"HubConfigObject");Dd.exports=_o});var Bd=f((Jk,Hd)=>{"use strict";var Pd=ct(),co=class{constructor(t,r,s,n,i,a,_,c,u,l,E){this.port=t,E===null&&(E=void 0),this.server_name=r+Pd.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+Pd.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:l,ca_file:E,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:E,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:E,insecure:!0},urls:a,account:"HDB"}]},this.accounts={SYS:{users:_},HDB:{users:c,jetstream:"enabled"}},this.system_account="SYS"}};o(co,"LeafConfigObject");Hd.exports=co});var Gd=f((Zk,vd)=>{"use strict";var uo=class{constructor(t,r){this.user=t,this.password=r}};o(uo,"HdbUserObject");vd.exports=uo});var Fd=f((eY,qd)=>{"use strict";var sL=ct(),lo=class{constructor(t,r){this.user=t+sL.SERVER_SUFFIX.ADMIN,this.password=r}};o(lo,"SysUserObject");qd.exports=lo});var Us=f((rY,kd)=>{"use strict";var Vd=O(),xd=T(),So=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,ac=require("joi"),Eo={schema_format:{pattern:So,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},nL=ac.alternatives(ac.string().min(1).max(Eo.schema_length.maximum).pattern(So).messages({"string.pattern.base":"{:#label} "+Eo.schema_format.message}),ac.number()).required();function iL(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Eo.schema_length.maximum?`'${e}' maximum of 250 characters`:So.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}o(iL,"checkValidTable");function oL(e,t){return Vd.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}o(oL,"validateSchemaExists");function aL(e,t){let r=t.state.ancestors[0].schema;return Vd.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(aL,"validateTableExists");function _L(e,t){return e.toLowerCase()===xd.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${xd.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(_L,"validateSchemaName");kd.exports={common_validators:Eo,schema_regex:So,hdb_schema_table:nL,validateSchemaExists:oL,validateTableExists:aL,validateSchemaName:_L,checkValidTable:iL}});var cc=f((nY,$d)=>{var{hdb_schema_table:Yd}=Us(),cL=Ze(),_c=require("joi"),uL={undefined:"undefined",null:"null"},lL=o((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let a=r[i];(!a||a.length===0||uL[a]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${a}'`:n+=`. Invalid attribute name: '${a}'`)}return n?t.message(n):e},"custom_records_val"),EL=_c.object({schema:Yd,table:Yd,records:_c.array().items(_c.object().custom(lL)).required()});$d.exports=function(e){return cL.validateBySchema(e,EL)}});var uc=f((oY,Kd)=>{"use strict";var fo=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")}};o(fo,"BridgeMethods");Kd.exports=fo});var Er=f((uY,Zd)=>{"use strict";var Wd=Xe().LMDB_ERRORS_ENUM,_Y=require("lmdb"),dL=Ee(),cY=require("buffer").Buffer,{OVERFLOW_MARKER:Qd,MAX_SEARCH_KEY_LENGTH:ho}=dL,jd=["number","string","symbol","boolean","bigint"];function SL(e){if(e=e?.database||e,!e)throw new Error(Wd.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(Wd.INVALID_ENVIRONMENT)}o(SL,"validateEnv");function fL(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}o(fL,"stringifyData");function hL(e){return e instanceof Date?e.valueOf():e}o(hL,"convertKeyValueToWrite");function TL(e){if(e==null)return;if(jd.includes(typeof e))return e.length>ho?[e.slice(0,ho)+Qd]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];jd.includes(typeof n)&&(n.length>ho?t.push(n.slice(0,ho)+Qd):t.push(n))}}return t}o(TL,"getIndexedValues");var To=0,Jd=0;function Xd(){Jd=Date.now()-performance.now()}o(Xd,"adjustStartTime");Xd();var RL=6e4;setInterval(Xd,RL).unref();function mL(){let e=performance.now()+Jd;return e>To?(To=e,e):(To+=488e-6,To)}o(mL,"getNextMonotonicTime");Zd.exports={validateEnv:SL,stringifyData:fL,convertKeyValueToWrite:hL,getNextMonotonicTime:mL,getIndexedValues:TL}});var eS=f((EY,zd)=>{"use strict";var Ro=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};o(Ro,"DBIDefinition");zd.exports=Ro});var sS=f((SY,rS)=>{"use strict";var lc=v(),tS=T();lc.initSync();var AL=lc.get(tS.CONFIG_PARAMS.STORAGE_COMPRESSION),gL=lc.get(tS.CONFIG_PARAMS.STORAGE_CACHING)!==!1,mo=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=AL&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=gL&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};o(mo,"OpenDBIObject");rS.exports=mo});var oS=f((hY,iS)=>{"use strict";var Ps=v(),In=T();Ps.initSync();var pL=Ps.get(In.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Ps.get(In.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Ps.get(In.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",nS=Ps.get(In.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),NL=Ps.get(In.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Ao=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=pL,nS!==void 0&&(this.overlappingSync=nS),this.noReadAhead=NL}};o(Ao,"OpenEnvironmentObject");iS.exports=Ao});var V=f((RY,dS)=>{"use strict";var Ec=require("lmdb"),tt=require("fs-extra"),ut=require("path"),po=Er(),aS=p(),Se=Xe().LMDB_ERRORS_ENUM,No=eS(),dc=sS(),_S=oS(),dr=Ee(),lt=dr.INTERNAL_DBIS_NAME,cS=dr.DBI_DEFINITION_NAME,OL="data.mdb",IL="lock.mdb",Cn=".mdb",CL="-lock",go=class{constructor(t,r,s=!1){this.dbi=rt(t,r),this.key_type=this.dbi[dr.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[dr.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Ec.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};o(go,"TransactionCursor");function Sc(e,t){if(e===void 0)throw new Error(Se.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Se.ENV_NAME_REQUIRED)}o(Sc,"pathEnvNameValidation");async function fc(e,t,r=!0){try{await tt.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Se.INVALID_BASE_PATH):s}try{let s=ut.join(e,t+Cn);return await tt.access(s,tt.constants.R_OK|tt.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await tt.access(ut.join(e,t,OL),tt.constants.R_OK|tt.constants.F_OK),ut.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Se.INVALID_ENVIRONMENT)}else throw new Error(Se.INVALID_ENVIRONMENT);throw s}}o(fc,"validateEnvironmentPath");function Oo(e,t){if(po.validateEnv(e),t===void 0)throw new Error(Se.DBI_NAME_REQUIRED)}o(Oo,"validateEnvDBIName");async function bL(e,t,r=!1,s=!1){Sc(e,t),t=t.toString();try{return await fc(e,t,s),hc(e,t,r)}catch(n){if(n.message===Se.INVALID_ENVIRONMENT){let i=ut.join(e,t);await tt.mkdirp(s?i:e);let a=new _S(s?i:i+Cn,!1),_=Ec.open(a);_.dbis=Object.create(null);let c=new dc(!1);_.openDB(lt,c),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=Tc(e,t,r);return _[dr.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=_,_}throw n}}o(bL,"createEnvironment");async function LL(e,t,r,s=!0){let n=await hc(e,t);if(r===void 0)throw new Error(Se.DESTINATION_PATH_REQUIRED);try{await tt.access(ut.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(Se.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}o(LL,"copyEnvironment");async function hc(e,t,r=!1){Sc(e,t),t=t.toString();let s=Tc(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 fc(e,t),i=ut.join(e,t+Cn),a=n!=i,_=new _S(n,a),c=Ec.open(_);c.dbis=Object.create(null);let u=lS(c);for(let l=0;l<u.length;l++)rt(c,u[l]);return c[dr.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=c,c}o(hc,"openEnvironment");async function yL(e,t,r=!1){Sc(e,t),t=t.toString();let s=ut.join(e,t+Cn),n=await fc(e,t);if(global.lmdb_map!==void 0){let i=Tc(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await uS(a),delete global.lmdb_map[i]}}await tt.remove(n),await tt.remove(n===s?n+CL:ut.join(ut.dirname(n),IL))}o(yL,"deleteEnvironment");async function uS(e){po.validateEnv(e);let t=e[dr.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(uS,"closeEnvironment");function Tc(e,t,r=!1){let n=`${ut.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}o(Tc,"getCachedEnvironmentName");function wL(e){po.validateEnv(e);let t=Object.create(null),r=rt(e,lt);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==lt)try{t[s]=Object.assign(new No,n)}catch{aS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}o(wL,"listDBIDefinitions");function lS(e){po.validateEnv(e);let t=[],r=rt(e,lt);for(let{key:s}of r.getRange({start:!1}))s!==lt&&t.push(s);return t}o(lS,"listDBIs");function ML(e,t){let s=rt(e,lt).getEntry(t),n=new No;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{aS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}o(ML,"getDBIDefinition");function ES(e,t,r,s=!1){if(Oo(e,t),t=t.toString(),t===lt)throw new Error(Se.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return rt(e,t)}catch(n){if(n.message===Se.DBI_DOES_NOT_EXIST){let i=new dc(r,s===!0),a=e.openDB(t,i),_=new No(r===!0,s);return a[cS]=_,rt(e,lt).putSync(t,_),e.dbis[t]=a,a}throw n}}o(ES,"createDBI");function rt(e,t){if(Oo(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==lt?r=ML(e,t):r=new No,r===void 0)throw new Error(Se.DBI_DOES_NOT_EXIST);let s;try{let n=new dc(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(Se.DBI_DOES_NOT_EXIST):n}return s[cS]=r,e.dbis[t]=s,s}o(rt,"openDBI");function DL(e,t){Oo(e,t),t=t.toString();let r=rt(e,t),s=r.getStats();return r[dr.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}o(DL,"statDBI");async function UL(e,t){try{let r=ut.join(e,t+Cn);return(await tt.stat(r)).size}catch{throw new Error(Se.INVALID_ENVIRONMENT)}}o(UL,"environmentDataSize");function PL(e,t){if(Oo(e,t),t=t.toString(),t===lt)throw new Error(Se.CANNOT_DROP_INTERNAL_DBIS_NAME);rt(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],rt(e,lt).removeSync(t)}o(PL,"dropDBI");function HL(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{rt(e,n)}catch(i){if(i.message===Se.DBI_DOES_NOT_EXIST)ES(e,n,n!==t,n===t);else throw i}}}o(HL,"initializeDBIs");dS.exports={openDBI:rt,openEnvironment:hc,createEnvironment:bL,listDBIs:lS,listDBIDefinitions:wL,createDBI:ES,dropDBI:PL,statDBI:DL,deleteEnvironment:yL,initializeDBIs:HL,TransactionCursor:go,environmentDataSize:UL,copyEnvironment:LL,closeEnvironment:uS}});var fS=f((AY,SS)=>{"use strict";var Io=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};o(Io,"InsertRecordsResponseObject");SS.exports=Io});var TS=f((pY,hS)=>{"use strict";var Co=class{constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};o(Co,"UpdateRecordsResponseObject");hS.exports=Co});var mS=f((OY,RS)=>{"use strict";var bo=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};o(bo,"UpsertRecordsResponseObject");RS.exports=bo});var $r=f((yY,pS)=>{"use strict";var BL=V(),vL=fS(),GL=TS(),qL=mS(),Ct=Er(),bn=Xe().LMDB_ERRORS_ENUM,FL=Ee(),$t=T(),xL=O(),VL=require("uuid"),CY=require("lmdb"),{handleHDBError:kL,hdb_errors:YL}=X(),{OVERFLOW_MARKER:bY,MAX_SEARCH_KEY_LENGTH:LY}=FL,AS=v();AS.initSync();var Lo=AS.get($t.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Rc=$t.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Yr=$t.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function $L(e,t,r,s,n=Ct.getNextMonotonicTime()){pc(e,t,r,s),mc(e,t,r);let i=new vL,a=[],_=[];for(let c=0;c<s.length;c++){let u=s[c];gS(u,!0,n);let l=KL(e,t,r,u),E=u[t];a.push(l),_.push(E)}return Ac(a,_,s,i,n)}o($L,"insertRecords");function KL(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let a=r[i];if(a===t||s.hasOwnProperty(a)===!1)continue;let _=s[a];if(typeof _=="function"){let l=_([[{}]]);Array.isArray(l)&&(_=l[0][$t.FUNC_VAL],s[a]=_)}let c=Ct.getIndexedValues(_),u=e.dbis[a];if(c){Lo&&u.prefetch(c.map(l=>({key:l,value:n})),yo);for(let l=0,E=c.length;l<E;l++)u.put(c[l],n)}}Lo&&e.dbis[t].prefetch([n],yo),e.dbis[t].put(n,s,s[Yr])})}o(KL,"insertRecord");function WL(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}o(WL,"removeSkippedRecords");function gS(e,t,r){let s=r>0;(s||!Number.isInteger(e[Yr]))&&(e[Yr]=r||(r=Ct.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Rc]))&&(e[Rc]=r||Ct.getNextMonotonicTime()):delete e[Rc]}o(gS,"setTimestamps");function mc(e,t,r){r.indexOf($t.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push($t.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf($t.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push($t.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),BL.initializeDBIs(e,t,r)}o(mc,"initializeTransaction");async function QL(e,t,r,s,n=Ct.getNextMonotonicTime()){pc(e,t,r,s),mc(e,t,r);let i=new GL,a=[],_=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],d;try{d=gc(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),a.push(u);continue}_.push(d),c.push(E)}return Ac(_,c,s,i,n,a)}o(QL,"updateRecords");async function jL(e,t,r,s,n=Ct.getNextMonotonicTime()){try{pc(e,t,r,s)}catch(c){throw kL(c,c.message,YL.HTTP_STATUS_CODES.BAD_REQUEST)}mc(e,t,r);let i=new qL,a=[],_=[];for(let c=0;c<s.length;c++){let u=s[c],l;xL.isEmpty(u[t])?(l=VL.v4(),u[t]=l):l=u[t];let E=gc(e,t,u,l,i,!1,n);a.push(E),_.push(l)}return Ac(a,_,s,i,n)}o(jL,"upsertRecords");async function Ac(e,t,r,s,n,i=[]){let a=await Promise.all(e);for(let _=0,c=a.length;_<c;_++)a[_]===!0?s.written_hashes.push(t[_]):(s.skipped_hashes.push(t[_]),i.push(_));return s.txn_time=n||Ct.getNextMonotonicTime(),WL(r,i),s}o(Ac,"finalizeWrite");function gc(e,t,r,s,n,i=!1,a){let _=e.dbis[t],c=_.getEntry(s),u=c?.value,l=u;if(!u){if(i)return!1;u={}}if(gS(r,!l,a),Number.isInteger(r[Yr])&&u[Yr]>r[Yr])return!1;l&&n.original_records.push(u);let E,d=o(()=>{for(let R in r){if(!r.hasOwnProperty(R)||R===t)continue;let m=r[R],b=e.dbis[R];if(b===void 0)continue;let $=u[R];if(typeof m=="function"){let H=m([[u]]);Array.isArray(H)&&(m=H[0][$t.FUNC_VAL],r[R]=m)}if(m===$)continue;let A=Ct.getIndexedValues($);if(A){Lo&&b.prefetch(A.map(H=>({key:H,value:s})),yo);for(let H=0,le=A.length;H<le;H++)b.remove(A[H],s)}if(A=Ct.getIndexedValues(m),A){Lo&&b.prefetch(A.map(H=>({key:H,value:s})),yo);for(let H=0,le=A.length;H<le;H++)b.put(A[H],s)}}let S=Object.assign({},u,r);_.put(s,S,S[Yr])},"do_put");return c?E=_.ifVersion(s,c.version,d):E=_.ifNoExists(s,d),E.then(S=>S?!0:gc(e,t,r,s,n,i,a))}o(gc,"updateUpsertRecord");function JL(e,t,r){if(Ct.validateEnv(e),t===void 0)throw new Error(bn.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(bn.WRITE_ATTRIBUTES_REQUIRED):new Error(bn.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(JL,"validateBasic");function pc(e,t,r,s){if(JL(e,t,r),!Array.isArray(s))throw s===void 0?new Error(bn.RECORDS_REQUIRED):new Error(bn.RECORDS_MUST_BE_ARRAY)}o(pc,"validateWrite");function yo(){}o(yo,"noop");pS.exports={insertRecords:$L,updateRecords:QL,upsertRecords:jL}});var K=f((MY,LS)=>{"use strict";var Dn=T(),XL=O(),Le=v(),Un=require("path"),ZL=require("minimist"),NS=require("fs-extra"),OS=require("lodash");Le.initSync();var{CONFIG_PARAMS:Sr,SCHEMAS_PARAM_CONFIG:Ln,SYSTEM_SCHEMA_NAME:wo}=Dn,yn,wn,Mn;function IS(){if(yn!==void 0)return yn;if(Le.getHdbBasePath()!==void 0)return yn=Le.get(Sr.STORAGE_PATH)||Un.join(Le.getHdbBasePath(),Dn.SCHEMA_DIR_NAME),yn}o(IS,"getBaseSchemaPath");function CS(){if(wn!==void 0)return wn;if(Le.getHdbBasePath()!==void 0)return wn=bS(wo),wn}o(CS,"getSystemSchemaPath");function zL(){if(Mn!==void 0)return Mn;if(Le.getHdbBasePath()!==void 0)return Mn=Le.get(Dn.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Un.join(Le.getHdbBasePath(),Dn.TRANSACTIONS_DIR_NAME),Mn}o(zL,"getTransactionAuditStoreBasePath");function ey(e,t){let r=Le.get(Sr.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Un.join(zL(),e.toString())}o(ey,"getTransactionAuditStorePath");function bS(e,t){e=e.toString(),t=t&&t.toString();let r=Le.get(Dn.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Un.join(IS(),e)}o(bS,"getSchemaPath");function ty(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,ZL(process.argv));let s=r[Sr.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(a){if(!XL.isObject(s))throw a;i=s}for(let a of i){let _=a[wo];if(!_)continue;let c=Le.get(Sr.SCHEMAS);c=c??{};let u=_?.tables?.[t]?.[Ln.PATH];if(u)return OS.set(c,[wo,Ln.TABLES,t,Ln.PATH],u),Le.setProperty(Sr.SCHEMAS,c),u;let l=_?.[Ln.PATH];if(l)return OS.set(c,[wo,Ln.PATH],l),Le.setProperty(Sr.SCHEMAS,c),l}}let n=r[Sr.STORAGE_PATH.toUpperCase()];if(n){if(!NS.pathExistsSync(n))throw new Error(n+" does not exist");let i=Un.join(n,e);return NS.mkdirsSync(i),Le.setProperty(Sr.STORAGE_PATH,n),i}return CS()}o(ty,"initSystemSchemaPaths");function ry(){yn=void 0,wn=void 0,Mn=void 0}o(ry,"resetPaths");LS.exports={getBaseSchemaPath:IS,getSystemSchemaPath:CS,getTransactionAuditStorePath:ey,getSchemaPath:bS,initSystemSchemaPaths:ty,resetPaths:ry}});var Kt=f((UY,sy)=>{sy.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 Nc=f((PY,yS)=>{var{common_validators:fr}=Us(),Pn=Ze(),Et="is required",W={schema:{presence:!0,format:fr.schema_format,length:fr.schema_length},table:{presence:!0,format:fr.schema_format,length:fr.schema_length},attribute:{presence:!0,format:fr.schema_format,length:fr.schema_length},hash_attribute:{presence:!0,format:fr.schema_format,length:fr.schema_length}};function Hn(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}o(Hn,"makeAttributesStrings");function ny(e){return e=Hn(e),W.schema.presence={message:Et},W.table.presence=!1,W.attribute.presence=!1,W.hash_attribute.presence=!1,Pn.validateObject(e,W)}o(ny,"schema_object");function iy(e){return e=Hn(e),W.schema.presence={message:Et},W.table.presence={message:Et},W.attribute.presence=!1,W.hash_attribute.presence=!1,Pn.validateObject(e,W)}o(iy,"table_object");function oy(e){return e=Hn(e),W.schema.presence={message:Et},W.table.presence={message:Et},W.attribute.presence=!1,W.hash_attribute.presence={message:Et},Pn.validateObject(e,W)}o(oy,"create_table_object");function ay(e){return e=Hn(e),W.schema.presence={message:Et},W.table.presence={message:Et},W.attribute.presence={message:Et},W.hash_attribute.presence=!1,Pn.validateObject(e,W)}o(ay,"attribute_object");function _y(e){return e=Hn(e),W.schema.presence={message:Et},W.table.presence={message:Et},W.attribute.presence=!1,W.hash_attribute.presence=!1,Pn.validateObject(e,W)}o(_y,"describe_table");function cy(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`)}}o(cy,"validateTableResidence");yS.exports={schema_object:ny,create_table_object:oy,table_object:iy,attribute_object:ay,describe_table:_y,validateTableResidence:cy}});var MS=f((BY,wS)=>{"use strict";var uy=require("uuid"),Mo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||uy.v4(),this.schema_table=`${this.schema}.${this.table}`}};o(Mo,"CreateAttributeObject");wS.exports=Mo});var Uo=f((GY,DS)=>{"use strict";var ly=MS(),Do=class extends ly{constructor(t,r,s,n,i=!0,a=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=a}};o(Do,"LMDBCreateAttributeObject");DS.exports=Do});var PS=f((FY,US)=>{"use strict";US.exports=dy;var Ey="inserted";function dy(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Ey?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}o(dy,"returnObject")});var Po=f((VY,qS)=>{"use strict";var Sy=T(),Oc=V(),fy=$r(),{getSystemSchemaPath:hy,getSchemaPath:Ty}=K(),Ry=Kt(),my=Nc(),Ay=Uo(),gy=PS(),{handleHDBError:HS,hdb_errors:vS}=X(),BS=O(),{HTTP_STATUS_CODES:py}=vS,Ic=Ry.hdb_attribute,GS=[];for(let e=0;e<Ic.attributes.length;e++)GS.push(Ic.attributes[e].attribute);var Ny="inserted";qS.exports=Oy;async function Oy(e){let t=my.attribute_object(e);if(t)throw HS(new Error,t.message,vS.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&BS.checkGlobalSchemaTable(e.schema,e.table);if(r)throw HS(new Error,r,py.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=BS.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 Ay(e.schema,e.table,e.attribute,e.id);try{let i=await Oc.openEnvironment(Ty(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}`);Oc.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let a=await Oc.openEnvironment(hy(),Sy.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:_,skipped_hashes:c}=await fy.insertRecords(a,Ic.hash_attribute,GS,[n]);return gy(Ny,_,{records:[n]},c)}catch(i){throw i}}o(Oy,"lmdbCreateAttribute")});var Ho=f(($Y,xS)=>{"use strict";var Wt=O(),FS=p(),YY=cc();xS.exports=Iy;function Iy(e){if(Wt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Wt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Wt.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(Wt.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(a=>{if(i&&Wt.isEmptyOrZeroLength(a[r]))throw FS.error("a valid hash attribute must be provided with update record:",a),new Error("a valid hash attribute must be provided with update record, check log for more info");if(!Wt.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw FS.error(`a valid hash value must be provided with ${e.operation} record:`,a),new Error(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Wt.isEmpty(a[r])&&a[r]!==""&&s.has(Wt.autoCast(a[r]))&&(a.skip=!0),s.add(Wt.autoCast(a[r]));for(let _ in a)n[_]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}o(Iy,"insertUpdateValidate")});var vo=f((WY,VS)=>{"use strict";var Cy=T().OPERATIONS_ENUM,Bo=class{constructor(t,r,s,n,i=void 0){this.operation=Cy.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};o(Bo,"InsertObject");VS.exports=Bo});var qo=f((JY,kS)=>{"use strict";var jY=vo(),Go=T(),bc=O(),Cc=p(),by=require("uuid"),{handleHDBError:Bn,hdb_errors:Ly}=X(),{HDB_ERROR_MSGS:vn,HTTP_STATUS_CODES:Gn}=Ly;kS.exports=yy;function yy(e,t,r){for(let n=0;n<t.length;n++)wy(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];My(i,r,e.operation)}}o(yy,"processRows");function wy(e){if(Buffer.byteLength(String(e))>Go.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Bn(new Error,vn.ATTR_NAME_LENGTH_ERR(e),Gn.BAD_REQUEST,void 0,void 0,!0);if(bc.isEmptyOrZeroLength(e)||bc.isEmpty(e.trim()))throw Bn(new Error,vn.ATTR_NAME_NULLISH_ERR,Gn.BAD_REQUEST,void 0,void 0,!0)}o(wy,"validateAttribute");function My(e,t,r){if(!e.hasOwnProperty(t)||bc.isEmptyOrZeroLength(e[t])){if(r===Go.OPERATIONS_ENUM.INSERT||r===Go.OPERATIONS_ENUM.UPSERT){e[t]=by.v4();return}throw Cc.error("Update transaction aborted due to record with no hash value:",e),Bn(new Error,vn.RECORD_MISSING_HASH_ERR,Gn.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Go.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Cc.error(e),Bn(new Error,vn.HASH_VAL_LENGTH_ERR,Gn.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Cc.error(e),Bn(new Error,vn.INVALID_FORWARD_SLASH_IN_HASH_ERR,Gn.BAD_REQUEST,void 0,void 0,!0)}o(My,"validateHash")});var $S=f((ZY,YS)=>{"use strict";var Fo=class{constructor(t,r){this.type=t,this.message=r}};o(Fo,"ITCEventObject");YS.exports=Fo});var xo=f((e$,QS)=>{var Dy=require("crypto"),KS=9;function Uy(e){let t=Hy(KS),r=WS(e+t);return t+r}o(Uy,"createHash");function Py(e,t){let r=e.substr(0,KS),s=r+WS(t+r);return e===s}o(Py,"validateHash");function Hy(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}o(Hy,"generateSalt");function WS(e){return Dy.createHash("md5").update(e).digest("hex")}o(WS,"md5");QS.exports={hash:Uy,validate:Py}});var JS=f((r$,jS)=>{"use strict";var hr=T(),qn=class{constructor(t=0,r=hr.STORAGE_TYPES_ENUM.LMDB,s=hr.LICENSE_VALUES.API_CALL_DEFAULT,n=hr.RAM_ALLOCATION_ENUM.DEFAULT,i=hr.LICENSE_VALUES.VERSION_DEFAULT,a){this.exp_date=t,this.storage_type=r,this.api_call=s,this.ram_allocation=n,this.version=i,this.fingerprint=a}};o(qn,"BaseLicense");var Vo=class extends qn{constructor(t=0,r=hr.STORAGE_TYPES_ENUM.LMDB,s=hr.LICENSE_VALUES.API_CALL_DEFAULT,n=hr.RAM_ALLOCATION_ENUM.DEFAULT,i=hr.LICENSE_VALUES.VERSION_DEFAULT,a,_=!1){super(t,r,s,n,i,a),this.enterprise=_}};o(Vo,"ExtendedLicense");jS.exports={BaseLicense:qn,ExtendedLicense:Vo}});var vs=f((n$,rf)=>{"use strict";var Bs=require("fs-extra"),XS=xo(),ZS=require("crypto"),By=require("moment"),vy=require("uuid").v4,me=p(),yc=require("path"),Gy=O(),xe=T(),qy=JS().ExtendedLicense,Hs="invalid license key format",Fy="061183",xy="mofi25",Vy="aes-256-cbc",ky=16,Yy=32,zS=v();zS.initSync();var Lc;rf.exports={validateLicense:ef,generateFingerPrint:Ky,licenseSearch:tf,getLicense:jy};function wc(){return yc.join(zS.getHdbBasePath(),xe.LICENSE_KEY_DIR_NAME,xe.LICENSE_FILE_NAME)}o(wc,"getLicenseDirPath");function $y(){let e=wc();return yc.join(e,xe.LICENSE_FILE_NAME)}o($y,"getLicenseFilePath");function Mc(){let e=wc();return yc.join(e,xe.REG_KEY_FILE_NAME)}o(Mc,"getFingerPrintFilePath");async function Ky(){let e=Mc();try{return await Bs.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await Wy();throw me.error(`Error writing fingerprint file to ${e}`),me.error(t),new Error("There was an error generating the fingerprint")}}o(Ky,"generateFingerPrint");async function Wy(){let e=vy(),t=XS.hash(e),r=Mc();try{await Bs.mkdirp(wc()),await Bs.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw me.error(`Error writing fingerprint file to ${r}`),me.error(s),new Error("There was an error generating the fingerprint")}return t}o(Wy,"writeFingerprint");function ef(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:xe.STORAGE_TYPES_ENUM.LMDB,api_call:xe.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:xe.RAM_ALLOCATION_ENUM.DEFAULT,version:xe.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return me.error("empty license key passed to validate."),r;let s=Mc(),n=!1;try{n=Bs.statSync(s)}catch(i){me.error(i)}if(n){let i;try{i=Bs.readFileSync(s,"utf8")}catch{me.error("error validating this machine in the license"),r.valid_machine=!1;return}let a=e.split(xy),_=a[1];_=Buffer.concat([Buffer.from(_)],ky);let c=Buffer.concat([Buffer.from(i)],Yy),u=ZS.createDecipheriv(Vy,c,_);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=u.update(a[0],"hex","utf8"),l.trim(),l+=u.final("utf8")}catch{let S=Qy(a[0],i);if(S)l=S;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Hs),me.error(Hs),new Error(Hs)}let E;if(isNaN(l))try{E=JSON.parse(l),r.api_call=E.api_call,r.version=E.version,r.storage_type=E.storage_type,r.exp_date=E.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),E.ram_allocation&&(r.ram_allocation=E.ram_allocation)}catch{throw console.error(Hs),me.error(Hs),new Error(Hs)}else r.exp_date=l;r.exp_date<By().valueOf()&&(r.valid_date=!1),XS.validate(a[1],`${Fy}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||me.error("Invalid licence"),r}o(ef,"validateLicense");function Qy(e,t){try{let r=ZS.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{me.warn("Check old license failed")}}o(Qy,"checkOldLicense");function tf(){let e=new qy;e.api_call=0;let t=[];try{t=Bs.readFileSync($y(),"utf-8").split(xe.NEW_LINE)}catch(r){r.code==="ENOENT"?me.info("no license file found"):me.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(Gy.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=ef(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.api_call+=i.api_call,e.ram_allocation=i.ram_allocation,e.storage_type=i.storage_type,e.enterprise=!0)}catch(n){me.error("There was an error parsing the license string."),me.error(n),e.api_call=xe.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=xe.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=xe.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=xe.LICENSE_VALUES.API_CALL_DEFAULT),Lc=e,e}o(tf,"licenseSearch");async function jy(){return Lc||await tf(),Lc}o(jy,"getLicense")});var Wr=f((o$,vc)=>{"use strict";var{Worker:Jy,MessageChannel:Xy,parentPort:Qt,isMainThread:nf,threadId:Zy,workerData:zy}=require("worker_threads"),{PACKAGE_ROOT:ew}=T(),{join:tw,isAbsolute:rw,extname:sw}=require("path"),{totalmem:nw}=require("os"),Hc=T(),of=v(),iw=vs(),ko=p(),ow=T();of.initSync();var aw=of.get(Hc.CONFIG_PARAMS.HTTP_THREADS)||1,_w=1024*1024,Tr=[],Kr=[],cw=50,af=1e4,_f="restart",cf="request_thread_info",uf="resource_report",lf="thread_info",Ef="added-port",Dc;vc.exports={startWorker:Uc,restartWorkers:Bc,shutdownWorkers:lw,workers:Tr,setMonitorListener:hw,onMessageFromWorkers:Ew,broadcast:dw};function Uc(e,t={}){let s=iw.licenseSearch().ram_allocation,n=Math.min(Math.max(Math.floor(nw()/_w/(1+aw/4)),512),s||1/0),i=Math.min(Math.max(n>>7,16),64),a=[];for(let c of Kr){let{port1:u,port2:l}=new Xy;c.postMessage({type:Ef,port:u},[u]),a.push(l)}sw(e)||(e+=".js");let _=new Jy(rw(e)?e:tw(ew,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:i},argv:process.argv.slice(2),workerData:{addPorts:a,name:t.name},transferList:a},t));return Yo(_,!0),_.unexpectedRestarts=t.unexpectedRestarts||0,_.startCopy=()=>{Uc(e,t)},_.on("error",c=>{console.error("Worker error:",c),ko.error("Worker error:",c)}),_.on("exit",c=>{Tr.splice(Tr.indexOf(_),1),!_.wasShutdown&&t.autoRestart!==!1&&(_.unexpectedRestarts<cw?(t.unexpectedRestarts=_.unexpectedRestarts+1,Uc(e,t)):ko.error(`Thread has been restarted ${_.restarts} times and will not be restarted`))}),_.on("message",c=>{c.type===_f&&Bc(c.workerType),c.type===cf&&Sw(_),c.type===uf&&fw(_,c)}),Tr.push(_),Rw(),t.onStarted&&t.onStarted(_),_.name=t.name,_}o(Uc,"startWorker");var uw=[Hc.THREAD_TYPES.HTTP];async function Bc(e=null,t=2,r=!0){if(nf){t<1&&(t=t*Tr.length);let s=[];for(let n of Tr.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({type:Hc.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=uw.indexOf(n.name)>-1,a=new Promise(_=>{let c=setTimeout(()=>n.terminate(),af*2).unref();n.on("exit",()=>{clearTimeout(c),s.splice(s.indexOf(a)),!i&&r&&n.startCopy(),_()})});s.push(a),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else Qt.postMessage({type:_f,workerType:e})}o(Bc,"restartWorkers");function lw(e){return Bc(e,1/0,!1)}o(lw,"shutdownWorkers");var df=[];function Ew(e){df.push(e)}o(Ew,"onMessageFromWorkers");function dw(e){for(let t of Kr)try{t.postMessage(e)}catch(r){ko.error("Unable to send message to worker",r)}}o(dw,"broadcast");function Sw(e){e.postMessage({type:lf,workers:Sf()})}o(Sw,"sendThreadInfo");function Sf(){let e=Date.now();return Tr.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}))}o(Sf,"getChildWorkerInfo");function fw(e,t){e.resources=t,e.resources.updated=Date.now()}o(fw,"recordResourceReport");var Pc;function hw(e){Pc=e}o(hw,"setMonitorListener");var Tw=1e3,sf=!1;function Rw(){sf||(sf=!0,setInterval(()=>{for(let e of Tr){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}Pc&&Pc()},Tw).unref())}o(Rw,"startMonitoring");var mw=1e3;if(Qt){Yo(Qt);for(let e of zy.addPorts)Yo(e);setInterval(()=>{let e=process.memoryUsage();Qt.postMessage({type:uf,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},mw).unref(),Dc=o(()=>new Promise((e,t)=>{Qt.on("message",r),Qt.postMessage({type:cf});function r(s){s.type===lf&&(Qt.off("message",r),e(s.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else Dc=Sf;vc.exports.getThreadInfo=Dc;function Yo(e,t){Kr.push(e),e.on("message",r=>{if(r.type===Ef)Yo(r.port);else for(let s of df)s(r)}).on("close",()=>{Kr.splice(Kr.indexOf(e),1)}).on("exit",()=>{Kr.splice(Kr.indexOf(e),1)}),t||e.unref()}o(Yo,"addPort");nf||Qt.on("message",async e=>{let{type:t}=e;t===ow.ITC_EVENT_TYPES.SHUTDOWN&&(Qt.unref(),setTimeout(()=>{ko.warn("Thread did not voluntarily terminate",Zy),process.exit(0)},af).unref())})});var Tf=f((_$,hf)=>{"use strict";var Gc=V(),Aw=p(),ff=Xe().LMDB_ERRORS_ENUM;hf.exports=gw;async function gw(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 a=t[i];if(a.startsWith(`${e.schema}.`)||a.startsWith(`txn.${e.schema}.`))try{await Gc.closeEnvironment(global.lmdb_map[a])}catch(_){if(_.message!==ff.ENV_REQUIRED)throw _}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Gc.closeEnvironment(global.lmdb_map[s]),await Gc.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==ff.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){Aw.error(t)}}o(gw,"cleanLMDBMap")});var wf=f((l$,yf)=>{"use strict";var qc=require("recursive-iterator"),pw=require("alasql"),Fc=require("clone"),Rf=O(),{handleHDBError:mf,hdb_errors:Nw}=X(),{HDB_ERROR_MSGS:Af,HTTP_STATUS_CODES:gf}=Nw,Ow=["DISTINCT_ARRAY"],pf=Symbol("validateTables"),xc=Symbol("validateTable"),u$=Symbol("getAllColumns"),Nf=Symbol("validateAllColumns"),$o=Symbol("findColumn"),Of=Symbol("validateOrderBy"),Fn=Symbol("validateSegment"),Vc=Symbol("validateColumn"),If=Symbol("setColumnsForTable"),Cf=Symbol("checkColumnsForAsterisk"),bf=Symbol("validateGroupBy"),Lf=Symbol("hasColumns"),Ko=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[pf](),this[Cf](),this[Nf]()}[pf](){if(this[Lf]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[xc](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[xc](t.table)})}}[Lf](){let t=!1,r=new qc(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[xc](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw mf(new Error,Af.SCHEMA_NOT_FOUND(t.databaseid),gf.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw mf(new Error,Af.TABLE_NOT_FOUND(t.databaseid,t.tableid),gf.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=Fc(s);n.table=Fc(t),this.attributes.push(n)})}[$o](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)}[Cf](){let t=new qc(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[If](r.tableid)}[If](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new pw.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Nf](){this[Fn](this.statement.columns,!1),this[Fn](this.statement.joins,!1),this[Fn](this.statement.where,!1),this[bf](this.statement.group,!1),this[Fn](this.statement.order,!0)}[Fn](t,r){if(!t)return;let s=new qc(t),n=[];for(let{node:i,path:a}of s)!Rf.isEmpty(i)&&!Rf.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Of](i):n.push(this[Vc](i)));return n}[bf](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&Ow.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Fc(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[$o](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,a)=>{if(i.toString()===s.toString()){n=i,r.splice(a,1);return}});else{let i=this[$o](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((a,_)=>{if(a.attribute===i[0].attribute&&a.table.tableid===i[0].table.tableid){n=a,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`}[Of](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[Vc](t)}[Vc](t){let r=this[$o](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]}};o(Ko,"SelectValidator");yf.exports=Ko});var Pf=f((d$,Uf)=>{"use strict";var Mf=require("lodash"),xn=require("mathjs"),Iw=require("jsonata"),Df=O();Uf.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Mf.uniqWith(e,Mf.isEqual):e,searchJSON:Cw,mad:Vn.bind(null,xn.mad),mean:Vn.bind(null,xn.mean),mode:Vn.bind(null,xn.mode),prod:Vn.bind(null,xn.prod),median:Vn.bind(null,xn.median)};function Vn(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}o(Vn,"aggregateFunction");function Cw(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(Df.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Df.isEmpty(this.__ala__.res[r])){let s=Iw(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}o(Cw,"searchJSON")});var Bf=f((f$,Hf)=>{"use strict";var re=require("moment"),kc="YYYY-MM-DDTHH:mm:ss.SSSZZ";re.suppressDeprecationWarnings=!0;Hf.exports={current_date:()=>re().utc().format("YYYY-MM-DD"),current_time:()=>re().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return re(e).utc().format("YYYY");case"month":return re(e).utc().format("MM");case"day":return re(e).utc().format("DD");case"hour":return re(e).utc().format("HH");case"minute":return re(e).utc().format("mm");case"second":return re(e).utc().format("ss");case"millisecond":return re(e).utc().format("SSS");default:break}},date:e=>re(e).utc().format(kc),date_format:(e,t)=>re(e).utc().format(t),date_add:(e,t,r)=>re(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>re(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=re(e).utc(),n=re(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>re().utc().valueOf(),get_server_time:()=>re().format(kc),offset_utc:(e,t)=>re(e).utc().utcOffset(t).format(kc)}});var Ff=f((h$,qf)=>{"use strict";var bw=require("@turf/area"),Lw=require("@turf/length"),yw=require("@turf/circle"),ww=require("@turf/difference"),Mw=require("@turf/distance"),Dw=require("@turf/boolean-contains"),Uw=require("@turf/boolean-equal"),Pw=require("@turf/boolean-disjoint"),Hw=require("@turf/helpers"),vf=T(),U=O();qf.exports={geoArea:Bw,geoLength:vw,geoCircle:Gw,geoDifference:qw,geoDistance:Gf,geoNear:Fw,geoContains:xw,geoEqual:Vw,geoCrosses:kw,geoConvert:Yw};var Yc="geo1 is required",$c="geo2 is required";function Bw(e){if(U.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),bw.default(e)}o(Bw,"geoArea");function vw(e,t){if(U.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),Lw.default(e,{units:t||"kilometers"})}o(vw,"geoLength");function Gw(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)),yw.default(e,t,{units:r||"kilometers"})}o(Gw,"geoCircle");function qw(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)),ww(e,t)}o(qw,"geoDifference");function Gf(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)),Mw.default(e,t,{units:r||"kilometers"})}o(Gf,"geoDistance");function Fw(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 Gf(e,t,s)<=r}o(Fw,"geoNear");function xw(e,t){if(U.isEmpty(e))throw new Error(Yc);if(U.isEmpty(e))throw new Error($c);return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),Dw.default(e,t)}o(xw,"geoContains");function Vw(e,t){if(U.isEmpty(e))throw new Error(Yc);if(U.isEmpty(e))throw new Error($c);return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),Uw.default(e,t)}o(Vw,"geoEqual");function kw(e,t){if(U.isEmpty(e))throw new Error(Yc);if(U.isEmpty(e))throw new Error($c);return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),!Pw.default(e,t)}o(kw,"geoCrosses");function Yw(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(vf.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(vf.GEO_CONVERSION_ENUM).join(",")}`);return Hw[t](e,r)}o(Yw,"geoConvert")});var Vf=f((R$,xf)=>{var Qr=Pf(),Ve=Bf(),bt=Ff();xf.exports=e=>{e.aggr.mad=e.aggr.MAD=Qr.mad,e.aggr.mean=e.aggr.MEAN=Qr.mean,e.aggr.mode=e.aggr.MODE=Qr.mode,e.aggr.prod=e.aggr.PROD=Qr.prod,e.aggr.median=e.aggr.MEDIAN=Qr.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Qr.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Qr.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Ve.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Ve.current_time,e.fn.extract=e.fn.EXTRACT=Ve.extract,e.fn.date=e.fn.DATE=Ve.date,e.fn.date_format=e.fn.DATE_FORMAT=Ve.date_format,e.fn.date_add=e.fn.DATE_ADD=Ve.date_add,e.fn.date_sub=e.fn.DATE_SUB=Ve.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Ve.date_diff,e.fn.now=e.fn.NOW=Ve.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Ve.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Ve.get_server_time,e.fn.getdate=e.fn.GETDATE=Ve.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Ve.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=bt.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=bt.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=bt.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=bt.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=bt.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=bt.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=bt.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=bt.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=bt.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=bt.geoNear}});var $f=f((m$,Yf)=>{"use strict";var kn=require("lodash"),fe=require("alasql");fe.options.cache=!1;var $w=Vf(),kf=require("clone"),Wo=require("recursive-iterator"),y=p(),D=O(),Gs=jr(),Kw=T(),{hdb_errors:Ww}=X(),Qw="IS NULL",dt="There was a problem performing this search. Please check the logs and try again.";$w(fe);var Qo=class{constructor(t,r){if(D.isEmpty(t))throw y.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(),D.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!D.isEmptyOrZeroLength(s))return y.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw y.error("Error thrown from checkEmptySQL in SQLSearch class method search."),y.error(s),new Error(dt)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw y.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),y.error(s),new Error(dt)}if(Object.keys(this.data).length===0)return y.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw y.error("Error thrown from processJoins in SQLSearch class method search."),y.error(s),new Error(dt)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw y.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),y.error(s),new Error(dt)}try{return t=await this._finalSQL(),t}catch(s){throw y.error("Error thrown from finalSQL in SQLSearch class method search."),y.error(s),new Error(dt)}}_getColumns(){let t=new Wo(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(kf(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=kn.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(D.isEmpty(this.statement.where)){y.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Wo(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!D.isEmpty(r)&&r.right)if(D.isNotEmptyAndHasValue(r.right.value)){let s=D.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new fe.yy.LogicValue({value:s}):r.right instanceof fe.yy.StringValue&&!D.isEmpty(s)&&D.autoCasterIsNumberCheck(s.toString())&&(r.right=new fe.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=D.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new fe.yy.LogicValue({value:i}):s instanceof fe.yy.StringValue&&D.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new fe.yy.NumValue({value:i}))});if(t){y.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Wo(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 a=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!D.isEmpty(Kw.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(D.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(D.isEmptyOrZeroLength(r.left.columnid)||D.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[a].ignore=!0,this.comparator_search_values[a].comparators=[];continue}this.comparator_search_values[a].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(D.isEmpty(this.exact_search_values[a])&&(this.exact_search_values[a]={ignore:!1,values:new Set}),!this.exact_search_values[a].ignore){let _=!1;switch(r.op){case"=":!D.isEmpty(r.right.value)||!D.isEmpty(r.left.value)?s.add(D.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[a].ignore=_,_?this.exact_search_values[a].values=new Set:this.exact_search_values[a].values=new Set([...this.exact_search_values[a].values,...s])}}}_setAliasesForColumns(){if(D.isEmptyOrZeroLength(this.all_table_attributes)&&D.isEmptyOrZeroLength(this.statement.from)&&D.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&&kn.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(D.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);D.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(D.isEmptyOrZeroLength(this.all_table_attributes)&&!D.isEmptyOrZeroLength(this.columns.columns))return t;if(D.isEmptyOrZeroLength(this.all_table_attributes)&&D.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await fe.promise(r)}catch(r){throw y.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),y.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(kf(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(D.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(Qw)>-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=kn.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 a=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,_=this.data[a].__hash_name;return n[a]||(n[a]=[],n[a].push(null),this._addColumnToMergedAttributes(a,_)),i.attribute!==_&&(n[a].push(null),this._addColumnToMergedAttributes(a,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,a=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===a&&(c=!0),!D.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!D.isEmptyOrZeroLength(this.exact_search_values[u].values))if(c)try{_.hash_values=Array.from(this.exact_search_values[u].values);let l=await Gs.getDataByHash(_);for(let E of _.hash_values)l.get(E)&&!this.data[i].__merged_data[E]&&(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,E))}catch(l){throw y.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),y.error(l),new Error(dt)}else try{_.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async l=>{let E=Object.assign({},_);E.search_value=l;let d=await Gs.getDataByValue(E);for(let[S,R]of d)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,R[n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,R[n.attribute]),this._setMergedHashAttribute(i,D.autoCast(S)))}))}catch(l){throw y.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),y.error(l),new Error(dt)}else if(!D.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!D.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let l=this.comparator_search_values[u].comparators;for(let E=0,d=l.length;E<d;E++){let S=l[E];_.search_attribute=S.attribute,_.search_value=S.search_value;let R=await Gs.getDataByValue(_,S.operation);if(c)for(let[m]of R)this.data[i].__merged_data[m]||(this.data[i].__merged_data[m]=[...s[i]],this._setMergedHashAttribute(i,D.autoCast(m)));else for(let[m,b]of R)this.data[i].__merged_data[m]?this._updateMergedAttribute(i,m,n.attribute,b[n.attribute]):(this.data[i].__merged_data[m]=[...s[i]],this._updateMergedAttribute(i,m,n.attribute,b[n.attribute]),this._setMergedHashAttribute(i,D.autoCast(m)))}}catch(l){throw y.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),y.error(l),new Error(dt)}else try{_.search_attribute=n.attribute,_.search_value="*";let l=await Gs.getDataByValue(_);if(c)for(let[E]of l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,D.autoCast(E)));else for(let[E,d]of l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,d[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,d[n.attribute]),this._setMergedHashAttribute(i,D.autoCast(E)))}catch(l){throw y.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),y.error(l),new Error(dt)}}}_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 fe.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,a=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===a});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 fe.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new fe.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 fe.yy.FuncValue:new fe.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(S=>{S.joinmode&&S.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(S.table);let R=S.joinmode+" JOIN ? AS "+(S.as?S.as:S.table.tableid);S.on&&(R+=" ON "+S.on.toString()),i.push(R),t.push(Object.values(this.data[`${S.table.databaseid_orig}_${S.table.as?S.table.as_orig:S.table.tableid_orig}`].__merged_data))});let a=[],_={};n.forEach(S=>{let R=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__hash_name,m=S.as?S.as_orig:S.tableid_orig;a.push({key:`'${m}.${R}'`,schema:S.databaseid_orig,table:S.as?S.as_orig:S.tableid_orig,keys:new Set}),r.push(`${S.as?S.as:S.tableid}.\`${R}\` AS "${m}.${R}"`),_[S.as?S.as_orig:S.tableid_orig]=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__merged_attributes});let c=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(S=>{S.is_func?r.push(S.initial_select_column.toString()):S.initial_select_column.tableid?r.push(`${S.initial_select_column.tableid}.${S.initial_select_column.columnid} AS ${S.expression.columnid}`):r.push(`${S.initial_select_column.columnid} AS ${S.expression.columnid}`)}));let l="",E="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",E=this.statement.offset?"OFFSET "+this.statement.offset:"");let d=[];try{let S=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${c} ${u} ${l} ${E}`,R=this._convertColumnsToIndexes(S,n);d=await fe.promise(R,t),t=null}catch(S){throw y.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),y.error(S),new Error("There was a problem processing the data.")}if(d&&d.length>0){for(let S=0,R=d.length;S<R;S++){let m=d[S];a.forEach(b=>{m[b.key]!==null&&m[b.key]!==void 0&&b.keys.add(m[b.key])})}a.forEach(S=>{let R=Object.keys(this.data[`${S.schema}_${S.table}`].__merged_data),m=kn.difference(R,[...S.keys].map(b=>b.toString()));for(let b=0,$=m.length;b<$;b++){let A=m[b];delete this.data[`${S.schema}_${S.table}`].__merged_data[A]}})}return{existing_attributes:_,joined_length:d?d.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Wo(this.columns);for(let{node:i}of n)if(i&&i.columnid){let a=this._findColumn(i);if(a){let _=a.table.as?a.table.as:a.table.tableid;(!t[_]||t[_].indexOf(a.attribute)<0)&&s.push(a)}}s=kn.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 y.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),y.error(i),new Error(dt)}}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,a=[];for(let l in i)a.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let _={schema:n.schema,table:n.table,hash_values:a,get_attributes:n.columns},c=await Gs.getDataByHash(_),u=n.columns.length;for(let l=0,E=a.length;l<E;l++){let d=a[l],S=c.get(d);for(let R=0;R<u;R++){let m=n.columns[R],b=S[m]===void 0?null:S[m];this.data[s].__merged_data[d].push(b)}}}}catch(r){throw y.error("Error thrown from getDataByHash function in SQLSearch class method getData."),y.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(a=>{let _=a.aggregatorid?a.expression:a,c=a.aggregatorid?a.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();y.trace(`Final SQL: ${n}`),s=await fe.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),y.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw y.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),y.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 y.error(Ww.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),y.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((a,_)=>{let c=n[i],u=new RegExp(`${c}.\`${a}\``,"g"),l=`${c}.[${_}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((a,_)=>{let c=new RegExp(`\`${a}\``,"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 a=await Gs.getDataByValue(i);for(let[_,c]of a)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(a){throw y.error("There was an error when processing this SQL operation. Check your logs"),y.error(a),new Error(dt)}}return Object.values(Object.values(this.data)[0].__merged_data)}};o(Qo,"SQLSearch");Yf.exports=Qo});var Jr=f((g$,Wf)=>{"use strict";var jw=wf();Wf.exports={searchByConditions:zw,searchByHash:eM,searchByValue:tM,search:rM};var Kc=jr(),Kf=require("util"),Jw=Kf.callbackify(Kc.searchByHash),Xw=Kf.callbackify(Kc.searchByValue),Zw=$f();async function zw(e){return Kc.searchByConditions(e)}o(zw,"searchByConditions");function eM(e,t){try{Jw(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}o(eM,"searchByHash");function tM(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),Xw(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}o(tM,"searchByValue");function rM(e,t){try{let r=new jw(e);r.validate(),new Zw(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}o(rM,"search")});var $n=f((N$,Xf)=>{"use strict";var Yn=require("crypto"),jf="aes-256-cbc",sM=32,nM=16,Wc=64,Jf=32,iM=Wc+Jf,Qf=new Map;Xf.exports={encrypt:oM,decrypt:aM,createNatsTableStreamName:_M};function oM(e){let t=Yn.randomBytes(sM),r=Yn.randomBytes(nM),s=Yn.createCipheriv(jf,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),a=r.toString("hex"),_=n.toString("hex");return i+a+_}o(oM,"encrypt");function aM(e){let t=e.substr(0,Wc),r=e.substr(Wc,Jf),s=e.substr(iM,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),a=Yn.createDecipheriv(jf,Buffer.from(t,"hex"),n),_=a.update(i);return _=Buffer.concat([_,a.final()]),_.toString()}o(aM,"decrypt");function _M(e,t){let r=`${e}.${t}`,s=Qf.get(r);return s||(s=Yn.createHash("md5").update(`${e}.${t}`).digest("hex"),Qf.set(r,s)),s}o(_M,"createNatsTableStreamName")});var jc=f((C$,Zf)=>{"use strict";var cM=T(),I$=Er();function Qc(e,t){let r=Object.create(null);if(t.length===1&&cM.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}o(Qc,"parseRow");function uM(e,t,r,s){let n=Qc(r,e);s.push(n)}o(uM,"searchAll");function lM(e,t,r,s){let n=Qc(r,e);s[t]=n}o(lM,"searchAllToMap");function EM(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(EM,"iterateDBI");function Xr(e,t,r,s,n){let i=Object.create(null);i[n]=e;let a;s===n?a=e:(a=t,s!==void 0&&(i[s]=a)),r[0].push(a),r[1].push(i)}o(Xr,"pushResults");function dM(e,t,r,s,n,i){t.toString().endsWith(e)&&Xr(t,r,s,n,i)}o(dM,"endsWith");function SM(e,t,r,s,n,i){t.toString().includes(e)&&Xr(t,r,s,n,i)}o(SM,"contains");function fM(e,t,r,s,n,i){t>e&&Xr(t,r,s,n,i)}o(fM,"greaterThanCompare");function hM(e,t,r,s,n,i){t>=e&&Xr(t,r,s,n,i)}o(hM,"greaterThanEqualCompare");function TM(e,t,r,s,n,i){t<e&&Xr(t,r,s,n,i)}o(TM,"lessThanCompare");function RM(e,t,r,s,n,i){t<=e&&Xr(t,r,s,n,i)}o(RM,"lessThanEqualCompare");Zf.exports={parseRow:Qc,searchAll:uM,searchAllToMap:lM,iterateDBI:EM,endsWith:dM,contains:SM,greaterThanCompare:fM,greaterThanEqualCompare:hM,lessThanCompare:TM,lessThanEqualCompare:RM,pushResults:Xr}});var zr=f((M$,ih)=>{"use strict";var Rr=V(),L$=p(),ke=Er(),jo=Ee(),ee=Xe().LMDB_ERRORS_ENUM,y$=O(),mM=T(),Jo=jc(),{parseRow:AM}=Jo,w$=require("lmdb"),{OVERFLOW_MARKER:zf,MAX_SEARCH_KEY_LENGTH:gM}=jo;function eh(e,t,r,s=!1,n=void 0,i=void 0){return Zr(e,t,r,(a,_)=>_.getRange({transaction:a,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}o(eh,"iterateFullIndex");function Kn(e,t,r,s,n,i=!1,a=void 0,_=void 0,c=!1,u=!1){return Zr(e,t,r,(l,E,d,S)=>{let A={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:a,offset:_,inclusiveEnd:i===!0?!c:!u,exclusiveStart:i===!0?u:c};return S===r?(A.values=!1,E.getRange(A).map(H=>({value:H}))):E.getRange(A)})}o(Kn,"iterateRangeBetween");function Zr(e,t,r,s){let n=e.database||e,i=Rr.openDBI(n,r);i[jo.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Rr.openDBI(n,t);let a;e.database?a=e:(a=e.useReadTransaction(),a.database=e);let _=s(a,i,n,t);return _.transaction=a,e.database||(_.onDone=()=>{a.done()}),_}o(Zr,"setupTransaction");function th(e,t,r,s){let n;return function(i,a){if(typeof i=="string"&&i.endsWith(zf)){if(!n)if(r)n=Rr.openDBI(e,r);else{let c=Rr.listDBIs(e);for(let u=0,l=c.length;u<l&&(n=Rr.openDBI(e,c[u]),!n[jo.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=n.get(a,{transaction:t,lazy:!0})[s]}return i}}o(th,"getOverflowCheck");function pM(e,t,r,s=!1,n=void 0,i=void 0){if(ke.validateEnv(e),t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);return Zr(e,t,t,(a,_,c)=>(Xo(r),r=Wn(c,r),_.getRange({transaction:a,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(u=>AM(u.value,r))))}o(pM,"searchAll");function NM(e,t,r,s=!1,n=void 0,i=void 0){if(ke.validateEnv(e),t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);Xo(r),r=Wn(e.database||e,r);let a=new Map;for(let{key:_,value:c}of eh(e,t,t,s,n,i))a.set(_,Jo.parseRow(c,r));return a}o(NM,"searchAllToMap");function OM(e,t,r=!1,s=void 0,n=void 0){if(ke.validateEnv(e),t===void 0)throw new Error(ee.ATTRIBUTE_REQUIRED);let i=Object.create(null),a=eh(e,void 0,t,r,s,n),_=a.transaction,c=th(_.database,_,void 0,t);for(let{key:u,value:l}of a){let E=c(u,l);i[E]===void 0&&(i[E]=[]),i[E].push(l)}return i}o(OM,"iterateDBI");function IM(e,t){if(ke.validateEnv(e),t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);return Rr.statDBI(e,t).entryCount}o(IM,"countAll");function CM(e,t,r,s,n=!1,i=void 0,a=void 0){return mr(e,r,s),Zr(e,t,r,(_,c,u,l)=>(s=ke.convertKeyValueToWrite(s),l===r?c.get(s,{transaction:_,lazy:!0})===void 0?[]:[{key:s,value:s}]:c.getValues(s,{transaction:_,reverse:n,limit:i,offset:a}).map(E=>({key:s,value:E}))))}o(CM,"equals");function bM(e,t,r){return mr(e,t,r),Rr.openDBI(e,t).getValuesCount(r)}o(bM,"count");function LM(e,t,r,s,n=!1,i=void 0,a=void 0){return mr(e,r,s),Zr(e,null,r,(_,c)=>{s=ke.convertKeyValueToWrite(s);let u=!0;typeof s=="number"&&(u=!1);let l;if(n===!0){let E;for(let d of c.getKeys({transaction:_,start:s}))if(!d.startsWith(s)){E=d;break}return E!==void 0&&(Number.isInteger(a)?a++:i++),l=c.getRange({transaction:_,start:E,end:void 0,reverse:n,limit:i,offset:a}).map(d=>{let{key:S}=d;if(S!==E){if(S.toString().startsWith(s))return d;if(u===!0)return l.DONE}}),l.filter(d=>d)}else return l=c.getRange({transaction:_,start:s,reverse:n,limit:i,offset:a}).map(E=>{if(E.key.toString().startsWith(s))return E;if(u===!0)return l.DONE}),u?l:l.filter(E=>E)})}o(LM,"startsWith");function yM(e,t,r,s,n=!1,i=void 0,a=void 0){return rh(e,t,r,s,n,i,a,!0)}o(yM,"endsWith");function rh(e,t,r,s,n=!1,i=void 0,a=void 0,_=!1){return mr(e,r,s),Zr(e,null,r,(c,u,l,E)=>{let d=th(l,c,E,r);return a=Number.isInteger(a)?a:0,u.getKeys({transaction:c,end:n?!1:void 0,reverse:n}).flatMap(S=>{let R=S.toString();return R.endsWith(zf)?u.getValues(S,{transaction:c}).map(m=>{let b=d(S,m);if(_?b.endsWith(s):b.includes(s))return{key:b,value:m}}).filter(m=>m):(_?R.endsWith(s):R.includes(s))?u[jo.DBI_DEFINITION_NAME].is_hash_attribute?{key:S,value:S}:u.getValues(S,{transaction:c}).map(m=>({key:S,value:m})):[]}).slice(a,i===void 0?void 0:i+(a||0))})}o(rh,"contains");function wM(e,t,r,s,n=!1,i=void 0,a=void 0){mr(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),Kn(e,t,r,s,c,n,i,a,!0,!1)}o(wM,"greaterThan");function MM(e,t,r,s,n=!1,i=void 0,a=void 0){mr(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),Kn(e,t,r,s,c,n,i,a,!1,!1)}o(MM,"greaterThanEqual");function DM(e,t,r,s,n=!1,i=void 0,a=void 0){mr(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),Kn(e,t,r,c,s,n,i,a,!1,!0)}o(DM,"lessThan");function UM(e,t,r,s,n=!1,i=void 0,a=void 0){mr(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),Kn(e,t,r,c,s,n,i,a,!1,!1)}o(UM,"lessThanEqual");function PM(e,t,r,s,n,i=!1,a=void 0,_=void 0){if(ke.validateEnv(e),r===void 0)throw new Error(ee.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ee.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ee.END_VALUE_REQUIRED);if(s=ke.convertKeyValueToWrite(s),n=ke.convertKeyValueToWrite(n),s>n)throw new Error(ee.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Kn(e,t,r,s,n,i,a,_)}o(PM,"between");function HM(e,t,r,s){ke.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);if(Xo(r),r=Wn(n,r),s===void 0)throw new Error(ee.ID_REQUIRED);let a=null,_=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return _&&(a=Jo.parseRow(_,r)),a}o(HM,"searchByHash");function BM(e,t,r){ke.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ee.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}o(BM,"checkHashExists");function vM(e,t,r,s,n=[]){return nh(e,t,r,s,n),sh(e,t,r,s,n).map(i=>i[1])}o(vM,"batchSearchByHash");function GM(e,t,r,s,n=[]){nh(e,t,r,s,n);let i=new Map;for(let[a,_]of sh(e,t,r,s,n))i.set(a,_);return i}o(GM,"batchSearchByHashToMap");function sh(e,t,r,s,n=[]){return Zr(e,t,t,(i,a,_)=>{r=Wn(_,r);let c=r.length<3;return s.map(u=>{let l=_.dbis[t].get(u,{transaction:i,lazy:c});if(l)return[u,Jo.parseRow(l,r)];n.push(u)}).filter(u=>u)})}o(sh,"batchHashSearch");function nh(e,t,r,s,n){if(ke.validateEnv(e),t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);if(Xo(r),s==null)throw new Error(ee.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ee.IDS_MUST_BE_ITERABLE)}o(nh,"initializeBatchSearchByHash");function Xo(e){if(!Array.isArray(e))throw e===void 0?new Error(ee.FETCH_ATTRIBUTES_REQUIRED):new Error(ee.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(Xo,"validateFetchAttributes");function mr(e,t,r){if(ke.validateEnv(e),t===void 0)throw new Error(ee.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ee.SEARCH_VALUE_REQUIRED);if(r?.length>gM)throw new Error(ee.SEARCH_VALUE_TOO_LARGE)}o(mr,"validateComparisonFunctions");function Wn(e,t){return t.length===1&&mM.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Rr.listDBIs(e)),t}o(Wn,"setGetWholeRowAttributes");ih.exports={searchAll:pM,searchAllToMap:NM,count:bM,countAll:IM,equals:CM,startsWith:LM,endsWith:yM,contains:rh,searchByHash:HM,setGetWholeRowAttributes:Wn,batchSearchByHash:vM,batchSearchByHashToMap:GM,checkHashExists:BM,iterateDBI:OM,greaterThan:wM,greaterThanEqual:MM,lessThan:DM,lessThanEqual:UM,between:PM}});var jn=f((U$,dh)=>{"use strict";var ah=Jr(),Ar=p(),_h=Nc(),qM=require("lodash"),FM=$n(),ch=O(),{promisify:uh}=require("util"),Q=T(),{handleHDBError:Zo,hdb_errors:xM}=X(),{HDB_ERROR_MSGS:zo,HTTP_STATUS_CODES:lh}=xM,VM=v();VM.initSync();var oh=V(),kM=zr(),{getSchemaPath:YM}=K(),Qn=uh(ah.searchByValue),$M=uh(ah.searchByHash),qs="name",Eh="hash_attribute",Jc="schema",KM="schema_table",WM="attribute";dh.exports={describeAll:QM,describeTable:ea,describeSchema:JM};async function QM(e){try{let t=ch.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:qs,search_value:Q.WILDCARD_SEARCH_VALUE,get_attributes:[qs]},i=await Qn(n),a={},_={};for(let d of i)a[d.name]=!0,!t&&!s&&(_[d.name]=r[d.name].describe);let c={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:Q.ID_ATTRIBUTE_STRING,search_value:Q.WILDCARD_SEARCH_VALUE,get_attributes:[Eh,Q.ID_ATTRIBUTE_STRING,qs,Jc]},u=await Qn(c),l=[];for(let d of u)try{let S;if(t||s)S=await ea({schema:d.schema,table:d.name});else if(r&&r[d.schema].describe&&r[d.schema].tables[d.name].describe){let R=r[d.schema].tables[d.name].attribute_permissions;S=await ea({schema:d.schema,table:d.name},R)}S&&l.push(S)}catch(S){Ar.error(S)}let E={};for(let d in l)t||s?(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],a[l[d].schema]&&delete a[l[d].schema]):_[l[d].schema]&&(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],a[l[d].schema]&&delete a[l[d].schema]);for(let d in a)t||s?E[d]={}:_[d]&&(E[d]={});return E}catch(t){return Ar.error("Got an error in describeAll"),Ar.error(t),Zo(new Error,zo.DESCRIBE_ALL_ERR)}}o(QM,"describeAll");async function ea(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={},a=_h.describe_table(e);if(a)throw a;if(r===Q.SYSTEM_SCHEMA_NAME)return global.hdb_schema[Q.SYSTEM_SCHEMA_NAME][s];let _={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:qs,search_value:s,hash_values:[],get_attributes:[Q.WILDCARD_SEARCH_VALUE]},c=Array.from(await Qn(_));if(!c||c.length===0)throw Zo(new Error,zo.TABLE_NOT_FOUND(e.schema,e.table),lh.NOT_FOUND);for await(let u of c)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw Zo(new Error,zo.INVALID_TABLE_ERR(i));let l={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:KM,search_value:r+"."+s,get_attributes:[WM]},E=Array.from(await Qn(l));E=qM.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=jM(n)),i.attributes=E,i.clustering_stream_name=FM.createNatsTableStreamName(u.schema,u.name);try{let d=YM(i.schema,i.name),S=await oh.openEnvironment(d,i.name),R=oh.statDBI(S,i.hash_attribute);i.record_count=R.entryCount;for(let{key:m}of kM.lessThan(S,i.hash_attribute,Q.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,1/0,!0,1,0))i.last_updated_record=m}catch(d){Ar.warn(`unable to stat table dbi due to ${d}`)}}catch(l){Ar.error(`There was an error getting attributes for table '${u.name}'`),Ar.error(l)}return i}o(ea,"descTable");function jM(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}o(jM,"getAttrsByPerms");async function JM(e){let t=_h.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:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Jc,search_value:s,hash_values:[],get_attributes:[Eh,Q.ID_ATTRIBUTE_STRING,qs,Jc]},i=Array.from(await Qn(n));if(i&&i.length<1){let a={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[qs]},_=Array.from(await $M(a));if(_&&_.length<1)throw Zo(new Error,zo.SCHEMA_NOT_FOUND(e.schema),lh.NOT_FOUND);return{}}else{let a={};return await Promise.all(i.map(async _=>{try{let c;if(r&&r.tables[_.name]&&(c=r.tables[_.name]),ch.isEmpty(c)||c.describe){let u=await ea({schema:e.schema,table:_.name},c?c.attribute_permissions:null);u&&(a[u.name]=u)}}catch(c){Ar.error(`Error describing schema table '${e.schema}.${_}'`),Ar.error(c)}})),a}}o(JM,"describeSchema")});var es=f((H$,Rh)=>{var Fs=Kt(),{callbackify:hh,promisify:XM}=require("util");Rh.exports={setSchemaDataToGlobal:Sh,getTableSchema:eD,getSystemSchema:rD,setSchemaDataToGlobalAsync:XM(Sh)};var Th=jn(),ZM=hh(Th.describeAll),zM=hh(Th.describeTable);function Sh(e){ZM(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Fs),global.hdb_schema=r,e(null,null)})}o(Sh,"setSchemaDataToGlobal");function fh(e,t){return e==="system"?Fs[t]:global.hdb_schema[e][t]}o(fh,"returnSchema");function eD(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?tD(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,fh(e,t))}):r(null,fh(e,t))}o(eD,"getTableSchema");function tD(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=Fs:global.hdb_schema={system:Fs},r();return}zM(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:Fs}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}o(tD,"setTableDataToGlobal");function rD(){return Fs}o(rD,"getSystemSchema")});var ta=f((v$,ph)=>{"use strict";var ts=p(),Ye=T(),sD=Tf(),mh=es(),nD=jn(),iD=ss(),{validateEvent:gh}=rs(),Jn=jr(),oD=require("process"),aD={[Ye.ITC_EVENT_TYPES.SCHEMA]:_D,[Ye.ITC_EVENT_TYPES.USER]:uD};async function _D(e){let t=gh(e);if(t){ts.error(t);return}ts.trace("ITC schemaHandler received schema event:",e),await sD(e.message),await cD(e.message)}o(_D,"schemaHandler");async function cD(e){try{if(Jn.resetReadTxn(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Jn.resetReadTxn(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Jn.resetReadTxn(Ye.SYSTEM_SCHEMA_NAME,Ye.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 nD.describeTable({schema:e.schema,table:e.table});break;default:mh.setSchemaDataToGlobal(Ah);break}else mh.setSchemaDataToGlobal(Ah)}catch(t){ts.error(t)}}o(cD,"syncSchemaMetadata");function Ah(e){e&&ts.error(e)}o(Ah,"handleErrorCallback");async function uD(e){try{Jn.resetReadTxn(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Jn.resetReadTxn(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME);let t=gh(e);if(t){ts.error(t);return}ts.trace(`ITC userHandler ${Ye.HDB_ITC_CLIENT_PREFIX}${oD.pid} received user event:`,e),await iD.setUsersToGlobal()}catch(t){ts.error(t)}}o(uD,"userHandler");ph.exports=aD});var rs=f((V$,Oh)=>{"use strict";var q$=p(),Xc=O(),lD=T(),{ITC_ERRORS:Xn}=Xe(),{parentPort:F$,threadId:ED,isMainThread:dD,workerData:x$}=require("worker_threads"),{onMessageFromWorkers:SD,broadcast:fD}=Wr();Oh.exports={sendItcEvent:hD,validateEvent:Nh,SchemaEventMsg:TD,UserEventMsg:RD};var ra;SD(e=>{ra=ra||ta(),Nh(e),ra[e.type]&&ra[e.type](e)});function hD(e){!dD&&e.message&&(e.message.originator=ED),fD(e)}o(hD,"sendItcEvent");function Nh(e){if(typeof e!="object")return Xn.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Xc.isEmpty(e.type))return Xn.MISSING_TYPE;if(!e.hasOwnProperty("message")||Xc.isEmpty(e.message))return Xn.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Xc.isEmpty(e.message.originator))return Xn.MISSING_ORIGIN;if(lD.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Xn.INVALID_EVENT(e.type)}o(Nh,"validateEvent");function TD(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}o(TD,"SchemaEventMsg");function RD(e){this.originator=e}o(RD,"UserEventMsg")});var Zn=f(($$,Lh)=>{"use strict";var Ih=T(),Y$=O(),sa=p(),Ch=$S(),xs,{sendItcEvent:bh}=rs();function mD(e){try{sa.trace("signalSchemaChange called with message:",e),xs=xs||ta();let t=new Ch(Ih.ITC_EVENT_TYPES.SCHEMA,e);xs.schema(t),bh(t)}catch(t){sa.error(t)}}o(mD,"signalSchemaChange");function AD(e){try{sa.trace("signalUserChange called with message:",e),xs=xs||ta();let t=new Ch(Ih.ITC_EVENT_TYPES.USER,e);xs.user(t),bh(t)}catch(t){sa.error(t)}}o(AD,"signalUserChange");Lh.exports={signalSchemaChange:mD,signalUserChange:AD}});var na=f((W$,wh)=>{"use strict";var yh=O(),gD=T(),pD=p(),ND=Po(),OD=Uo(),ID=Zn(),{SchemaEventMsg:CD}=rs(),bD="already exists in";wh.exports=LD;async function LD(e,t,r){if(yh.isEmptyOrZeroLength(r))return r;let s=[];yh.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 yD(e,t.schema,t.name,i)})),n}o(LD,"lmdbCheckForNewAttributes");async function yD(e,t,r,s){let n=new OD(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await wD(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(bD))pD.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}o(yD,"createNewAttribute");async function wD(e){let t;return t=await ND(e),ID.signalSchemaChange(new CD(process.pid,gD.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}o(wD,"createAttribute")});var Vs=f((j$,Mh)=>{"use strict";var ia=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}};o(ia,"LMDBTransactionObject");Mh.exports=ia});var Uh=f((X$,Dh)=>{"use strict";var MD=Vs(),DD=T().OPERATIONS_ENUM,oa=class extends MD{constructor(t,r,s,n,i=void 0){super(DD.INSERT,r,s,n,i),this.records=t}};o(oa,"LMDBInsertTransactionObject");Dh.exports=oa});var Hh=f((z$,Ph)=>{"use strict";var UD=Vs(),PD=T().OPERATIONS_ENUM,aa=class extends UD{constructor(t,r,s,n,i,a=void 0){super(PD.UPDATE,s,n,i,a),this.records=t,this.original_records=r}};o(aa,"LMDBUpdateTransactionObject");Ph.exports=aa});var vh=f((tK,Bh)=>{"use strict";var HD=Vs(),BD=T().OPERATIONS_ENUM,_a=class extends HD{constructor(t,r,s,n,i,a=void 0){super(BD.UPSERT,s,n,i,a),this.records=t,this.original_records=r}};o(_a,"LMDBUpsertTransactionObject");Bh.exports=_a});var qh=f((sK,Gh)=>{"use strict";var vD=Vs(),GD=T().OPERATIONS_ENUM,ca=class extends vD{constructor(t,r,s,n,i=void 0){super(GD.DELETE,s,n,t,i),this.original_records=r}};o(ca,"LMDBDeleteTransactionObject");Gh.exports=ca});var zn=f((oK,kh)=>{"use strict";var iK=require("path"),Fh=V(),qD=Uh(),FD=Hh(),xD=vh(),VD=qh(),ks=Ee(),xh=O(),{CONFIG_PARAMS:kD}=T(),Vh=v();Vh.initSync();var ua=T().OPERATIONS_ENUM,{getTransactionAuditStorePath:YD}=K();kh.exports=$D;async function $D(e,t){if(Vh.get(kD.LOGGING_AUDITLOG)===!1)return;let r=YD(e.schema,e.table),s=await Fh.openEnvironment(r,e.table,!0),n=KD(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Fh.initializeDBIs(s,ks.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ks.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[ks.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[ks.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),xh.isEmpty(n.user_name)||s.dbis[ks.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let a=0;a<n.hash_values.length;a++)s.dbis[ks.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[a],i)})}}o($D,"writeTransaction");function KD(e,t){let r=xh.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===ua.INSERT)return new qD(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ua.UPDATE)return new FD(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ua.UPSERT)return new xD(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ua.DELETE)return new VD(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(KD,"createTransactionObject")});var Zc=f((cK,Yh)=>{"use strict";var WD=Ho(),_K=vo(),ei=T(),QD=qo(),jD=$r().insertRecords,JD=V(),XD=p(),ZD=na(),{getSchemaPath:zD}=K(),eU=zn();Yh.exports=tU;async function tU(e){try{let{schema_table:t,attributes:r}=WD(e);QD(e,r,t.hash_attribute),e.schema!==ei.SYSTEM_SCHEMA_NAME&&(r.includes(ei.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(ei.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(ei.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(ei.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await ZD(e.hdb_auth_header,t,r),n=zD(e.schema,e.table),i=await JD.openEnvironment(n,e.table),a=await jD(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await eU(e,a)}catch(_){XD.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schema_table:t,new_attributes:s,txn_time:a.txn_time}}catch(t){throw t}}o(tU,"lmdbCreateRecords")});var Wh=f((lK,Kh)=>{"use strict";var $h=T(),rU=Zc(),sU=vo(),nU=require("fs-extra"),{getSchemaPath:iU}=K();Kh.exports=oU;async function oU(e){let t=[{name:e.schema,createddate:Date.now()}],r=new sU($h.SYSTEM_SCHEMA_NAME,$h.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await rU(r),await nU.mkdirp(iU(e.schema))}o(oU,"lmdbCreateSchema")});var jh=f((dK,Qh)=>{"use strict";var la=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};o(la,"DeleteRecordsResponseObject");Qh.exports=la});var tu=f((RK,Zh)=>{"use strict";var Jh=V(),zc=Er(),eu=Xe().LMDB_ERRORS_ENUM,aU=Ee(),Xh=p(),fK=O(),_U=require("lmdb"),cU=jh(),uU=T(),{OVERFLOW_MARKER:hK,MAX_SEARCH_KEY_LENGTH:TK}=aU,lU=uU.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function EU(e,t,r,s){if(zc.validateEnv(e),t===void 0)throw new Error(eu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(eu.IDS_REQUIRED):new Error(eu.IDS_MUST_BE_ITERABLE);try{let n=Jh.listDBIs(e);Jh.initializeDBIs(e,t,n);let i=new cU,a,_=[],c=[];for(let d=0,S=r.length;d<S;d++)try{a=r[d];let R=e.dbis[t].get(a);if(!R||s&&R[lU]>s){i.skipped.push(a);continue}let m=e.dbis[t].ifVersion(a,_U.IF_EXISTS,()=>{e.dbis[t].remove(a);for(let b=0;b<n.length;b++){let $=n[b];if(!R.hasOwnProperty($)||$===t)continue;let A=e.dbis[$],H=R[$];if(H!=null)try{let le=zc.getIndexedValues(H);if(le)for(let ae=0,or=le.length;ae<or;ae++)A.remove(le[ae],a)}catch{Xh.warn(`cannot delete from attribute: ${$}, ${H}:${a}`)}}});_.push(m),c.push(a),i.original_records.push(R)}catch(R){Xh.warn(R),i.skipped.push(a)}let u=[],l=await Promise.all(_);for(let d=0,S=l.length;d<S;d++)l[d]===!0?i.deleted.push(c[d]):(i.skipped.push(c[d]),u.push(d));let E=0;for(let d=0;d<u.length;d++){let S=u[d];i.original_records.splice(S-E,1),E++}return i.txn_time=zc.getNextMonotonicTime(),i}catch(n){throw n}}o(EU,"deleteRecords");Zh.exports={deleteRecords:EU}});var ti=f((AK,eT)=>{"use strict";var Ys=O(),dU=tu(),SU=V(),{getSchemaPath:fU}=K(),hU=zn(),TU=p();eT.exports=RU;async function RU(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ys.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ys.isEmptyOrZeroLength(e.hash_values)&&!Ys.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let _=0;_<e.records.length;_++){let c=e.records[_][s];Ys.isEmpty(c)||e.hash_values.push(c)}}if(Ys.isEmptyOrZeroLength(e.hash_values))return zh([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ys.isEmptyOrZeroLength(e.records)){e.records=[];for(let _=0;_<e.hash_values.length;_++)e.records[_]={[s]:e.hash_values[_]}}let n=fU(e.schema,e.table),i=await SU.openEnvironment(n,e.table),a=await dU.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await hU(e,a)}catch(_){TU.error(`unable to write transaction due to ${_.message}`)}return zh(a.deleted,a.skipped,a.txn_time)}catch(n){throw n}}o(RU,"lmdbDeleteRecords");function zh(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}}o(zh,"createDeleteResponse")});var ri=f((NK,nT)=>{var tT=require("lodash"),rT=Ze(),x=require("joi"),mU=O(),{hdb_schema_table:St,checkValidTable:sT}=Us(),{handleHDBError:AU,hdb_errors:gU}=X(),{HTTP_STATUS_CODES:pU}=gU,pK=x.object({schema:St,table:St,hash_values:x.array().min(0).items(x.alternatives(x.string(),x.number())).required(),get_attributes:x.array().min(1).items(St).required()}),NU=x.object({schema:St,table:St,search_attribute:St,search_value:x.any().required(),get_attributes:x.array().min(1).items(St).required(),desc:x.bool(),limit:x.number().integer().min(1),offset:x.number().integer().min(0)}),OU=x.object({schema:St,table:St,operator:x.string().valid("and","or").default("and").lowercase(),offset:x.number().integer().min(0),limit:x.number().integer().min(1),get_attributes:x.array().min(1).items(St).required(),conditions:x.array().min(1).items(x.object({search_attribute:St,search_type:x.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:x.when("search_type",{switch:[{is:"equals",then:x.any()},{is:"between",then:x.array().items(x.alternatives([x.string(),x.number()])).length(2)}],otherwise:x.alternatives(x.string(),x.number())}).required()})).required()});nT.exports=function(e,t){let r=null;switch(t){case"value":r=rT.validateBySchema(e,NU);break;case"hashes":let i=function(a){n?n+=". "+a:n=a};var s=i;o(i,"addError");let n;i(sT("schema",e.schema)),i(sT("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(a=>typeof a=="string"||typeof a=="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(a=>typeof a=="string"||typeof a=="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=rT.validateBySchema(e,OU);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=mU.checkGlobalSchemaTable(e.schema,e.table);if(n)return AU(new Error,n,pU.NOT_FOUND);let a=global.hdb_schema[e.schema][e.table].attributes,_=[...e.get_attributes];if(t==="value"&&_.push(e.search_attribute),t==="conditions")for(let u=0,l=e.conditions.length;u<l;u++){let E=e.conditions[u];_.push(E.search_attribute)}let c=tT.filter(_,u=>u!=="*"&&u.attribute!=="*"&&!tT.some(a,l=>l===u||l.attribute===u||l.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 ru=f((IK,iT)=>{"use strict";var IU=V(),CU=ri(),{getSchemaPath:bU}=K();iT.exports=LU;function LU(e){let t=CU(e,"hashes");if(t)throw t;let r=bU(e.schema,e.table);return IU.openEnvironment(r,e.table)}o(LU,"initialize")});var su=f((bK,oT)=>{"use strict";var yU=zr(),wU=ru();oT.exports=MU;async function MU(e){let t=await wU(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return yU.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}o(MU,"lmdbGetDataByHash")});var si=f((yK,aT)=>{"use strict";var Ea=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};o(Ea,"SearchByHashObject");aT.exports=Ea});var cT=f((DK,_T)=>{"use strict";var MK=si(),DU=zr(),UU=ru();_T.exports=PU;async function PU(e){let t=await UU(e),r=global.hdb_schema[e.schema][e.table];return DU.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}o(PU,"lmdbSearchByHash")});var ft=f((PK,uT)=>{"use strict";var da=class{constructor(t,r,s,n,i,a,_,c=!1,u=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=a,this.end_value=_,this.reverse=c,this.limit=u,this.offset=l}};o(da,"SearchObject");uT.exports=da});var Sa=f((BK,hT)=>{"use strict";var Ae=zr(),HU=V(),BU=O(),I=Ee(),ns=T(),vU=Kt(),lT=Xe().LMDB_ERRORS_ENUM,{compareKeys:$s}=require("ordered-binary"),{getSchemaPath:GU}=K(),jt=ns.SEARCH_WILDCARDS;async function qU(e,t,r){let s;e.schema===ns.SYSTEM_SCHEMA_NAME?s=vU[e.table]:s=global.hdb_schema[e.schema][e.table];let n=fT(e,s.hash_attribute,r,t);return dT(e,n,s.hash_attribute,r)}o(qU,"prepSearch");async function dT(e,t,r,s){let n=GU(e.schema,e.table),i=await HU.openEnvironment(n,e.table),a=ST(i,e,t,r),_=a.transaction||i;if([I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,I.SEARCH_TYPES.SEARCH_ALL,I.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(xU(e,r)===!1){let l=e.search_attribute;if(l===r)return s?ET(a,()=>!0):a.map(d=>({[r]:d.key}));let E=o(d=>({[r]:d.value,[l]:d.key}),"toObject");return s?ET(a,E):a.map(E)}let u=e.search_attribute===r?a.map(l=>l.key):a.map(l=>l.value);return s===!0?Ae.batchSearchByHashToMap(_,r,e.get_attributes,u):Ae.batchSearchByHash(_,r,e.get_attributes,u)}o(dT,"executeSearch");function ST(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:a,limit:_,offset:c}=t;switch(a=typeof a=="boolean"?a:!1,_=Number.isInteger(_)?_:void 0,c=Number.isInteger(c)?c:void 0,r){case I.SEARCH_TYPES.EQUALS:n=Ae.equals(e,i,t.search_attribute,t.search_value,a,_,c);break;case I.SEARCH_TYPES.CONTAINS:n=Ae.contains(e,i,t.search_attribute,t.search_value,a,_,c);break;case I.SEARCH_TYPES.ENDS_WITH:case I.SEARCH_TYPES._ENDS_WITH:n=Ae.endsWith(e,i,t.search_attribute,t.search_value,a,_,c);break;case I.SEARCH_TYPES.STARTS_WITH:case I.SEARCH_TYPES._STARTS_WITH:n=Ae.startsWith(e,i,t.search_attribute,t.search_value,a,_,c);break;case I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Ae.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Ae.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case I.SEARCH_TYPES.SEARCH_ALL:return Ae.searchAll(e,s,t.get_attributes,a,_,c);case I.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Ae.searchAllToMap(e,s,t.get_attributes,a,_,c);case I.SEARCH_TYPES.BETWEEN:n=Ae.between(e,i,t.search_attribute,t.search_value,t.end_value,a,_,c);break;case I.SEARCH_TYPES.GREATER_THAN:case I.SEARCH_TYPES._GREATER_THAN:n=Ae.greaterThan(e,i,t.search_attribute,t.search_value,a,_,c);break;case I.SEARCH_TYPES.GREATER_THAN_EQUAL:case I.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Ae.greaterThanEqual(e,i,t.search_attribute,t.search_value,a,_,c);break;case I.SEARCH_TYPES.LESS_THAN:case I.SEARCH_TYPES._LESS_THAN:n=Ae.lessThan(e,i,t.search_attribute,t.search_value,a,_,c);break;case I.SEARCH_TYPES.LESS_THAN_EQUAL:case I.SEARCH_TYPES._LESS_THAN_EQUAL:n=Ae.lessThanEqual(e,i,t.search_attribute,t.search_value,a,_,c);break;default:return Object.create(null)}return n}o(ST,"searchByType");function FU(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case I.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case I.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case I.SEARCH_TYPES.ENDS_WITH:case I.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case I.SEARCH_TYPES.STARTS_WITH:case I.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case I.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return $s(i,s[0])>=0&&$s(i,s[1])<=0};case I.SEARCH_TYPES.GREATER_THAN:case I.SEARCH_TYPES._GREATER_THAN:return n=>$s(n[r],s)>0;case I.SEARCH_TYPES.GREATER_THAN_EQUAL:case I.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>$s(n[r],s)>=0;case I.SEARCH_TYPES.LESS_THAN:case I.SEARCH_TYPES._LESS_THAN:return n=>$s(n[r],s)<0;case I.SEARCH_TYPES.LESS_THAN_EQUAL:case I.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>$s(n[r],s)<=0;default:return Object.create(null)}}o(FU,"filterByType");function ET(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}o(ET,"createMapFromIterable");function xU(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}o(xU,"checkToFetchMore");function fT(e,t,r,s){if(BU.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),a=n.charAt(n.length-1),_=!1;if(e.search_attribute===t&&(_=!0),jt.indexOf(n)>-1)return r===!0?I.SEARCH_TYPES.SEARCH_ALL_TO_MAP:I.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(jt[0])<0&&n.indexOf(jt[1])<0)return _===!0?r===!0?I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:I.SEARCH_TYPES.EQUALS;if(jt.indexOf(i)>=0&&jt.indexOf(a)>=0)return e.search_value=e.search_value.slice(1,-1),I.SEARCH_TYPES.CONTAINS;if(jt.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),I.SEARCH_TYPES.ENDS_WITH;if(jt.indexOf(a)>=0)return e.search_value=e.search_value.slice(0,-1),I.SEARCH_TYPES.STARTS_WITH;if(n.includes(jt[0])||n.includes(jt[1]))return I.SEARCH_TYPES.EQUALS;throw new Error(lT.UNKNOWN_SEARCH_TYPE)}else switch(s){case ns.VALUE_SEARCH_COMPARATORS.BETWEEN:return I.SEARCH_TYPES.BETWEEN;case ns.VALUE_SEARCH_COMPARATORS.GREATER:return I.SEARCH_TYPES.GREATER_THAN;case ns.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return I.SEARCH_TYPES.GREATER_THAN_EQUAL;case ns.VALUE_SEARCH_COMPARATORS.LESS:return I.SEARCH_TYPES.LESS_THAN;case ns.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return I.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(lT.UNKNOWN_SEARCH_TYPE)}}o(fT,"createSearchTypeFromSearchObject");hT.exports={executeSearch:dT,createSearchTypeFromSearchObject:fT,prepSearch:qU,searchByType:ST,filterByType:FU}});var RT=f((qK,TT)=>{"use strict";var GK=ft(),VU=ri(),kU=O(),YU=T(),$U=Sa();TT.exports=KU;function KU(e,t){if(!kU.isEmpty(t)&&YU.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=VU(e,"value");if(s)throw s;let n=!0;return $U.prepSearch(e,t,n)}o(KU,"lmdbGetDataByValue")});var Ks=f((VK,mT)=>{"use strict";var xK=ft(),WU=ri(),QU=O(),jU=T(),JU=Sa();mT.exports=XU;async function XU(e,t){if(!QU.isEmpty(t)&&jU.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=WU(e,"value");if(s)throw s;return JU.prepSearch(e,t,!1)}o(XU,"lmdbSearchByValue")});var gT=f(($K,AT)=>{"use strict";var YK=Ee(),fa=class{constructor(t,r,s,n,i=void 0,a=void 0,_="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=a,this.conditions=n,this.operator=_}};o(fa,"SearchByConditionsObject");var ha=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};o(ha,"SearchCondition");var Ta=class{constructor(t,r){this.attribute=t,this.desc=r}};o(Ta,"SortAttribute");AT.exports={SearchByConditionsObject:fa,SearchCondition:ha,SortAttribute:Ta}});var CT=f((QK,IT)=>{"use strict";var WK=gT().SearchByConditionsObject,ZU=ft(),zU=ri(),nu=zr(),Ra=Ee(),OT=Sa(),eP=jc(),tP=require("lodash"),{getSchemaPath:rP}=K(),pT=V(),{handleHDBError:sP,hdb_errors:nP}=X(),{HTTP_STATUS_CODES:iP}=nP,oP=1e8;IT.exports=aP;async function aP(e){let t=zU(e,"conditions");if(t)throw sP(t,t.message,iP.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=rP(e.schema,e.table),s=await pT.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)pT.openDBI(s,u.search_attribute);let i=tP.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let l=u.search_type;l===Ra.SEARCH_TYPES.EQUALS?u.estimated_count=nu.count(s,u.search_attribute,u.search_value):l===Ra.SEARCH_TYPES.CONTAINS||l===Ra.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=oP}return u.estimated_count}),a=s.useReadTransaction();a.database=s;let _=await NT(a,e,i[0],n.hash_attribute),c;if(!e.operator||e.operator.toLowerCase()==="and"){let u=s.dbis[n.hash_attribute],l=i.slice(1).map(OT.filterByType),E=l.length,d=nu.setGetWholeRowAttributes(s,e.get_attributes);c=_.map(S=>u.get(S,{transaction:a,lazy:!0})),E>0&&(c=c.filter(S=>{for(let R=0;R<E;R++)if(!l[R](S))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(S=>eP.parseRow(S,d))}else{for(let E=1;E<i.length;E++){let d=i[E],S=await NT(a,e,d,n.hash_attribute);_=_.concat(S)}let u=new Set,l=e.offset||0;_=_.filter(E=>u.has(E)?!1:(u.add(E),!0)).slice(l,e.limit&&e.limit+l),c=nu.batchSearchByHash(a,n.hash_attribute,e.get_attributes,_)}return c.onDone=()=>{a.done()},c}o(aP,"lmdbSearchByConditions");async function NT(e,t,r,s){let n=new ZU(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Ra.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,OT.searchByType(e,n,i,s).map(a=>a.value)}o(NT,"executeConditionSearch")});var Aa=f((JK,bT)=>{"use strict";var _P=T().OPERATIONS_ENUM,ma=class{constructor(t,r,s,n=void 0){this.operation=_P.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};o(ma,"DeleteObject");bT.exports=ma});var iu=f((ZK,HT)=>{"use strict";var MT=ft(),DT=Aa(),UT=Ks(),PT=ti(),ye=T(),LT=O(),yT=V(),{getTransactionAuditStorePath:cP,getSchemaPath:uP}=K(),wT=p();HT.exports=lP;async function lP(e){try{if(LT.isEmpty(global.hdb_schema[e.schema])||LT.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await EP(e),await dP(e);let t=uP(e.schema,e.table);try{await yT.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")wT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=cP(e.schema,e.table);await yT.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")wT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(lP,"lmdbDropTable");async function EP(e){let t=new MT(ye.SYSTEM_SCHEMA_NAME,ye.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ye.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ye.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await UT(t)),s=[];for(let i=0;i<r.length;i++){let a=r[i];s.push(a.id)}if(s.length===0)return;let n=new DT(ye.SYSTEM_SCHEMA_NAME,ye.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await PT(n)}o(EP,"deleteAttributesFromSystem");async function dP(e){let t=new MT(ye.SYSTEM_SCHEMA_NAME,ye.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ye.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[ye.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,ye.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,ye.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await UT(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let a=r[i];a.name===e.table&&a.schema===e.schema&&(s=a)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new DT(ye.SYSTEM_SCHEMA_NAME,ye.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await PT(n)}catch(i){throw i}}o(dP,"dropTableFromSystem")});var vT=f((eW,BT)=>{"use strict";var SP=require("fs-extra"),fP=ft(),hP=si(),TP=Aa(),RP=iu(),mP=ti(),AP=su(),gP=Ks(),Jt=T(),{getSchemaPath:pP}=K(),{handleHDBError:NP,hdb_errors:OP}=X(),{HDB_ERROR_MSGS:IP,HTTP_STATUS_CODES:CP}=OP;BT.exports=bP;async function bP(e){let t;try{t=await LP(e.schema);let r=new fP(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await gP(r));for(let a=0;a<s.length;a++){let _={schema:t,table:s[a].name};try{await RP(_)}catch(c){if(c.message!=="invalid environment")throw c}}let n=new TP(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await mP(n);let i=pP(t);await SP.remove(i)}catch(r){throw r}}o(bP,"lmdbDropSchema");async function LP(e){let t=new hP(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await AP(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw NP(new Error,IP.SCHEMA_NOT_FOUND(e),CP.NOT_FOUND,void 0,void 0,!0);return s}o(LP,"validateDropSchema")});var pa=f((rW,GT)=>{"use strict";var ga=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};o(ga,"CreateTableObject");GT.exports=ga});var au=f((iW,qT)=>{"use strict";var yP=require("fs-extra"),Na=V(),{getTransactionAuditStorePath:wP}=K(),ou=Ee(),nW=pa();qT.exports=MP;async function MP(e){let t;try{let r=wP(e.schema,e.table);await yP.mkdirp(r),t=await Na.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{Na.createDBI(t,ou.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Na.createDBI(t,ou.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Na.createDBI(t,ou.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}o(MP,"createTransactionsAuditEnvironment")});var Eu=f((aW,VT)=>{"use strict";var _u=T(),FT=V(),DP=$r(),{getSystemSchemaPath:UP,getSchemaPath:PP}=K(),HP=Kt(),BP=Po(),cu=Uo(),vP=p(),GP=au(),lu=HP.hdb_table,xT=[];for(let e=0;e<lu.attributes.length;e++)xT.push(lu.attributes[e].attribute);VT.exports=qP;async function qP(e,t){let r=PP(t.schema,t.table),s=new cu(t.schema,t.table,_u.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new cu(t.schema,t.table,_u.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new cu(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await FT.createEnvironment(r,t.table),e!==void 0){let a=await FT.openEnvironment(UP(),_u.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await DP.insertRecords(a,lu.hash_attribute,xT,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await uu(s),await uu(n),await uu(i)}await GP(t)}catch(a){throw a}}o(qP,"lmdbCreateTable");async function uu(e){try{await BP(e)}catch(t){vP.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(uu,"createAttribute")});var YT=f((cW,kT)=>{"use strict";var FP=Ho(),xP=qo(),VP=na(),ni=T(),kP=$r().updateRecords,YP=V(),{getSchemaPath:$P}=K(),KP=zn(),WP=p();kT.exports=QP;async function QP(e){try{let{schema_table:t,attributes:r}=FP(e);xP(e,r,t.hash_attribute),e.schema!==ni.SYSTEM_SCHEMA_NAME&&(r.includes(ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await VP(e.hdb_auth_header,t,r),n=$P(e.schema,e.table),i=await YP.openEnvironment(n,e.table),a=await kP(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await KP(e,a)}catch(_){WP.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schema_table:t,new_attributes:s,txn_time:a.txn_time}}catch(t){throw t}}o(QP,"lmdbUpdateRecords")});var KT=f((lW,$T)=>{"use strict";var jP=T().OPERATIONS_ENUM,Oa=class{constructor(t,r,s,n=void 0){this.operation=jP.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};o(Oa,"UpsertObject");$T.exports=Oa});var QT=f((SW,WT)=>{"use strict";var dW=KT(),JP=Ho(),XP=qo(),ZP=na(),ii=T(),zP=$r().upsertRecords,eH=V(),{getSchemaPath:tH}=K(),rH=zn(),sH=p(),{handleHDBError:nH,hdb_errors:iH}=X();WT.exports=oH;async function oH(e){let t;try{t=JP(e)}catch(c){throw nH(c,c.message,iH.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;XP(e,s,r.hash_attribute),e.schema!==ii.SYSTEM_SCHEMA_NAME&&(s.includes(ii.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(ii.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(ii.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(ii.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await ZP(e.hdb_auth_header,r,s),i=tH(e.schema,e.table),a=await eH.openEnvironment(i,e.table),_=await zP(a,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await rH(e,_)}catch(c){sH.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:_.written_hashes,schema_table:r,new_attributes:n,txn_time:_.txn_time}}o(oH,"lmdbUpsertRecords")});var eR=f((hW,zT)=>{"use strict";var aH=ft(),jT=O(),JT=p(),_H=Ks(),XT=T(),cH=tu().deleteRecords,uH=V(),{getSchemaPath:lH}=K(),{promisify:EH}=require("util"),dH=EH(setTimeout),ZT=1e4,SH=10;zT.exports=fH;async function fH(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(jT.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 aH(e.schema,e.table,XT.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=Array.from(await _H(n,XT.VALUE_SEARCH_COMPARATORS.LESS))}catch(n){throw JT.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return jT.isEmptyOrZeroLength(s)?(JT.trace("No records found to delete"),{message:"No records found to delete"}):await hH(e,s,t)}o(fH,"lmdbDeleteRecordsBefore");async function hH(e,t,r){let s=lH(e.schema,e.table),n=await uH.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let a=0,_=t.length;a<_;a+=ZT){let c=t.slice(a,a+ZT),u=[];for(let l=0,E=c.length;l<E;l++)u.push(c[l][r]);try{let l=await cH(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(l.deleted),i.skipped_hashes=i.skipped_hashes.concat(l.skipped)}catch(l){throw l}await dH(SH)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}o(hH,"chunkDeletes")});var rR=f((RW,tR)=>{"use strict";var Ia=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};o(Ia,"DeleteBeforeObject");tR.exports=Ia});var nR=f((AW,sR)=>{"use strict";var Ca=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};o(Ca,"DeleteAuditLogsBeforeResults");sR.exports=Ca});var aR=f((NW,oR)=>{"use strict";var du=V(),{getTransactionAuditStorePath:TH}=K(),pW=rR(),oi=Ee(),RH=O(),iR=nR(),mH=require("util").promisify,AH=mH(setTimeout),gH=1e4,pH=100;oR.exports=NH;async function NH(e){let t=TH(e.schema,e.table),r=await du.openEnvironment(t,e.table,!0),s=du.listDBIs(r);du.initializeDBIs(r,oi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new iR;do n=await OH(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 AH(pH);while(n.transactions_deleted>0);return i}o(NH,"deleteAuditLogsBefore");async function OH(e,t){let r=new iR;try{let s=e.dbis[oi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:a}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let _=a[oi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];RH.isEmpty(_)||(n=e.dbis[oi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(_,i));for(let c=0;c<a.hash_values.length;c++)n=e.dbis[oi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[c],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>gH)break}return await n,r}catch(s){throw s}}o(OH,"deleteTransactions")});var cR=f((IW,_R)=>{"use strict";var ba=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};o(ba,"DropAttributeObject");_R.exports=ba});var lR=f((LW,uR)=>{"use strict";var IH=ft(),CH=Aa(),bW=cR(),Lt=T(),bH=O(),Su=V(),LH=Kt(),yH=Ks(),wH=ti(),{getSchemaPath:MH}=K();uR.exports=DH;async function DH(e,t=!0){let r;e.schema===Lt.SYSTEM_SCHEMA_NAME?r=LH[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await PH(e),n=MH(e.schema,e.table),i=await Su.openEnvironment(n,e.table);return t===!0&&await UH(e,i,r.hash_attribute),Su.dropDBI(i,e.attribute),s}o(DH,"lmdbDropAttribute");async function UH(e,t,r){let s=Su.openDBI(t,r),n,i=e.attribute;for(let{key:a,value:_,version:c}of s.getRange({start:!1,versions:!0})){let u={};for(let l in _)l!==i&&(u[l]=_[l]);n=t.dbis[r].put(a,u,c)}await n}o(UH,"removeAttributeFromAllObjects");async function PH(e){let t=new IH(Lt.SYSTEM_SCHEMA_NAME,Lt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Lt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Lt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Lt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await yH(t)).filter(a=>a[Lt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(bH.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(a=>a[Lt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new CH(Lt.SYSTEM_SCHEMA_NAME,Lt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return wH(i)}o(PH,"dropAttributeFromSystem")});var TR=f((MW,hR)=>{"use strict";var fu=V(),Ws=Ee(),wW=Er(),hu=T(),ER=O(),{getTransactionAuditStorePath:HH}=K(),BH=zr(),La=Vs(),vH=p();hR.exports=GH;async function GH(e){let t=HH(e.schema,e.table),r=await fu.openEnvironment(t,e.table,!0),s=fu.listDBIs(r);fu.initializeDBIs(r,Ws.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case hu.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return dR(r,e.search_values);case hu.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,FH(r,e.search_values,n);case hu.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return qH(r,e.search_values);default:return dR(r)}}o(GH,"readAuditLog");function dR(e,t=[0,Date.now()]){ER.isEmpty(t[0])&&(t[0]=0),ER.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Ws.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 La,n))}o(dR,"searchTransactionsByTimestamp");function qH(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let a of e.dbis[Ws.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(a);r.set(n,fR(e,i))}return Object.fromEntries(r)}o(qH,"searchTransactionsByUsername");function FH(e,t,r){let s=new Map;for(let _=0,c=t.length;_<c;_++){let u=t[_],l=BH.equals(e,Ws.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ws.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:E}of l){let d=Number(E);s.has(d)?s.get(d).push(u.toString()):s.set(d,[u.toString()])}}let n=Array.from(s.keys()),i=fR(e,n),a=new Map;for(let _=0;_<i.length;_++){let c=i[_],u=c.timestamp,l=s.get(u);SR(c,"records",r,l,a),SR(c,"original_records",r,l,a)}return Object.fromEntries(a)}o(FH,"searchTransactionsByHashValues");function SR(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let a=0;a<e[t].length;a++){let _=e[t][a],c=_[r].toString();if(s.indexOf(c)>=0)if(n.has(c)){let u=n.get(c),l=u[u.length-1];if(l.timestamp===i)l[t]=[_];else{let E=new La(e.operation,e.user_name,i,void 0);E[t]=[_],u.push(E)}}else{let u=new La(e.operation,e.user_name,i,void 0);u[t]=[_],n.set(c,[u])}}}o(SR,"loopRecords");function fR(e,t){let r=[];try{let s=e.dbis[Ws.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let a=Object.assign(new La,i);r.push(a)}}catch(i){vH.warn(i)}return r}catch(s){throw s}}o(fR,"batchSearchTransactions")});var mR=f((UW,RR)=>{"use strict";var{getSchemaPath:xH}=K(),VH=V();RR.exports={writeTransaction:kH};async function kH(e,t,r){let s=xH(e,t);return(await VH.openEnvironment(s,t)).transaction(r)}o(kH,"writeTransaction")});var NR=f((HW,pR)=>{"use strict";var{getSchemaPath:AR}=K(),gR=V();pR.exports={flush:YH,resetReadTxn:$H};async function YH(e,t){return(await gR.openEnvironment(AR(e,t),t.toString())).flushed}o(YH,"flush");async function $H(e,t){try{(await gR.openEnvironment(AR(e,t),t.toString())).resetReadTxn()}catch{}}o($H,"resetReadTxn")});var CR=f((vW,IR)=>{"use strict";var KH=p(),{handleHDBError:WH}=X(),QH=uc(),jH=Po(),JH=Zc(),XH=Wh(),ZH=ti(),zH=su(),eB=cT(),tB=RT(),rB=Ks(),sB=CT(),nB=vT(),iB=Eu(),oB=YT(),aB=QT(),_B=eR(),cB=aR(),uB=iu(),lB=lR(),EB=TR(),dB=mR(),OR=NR(),ya=class extends QH{async searchByConditions(t){return sB(t)}async getDataByHash(t){return await zH(t)}async searchByHash(t){return await eB(t)}async getDataByValue(t,r){return await tB(t,r)}async searchByValue(t){return await rB(t)}async createSchema(t){return await XH(t)}async dropSchema(t){return await nB(t)}async createTable(t,r){return await iB(t,r)}async dropTable(t){return await uB(t)}async createAttribute(t){return await jH(t)}async createRecords(t){return await JH(t)}async updateRecords(t){return await oB(t)}async upsertRecords(t){try{return await aB(t)}catch(r){throw WH(r,null,null,KH.ERR,r)}}async deleteRecords(t){return await ZH(t)}async deleteRecordsBefore(t){return await _B(t)}async dropAttribute(t){return await lB(t)}async deleteAuditLogsBefore(t){return await cB(t)}async readAuditLog(t){return await EB(t)}writeTransaction(t,r,s){return dB.writeTransaction(t,r,s)}flush(t,r){return OR.flush(t,r)}resetReadTxn(t,r){return OR.resetReadTxn(t,r)}};o(ya,"LMDBBridge");IR.exports=ya});var jr=f((qW,LR)=>{"use strict";var SB=CR(),fB=uc(),hB=v();hB.initSync();var bR;function TB(){return bR instanceof fB?bR:new SB}o(TB,"getBridge");LR.exports=TB()});var os=f((xW,MR)=>{"use strict";var Ma=cc(),st=O(),RB=require("util"),Da=jr(),mB=es(),Tu=p(),{handleHDBError:gr,hdb_errors:AB}=X(),{HTTP_STATUS_CODES:is}=AB,gB=RB.promisify(mB.getTableSchema),pB="updated",yR="inserted",wR="upserted";MR.exports={insert:OB,update:IB,upsert:CB,validation:NB,flush:bB};async function NB(e){if(st.isEmpty(e))throw new Error("invalid update parameters defined.");if(st.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(st.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await gB(e.schema,e.table),r=Ma(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={},a=!1;return e.operation==="update"&&(a=!0),e.records.forEach(_=>{if(a&&st.isEmptyOrZeroLength(_[s]))throw Tu.error("a valid hash attribute must be provided with update record:",_),new Error("a valid hash attribute must be provided with update record");if(!st.isEmptyOrZeroLength(_[s])&&(_[s]==="null"||_[s]==="undefined"))throw Tu.error(`a valid hash value must be provided with ${e.operation} record:`,_),new Error(`"${_[s]}" is not a valid hash attribute value`);!st.isEmpty(_[s])&&_[s]!==""&&n.has(st.autoCast(_[s]))&&(_.skip=!0),n.add(st.autoCast(_[s]));for(let c in _)i[c]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}o(NB,"validation");async function OB(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Ma(e);if(t)throw gr(new Error,t.message,is.BAD_REQUEST);let r=st.checkSchemaTableExist(e.schema,e.table);if(r)throw gr(new Error,r,is.BAD_REQUEST);let s=await Da.createRecords(e);return wa(yR,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}o(OB,"insertData");async function IB(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Ma(e);if(t)throw gr(new Error,t.message,is.BAD_REQUEST);let r=st.checkSchemaTableExist(e.schema,e.table);if(r)throw gr(new Error,r,is.BAD_REQUEST);let s=await Da.updateRecords(e);return st.isEmpty(s.existing_rows)?wa(pB,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):wa(s.update_action,[],e,s.hashes,void 0,s.txn_time)}o(IB,"updateData");async function CB(e){if(e.operation!=="upsert")throw gr(new Error,"invalid operation, must be upsert",is.INTERNAL_SERVER_ERROR);let t=Ma(e);if(t)throw gr(new Error,t.message,is.BAD_REQUEST);let r=st.checkSchemaTableExist(e.schema,e.table);if(r)throw gr(new Error,r,is.BAD_REQUEST);try{let s=await Da.upsertRecords(e);return wa(wR,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw gr(s,null,null,Tu.ERR,n)}}o(CB,"upsertData");function wa(e,t,r,s,n,i){let a={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===yR?(a.inserted_hashes=t,a.skipped_hashes=s,a):e===wR?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=s,a)}o(wa,"returnObject");function bB(e){return Da.flush(e.schema,e.table)}o(bB,"flush")});var HR=f((kW,PR)=>{var LB=Ze(),Ru=require("joi"),{hdb_schema_table:DR}=Us(),UR={schema:DR,table:DR},yB={date:Ru.date().iso().required()},wB={timestamp:Ru.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};PR.exports=function(e,t){let r=t==="timestamp"?{...UR,...wB}:{...UR,...yB},s=Ru.object(r);return LB.validateBySchema(e,s)}});var qR=f((YW,GR)=>{var MB=Ze(),BR=require("joi"),{hdb_schema_table:vR}=Us(),DB=BR.object({schema:vR,table:vR,hash_values:BR.array().required()});GR.exports=function(e){return MB.validateBySchema(e,DB)}});var mu=f(($W,FR)=>{"use strict";var Ua=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};o(Ua,"InsertObject");var Pa=class{constructor(t,r,s,n,i,a){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=a}};o(Pa,"NoSQLSeachObject");var Ha=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};o(Ha,"DeleteResponseObject");FR.exports={InsertObject:Ua,NoSQLSeachObject:Pa,DeleteResponseObject:Ha}});var pu=f((WW,$R)=>{"use strict";var VR=HR(),UB=qR(),Ba=O(),xR=require("moment"),kR=p(),{promisify:PB,callbackify:HB}=require("util"),as=T(),BB=es(),Au=PB(BB.getTableSchema),gu=jr(),{DeleteResponseObject:vB}=mu(),{handleHDBError:pr,hdb_errors:GB}=X(),{HDB_ERROR_MSGS:va,HTTP_STATUS_CODES:Nr}=GB,qB="records successfully deleted",FB=HB(YR);$R.exports={delete:FB,deleteRecord:YR,deleteFilesBefore:xB,deleteAuditLogsBefore:VB};async function xB(e){let t=VR(e,"date");if(t)throw pr(t,t.message,Nr.BAD_REQUEST,void 0,void 0,!0);if(!xR(e.date,xR.ISO_8601).isValid())throw pr(new Error,va.INVALID_DATE,Nr.BAD_REQUEST,as.LOG_LEVELS.ERROR,va.INVALID_DATE,!0);let s=Ba.checkSchemaTableExist(e.schema,e.table);if(s)throw pr(new Error,s,Nr.NOT_FOUND,as.LOG_LEVELS.ERROR,s,!0);let n=await gu.deleteRecordsBefore(e);if(await Au(e.schema,e.table),kR.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}o(xB,"deleteFilesBefore");async function VB(e){let t=VR(e,"timestamp");if(t)throw pr(t,t.message,Nr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw pr(new Error,va.INVALID_VALUE("Timestamp"),Nr.BAD_REQUEST,as.LOG_LEVELS.ERROR,va.INVALID_VALUE("Timestamp"),!0);let r=Ba.checkSchemaTableExist(e.schema,e.table);if(r)throw pr(new Error,r,Nr.NOT_FOUND,as.LOG_LEVELS.ERROR,r,!0);let s=await gu.deleteAuditLogsBefore(e);return await Au(e.schema,e.table),kR.info(`Finished deleting audit logs before ${e.timestamp}`),s}o(VB,"deleteAuditLogsBefore");async function YR(e){let t=UB(e);if(t)throw pr(t,t.message,Nr.BAD_REQUEST,void 0,void 0,!0);let r=Ba.checkSchemaTableExist(e.schema,e.table);if(r)throw pr(new Error,r,Nr.NOT_FOUND,as.LOG_LEVELS.ERROR,r,!0);try{await Au(e.schema,e.table);let s=await gu.deleteRecords(e);return Ba.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${qB}`),s}catch(s){if(s.message===as.SEARCH_NOT_FOUND_MESSAGE){let n=new vB;return n.message=as.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}o(YR,"deleteRecord")});var WR=f((jW,KR)=>{var Nu=Ze(),ge={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 kB(e){return ge.password.presence=!0,ge.username.presence=!0,ge.role.presence=!0,ge.active.presence=!0,Nu.validateObject(e,ge)}o(kB,"addUserValidation");function YB(e){return ge.password.presence=!1,ge.username.presence=!0,ge.role.presence=!1,ge.active.presence=!1,Nu.validateObject(e,ge)}o(YB,"alterUserValidation");function $B(e){return ge.password.presence=!1,ge.username.presence=!0,ge.role.presence=!1,ge.active.presence=!1,Nu.validateObject(e,ge)}o($B,"dropUserValidation");KR.exports={addUserValidation:kB,alterUserValidation:YB,dropUserValidation:$B}});var ss=f((ZW,_m)=>{"use strict";var ZR="username is required",zR="nothing to update, must supply active, role or password to update",em="password cannot be an empty string",tm="If role is specified, it cannot be empty.",rm="active must be true or false";_m.exports={addUser:zB,alterUser:ev,dropUser:rv,userInfo:sv,listUsers:qa,listUsersExternal:nv,setUsersToGlobal:ai,findAndValidateUser:av,getClusterUser:_v,USERNAME_REQUIRED:ZR,ALTERUSER_NOTHING_TO_UPDATE:zR,EMPTY_PASSWORD:em,EMPTY_ROLE:tm,ACTIVE_BOOLEAN:rm};var sm=os(),KB=pu(),Iu=xo(),nm=WR(),im=Jr(),Cu=Zn(),$e=O(),om=require("validate.js"),w=p(),{promisify:bu}=require("util"),Lu=$n(),QR=T(),jR=ct(),WB=Fe(),XW=v(),QB=vs(),jB=Kt(),{handleHDBError:yt,hdb_errors:JB}=X(),{HTTP_STATUS_CODES:wt,AUTHENTICATION_ERROR_MSGS:Ou,HDB_ERROR_MSGS:Qs}=JB,{UserEventMsg:yu}=rs(),JR=require("lodash"),am={username:!0,active:!0,role:!0,password:!0},XR=new Map,Ga=bu(im.searchByValue),XB=bu(im.searchByHash),ZB=bu(KB.delete);async function zB(e){let t=om.cleanAttributes(e,am),r=nm.addUserValidation(t);if(r)throw yt(new Error,r.message,wt.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 Ga(s),n=n&&Array.from(n)}catch(c){throw w.error("There was an error searching for a role in add user"),w.error(c),c}if(!n||n.length<1)throw yt(new Error,Qs.ROLE_NAME_NOT_FOUND(t.role),wt.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw yt(new Error,Qs.DUP_ROLES_FOUND(t.role),wt.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Lu.encrypt(t.password)),t.password=Iu.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},a;try{a=await sm.insert(i)}catch(c){throw w.error("There was an error searching for a user."),w.error(c),c}w.debug(a);try{await ai()}catch(c){throw w.error("Got an error setting users to global"),w.error(c),c}if(a.skipped_hashes.length===1)throw yt(new Error,Qs.USER_ALREADY_EXISTS(t.username),wt.CONFLICT,void 0,void 0,!0);let _=Object.assign({},t);return _.role=n[0],Cu.signalUserChange(new yu(process.pid)),`${_.username} successfully added`}o(zB,"addUser");async function ev(e){let t=om.cleanAttributes(e,am);if($e.isEmptyOrZeroLength(t.username))throw new Error(ZR);if($e.isEmptyOrZeroLength(t.password)&&$e.isEmptyOrZeroLength(t.role)&&$e.isEmptyOrZeroLength(t.active))throw new Error(zR);if(!$e.isEmpty(t.password)&&$e.isEmptyOrZeroLength(t.password.trim()))throw new Error(em);if(!$e.isEmpty(t.active)&&!$e.isBoolean(t.active))throw new Error(rm);let r=tv(t.username);if(!$e.isEmpty(t.password)&&!$e.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Lu.encrypt(t.password)),t.password=Iu.hash(t.password)),t.role==="")throw new Error(tm);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},a;try{a=Array.from(await Ga(i)||[])}catch(_){throw w.error("Got an error searching for a role."),w.error(_),_}if(!a||a.length===0){let _=Qs.ALTER_USER_ROLE_NOT_FOUND(t.role);throw w.error(_),yt(new Error,_,wt.NOT_FOUND,void 0,void 0,!0)}if(a.length>1){let _=Qs.ALTER_USER_DUP_ROLES(t.role);throw w.error(_),yt(new Error,_,wt.CONFLICT,void 0,void 0,!0)}t.role=a[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await sm.update(s)}catch(i){throw w.error("Error during update."),w.error(i),i}try{await ai()}catch(i){throw w.error("Got an error setting users to global"),w.error(i),i}return Cu.signalUserChange(new yu(process.pid)),n}o(ev,"alterUser");function tv(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(tv,"isClusterUser");async function rv(e){try{let t=nm.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if($e.isEmpty(global.hdb_users.get(e.username)))throw yt(new Error,Qs.USER_NOT_EXIST(e.username),wt.NOT_FOUND,void 0,void 0,!0);let s;try{s=await ZB(r)}catch(n){throw w.error("Got an error deleting a user."),w.error(n),n}w.debug(s);try{await ai()}catch(n){throw w.error("Got an error setting users to global."),w.error(n),n}return Cu.signalUserChange(new yu(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}o(rv,"dropUser");async function sv(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 XB(r)}catch(n){throw w.error("Got an error searching for a role."),w.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw w.error(r),r}return t}o(sv,"userInfo");async function nv(){let e;try{e=await qa()}catch(t){throw w.error("Got an error listing users."),w.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}o(nv,"listUsersExternal");async function qa(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Ga(e)}catch(a){throw w.error("Got an error searching for roles."),w.error(a),a}let r={};for(let a of t)r[a.id]=JR.cloneDeep(a);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 Ga(s)}catch(a){throw w.error("Got an error searching for users."),w.error(a),a}let i=new Map;for(let a of n)a=JR.cloneDeep(a),a.role=r[a.role],iv(a.role),i.set(a.username,a);return(await QB.getLicense()).enterprise?i:ov(Array.from(i.values()))}catch(e){throw w.error("got an error listing users"),w.error(e),$e.errorizeMessage(e)}return null}o(qa,"listUsers");function iv(e){try{if(!e){w.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(jB)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){w.error("Got an error trying to set system permissions."),w.error(t)}}o(iv,"appendSystemTablesToRole");function ov(e){try{if(w.info("No enterprise license found. System is limited to 1 clustering role and 1 user role"),!e)return new Map;let t=Object.create(null),r=new Map;e.forEach((n,i)=>{n.role&&(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?(w.warn("No roles found with active users."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return w.error("error filtering users."),w.error(t),new Map}}o(ov,"nonEnterpriseFilter");async function ai(){try{let e=await qa();global.hdb_users=e}catch(e){throw w.error(e),e}}o(ai,"setUsersToGlobal");async function av(e,t,r=!0){global.hdb_users||await ai();let s=global.hdb_users.get(e);if(!s)throw yt(new Error,Ou.GENERIC_AUTH_FAIL,wt.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw yt(new Error,Ou.USER_INACTIVE,wt.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(XR.get(t)===s.password)return n;if(Iu.validate(s.password,t))XR.set(t,s.password);else throw yt(new Error,Ou.GENERIC_AUTH_FAIL,wt.UNAUTHORIZED,void 0,void 0,!0)}return n}o(av,"findAndValidateUser");async function _v(){let e=await qa(),t=WB.getConfigFromFile(QR.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!$e.isEmpty(r)&&r?.role?.role===QR.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Lu.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+jR.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+jR.SERVER_SUFFIX.ADMIN,r}o(_v,"getClusterUser")});var um=f((e1,cm)=>{"use strict";var cv=jr();cm.exports={writeTransaction:uv};function uv(e,t,r){return cv.writeTransaction(e,t,r)}o(uv,"writeTransaction")});var ka=f((u1,Lm)=>{"use strict";var he=v();he.initSync();var lv=require("fs-extra"),Ev=require("semver"),Ei=require("path"),{monotonicFactory:dv}=require("ulidx"),Pu=dv(),Sv=require("util"),Em=require("child_process"),fv=Sv.promisify(Em.exec),hv=Em.spawn,G=ct(),k=T(),Fa=O(),Or=p(),xa=$n(),Tv=um(),_i=Fe(),{encode:Du,decode:Hu}=require("msgpackr"),{isEmpty:_s}=Fa,dm=ss(),Sm=12e10,{connect:Rv,StorageType:fm,RetentionPolicy:hm,AckPolicy:Bu,DeliverPolicy:di,DiscardPolicy:mv,NatsConnection:r1,JetStreamManager:s1,JetStreamClient:n1,StringCodec:i1,JSONCodec:Av,createInbox:vu,StreamSource:o1,headers:gv,toJsMsg:Tm,nuid:a1,JetStreamOptions:_1,ErrorCode:lm,nanos:c1}=require("nats"),{PACKAGE_ROOT:pv}=T(),Nv=Ls(),Rm=Av(),Ov="clustering",Iv=Nv.engines[G.NATS_SERVER_NAME],Cv=Ei.join(pv,"dependencies"),Uu=Ei.join(Cv,`${process.platform}-${process.arch}`,G.NATS_BINARY_NAME),wu,Mu,ci,ui,li,ht;Lm.exports={runCommand:mm,checkNATSServerInstalled:bv,createConnection:Gu,getConnection:Va,getJetStreamManager:Si,getJetStream:Am,getNATSReferences:Ke,getServerList:yv,createLocalStream:qu,listStreams:gm,deleteLocalStream:wv,getServerConfig:fi,listRemoteStreams:Mv,viewStream:Dv,viewStreamIterator:Uv,publishToStream:Pv,createWorkQueueStream:Hv,addSourceToWorkStream:Nm,request:Bv,removeSourceFromWorkStream:Im,reloadNATS:Fu,reloadNATSHub:vv,reloadNATSLeaf:Gv,extractServerName:Om,requestErrorHandler:qv,updateWorkStream:Fv,createLocalTableStream:Cm,createTableStreams:xv,purgeTableStream:bm,purgeSchemaTableStreams:Vv,getStreamInfo:kv,updateLocalStreams:$v,closeConnection:Lv,getJsmServerName:hi,addNatsMsgHeader:pm};async function mm(e,t=void 0){let{stdout:r,stderr:s}=await fv(e,{cwd:t});if(s)throw new Error(s.replace(`
2
+ "use strict";var DN=Object.defineProperty;var o=(e,t)=>DN(e,"name",{value:t,configurable:!0});var f=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var T=f((uY,PE)=>{"use strict";var _t=require("path"),UN=require("fs");function PN(){let e=__dirname;for(;!UN.existsSync(_t.join(e,"package.json"));){let t=_t.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}o(PN,"getHDBPackageRoot");var _r=PN(),gE="js",Xi=gE,HN="harperdb-config.yaml",BN="defaultConfig.yaml",vN="hdb",pE=`harperdb.${Xi}`,NE=`customFunctionsServer.${Xi}`,GN=`restartHdb.${Xi}`,Zc="HarperDB",Ji="Custom Functions",Zi="Clustering Hub",zi="Clustering Leaf",qN="Clustering Ingest Service",FN="Clustering Reply Service",xN="foreground.pid",VN="hdb.pid",kN={HDB:Zc,CLUSTERING_HUB:Zi,CLUSTERING_LEAF:zi,CLUSTERING_INGEST_SERVICE:qN,CLUSTERING_REPLY_SERVICE:FN,CUSTOM_FUNCTIONS:Ji,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"},YN={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},$N={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},KN={harperdb:Zc,"clustering hub":Zi,"clustering leaf":zi,"custom functions":Ji,custom_functions:Ji,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},WN={CLUSTERING_HUB_PROC_DESCRIPTOR:Zi,CLUSTERING_LEAF_PROC_DESCRIPTOR:zi},Xc={HDB:_t.join(_r,"server/harperdb"),CUSTOM_FUNCTIONS:_t.join(_r,"server/customFunctions"),CLUSTERING_HUB:_t.join(_r,"server/nats"),CLUSTERING_LEAF:_t.join(_r,"server/nats")},QN={HDB:_t.join(Xc.HDB,pE),CUSTOM_FUNCTIONS:_t.join(Xc.CUSTOM_FUNCTIONS,NE)},jN={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:_t.join(_r,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:_t.join(_r,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:_t.join(_r,"launchServiceScripts/launchUpdateNodes4-0-0.js")},JN={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},OE="support@harperdb.io",XN="customer-success@harperdb.io",IE=1,ZN=4141,CE="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",zN="https://www.harperdb.io/product",eO=`For support, please submit a request at ${CE} or contact ${OE}`,bE=`For license support, please contact ${XN}`,tO="None of the specified records were found.",rO="hash attribute not found",sO=`Your current license only supports ${IE} role. ${bE}`,nO="Your current license only supports 3 connections to a node.",iO="127.0.0.1",oO=1,aO=/^\.$/,cO=/^\.\.$/,_O="U+002E",uO=/\//g,lO="U+002F",EO=/U\+002F/g,dO=/^U\+002E$/,SO=/^U\+002EU\+002E$/,fO="d",hO=999999,TO="*",RO="--max-old-space-size=",mO="system",AO="__hdb_hash",gO=".harperdb",pO=".hdb",NO="keys",OO="hdb_boot_properties.file",IO=".updateConfig.json",CO="SIGTSTP",bO=24,LO=6e4,yO=448,wO="blob",MO="trash",DO="schema",UO="transactions",PO=".count",HO="id",BO="PROCESS_NAME",LE={SETTINGS_PATH_KEY:"settings_path"},yE=require("lodash"),vO={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"},GO={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},qO={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},FO={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"},xO={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:",VO={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"},kO={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"},YO="060493.ks",$O=".license",KO={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},g={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"},WO={CSV:".csv",JSON:".json"},QO={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},jO={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},An={};An[g.INSERT]=g.INSERT;An[g.UPDATE]=g.UPDATE;An[g.UPSERT]=g.UPSERT;An[g.DELETE]=g.DELETE;var Y=Object.create(null);Y[g.DESCRIBE_ALL]=g.DESCRIBE_ALL;Y[g.DESCRIBE_TABLE]=g.DESCRIBE_TABLE;Y[g.DESCRIBE_SCHEMA]=g.DESCRIBE_SCHEMA;Y[g.READ_LOG]=g.READ_LOG;Y[g.ADD_NODE]=g.ADD_NODE;Y[g.LIST_USERS]=g.LIST_USERS;Y[g.LIST_ROLES]=g.LIST_ROLES;Y[g.USER_INFO]=g.USER_INFO;Y[g.SQL]=g.SQL;Y[g.GET_JOB]=g.GET_JOB;Y[g.SEARCH_JOBS_BY_START_DATE]=g.SEARCH_JOBS_BY_START_DATE;Y[g.DELETE_FILES_BEFORE]=g.DELETE_FILES_BEFORE;Y[g.EXPORT_LOCAL]=g.EXPORT_LOCAL;Y[g.EXPORT_TO_S3]=g.EXPORT_TO_S3;Y[g.CLUSTER_STATUS]=g.CLUSTER_STATUS;Y[g.REMOVE_NODE]=g.REMOVE_NODE;Y[g.RESTART]=g.RESTART;Y[g.CUSTOM_FUNCTIONS_STATUS]=g.CUSTOM_FUNCTIONS_STATUS;Y[g.GET_CUSTOM_FUNCTIONS]=g.GET_CUSTOM_FUNCTIONS;Y[g.GET_CUSTOM_FUNCTION]=g.GET_CUSTOM_FUNCTION;Y[g.SET_CUSTOM_FUNCTION]=g.SET_CUSTOM_FUNCTION;Y[g.DROP_CUSTOM_FUNCTION]=g.DROP_CUSTOM_FUNCTION;Y[g.ADD_CUSTOM_FUNCTION_PROJECT]=g.ADD_CUSTOM_FUNCTION_PROJECT;Y[g.DROP_CUSTOM_FUNCTION_PROJECT]=g.DROP_CUSTOM_FUNCTION_PROJECT;Y[g.PACKAGE_CUSTOM_FUNCTION_PROJECT]=g.PACKAGE_CUSTOM_FUNCTION_PROJECT;Y[g.DEPLOY_CUSTOM_FUNCTION_PROJECT]=g.DEPLOY_CUSTOM_FUNCTION_PROJECT;var JO={RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},XO={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},wE={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"},ZO=yE.invert(wE),h={CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_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"},ME={settings_path:LE.SETTINGS_PATH_KEY,hdb_root_key:h.ROOTPATH,hdb_root:h.ROOTPATH,server_port_key:h.OPERATIONSAPI_NETWORK_PORT,server_port:h.OPERATIONSAPI_NETWORK_PORT,cert_key:h.OPERATIONSAPI_TLS_CERTIFICATE,certificate:h.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:h.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:h.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:h.OPERATIONSAPI_NETWORK_HTTPS,https_on:h.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:h.OPERATIONSAPI_NETWORK_CORS,cors_on:h.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:h.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:h.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:h.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:h.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:h.LOGGING_LEVEL,log_level:h.LOGGING_LEVEL,log_path_key:h.LOGGING_ROOT,log_path:h.LOGGING_ROOT,props_env_key:h.OPERATIONSAPI_NODEENV,node_env:h.OPERATIONSAPI_NODEENV,clustering_node_name_key:h.CLUSTERING_NODENAME,node_name:h.CLUSTERING_NODENAME,clustering_enabled_key:h.CLUSTERING_ENABLED,clustering:h.CLUSTERING_ENABLED,max_http_threads:h.HTTP_THREADS,max_hdb_processes:h.HTTP_THREADS,server_timeout_key:h.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:h.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:h.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:h.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:h.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:h.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:h.LOGGING_AUDITLOG,disable_transaction_log:h.LOGGING_AUDITLOG,operation_token_timeout_key:h.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:h.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:h.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:h.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_enabled_key:h.CUSTOMFUNCTIONS_ENABLED,custom_functions:h.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:h.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:h.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:h.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:h.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:h.HTTP_THREADS,log_to_file:h.LOGGING_FILE,log_to_stdstreams:h.LOGGING_STDSTREAMS,run_in_foreground:h.OPERATIONSAPI_FOREGROUND,local_studio_on:h.LOCALSTUDIO_ENABLED,clustering_port:h.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:h.CLUSTERING_USER,clustering_enabled:h.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:h.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:h.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:h.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:h.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:h.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:h.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:h.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:h.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:h.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:h.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:h.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:h.CLUSTERING_NODENAME,clustering_tls_certificate:h.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:h.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:h.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:h.CLUSTERING_TLS_INSECURE,clustering_tls_verify:h.CLUSTERING_TLS_VERIFY,clustering_loglevel:h.CLUSTERING_LOGLEVEL,clustering_republishmessages:h.CLUSTERING_REPUBLISHMESSAGES,customfunctions_enabled:h.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:h.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:h.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:h.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:h.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:h.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:h.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:h.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:h.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:h.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:h.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:h.CUSTOMFUNCTIONS_NODEENV,http_threads:h.HTTP_THREADS,http_session_affinity:h.HTTP_SESSION_AFFINITY,customfunctions_processes:h.HTTP_THREADS,customfunctions_root:h.CUSTOMFUNCTIONS_ROOT,localstudio_enabled:h.LOCALSTUDIO_ENABLED,logging_file:h.LOGGING_FILE,logging_level:h.LOGGING_LEVEL,logging_root:h.LOGGING_ROOT,logging_rotation_enabled:h.LOGGING_ROTATION_ENABLED,logging_rotation_compress:h.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:h.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:h.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:h.LOGGING_ROTATION_PATH,logging_stdstreams:h.LOGGING_STDSTREAMS,logging_auditlog:h.LOGGING_AUDITLOG,operationsapi_authentication_operationtokentimeout:h.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:h.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:h.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:h.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:h.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:h.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:h.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:h.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:h.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:h.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:h.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:h.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:h.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:h.OPERATIONSAPI_NODEENV,operationsapi_root:h.ROOTPATH,schemas:h.SCHEMAS,storage_path:h.STORAGE_PATH};for(let e in h){let t=h[e];ME[t.toLowerCase()]=t}var zO={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},eI={csv_file_load:"csv_file_load",csv_data_load:g.CSV_DATA_LOAD,csv_url_load:g.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"},tI={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"},rI={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},sI={FILE_SYSTEM:"fs",LMDB:"lmdb"},nI={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},iI={DEVELOPMENT:8192,DEFAULT:512},oI={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"},aI={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"},cI={ENOENT:"ENOENT",EACCES:"EACCES"},DE={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},_I="__clustering__",uI=Object.values(DE),lI=15984864e5,UE={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},EI=yE.invert(UE),dI={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"},SI=111,fI=`\r
3
+ `,hI={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},TI=["*","%"],RI="unauthorized_access",mI="func_val",AI={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},gI={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},pI={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"},NI={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},OI={HTTP:"http"},II={STOPPED:"stopped",ONLINE:"online"},CI="3.x.x";PE.exports={LOCAL_HARPERDB_OPERATIONS:Y,HDB_SUPPORT_ADDRESS:OE,HDB_SUPPORT_URL:CE,HDB_PRICING_URL:zN,SUPPORT_HELP_MSG:eO,LICENSE_HELP_MSG:bE,HDB_PROC_NAME:pE,HDB_PROC_DESCRIPTOR:Zc,CLUSTERING_LEAF_PROC_DESCRIPTOR:zi,CLUSTERING_HUB_PROC_DESCRIPTOR:Zi,SYSTEM_SCHEMA_NAME:mO,HASH_FOLDER_NAME:AO,HDB_HOME_DIR_NAME:gO,UPDATE_FILE_NAME:IO,LICENSE_KEY_DIR_NAME:NO,BOOT_PROPS_FILE_NAME:OO,JOB_TYPE_ENUM:eI,JOB_STATUS_ENUM:KO,SYSTEM_TABLE_NAMES:FO,SYSTEM_TABLE_HASH_ATTRIBUTES:xO,OPERATIONS_ENUM:g,VALID_S3_FILE_TYPES:WO,S3_BUCKET_AUTH_KEYS:QO,VALID_SQL_OPS_ENUM:jO,GEO_CONVERSION_ENUM:XO,HDB_SETTINGS_NAMES:wE,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:ZO,SERVICE_ACTIONS_ENUM:JO,CLUSTER_MESSAGE_TYPE_ENUM:tI,CLUSTER_CONNECTION_DIRECTION_ENUM:rI,CLUSTER_EVENTS_DEFS_ENUM:oI,PERIOD_REGEX:aO,DOUBLE_PERIOD_REGEX:cO,UNICODE_PERIOD:_O,FORWARD_SLASH_REGEX:uO,UNICODE_FORWARD_SLASH:lO,ESCAPED_FORWARD_SLASH_REGEX:EO,ESCAPED_PERIOD_REGEX:dO,ESCAPED_DOUBLE_PERIOD_REGEX:SO,REG_KEY_FILE_NAME:YO,RESTART_TIMEOUT_MS:LO,HDB_FILE_PERMISSIONS:yO,SCHEMA_DIR_NAME:DO,TRANSACTIONS_DIR_NAME:UO,LIMIT_COUNT_NAME:PO,ID_ATTRIBUTE_STRING:HO,INSERT_MODULE_ENUM:GO,UPGRADE_JSON_FIELD_NAMES_ENUM:qO,RESTART_CODE:CO,RESTART_CODE_NUM:bO,CLUSTER_OPERATIONS:An,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:kO,HDB_INTERNAL_SC_CHANNEL_PREFIX:Ge,INTERNAL_SC_CHANNELS:VO,CLUSTERING_MESSAGE_TYPES:dI,HDB_FILE_SUFFIX:pO,BLOB_FOLDER_NAME:wO,HDB_TRASH_DIR:MO,ORIGINATOR_SET_VALUE:SI,LICENSE_VALUES:nI,RAM_ALLOCATION_ENUM:iI,STORAGE_TYPES_ENUM:sI,TIME_STAMP_NAMES_ENUM:DE,TIME_STAMP_NAMES:uI,PERMS_UPDATE_RELEASE_TIMESTAMP:lI,SEARCH_NOT_FOUND_MESSAGE:tO,SEARCH_ATTRIBUTE_NOT_FOUND:rO,LICENSE_ROLE_DENIED_RESPONSE:sO,LICENSE_MAX_CONNS_REACHED:nO,BASIC_LICENSE_MAX_NON_CU_ROLES:IE,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:ZN,VALUE_SEARCH_COMPARATORS:UE,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:EI,LICENSE_FILE_NAME:$O,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:aI,NEW_LINE:fI,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:oO,MOMENT_DAYS_TAG:fO,API_TURNOVER_SEC:hO,LOOPBACK:iO,CODE_EXTENSION:Xi,WILDCARD_SEARCH_VALUE:TO,NODE_ERROR_CODES:cI,JAVASCRIPT_EXTENSION:gE,PERMS_CRUD_ENUM:hI,UNAUTHORIZED_PERMISSION_NAME:RI,SEARCH_WILDCARDS:TI,FUNC_VAL:mI,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:AI,JWT_ENUM:gI,CLUSTERING_FLAG:_I,ITC_EVENT_TYPES:pI,CUSTOM_FUNCTION_PROC_NAME:NE,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Ji,SERVICES:NI,THREAD_TYPES:OI,MEM_SETTING_KEY:RO,HDB_RESTART_SCRIPT:GN,PROCESS_DESCRIPTORS:kN,SERVICE_SERVERS:QN,SERVICE_SERVERS_CWD:Xc,PROCESS_DESCRIPTORS_VALIDATE:KN,LAUNCH_SERVICE_SCRIPTS:jN,LOG_LEVELS:$N,PROCESS_NAME_ENV_PROP:BO,LOG_NAMES:YN,PM2_PROCESS_STATUSES:II,CONFIG_PARAM_MAP:ME,CONFIG_PARAMS:h,HDB_CONFIG_FILE:HN,HDB_DEFAULT_CONFIG_FILE:BN,ROLE_TYPES_ENUM:JN,BOOT_PROP_PARAMS:LE,INSTALL_PROMPTS:vO,HDB_ROOT_DIR_NAME:vN,CLUSTERING_PROCESSES:WN,FOREGROUND_PID_FILE:xN,PACKAGE_ROOT:_r,PRE_4_0_0_VERSION:CI,SCHEMAS_PARAM_CONFIG:zO,HDB_PID_FILE:VN}});var kr=f((EY,vE)=>{"use strict";var HE=require("minimist");vE.exports=bI;function bI(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=BE(process.env),s=BE(HE(process.argv))):(r=process.env,s=HE(process.argv));let n={};for(let i=0,a=e.length;i<a;i++){let c=e[i];s[c]!==void 0?n[c]=s[c].toString().trim():r[c]!==void 0&&(n[c]=r[c].toString().trim())}return n}o(bI,"assignCMDENVVariables");function BE(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}o(BE,"objKeysToLowerCase")});var p=f((SY,jE)=>{"use strict";var Ds=require("fs-extra"),{workerData:LI,threadId:yI}=require("worker_threads"),ur=require("path"),FE=require("yaml"),xE=require("properties-reader"),ue=T(),GE=kr(),wI=require("os"),{PACKAGE_ROOT:e_}=T(),VE={};for(let e in console)VE[e]=console[e];var be={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},kE={STDOUT:"stdOut",STDERR:"stdErr"},MI=ur.join(e_,"logs"),DI=ur.join(e_,"config/yaml/",ue.HDB_DEFAULT_CONFIG_FILE),UI=1e4,Vt,kt,Ce,eo,to,ro,pn,gn;gn===void 0&&YE();jE.exports={notify:WE,fatal:QE,error:Nn,warn:n_,info:so,debug:s_,trace:r_,setLogLevel:FI,log_level:Ce,loggerWithTag:PI,suppressLogging:HI,initLogSettings:YE,setupConsoleLogging:$E,logCustomLevel:GI,closeLogFile:t_,getLogFilePath:()=>ro,OUTPUTS:kE};function YE(e=!1){try{if(gn===void 0||e){t_();let t=qI();gn=xE(t);let r=GE(["ROOTPATH"]);({level:Ce,config_log_path:to,to_file:Vt,to_stream:kt}=xI(r.ROOTPATH?ur.join(r.ROOTPATH,ue.HDB_CONFIG_FILE):gn.get("settings_path"))),eo=ue.LOG_NAMES.HDB,ro=ur.join(to,eo)}}catch(t){if(gn=void 0,t.code===ue.NODE_ERROR_CODES.ENOENT){let r=GE(Object.keys(ue.CONFIG_PARAM_MAP),!0);for(let a in r){let c=ue.CONFIG_PARAM_MAP[a];c&&c.toLowerCase();let _=r[a];if(c===ue.CONFIG_PARAMS.LOGGING_LEVEL){Ce=_;continue}if(c===ue.CONFIG_PARAMS.LOGGING_STDSTREAMS){kt=_;continue}c===ue.CONFIG_PARAMS.LOGGING_FILE&&(Vt=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=VI();Vt=Vt===void 0?n:Vt,Vt=qE(Vt),kt=kt===void 0?i:kt,kt=qE(kt),Ce=Ce===void 0?s:Ce,to=MI,eo=ue.LOG_NAMES.INSTALL,ro=ur.join(to,eo);return}throw Nn("Error initializing log settings"),Nn(t),t}$E()}o(YE,"initLogSettings");var zc=!0;function $E(){Ms("error",Nn),Ms("warn",n_),Ms("log",so),Ms("info",so),Ms("debug",s_),Ms("trace",r_)}o($E,"setupConsoleLogging");function Ms(e,t){console[e]=function(...r){if(zc&&t(...r),!/PM2 log:|App \[/.test(r[0]))return VE[e](...r)}}o(Ms,"logConsole");function PI(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(WE),fatal:r(QE),error:r(Nn),warn:r(n_),info:r(so),debug:r(s_),trace:r(r_)};function r(s){return function(...n){return s(t,...n)}}}o(PI,"loggerWithTag");function HI(e){try{zc=!1,e()}finally{zc=!0}}o(HI,"suppressLogging");var BI=LI?.name?.replace(/ /g,"-")||"main";function Yt(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,a=[e],c=0,_;for(typeof t[0]=="object"&&(t[0]?.tagName?(a.push(t[0]?.tagName),c++):t[0]?.serviceName&&(_=t[0]?.serviceName,c++)),a.unshift(_||BI+"/"+yI);c<n;c++){let u=t[c];u instanceof Error&&u.stack?s+=u.stack:typeof u=="object"?s+=JSON.stringify(u):s+=u,c<i&&(s+=" ")}return`${r} [${a.join("] [")}]: ${s}
4
+ `}o(Yt,"createLogRecord");function On(e){Vt&&KE(e),kt&&process.stdout.write(e)}o(On,"logStdOut");function no(e){Vt&&KE(e),kt&&process.stderr.write(e)}o(no,"logStdErr");function KE(e){vI(),Ds.appendFileSync(pn,e)}o(KE,"logToFile");function t_(){try{Ds.closeSync(pn)}catch{}pn=null}o(t_,"closeLogFile");function vI(){pn||(pn=Ds.openSync(ro,"a"),setTimeout(()=>{t_()},UI).unref())}o(vI,"openLogFile");function so(...e){be[Ce]<=be.info&&On(Yt("info",e))}o(so,"info");function r_(...e){be[Ce]<=be.trace&&On(Yt("trace",e))}o(r_,"trace");function Nn(...e){be[Ce]<=be.error&&no(Yt("error",e))}o(Nn,"error");function s_(...e){be[Ce]<=be.debug&&On(Yt("debug",e))}o(s_,"debug");function WE(...e){be[Ce]<=be.notify&&On(Yt("notify",e))}o(WE,"notify");function QE(...e){be[Ce]<=be.fatal&&no(Yt("fatal",e))}o(QE,"fatal");function n_(...e){be[Ce]<=be.warn&&no(Yt("warn",e))}o(n_,"warn");function GI(e,t,...r){t===kE.STDERR?no(Yt(e,r)):On(Yt(e,r))}o(GI,"logCustomLevel");function qI(){let e;try{e=wI.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ur.join(e,ue.HDB_HOME_DIR_NAME,ue.BOOT_PROPS_FILE_NAME);return Ds.existsSync(t)||(t=ur.join(e_,"utility/hdb_boot_properties.file")),t}o(qI,"getPropsFilePath");function FI(e){Ce=e}o(FI,"setLogLevel");function qE(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(qE,"autoCastBoolean");function xI(e){try{if(e.includes("config/settings.js")){let a=xE(e);return{level:a.get(ue.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:ur.dirname(a.get(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:a.get(ue.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:a.get(ue.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=FE.parseDocument(Ds.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===ue.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(xI,"getLogConfig");function VI(){try{let e=FE.parseDocument(Ds.readFileSync(DI,"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)}}o(VI,"getDefaultConfig")});var Us=f((hY,kI)=>{kI.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 Yr=f((mY,JE)=>{"use strict";var TY=require("fs-extra"),RY=p();JE.exports={version:YI,printVersion:KI,nodeVersion:$I};var lr=Us();function YI(){if(lr)return lr.version}o(YI,"version");function $I(){if(lr&&lr.engines&&lr.engines["preferred-node"])return lr.engines["preferred-node"]}o($I,"nodeVersion");function KI(){lr&&console.log(`HarperDB Version ${lr.version}`)}o(KI,"printVersion")});var ed=f((gY,zE)=>{"use strict";var XE=require("semver/functions/major"),WI=require("semver/functions/satisfies"),ZE=Us(),In=process.versions&&process.versions.node?process.versions.node:void 0;zE.exports=QI;function QI(){let e=ZE.engines.node,t=ZE.engines["preferred-node"];if(In){if(e&&!WI(In,e))return{error:`This version of HarperDB supports Node.js versions: ${e}, the currently installed Node.js version is: ${In}. Please install a version of Node.js that is withing the defined range.`};if(t&&XE(In)!==XE(t))return{warn:`This version of HarperDB is tested against Node.js version ${t}, the currently installed Node.js version is: ${In}. Some issues may occur with untested versions of Node.js.`}}}o(QI,"checkNodeVersion")});var i_=f((NY,td)=>{"use strict";var jI=require("util"),JI=require("path"),XI=require("child_process"),ZI=jI.promisify(XI.execFile),zI=1e3*1e3*10;td.exports={findPs:eC};async function eC(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await ZI("ps",["wwxo",`pid,${r}`],{maxBuffer:zI});for(let n of s.trim().split(`
5
+ `).slice(1)){n=n.trim();let[i]=n.split(" ",1),a=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=a}}))}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:JI.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"])}))}o(eC,"findPs")});var de=f((IY,sd)=>{"use strict";var tC="__dbis__",rC="__environment_name__",sC="__dbi_defintion__",nC={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"},iC=["__createdtime__","__updatedtime__"],oC="\uFFFF",rd={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},aC=Object.values(rd);sd.exports={INTERNAL_DBIS_NAME:tC,DBI_DEFINITION_NAME:sC,SEARCH_TYPES:nC,TIMESTAMP_NAMES:iC,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:rC,TRANSACTIONS_DBI_NAMES_ENUM:rd,TRANSACTIONS_DBIS:aC,OVERFLOW_MARKER:oC}});var et=f((CY,Ed)=>{"use strict";var nd=T(),id=de(),od={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},ad=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),cd={500:ad("There was an error processing your request."),400:"Invalid request"},cC=cd[od.INTERNAL_SERVER_ERROR],_C={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.`},uC={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},lC={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"},EC={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 ${id.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${id.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"},dC={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${nd.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 ${nd.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"},_d={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"},SC={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."},fC={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`},hC={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"},TC={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},RC={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`},ud={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.`},ld={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}`},mC={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."},AC={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},gC={..._d,...lC,..._C,...SC,...fC,...hC,...TC,...RC,...dC,...ud,...ld,...mC,...AC,...uC};Ed.exports={CHECK_LOGS_WRAPPER:ad,HDB_ERROR_MSGS:gC,DEFAULT_ERROR_MSGS:cd,DEFAULT_ERROR_RESP:cC,HTTP_STATUS_CODES:od,LMDB_ERRORS_ENUM:EC,AUTHENTICATION_ERROR_MSGS:_d,VALIDATION_ERROR_MSGS:ud,ITC_ERRORS:ld}});var J=f((LY,fd)=>{"use strict";var Ps=et(),pC=p(),NC=T(),Cn=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,dd),this.http_resp_code=s||Ps.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Ps.DEFAULT_ERROR_MSGS[s]?Ps.DEFAULT_ERROR_MSGS[s]:Ps.DEFAULT_ERROR_MSGS[Ps.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&&pC[n](i)}};o(Cn,"HdbError");function dd(e,t,r,s=NC.LOG_LEVELS.ERROR,n=null,i=!1){if(Sd(e))return e;let a=new Cn(e,t,r,s,n);return i&&delete a.stack,a}o(dd,"handleHDBError");function Sd(e){return e.__proto__.constructor.name===Cn.name}o(Sd,"isHDBError");fd.exports={isHDBError:Sd,handleHDBError:dd,hdb_errors:Ps}});var O=f((MY,yd)=>{"use strict";var $r=require("path"),OC=require("fs-extra"),Re=p(),hd=require("fs-extra"),bn=require("os"),IC=require("net"),CC=require("recursive-iterator"),Te=T(),Ad=i_(),Td=require("papaparse"),io=require("moment"),{inspect:bC}=require("util"),Rd=require("is-number"),wY=require("lodash"),{hdb_errors:oo}=J(),gd=require("util").promisify(setTimeout),LC=100,yC=5,wC="",MC=4,md={true:!0,false:!1,undefined:null,null:null,NaN:NaN};yd.exports={isEmpty:qe,isEmptyOrZeroLength:Ot,arrayHasEmptyValues:PC,arrayHasEmptyOrZeroLengthValues:HC,buildFolderPath:BC,isBoolean:pd,errorizeMessage:DC,stripFileExtension:GC,autoCast:qC,autoCastJSON:Nd,autoCastJSONDeep:o_,removeDir:FC,compareVersions:xC,isCompatibleDataVersion:VC,escapeRawValue:kC,unescapeValue:YC,stringifyProps:$C,timeoutPromise:WC,isClusterOperation:jC,getClusterUser:XC,checkGlobalSchemaTable:JC,getHomeDir:Id,getPropsFilePath:KC,promisifyPapaParse:ZC,removeBOM:Cd,createEventPromise:zC,checkProcessRunning:eb,checkSchemaTableExist:tb,checkSchemaExists:bd,checkTableExists:Ld,getStartOfTomorrowInSeconds:rb,getLimitKey:sb,isObject:vC,isNotEmptyAndHasValue:UC,autoCasterIsNumberCheck:Od,backtickASTSchemaItems:nb,isPortTaken:QC,stopProcess:ib,createForkArgs:ob,autoCastBoolean:ab,async_set_timeout:gd,getTableHashAttribute:cb,doesSchemaExist:_b,doesTableExist:ub,stringifyObj:lb,ms_to_time:Eb,changeExtension:db,PACKAGE_ROOT:Te.PACKAGE_ROOT};function DC(e){return e instanceof Error?e:new Error(e)}o(DC,"errorizeMessage");function qe(e){return e==null}o(qe,"isEmpty");function UC(e){return!qe(e)&&(e||e===0||e===""||pd(e))}o(UC,"isNotEmptyAndHasValue");function Ot(e){return qe(e)||e.length===0||e.size===0}o(Ot,"isEmptyOrZeroLength");function PC(e){if(qe(e))return!0;for(let t=0;t<e.length;t++)if(qe(e[t]))return!0;return!1}o(PC,"arrayHasEmptyValues");function HC(e){if(Ot(e))return!0;for(let t=0;t<e.length;t++)if(Ot(e[t]))return!0;return!1}o(HC,"arrayHasEmptyOrZeroLengthValues");function BC(...e){try{return e.join($r.sep)}catch{console.error(e)}}o(BC,"buildFolderPath");function pd(e){return qe(e)?!1:e===!0||e===!1}o(pd,"isBoolean");function vC(e){return qe(e)?!1:typeof e=="object"}o(vC,"isObject");function GC(e){return Ot(e)?wC:e.slice(0,-MC)}o(GC,"stripFileExtension");function qC(e){return qe(e)||e===""||typeof e!="string"?e:md[e]!==void 0?md[e]:Od(e)===!0?Number(e):e}o(qC,"autoCast");function Nd(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(Nd,"autoCastJSON");function o_(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=o_(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=o_(r);s!==r&&(e[t]=s)}return e}else return Nd(e)}o(o_,"autoCastJSONDeep");function Od(e){if(e.startsWith("0.")&&Rd(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Rd(e))}o(Od,"autoCasterIsNumberCheck");async function FC(e){if(Ot(e))throw new Error(`Directory path: ${e} does not exist`);try{await hd.emptyDir(e),await hd.remove(e)}catch(t){throw Re.error(`Error removing files in ${e} -- ${t}`),t}}o(FC,"removeDir");function xC(e,t){if(Ot(e)){Re.info("Invalid current version sent as parameter.");return}if(Ot(t)){Re.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,a=n.replace(s,"").split("."),c=i.replace(s,"").split("."),_=Math.min(a.length,c.length);for(let u=0;u<_;u++)if(r=parseInt(a[u],10)-parseInt(c[u],10),r)return r;return a.length-c.length}o(xC,"compareVersions");function VC(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}o(VC,"isCompatibleDataVersion");function kC(e){if(qe(e))return e;let t=String(e);return t==="."?Te.UNICODE_PERIOD:t===".."?Te.UNICODE_PERIOD+Te.UNICODE_PERIOD:t.replace(Te.FORWARD_SLASH_REGEX,Te.UNICODE_FORWARD_SLASH)}o(kC,"escapeRawValue");function YC(e){if(qe(e))return e;let t=String(e);return t===Te.UNICODE_PERIOD?".":t===Te.UNICODE_PERIOD+Te.UNICODE_PERIOD?"..":String(e).replace(Te.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(YC,"unescapeValue");function $C(e,t){if(qe(e))return Re.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let a of i)r+=";"+a+bn.EOL}!Ot(s)&&s[0]===";"?r+=" "+s+n+bn.EOL:Ot(s)||(r+=s+"="+n+bn.EOL)}catch{Re.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}o($C,"stringifyProps");function Id(){let e;try{e=bn.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}o(Id,"getHomeDir");function KC(){let e=$r.join(Id(),Te.HDB_HOME_DIR_NAME,Te.BOOT_PROPS_FILE_NAME);return OC.existsSync(e)||(e=$r.join(__dirname,"../","hdb_boot_properties.file")),e}o(KC,"getPropsFilePath");function WC(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}o(WC,"timeoutPromise");async function QC(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=IC.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}o(QC,"isPortTaken");function jC(e){try{return Te.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Re.error(`Error checking operation against cluster ops ${t}`)}return!1}o(jC,"isClusterOperation");function JC(e,t){if(!global.hdb_schema[e])return oo.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return oo.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(JC,"checkGlobalSchemaTable");function XC(e,t){if(qe(t)){Re.warn("No CLUSTERING_USER defined, clustering disabled");return}if(qe(e)||Ot(e)){Re.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){Re.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){Re.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(XC,"getClusterUser");function ZC(){Td.parsePromise=function(e,t){return new Promise(function(r,s){Td.parse(e,{header:!0,transformHeader:Cd,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}o(ZC,"promisifyPapaParse");function Cd(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(Cd,"removeBOM");function zC(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;Re.info(`Got cluster status event response: ${bC(n)}`);try{i.cancel()}catch{Re.error("Error trying to cancel timeout.")}s(n)})})}o(zC,"createEventPromise");async function eb(e){let t=!0,r=0;do await gd(LC*r++),(await Ad.findPs(e)).length>0&&(t=!1);while(t&&r<yC);if(t)throw new Error(`process ${e} was not started`)}o(eb,"checkProcessRunning");function tb(e,t){let r=bd(e);if(r)return r;let s=Ld(e,t);if(s)return s}o(tb,"checkSchemaTableExist");function bd(e){if(!global.hdb_schema[e])return oo.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(bd,"checkSchemaExists");function Ld(e,t){if(!global.hdb_schema[e][t])return oo.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(Ld,"checkTableExists");function rb(){let e=io().utc().add(1,Te.MOMENT_DAYS_TAG).startOf(Te.MOMENT_DAYS_TAG).unix(),t=io().utc().unix();return e-t}o(rb,"getStartOfTomorrowInSeconds");function sb(){return io().utc().format("DD-MM-YYYY")}o(sb,"getLimitKey");function nb(e){try{let t=new CC(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){Re.error("Got an error back ticking items."),Re.error(t)}}o(nb,"backtickASTSchemaItems");async function ib(e){let t=bn.userInfo();(await Ad.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),Re.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}o(ib,"stopProcess");function ob(e){return[e]}o(ob,"createForkArgs");function ab(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(ab,"autoCastBoolean");function cb(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}o(cb,"getTableHashAttribute");function _b(e){return global?.hdb_schema?.[e]!==void 0}o(_b,"doesSchemaExist");function ub(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}o(ub,"doesTableExist");function lb(e){try{return JSON.stringify(e)}catch{return e}}o(lb,"stringifyObj");function Eb(e){let t=io.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}o(Eb,"ms_to_time");function db(e,t){let r=$r.basename(e,$r.extname(e));return $r.join($r.dirname(e),r+t)}o(db,"changeExtension")});var a_=f((UY,wd)=>{"use strict";var Sb={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))},fb="certificate.pem",hb="privateKey.pem",Tb="ca.pem";wd.exports={CERTIFICATE_VALUES:Sb,CERTIFICATE_PEM_NAME:fb,PRIVATEKEY_PEM_NAME:hb,CA_PEM_NAME:Tb}});var Fe=f((PY,Md)=>{"use strict";var Le=require("validate.js");Le.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Le.validators.type.checks[t](e)?null:` must be a '${t}' value`};Le.validators.type.checks={Object:function(e){return Le.isObject(e)&&!Le.isArray(e)},Array:Le.isArray,Integer:Le.isInteger,Number:Le.isNumber,String:Le.isString,Date:Le.isDate,Boolean:function(e){return typeof e=="boolean"}};Le.validators.hasValidFileExt=function(e,t){return Le.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};Md.exports={validateObject:Rb,validateObjectAsync:mb,validateBySchema:Ab};function Rb(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Le(e,t,{format:"flat"});return r?new Error(r):null}o(Rb,"validateObject");async function mb(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Le.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}o(mb,"validateObjectAsync");function Ab(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(Ab,"validateBySchema")});var __=f((vY,Hd)=>{"use strict";var gb=require("fs-extra"),M=require("joi"),pb=require("os"),{boolean:Z,string:$t,number:ut,array:c_}=M.types(),{totalmem:Dd}=require("os"),Ln=require("path"),Nb=p(),co=O(),BY=a_(),Ob=T(),Ib=Fe(),Ud="log",Cb="custom_functions",bb="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Lb="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",yb="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",wb="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",Mb="rootPath config parameter is undefined",Db="clustering.enabled config parameter is undefined",Kr=ut.min(0).required(),_o=c_.items({host:$t.required(),port:Kr}).empty(null),Er;Hd.exports={configValidator:Ub,routesValidator:qb,route_constraints:_o};function Ub(e){if(Er=e.rootPath,co.isEmpty(Er))throw Mb;let t=Z.required(),r=M.valid("production","development").required(),s=ut.min(1).max(1e3).empty(null).default(Gb),n=$t.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(ao),i=M.custom(Pb).messages({"any.custom":"{:#label} {:#error}"}),a=$t.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=M.string().empty(null).default(ao),_=M.custom(Hb).empty(null).default(ao),u=e.clustering?.enabled;if(co.isEmpty(u))throw Db;let l;return u===!0?l=M.object({enabled:t,hubServer:M.object({cluster:M.object({name:M.required().empty(null),network:M.object({port:Kr,routes:_o}).required()}).required(),leafNodes:M.object({network:M.object({port:Kr}).required()}).required(),network:M.object({port:Kr}).required()}).required(),leafServer:M.object({network:M.object({port:Kr,routes:_o}).required(),streams:M.object({maxAge:ut.min(120).allow(null).optional(),maxBytes:ut.min(1).allow(null).optional(),maxMsgs:ut.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:M.valid("error","warn","info","debug","trace"),nodeName:a,republishMessages:Z.optional(),tls:M.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Z.required(),verify:Z.optional()}),user:$t.optional().empty(null)}).required():l=M.object({enabled:t,tls:M.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Z.required()})}).required(),M.object({clustering:l,customFunctions:M.object({enabled:t,network:M.object({cors:Z.required(),corsAccessList:c_.required(),headersTimeout:ut.min(1).required(),https:Z.required(),keepAliveTimeout:ut.min(1).required(),port:Kr,timeout:ut.min(1).required()}),nodeEnv:r,root:n,tls:M.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:M.object({enabled:t}).required(),logging:M.object({file:Z.required(),level:M.valid("notify","fatal","error","warn","info","debug","trace"),rotation:M.object({enabled:Z.optional(),compress:Z.optional(),interval:$t.custom(vb).optional().empty(null),maxSize:$t.custom(Bb).optional().empty(null),path:$t.optional().empty(null).default(ao)}).required(),root:n,stdStreams:Z.required(),auditLog:Z.required()}).required(),operationsApi:M.object({authentication:M.object({operationTokenTimeout:M.required(),refreshTokenTimeout:M.required()}).required(),foreground:Z.required(),network:M.object({cors:Z.required(),corsAccessList:c_.required(),headersTimeout:ut.min(1).required(),https:Z.required(),keepAliveTimeout:ut.min(1).required(),port:Kr,timeout:ut.min(1).required()}).required(),nodeEnv:r,tls:M.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:$t.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:M.object({threads:s}).required(),storage:M.object({writeAsync:Z.required(),overlappingSync:Z.optional(),caching:Z.optional(),compression:Z.optional(),noReadAhead:Z.optional(),path:_,prefetchWrites:Z.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(Ub,"configValidator");function Pd(e){return gb.existsSync(e)?null:`Specified path ${e} does not exist.`}o(Pd,"doesPathExist");function Pb(e,t){if(e===null)return;let r=Pd(e);return r?t.message(r):e}o(Pb,"validatePemFile");function Hb(e,t){M.assert(e,$t.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Pd(e);if(r)return t.message(r)}o(Hb,"validatePath");function Bb(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(bb);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(yb):e}o(Bb,"validateRotationMaxSize");function vb(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Lb);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(wb):e}o(vb,"validateRotationInterval");function Gb(e,t){let r=t.state.path.join("."),s=pb.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Dd();return i=Math.round(Math.min(i,Dd())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),Nb.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}o(Gb,"setDefaultThreads");function ao(e,t){if(!co.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(co.isEmpty(Er))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Ln.join(Er,Cb);case"logging.root":return Ln.join(Er,Ud);case"clustering.leafServer.streams.path":return Ln.join(Er,"clustering","leaf");case"storage.path":return Ln.join(Er,Ob.SCHEMA_DIR_NAME);case"logging.rotation.path":return Ln.join(Er,Ud);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(ao,"setDefaultRoot");function qb(e){let t=M.object({routes:_o});return Ib.validateBySchema({routes:e},t)}o(qb,"routesValidator")});var Ve=f((qY,$d)=>{"use strict";var rt=T(),xe=O(),_e=p(),{configValidator:Fb,routesValidator:Bd}=__(),tt=require("fs-extra"),xb=require("yaml"),It=require("path"),Vb=require("is-number"),Gd=require("properties-reader"),kb=require("lodash"),{handleHDBError:Yb}=J(),{HTTP_STATUS_CODES:$b,HDB_ERROR_MSGS:uo}=et(),Kb=require("minimist"),{SCHEMAS_PARAM_CONFIG:yn,CONFIG_PARAMS:dr,CONFIG_PARAM_MAP:Kt}=rt,Wb="Unable to get config value because config is uninitialized",Qb="Config successfully initialized",jb="Error backing up config file",Jb="Empty parameter sent to getConfigValue",qd=It.join(rt.PACKAGE_ROOT,"config","yaml",rt.HDB_DEFAULT_CONFIG_FILE),Xb="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",vd={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"},lo,Se;$d.exports={createConfigFile:Zb,getDefaultConfig:zb,getConfigValue:xd,initConfig:Vd,flattenConfig:Wr,updateConfigValue:kd,updateConfigObject:tL,getConfiguration:nL,setConfiguration:iL,readConfigFile:d_,getClusteringRoutes:oL,initOldConfig:Yd,getConfigFromFile:aL};function Zb(e){let t=Hs(qd);lo=Wr(t.toJSON());let r;for(let a in e){let c=Kt[a.toLowerCase()];if(c===dr.SCHEMAS){r=e[a];continue}if(c!==void 0){let _=c.split("_"),u=u_(c,e[a]);try{t.setIn([..._],u)}catch(l){_e.error(l)}}}r&&Fd(t,r),E_(t);let s=t.toJSON();Se=Wr(s);let n=t.getIn(["rootPath"]),i=It.join(n,rt.HDB_CONFIG_FILE);tt.createFileSync(i),tt.writeFileSync(i,String(t)),_e.trace(`Config file written to ${i}`)}o(Zb,"createConfigFile");function Fd(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!xe.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(yn.TABLES))for(let i in s[n][yn.TABLES])for(let a in s[n][yn.TABLES][i]){let c=s[n][yn.TABLES][i][a],_=[dr.SCHEMAS,n,yn.TABLES,i,a];e.hasIn(_)?e.setIn(_,c):e.addIn(_,c)}else for(let i in s[n]){let a=s[n][i],c=[dr.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,a):e.addIn(c,a)}}}catch(s){_e.error("Error parsing schemas CLI/env config arguments",s)}}o(Fd,"setSchemasConfig");function zb(e){if(lo===void 0){let r=Hs(qd);lo=Wr(r.toJSON())}let t=Kt[e.toLowerCase()];if(t!==void 0)return lo[t.toLowerCase()]}o(zb,"getDefaultConfig");function xd(e){if(xe.isEmpty(e)){_e.error(Jb);return}if(Se===void 0){_e.trace(Wb);return}let t=Kt[e.toLowerCase()];if(t!==void 0)return Se[t.toLowerCase()]}o(xd,"getConfigValue");function l_(e){let t=Kb(process.argv);return t.ROOTPATH?It.join(t.ROOTPATH,rt.HDB_CONFIG_FILE):Gd(e).get(rt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}o(l_,"getConfigFilePath");function Vd(e=!1){if(Se===void 0||e){let t=xe.getPropsFilePath();try{tt.accessSync(t,tt.constants.F_OK|tt.constants.R_OK)}catch(i){throw _e.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}let r=l_(t),s;if(r.includes("config/settings.js"))try{Yd(r);return}catch(i){if(i.code!==rt.NODE_ERROR_CODES.ENOENT)throw i}try{s=Hs(r)}catch(i){if(i.code===rt.NODE_ERROR_CODES.ENOENT){_e.trace(`HarperDB config file not found at ${r}.
6
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw _e.error(i),new Error(`Error reading HarperDB config file at ${r}`)}eL(s,r),E_(s);let n=s.toJSON();if(Se=Wr(n),Se.logging_rotation_rotate)for(let i in vd)Se[i]&&_e.error(`Config ${vd[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);_e.trace(Qb)}}o(Vd,"initConfig");function eL(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],It.join(r,rt.SCHEMA_DIR_NAME)),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],It.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],It.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(_e.trace("Updating config file with missing config params"),tt.writeFileSync(t,String(e)))}o(eL,"checkForUpdatedConfig");function E_(e){let t=e.toJSON(),r=Fb(t);if(r.error)throw uo.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)}o(E_,"validateConfig");function tL(e,t){Se===void 0&&(Se={});let r=Kt[e.toLowerCase()];if(r===void 0){_e.trace(`Unable to update config object because config param '${e}' does not exist`);return}Se[r.toLowerCase()]=t}o(tL,"updateConfigObject");function kd(e,t,r=void 0,s=!1,n=!1){Se===void 0&&Vd();let i=xd(Kt.hdb_root),a=It.join(i,rt.HDB_CONFIG_FILE),c=Hs(a),_;if(r===void 0&&e.toLowerCase()===dr.SCHEMAS)_=t;else if(r===void 0){let E=Kt[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let d=E.split("_"),S=u_(E,t);c.setIn([...d],S)}else for(let E in r){let d=Kt[E.toLowerCase()];if(d===dr.SCHEMAS){_=r[E];continue}if(d!==void 0){let S=d.split("_"),R=u_(d,r[E]);try{c.setIn([...S],R)}catch(m){_e.error(m)}}}_&&Fd(c,_),E_(c);let u=c.getIn(["rootPath"]),l=It.join(u,rt.HDB_CONFIG_FILE);s===!0&&rL(a,u),tt.writeFileSync(l,String(c)),n&&(Se=Wr(c.toJSON())),_e.trace(`Config parameter: ${e} updated with value: ${t}`)}o(kd,"updateConfigValue");function rL(e,t){try{let r=It.join(t,"backup",`${rt.HDB_CONFIG_FILE}.bak`);tt.copySync(e,r),_e.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){_e.error(jb),_e.error(r)}}o(rL,"backupConfigFile");var sL=["schemas"];function Wr(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!sL.includes(r)){let s=Wr(e[r]);for(let n in s)s.hasOwnProperty(n)&&(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}o(Wr,"flattenConfig");function u_(e,t){if(e===dr.CLUSTERING_NODENAME||e===dr.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(Vb(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||xe.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 xe.autoCast(t)}o(u_,"castConfigValue");function nL(){let e=xe.getPropsFilePath(),t=l_(e);return Hs(t).toJSON()}o(nL,"getConfiguration");async function iL(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return kd(void 0,void 0,n,!0),Xb}catch(i){throw typeof i=="string"||i instanceof String?Yb(i,i,$b.BAD_REQUEST,void 0,void 0,!0):i}}o(iL,"setConfiguration");function d_(){let e=xe.getPropsFilePath();try{tt.accessSync(e,tt.constants.F_OK|tt.constants.R_OK)}catch(s){throw _e.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=l_(e);return Hs(t).toJSON()}o(d_,"readConfigFile");function Hs(e){return xb.parseDocument(tt.readFileSync(e,"utf8"),{simpleKeys:!0})}o(Hs,"parseYamlDoc");function oL(){let e=d_(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=xe.isEmptyOrZeroLength(t)?[]:t;let r=Bd(t);if(r)throw uo.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=xe.isEmptyOrZeroLength(s)?[]:s;let n=Bd(s);if(n)throw uo.CONFIG_VALIDATION(n.message);if(!xe.isEmptyOrZeroLength(s)&&!xe.isEmptyOrZeroLength(t)){let i=t.filter(a=>s.some(c=>c.host===a.host&&c.port===a.port));if(!xe.isEmptyOrZeroLength(i)){let a=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw uo.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:s}}o(oL,"getClusteringRoutes");function Yd(e){let t=Gd(e);Se={};for(let r in Kt){let s=t.get(r.toUpperCase());if(xe.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Kt[r].toLowerCase();n===dr.LOGGING_ROOT?Se[n]=It.dirname(s):Se[n]=s}return Se}o(Yd,"initOldConfig");function aL(e){let t=d_();return kb.get(t,e.replaceAll("_","."))}o(aL,"getConfigFromFile")});var H=f((xY,Wd)=>{"use strict";var S_=require("fs-extra"),Ct=require("path"),cL=require("os"),_L=require("properties-reader"),wn=p(),Bs=O(),L=T(),Eo=Ve(),uL="Error initializing environment manager",So="BOOT_PROPS_FILE_PATH",Kd=!1,lL={[L.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Wt={};Wd.exports={BOOT_PROPS_FILE_PATH:So,getHdbBasePath:EL,setHdbBasePath:dL,get:SL,initSync:hL,setProperty:G,initTestEnvironment:TL};function EL(){return Wt[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(EL,"getHdbBasePath");function dL(e){Wt[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(dL,"setHdbBasePath");function SL(e){let t=Eo.getConfigValue(e);return t===void 0?Wt[e]:t}o(SL,"get");function G(e,t){lL[e]&&(Wt[e]=t),Eo.updateConfigObject(e,t)}o(G,"setProperty");function fL(){let e;try{e=Bs.getPropsFilePath(),S_.accessSync(e,S_.constants.F_OK|S_.constants.R_OK),Kd=!0;let t=_L(e);return Wt[L.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(L.HDB_SETTINGS_NAMES.INSTALL_USER),Wt[L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Wt[So]=e,!0}catch{return wn.trace(`Environment manager found no properties file at ${e}`),!1}}o(fL,"doesPropFileExist");function hL(e=!1){try{(Kd||fL())&&(Eo.initConfig(e),Wt[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Eo.getConfigValue(L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){wn.error(uL),wn.error(t),console.error(t),process.exit(1)}}o(hL,"initSync");function TL(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:a,local_studio_on:c}=e,_=Ct.join(__dirname,"../../","unitTests");Wt[So]=Ct.join(_,"hdb_boot_properties.file"),G(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Ct.join(_,"settings.test")),G(L.HDB_SETTINGS_NAMES.INSTALL_USER,cL.userInfo().username),G(L.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Ct.join(_,"envDir","utility","keys","privateKey.pem")),G(L.HDB_SETTINGS_NAMES.CERT_KEY,Ct.join(_,"envDir","utility","keys","certificate.pem")),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Ct.join(_,"envDir","utility","keys","privateKey.pem")),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Ct.join(_,"envDir","utility","keys","certificate.pem")),G(L.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),G(L.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Ct.join(_,"envDir","log")),G(L.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),G(L.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),G(L.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),G(L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Ct.join(_,"envDir")),G(L.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Bs.isEmpty(n)?!0:n),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Bs.isEmpty(n)?!0:n),G(L.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),G(L.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Bs.isEmpty(i)?!1:i),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Bs.isEmpty(i)?!1:i),G(L.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),G(L.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),G(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),G(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),G(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Ct.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),G(L.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Bs.isEmpty(c)?!1:c),a&&(G("CORS_ACCESSLIST",a),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,a)),s&&(G(L.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(G(L.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(G(L.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${So}. Please check your boot props and settings files`;wn.fatal(r),wn.error(t)}}o(TL,"initTestEnvironment")});var ke=f((YY,jd)=>{"use strict";var{platform:kY}=require("os"),RL="nats-server.zip",f_="nats-server",mL=process.platform==="win32"?`${f_}.exe`:f_,h_="HDB",AL=/^[^\s.,*>]+$/,Qd="__request__",gL=o(e=>`${e}.${Qd}`,"REQUEST_SUBJECT"),pL={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},NL={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},OL={HUB:"hub.pid",LEAF:"leaf.pid"},IL={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},CL={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:h_,deliver_subject:"__HDB__.WORKQUEUE"},bL={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:h_,deliver_subject:"HDB.SCHEMAQUEUE"},LL={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:h_,deliver_subject:"HDB.USERQUEUE"},yL={SUCCESS:"success",ERROR:"error"},wL={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},ML={TXN:"txn",MSGID:"msgid"},vs={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},DL={[vs.ERR]:1,[vs.WRN]:2,[vs.INF]:3,[vs.DBG]:4,[vs.TRC]:5},UL={debug:"-D",trace:"-DVV"};jd.exports={NATS_SERVER_ZIP:RL,NATS_SERVER_NAME:f_,NATS_BINARY_NAME:mL,PID_FILES:OL,NATS_CONFIG_FILES:NL,SERVER_SUFFIX:IL,WORK_QUEUE_CONSUMER_NAMES:CL,SCHEMA_QUEUE_CONSUMER_NAMES:bL,USER_QUEUE_CONSUMER_NAMES:LL,NATS_TERM_CONSTRAINTS_RX:AL,REQUEST_SUFFIX:Qd,UPDATE_REMOTE_RESPONSE_STATUSES:yL,CLUSTER_STATUS_STATUSES:wL,REQUEST_SUBJECT:gL,SUBJECT_PREFIXES:ML,MSG_HEADERS:pL,LOG_LEVELS:vs,LOG_LEVEL_FLAGS:UL,LOG_LEVEL_HIERARCHY:DL}});var Xd=f((KY,Jd)=>{"use strict";var PL=ke(),fo=class{constructor(t,r,s,n,i,a,c,_,u,l,E,d,S,R){this.port=t,a===null&&(a=void 0),this.server_name=r+PL.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:a,insecure:c,verify:_},this.leafnodes={port:u,tls:{cert_file:n,key_file:i,ca_file:a,insecure:c}},this.cluster={name:l,port:E,routes:d,tls:{cert_file:n,key_file:i,ca_file:a,insecure:c,verify:_}},this.accounts={SYS:{users:S},HDB:{users:R}},this.system_account="SYS"}};o(fo,"HubConfigObject");Jd.exports=fo});var eS=f((QY,zd)=>{"use strict";var Zd=ke(),ho=class{constructor(t,r,s,n,i,a,c,_,u,l,E){this.port=t,E===null&&(E=void 0),this.server_name=r+Zd.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+Zd.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:l,ca_file:E,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:E,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:E,insecure:!0},urls:a,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:_,jetstream:"enabled"}},this.system_account="SYS"}};o(ho,"LeafConfigObject");zd.exports=ho});var rS=f((JY,tS)=>{"use strict";var To=class{constructor(t,r){this.user=t,this.password=r}};o(To,"HdbUserObject");tS.exports=To});var nS=f((ZY,sS)=>{"use strict";var HL=ke(),Ro=class{constructor(t,r){this.user=t+HL.SERVER_SUFFIX.ADMIN,this.password=r}};o(Ro,"SysUserObject");sS.exports=Ro});var Gs=f((e$,aS)=>{"use strict";var oS=O(),iS=T(),Ao=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,T_=require("joi"),mo={schema_format:{pattern:Ao,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},BL=T_.alternatives(T_.string().min(1).max(mo.schema_length.maximum).pattern(Ao).messages({"string.pattern.base":"{:#label} "+mo.schema_format.message}),T_.number()).required();function vL(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>mo.schema_length.maximum?`'${e}' maximum of 250 characters`:Ao.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}o(vL,"checkValidTable");function GL(e,t){return oS.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}o(GL,"validateSchemaExists");function qL(e,t){let r=t.state.ancestors[0].schema;return oS.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(qL,"validateTableExists");function FL(e,t){return e.toLowerCase()===iS.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${iS.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(FL,"validateSchemaName");aS.exports={common_validators:mo,schema_regex:Ao,hdb_schema_table:BL,validateSchemaExists:GL,validateTableExists:qL,validateSchemaName:FL,checkValidTable:vL}});var m_=f((r$,_S)=>{var{hdb_schema_table:cS}=Gs(),xL=Fe(),R_=require("joi"),VL={undefined:"undefined",null:"null"},kL=o((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let a=r[i];(!a||a.length===0||VL[a]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${a}'`:n+=`. Invalid attribute name: '${a}'`)}return n?t.message(n):e},"custom_records_val"),YL=R_.object({schema:cS,table:cS,records:R_.array().items(R_.object().custom(kL)).required()});_S.exports=function(e){return xL.validateBySchema(e,YL)}});var A_=f((n$,uS)=>{"use strict";var go=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")}};o(go,"BridgeMethods");uS.exports=go});var Sr=f((c$,hS)=>{"use strict";var lS=et().LMDB_ERRORS_ENUM,o$=require("lmdb"),$L=de(),a$=require("buffer").Buffer,{OVERFLOW_MARKER:ES,MAX_SEARCH_KEY_LENGTH:po}=$L,dS=["number","string","symbol","boolean","bigint"];function KL(e){if(e=e?.database||e,!e)throw new Error(lS.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(lS.INVALID_ENVIRONMENT)}o(KL,"validateEnv");function WL(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}o(WL,"stringifyData");function QL(e){return e instanceof Date?e.valueOf():e}o(QL,"convertKeyValueToWrite");function jL(e){if(e==null)return;if(dS.includes(typeof e))return e.length>po?[e.slice(0,po)+ES]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];dS.includes(typeof n)&&(n.length>po?t.push(n.slice(0,po)+ES):t.push(n))}}return t}o(jL,"getIndexedValues");var No=0,SS=0;function fS(){SS=Date.now()-performance.now()}o(fS,"adjustStartTime");fS();var JL=6e4;setInterval(fS,JL).unref();function XL(){let e=performance.now()+SS;return e>No?(No=e,e):(No+=488e-6,No)}o(XL,"getNextMonotonicTime");hS.exports={validateEnv:KL,stringifyData:WL,convertKeyValueToWrite:QL,getNextMonotonicTime:XL,getIndexedValues:jL}});var RS=f((u$,TS)=>{"use strict";var Oo=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};o(Oo,"DBIDefinition");TS.exports=Oo});var gS=f((E$,AS)=>{"use strict";var g_=H(),mS=T();g_.initSync();var ZL=g_.get(mS.CONFIG_PARAMS.STORAGE_COMPRESSION),zL=g_.get(mS.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Io=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=ZL&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=zL&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};o(Io,"OpenDBIObject");AS.exports=Io});var OS=f((S$,NS)=>{"use strict";var qs=H(),Mn=T();qs.initSync();var ey=qs.get(Mn.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||qs.get(Mn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||qs.get(Mn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",pS=qs.get(Mn.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),ty=qs.get(Mn.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Co=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=ey,pS!==void 0&&(this.overlappingSync=pS),this.noReadAhead=ty}};o(Co,"OpenEnvironmentObject");NS.exports=Co});var k=f((h$,MS)=>{"use strict";var p_=require("lmdb"),st=require("fs-extra"),lt=require("path"),Lo=Sr(),IS=p(),fe=et().LMDB_ERRORS_ENUM,yo=RS(),N_=gS(),CS=OS(),fr=de(),Et=fr.INTERNAL_DBIS_NAME,bS=fr.DBI_DEFINITION_NAME,ry="data.mdb",sy="lock.mdb",Dn=".mdb",ny="-lock",bo=class{constructor(t,r,s=!1){this.dbi=nt(t,r),this.key_type=this.dbi[fr.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[fr.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new p_.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};o(bo,"TransactionCursor");function O_(e,t){if(e===void 0)throw new Error(fe.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(fe.ENV_NAME_REQUIRED)}o(O_,"pathEnvNameValidation");async function I_(e,t,r=!0){try{await st.access(e)}catch(s){throw s.code==="ENOENT"?new Error(fe.INVALID_BASE_PATH):s}try{let s=lt.join(e,t+Dn);return await st.access(s,st.constants.R_OK|st.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await st.access(lt.join(e,t,ry),st.constants.R_OK|st.constants.F_OK),lt.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(fe.INVALID_ENVIRONMENT)}else throw new Error(fe.INVALID_ENVIRONMENT);throw s}}o(I_,"validateEnvironmentPath");function wo(e,t){if(Lo.validateEnv(e),t===void 0)throw new Error(fe.DBI_NAME_REQUIRED)}o(wo,"validateEnvDBIName");async function iy(e,t,r=!1,s=!1){O_(e,t),t=t.toString();try{return await I_(e,t,s),C_(e,t,r)}catch(n){if(n.message===fe.INVALID_ENVIRONMENT){let i=lt.join(e,t);await st.mkdirp(s?i:e);let a=new CS(s?i:i+Dn,!1),c=p_.open(a);c.dbis=Object.create(null);let _=new N_(!1);c.openDB(Et,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=b_(e,t,r);return c[fr.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=c,c}throw n}}o(iy,"createEnvironment");async function oy(e,t,r,s=!0){let n=await C_(e,t);if(r===void 0)throw new Error(fe.DESTINATION_PATH_REQUIRED);try{await st.access(lt.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(fe.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}o(oy,"copyEnvironment");async function C_(e,t,r=!1){O_(e,t),t=t.toString();let s=b_(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 I_(e,t),i=lt.join(e,t+Dn),a=n!=i,c=new CS(n,a),_=p_.open(c);_.dbis=Object.create(null);let u=yS(_);for(let l=0;l<u.length;l++)nt(_,u[l]);return _[fr.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=_,_}o(C_,"openEnvironment");async function ay(e,t,r=!1){O_(e,t),t=t.toString();let s=lt.join(e,t+Dn),n=await I_(e,t);if(global.lmdb_map!==void 0){let i=b_(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await LS(a),delete global.lmdb_map[i]}}await st.remove(n),await st.remove(n===s?n+ny:lt.join(lt.dirname(n),sy))}o(ay,"deleteEnvironment");async function LS(e){Lo.validateEnv(e);let t=e[fr.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(LS,"closeEnvironment");function b_(e,t,r=!1){let n=`${lt.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}o(b_,"getCachedEnvironmentName");function cy(e){Lo.validateEnv(e);let t=Object.create(null),r=nt(e,Et);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Et)try{t[s]=Object.assign(new yo,n)}catch{IS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}o(cy,"listDBIDefinitions");function yS(e){Lo.validateEnv(e);let t=[],r=nt(e,Et);for(let{key:s}of r.getRange({start:!1}))s!==Et&&t.push(s);return t}o(yS,"listDBIs");function _y(e,t){let s=nt(e,Et).getEntry(t),n=new yo;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{IS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}o(_y,"getDBIDefinition");function wS(e,t,r,s=!1){if(wo(e,t),t=t.toString(),t===Et)throw new Error(fe.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return nt(e,t)}catch(n){if(n.message===fe.DBI_DOES_NOT_EXIST){let i=new N_(r,s===!0),a=e.openDB(t,i),c=new yo(r===!0,s);return a[bS]=c,nt(e,Et).putSync(t,c),e.dbis[t]=a,a}throw n}}o(wS,"createDBI");function nt(e,t){if(wo(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Et?r=_y(e,t):r=new yo,r===void 0)throw new Error(fe.DBI_DOES_NOT_EXIST);let s;try{let n=new N_(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(fe.DBI_DOES_NOT_EXIST):n}return s[bS]=r,e.dbis[t]=s,s}o(nt,"openDBI");function uy(e,t){wo(e,t),t=t.toString();let r=nt(e,t),s=r.getStats();return r[fr.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}o(uy,"statDBI");async function ly(e,t){try{let r=lt.join(e,t+Dn);return(await st.stat(r)).size}catch{throw new Error(fe.INVALID_ENVIRONMENT)}}o(ly,"environmentDataSize");function Ey(e,t){if(wo(e,t),t=t.toString(),t===Et)throw new Error(fe.CANNOT_DROP_INTERNAL_DBIS_NAME);nt(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],nt(e,Et).removeSync(t)}o(Ey,"dropDBI");function dy(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{nt(e,n)}catch(i){if(i.message===fe.DBI_DOES_NOT_EXIST)wS(e,n,n!==t,n===t);else throw i}}}o(dy,"initializeDBIs");MS.exports={openDBI:nt,openEnvironment:C_,createEnvironment:iy,listDBIs:yS,listDBIDefinitions:cy,createDBI:wS,dropDBI:Ey,statDBI:uy,deleteEnvironment:ay,initializeDBIs:dy,TransactionCursor:bo,environmentDataSize:ly,copyEnvironment:oy,closeEnvironment:LS}});var US=f((R$,DS)=>{"use strict";var Mo=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};o(Mo,"InsertRecordsResponseObject");DS.exports=Mo});var HS=f((A$,PS)=>{"use strict";var Do=class{constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};o(Do,"UpdateRecordsResponseObject");PS.exports=Do});var vS=f((p$,BS)=>{"use strict";var Uo=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};o(Uo,"UpsertRecordsResponseObject");BS.exports=Uo});var jr=f((b$,FS)=>{"use strict";var Sy=k(),fy=US(),hy=HS(),Ty=vS(),bt=Sr(),Un=et().LMDB_ERRORS_ENUM,Ry=de(),Qt=T(),my=O(),Ay=require("uuid"),O$=require("lmdb"),{handleHDBError:gy,hdb_errors:py}=J(),{OVERFLOW_MARKER:I$,MAX_SEARCH_KEY_LENGTH:C$}=Ry,GS=H();GS.initSync();var Po=GS.get(Qt.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),L_=Qt.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Qr=Qt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Ny(e,t,r,s,n=bt.getNextMonotonicTime()){D_(e,t,r,s),y_(e,t,r);let i=new fy,a=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];qS(u,!0,n);let l=Oy(e,t,r,u),E=u[t];a.push(l),c.push(E)}return w_(a,c,s,i,n)}o(Ny,"insertRecords");function Oy(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let a=r[i];if(a===t||s.hasOwnProperty(a)===!1)continue;let c=s[a];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][Qt.FUNC_VAL],s[a]=c)}let _=bt.getIndexedValues(c),u=e.dbis[a];if(_){Po&&u.prefetch(_.map(l=>({key:l,value:n})),Ho);for(let l=0,E=_.length;l<E;l++)u.put(_[l],n)}}Po&&e.dbis[t].prefetch([n],Ho),e.dbis[t].put(n,s,s[Qr])})}o(Oy,"insertRecord");function Iy(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}o(Iy,"removeSkippedRecords");function qS(e,t,r){let s=r>0;(s||!Number.isInteger(e[Qr]))&&(e[Qr]=r||(r=bt.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[L_]))&&(e[L_]=r||bt.getNextMonotonicTime()):delete e[L_]}o(qS,"setTimestamps");function y_(e,t,r){r.indexOf(Qt.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Qt.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Qt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Qt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),Sy.initializeDBIs(e,t,r)}o(y_,"initializeTransaction");async function Cy(e,t,r,s,n=bt.getNextMonotonicTime()){D_(e,t,r,s),y_(e,t,r);let i=new hy,a=[],c=[],_=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],d;try{d=M_(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),a.push(u);continue}c.push(d),_.push(E)}return w_(c,_,s,i,n,a)}o(Cy,"updateRecords");async function by(e,t,r,s,n=bt.getNextMonotonicTime()){try{D_(e,t,r,s)}catch(_){throw gy(_,_.message,py.HTTP_STATUS_CODES.BAD_REQUEST)}y_(e,t,r);let i=new Ty,a=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;my.isEmpty(u[t])?(l=Ay.v4(),u[t]=l):l=u[t];let E=M_(e,t,u,l,i,!1,n);a.push(E),c.push(l)}return w_(a,c,s,i,n)}o(by,"upsertRecords");async function w_(e,t,r,s,n,i=[]){let a=await Promise.all(e);for(let c=0,_=a.length;c<_;c++)a[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||bt.getNextMonotonicTime(),Iy(r,i),s}o(w_,"finalizeWrite");function M_(e,t,r,s,n,i=!1,a){let c=e.dbis[t],_=c.getEntry(s),u=_?.value,l=u;if(!u){if(i)return!1;u={}}if(qS(r,!l,a),Number.isInteger(r[Qr])&&u[Qr]>r[Qr])return!1;l&&n.original_records.push(u);let E,d=o(()=>{for(let R in r){if(!r.hasOwnProperty(R)||R===t)continue;let m=r[R],b=e.dbis[R];if(b===void 0)continue;let $=u[R];if(typeof m=="function"){let B=m([[u]]);Array.isArray(B)&&(m=B[0][Qt.FUNC_VAL],r[R]=m)}if(m===$)continue;let A=bt.getIndexedValues($);if(A){Po&&b.prefetch(A.map(B=>({key:B,value:s})),Ho);for(let B=0,Ee=A.length;B<Ee;B++)b.remove(A[B],s)}if(A=bt.getIndexedValues(m),A){Po&&b.prefetch(A.map(B=>({key:B,value:s})),Ho);for(let B=0,Ee=A.length;B<Ee;B++)b.put(A[B],s)}}let S=Object.assign({},u,r);c.put(s,S,S[Qr])},"do_put");return _?E=c.ifVersion(s,_.version,d):E=c.ifNoExists(s,d),E.then(S=>S?!0:M_(e,t,r,s,n,i,a))}o(M_,"updateUpsertRecord");function Ly(e,t,r){if(bt.validateEnv(e),t===void 0)throw new Error(Un.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Un.WRITE_ATTRIBUTES_REQUIRED):new Error(Un.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(Ly,"validateBasic");function D_(e,t,r,s){if(Ly(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Un.RECORDS_REQUIRED):new Error(Un.RECORDS_MUST_BE_ARRAY)}o(D_,"validateWrite");function Ho(){}o(Ho,"noop");FS.exports={insertRecords:Ny,updateRecords:Cy,upsertRecords:by}});var K=f((y$,KS)=>{"use strict";var Gn=T(),yy=O(),ye=H(),qn=require("path"),wy=require("minimist"),xS=require("fs-extra"),VS=require("lodash");ye.initSync();var{CONFIG_PARAMS:hr,SCHEMAS_PARAM_CONFIG:Pn,SYSTEM_SCHEMA_NAME:Bo}=Gn,Hn,Bn,vn;function kS(){if(Hn!==void 0)return Hn;if(ye.getHdbBasePath()!==void 0)return Hn=ye.get(hr.STORAGE_PATH)||qn.join(ye.getHdbBasePath(),Gn.SCHEMA_DIR_NAME),Hn}o(kS,"getBaseSchemaPath");function YS(){if(Bn!==void 0)return Bn;if(ye.getHdbBasePath()!==void 0)return Bn=$S(Bo),Bn}o(YS,"getSystemSchemaPath");function My(){if(vn!==void 0)return vn;if(ye.getHdbBasePath()!==void 0)return vn=ye.get(Gn.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||qn.join(ye.getHdbBasePath(),Gn.TRANSACTIONS_DIR_NAME),vn}o(My,"getTransactionAuditStoreBasePath");function Dy(e,t){let r=ye.get(hr.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||qn.join(My(),e.toString())}o(Dy,"getTransactionAuditStorePath");function $S(e,t){e=e.toString(),t=t&&t.toString();let r=ye.get(Gn.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||qn.join(kS(),e)}o($S,"getSchemaPath");function Uy(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,wy(process.argv));let s=r[hr.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(a){if(!yy.isObject(s))throw a;i=s}for(let a of i){let c=a[Bo];if(!c)continue;let _=ye.get(hr.SCHEMAS);_=_??{};let u=c?.tables?.[t]?.[Pn.PATH];if(u)return VS.set(_,[Bo,Pn.TABLES,t,Pn.PATH],u),ye.setProperty(hr.SCHEMAS,_),u;let l=c?.[Pn.PATH];if(l)return VS.set(_,[Bo,Pn.PATH],l),ye.setProperty(hr.SCHEMAS,_),l}}let n=r[hr.STORAGE_PATH.toUpperCase()];if(n){if(!xS.pathExistsSync(n))throw new Error(n+" does not exist");let i=qn.join(n,e);return xS.mkdirsSync(i),ye.setProperty(hr.STORAGE_PATH,n),i}return YS()}o(Uy,"initSystemSchemaPaths");function Py(){Hn=void 0,Bn=void 0,vn=void 0}o(Py,"resetPaths");KS.exports={getBaseSchemaPath:kS,getSystemSchemaPath:YS,getTransactionAuditStorePath:Dy,getSchemaPath:$S,initSystemSchemaPaths:Uy,resetPaths:Py}});var jt=f((M$,Hy)=>{Hy.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 U_=f((D$,WS)=>{var{common_validators:Tr}=Gs(),Fn=Fe(),dt="is required",W={schema:{presence:!0,format:Tr.schema_format,length:Tr.schema_length},table:{presence:!0,format:Tr.schema_format,length:Tr.schema_length},attribute:{presence:!0,format:Tr.schema_format,length:Tr.schema_length},hash_attribute:{presence:!0,format:Tr.schema_format,length:Tr.schema_length}};function xn(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}o(xn,"makeAttributesStrings");function By(e){return e=xn(e),W.schema.presence={message:dt},W.table.presence=!1,W.attribute.presence=!1,W.hash_attribute.presence=!1,Fn.validateObject(e,W)}o(By,"schema_object");function vy(e){return e=xn(e),W.schema.presence={message:dt},W.table.presence={message:dt},W.attribute.presence=!1,W.hash_attribute.presence=!1,Fn.validateObject(e,W)}o(vy,"table_object");function Gy(e){return e=xn(e),W.schema.presence={message:dt},W.table.presence={message:dt},W.attribute.presence=!1,W.hash_attribute.presence={message:dt},Fn.validateObject(e,W)}o(Gy,"create_table_object");function qy(e){return e=xn(e),W.schema.presence={message:dt},W.table.presence={message:dt},W.attribute.presence={message:dt},W.hash_attribute.presence=!1,Fn.validateObject(e,W)}o(qy,"attribute_object");function Fy(e){return e=xn(e),W.schema.presence={message:dt},W.table.presence={message:dt},W.attribute.presence=!1,W.hash_attribute.presence=!1,Fn.validateObject(e,W)}o(Fy,"describe_table");function xy(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`)}}o(xy,"validateTableResidence");WS.exports={schema_object:By,create_table_object:Gy,table_object:vy,attribute_object:qy,describe_table:Fy,validateTableResidence:xy}});var jS=f((P$,QS)=>{"use strict";var Vy=require("uuid"),vo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Vy.v4(),this.schema_table=`${this.schema}.${this.table}`}};o(vo,"CreateAttributeObject");QS.exports=vo});var qo=f((B$,JS)=>{"use strict";var ky=jS(),Go=class extends ky{constructor(t,r,s,n,i=!0,a=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=a}};o(Go,"LMDBCreateAttributeObject");JS.exports=Go});var ZS=f((G$,XS)=>{"use strict";XS.exports=$y;var Yy="inserted";function $y(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Yy?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}o($y,"returnObject")});var Fo=f((F$,sf)=>{"use strict";var Ky=T(),P_=k(),Wy=jr(),{getSystemSchemaPath:Qy,getSchemaPath:jy}=K(),Jy=jt(),Xy=U_(),Zy=qo(),zy=ZS(),{handleHDBError:zS,hdb_errors:tf}=J(),ef=O(),{HTTP_STATUS_CODES:ew}=tf,H_=Jy.hdb_attribute,rf=[];for(let e=0;e<H_.attributes.length;e++)rf.push(H_.attributes[e].attribute);var tw="inserted";sf.exports=rw;async function rw(e){let t=Xy.attribute_object(e);if(t)throw zS(new Error,t.message,tf.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&ef.checkGlobalSchemaTable(e.schema,e.table);if(r)throw zS(new Error,r,ew.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=ef.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 Zy(e.schema,e.table,e.attribute,e.id);try{let i=await P_.openEnvironment(jy(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}`);P_.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let a=await P_.openEnvironment(Qy(),Ky.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:_}=await Wy.insertRecords(a,H_.hash_attribute,rf,[n]);return zy(tw,c,{records:[n]},_)}catch(i){throw i}}o(rw,"lmdbCreateAttribute")});var xo=f((k$,of)=>{"use strict";var Jt=O(),nf=p(),V$=m_();of.exports=sw;function sw(e){if(Jt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Jt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Jt.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(Jt.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(a=>{if(i&&Jt.isEmptyOrZeroLength(a[r]))throw nf.error("a valid hash attribute must be provided with update record:",a),new Error("a valid hash attribute must be provided with update record, check log for more info");if(!Jt.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw nf.error(`a valid hash value must be provided with ${e.operation} record:`,a),new Error(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Jt.isEmpty(a[r])&&a[r]!==""&&s.has(Jt.autoCast(a[r]))&&(a.skip=!0),s.add(Jt.autoCast(a[r]));for(let c in a)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}o(sw,"insertUpdateValidate")});var ko=f(($$,af)=>{"use strict";var nw=T().OPERATIONS_ENUM,Vo=class{constructor(t,r,s,n,i=void 0){this.operation=nw.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};o(Vo,"InsertObject");af.exports=Vo});var $o=f((Q$,cf)=>{"use strict";var W$=ko(),Yo=T(),v_=O(),B_=p(),iw=require("uuid"),{handleHDBError:Vn,hdb_errors:ow}=J(),{HDB_ERROR_MSGS:kn,HTTP_STATUS_CODES:Yn}=ow;cf.exports=aw;function aw(e,t,r){for(let n=0;n<t.length;n++)cw(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];_w(i,r,e.operation)}}o(aw,"processRows");function cw(e){if(Buffer.byteLength(String(e))>Yo.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Vn(new Error,kn.ATTR_NAME_LENGTH_ERR(e),Yn.BAD_REQUEST,void 0,void 0,!0);if(v_.isEmptyOrZeroLength(e)||v_.isEmpty(e.trim()))throw Vn(new Error,kn.ATTR_NAME_NULLISH_ERR,Yn.BAD_REQUEST,void 0,void 0,!0)}o(cw,"validateAttribute");function _w(e,t,r){if(!e.hasOwnProperty(t)||v_.isEmptyOrZeroLength(e[t])){if(r===Yo.OPERATIONS_ENUM.INSERT||r===Yo.OPERATIONS_ENUM.UPSERT){e[t]=iw.v4();return}throw B_.error("Update transaction aborted due to record with no hash value:",e),Vn(new Error,kn.RECORD_MISSING_HASH_ERR,Yn.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Yo.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw B_.error(e),Vn(new Error,kn.HASH_VAL_LENGTH_ERR,Yn.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw B_.error(e),Vn(new Error,kn.INVALID_FORWARD_SLASH_IN_HASH_ERR,Yn.BAD_REQUEST,void 0,void 0,!0)}o(_w,"validateHash")});var uf=f((J$,_f)=>{"use strict";var Ko=class{constructor(t,r){this.type=t,this.message=r}};o(Ko,"ITCEventObject");_f.exports=Ko});var Wo=f((Z$,df)=>{var uw=require("crypto"),lf=9;function lw(e){let t=dw(lf),r=Ef(e+t);return t+r}o(lw,"createHash");function Ew(e,t){let r=e.substr(0,lf),s=r+Ef(t+r);return e===s}o(Ew,"validateHash");function dw(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}o(dw,"generateSalt");function Ef(e){return uw.createHash("md5").update(e).digest("hex")}o(Ef,"md5");df.exports={hash:lw,validate:Ew}});var ff=f((eK,Sf)=>{"use strict";var Rr=T(),$n=class{constructor(t=0,r=Rr.STORAGE_TYPES_ENUM.LMDB,s=Rr.LICENSE_VALUES.API_CALL_DEFAULT,n=Rr.RAM_ALLOCATION_ENUM.DEFAULT,i=Rr.LICENSE_VALUES.VERSION_DEFAULT,a){this.exp_date=t,this.storage_type=r,this.api_call=s,this.ram_allocation=n,this.version=i,this.fingerprint=a}};o($n,"BaseLicense");var Qo=class extends $n{constructor(t=0,r=Rr.STORAGE_TYPES_ENUM.LMDB,s=Rr.LICENSE_VALUES.API_CALL_DEFAULT,n=Rr.RAM_ALLOCATION_ENUM.DEFAULT,i=Rr.LICENSE_VALUES.VERSION_DEFAULT,a,c=!1){super(t,r,s,n,i,a),this.enterprise=c}};o(Qo,"ExtendedLicense");Sf.exports={BaseLicense:$n,ExtendedLicense:Qo}});var Vs=f((rK,gf)=>{"use strict";var xs=require("fs-extra"),hf=Wo(),Tf=require("crypto"),Sw=require("moment"),fw=require("uuid").v4,me=p(),q_=require("path"),hw=O(),Ye=T(),Tw=ff().ExtendedLicense,Fs="invalid license key format",Rw="061183",mw="mofi25",Aw="aes-256-cbc",gw=16,pw=32,Rf=H();Rf.initSync();var G_;gf.exports={validateLicense:mf,generateFingerPrint:Ow,licenseSearch:Af,getLicense:bw};function F_(){return q_.join(Rf.getHdbBasePath(),Ye.LICENSE_KEY_DIR_NAME,Ye.LICENSE_FILE_NAME)}o(F_,"getLicenseDirPath");function Nw(){let e=F_();return q_.join(e,Ye.LICENSE_FILE_NAME)}o(Nw,"getLicenseFilePath");function x_(){let e=F_();return q_.join(e,Ye.REG_KEY_FILE_NAME)}o(x_,"getFingerPrintFilePath");async function Ow(){let e=x_();try{return await xs.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await Iw();throw me.error(`Error writing fingerprint file to ${e}`),me.error(t),new Error("There was an error generating the fingerprint")}}o(Ow,"generateFingerPrint");async function Iw(){let e=fw(),t=hf.hash(e),r=x_();try{await xs.mkdirp(F_()),await xs.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw me.error(`Error writing fingerprint file to ${r}`),me.error(s),new Error("There was an error generating the fingerprint")}return t}o(Iw,"writeFingerprint");function mf(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Ye.STORAGE_TYPES_ENUM.LMDB,api_call:Ye.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Ye.RAM_ALLOCATION_ENUM.DEFAULT,version:Ye.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return me.error("empty license key passed to validate."),r;let s=x_(),n=!1;try{n=xs.statSync(s)}catch(i){me.error(i)}if(n){let i;try{i=xs.readFileSync(s,"utf8")}catch{me.error("error validating this machine in the license"),r.valid_machine=!1;return}let a=e.split(mw),c=a[1];c=Buffer.concat([Buffer.from(c)],gw);let _=Buffer.concat([Buffer.from(i)],pw),u=Tf.createDecipheriv(Aw,_,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=u.update(a[0],"hex","utf8"),l.trim(),l+=u.final("utf8")}catch{let S=Cw(a[0],i);if(S)l=S;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Fs),me.error(Fs),new Error(Fs)}let E;if(isNaN(l))try{E=JSON.parse(l),r.api_call=E.api_call,r.version=E.version,r.storage_type=E.storage_type,r.exp_date=E.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),E.ram_allocation&&(r.ram_allocation=E.ram_allocation)}catch{throw console.error(Fs),me.error(Fs),new Error(Fs)}else r.exp_date=l;r.exp_date<Sw().valueOf()&&(r.valid_date=!1),hf.validate(a[1],`${Rw}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||me.error("Invalid licence"),r}o(mf,"validateLicense");function Cw(e,t){try{let r=Tf.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{me.warn("Check old license failed")}}o(Cw,"checkOldLicense");function Af(){let e=new Tw;e.api_call=0;let t=[];try{t=xs.readFileSync(Nw(),"utf-8").split(Ye.NEW_LINE)}catch(r){r.code==="ENOENT"?me.info("no license file found"):me.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(hw.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=mf(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.api_call+=i.api_call,e.ram_allocation=i.ram_allocation,e.storage_type=i.storage_type,e.enterprise=!0)}catch(n){me.error("There was an error parsing the license string."),me.error(n),e.api_call=Ye.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Ye.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Ye.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Ye.LICENSE_VALUES.API_CALL_DEFAULT),G_=e,e}o(Af,"licenseSearch");async function bw(){return G_||await Af(),G_}o(bw,"getLicense")});var Xr=f((nK,W_)=>{"use strict";var{Worker:Lw,MessageChannel:yw,parentPort:Xt,isMainThread:Of,threadId:ww,workerData:Mw}=require("worker_threads"),{PACKAGE_ROOT:Dw}=T(),{join:Uw,isAbsolute:Pw,extname:Hw}=require("path"),{totalmem:pf}=require("os"),$_=T(),If=H(),Bw=Vs(),jo=p(),vw=T();If.initSync();var Gw=If.get($_.CONFIG_PARAMS.HTTP_THREADS)||1,qw=1024*1024,mr=[],Jr=[],Fw=50,Cf=1e4,bf="restart",Lf="request_thread_info",yf="resource_report",wf="thread_info",Mf="added-port",V_;W_.exports={startWorker:k_,restartWorkers:K_,shutdownWorkers:Vw,workers:mr,setMonitorListener:Ww,onMessageFromWorkers:kw,broadcast:Yw};function k_(e,t={}){let s=Bw.licenseSearch().ram_allocation,n=process.constrainedMemory?.()||pf();n=Math.min(n,pf());let i=Math.min(Math.max(Math.floor(n/qw/(1+Gw/4)),512),s||1/0),a=Math.min(Math.max(i>>7,16),64),c=[];for(let u of Jr){let{port1:l,port2:E}=new yw;u.postMessage({type:Mf,port:l},[l]),c.push(E)}Hw(e)||(e+=".js");let _=new Lw(Pw(e)?e:Uw(Dw,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:i,maxYoungGenerationSizeMb:a},argv:process.argv.slice(2),workerData:{addPorts:c,name:t.name},transferList:c},t));return Jo(_,!0),_.unexpectedRestarts=t.unexpectedRestarts||0,_.startCopy=()=>{k_(e,t)},_.on("error",u=>{console.error("Worker error:",u),jo.error("Worker error:",u)}),_.on("exit",u=>{mr.splice(mr.indexOf(_),1),!_.wasShutdown&&t.autoRestart!==!1&&(_.unexpectedRestarts<Fw?(t.unexpectedRestarts=_.unexpectedRestarts+1,k_(e,t)):jo.error(`Thread has been restarted ${_.restarts} times and will not be restarted`))}),_.on("message",u=>{u.type===bf&&K_(u.workerType),u.type===Lf&&$w(_),u.type===yf&&Kw(_,u)}),mr.push(_),jw(),t.onStarted&&t.onStarted(_),_.name=t.name,_}o(k_,"startWorker");var xw=[$_.THREAD_TYPES.HTTP];async function K_(e=null,t=2,r=!0){if(Of){t<1&&(t=t*mr.length);let s=[];for(let n of mr.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({type:$_.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=xw.indexOf(n.name)>-1,a=new Promise(c=>{let _=setTimeout(()=>n.terminate(),Cf*2).unref();n.on("exit",()=>{clearTimeout(_),s.splice(s.indexOf(a)),!i&&r&&n.startCopy(),c()})});s.push(a),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else Xt.postMessage({type:bf,workerType:e})}o(K_,"restartWorkers");function Vw(e){return K_(e,1/0,!1)}o(Vw,"shutdownWorkers");var Df=[];function kw(e){Df.push(e)}o(kw,"onMessageFromWorkers");function Yw(e){for(let t of Jr)try{t.postMessage(e)}catch(r){jo.error("Unable to send message to worker",r)}}o(Yw,"broadcast");function $w(e){e.postMessage({type:wf,workers:Uf()})}o($w,"sendThreadInfo");function Uf(){let e=Date.now();return mr.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}))}o(Uf,"getChildWorkerInfo");function Kw(e,t){e.resources=t,e.resources.updated=Date.now()}o(Kw,"recordResourceReport");var Y_;function Ww(e){Y_=e}o(Ww,"setMonitorListener");var Qw=1e3,Nf=!1;function jw(){Nf||(Nf=!0,setInterval(()=>{for(let e of mr){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}Y_&&Y_()},Qw).unref())}o(jw,"startMonitoring");var Jw=1e3;if(Xt){Jo(Xt);for(let e of Mw.addPorts)Jo(e);setInterval(()=>{let e=process.memoryUsage();Xt.postMessage({type:yf,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Jw).unref(),V_=o(()=>new Promise((e,t)=>{Xt.on("message",r),Xt.postMessage({type:Lf});function r(s){s.type===wf&&(Xt.off("message",r),e(s.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else V_=Uf;W_.exports.getThreadInfo=V_;function Jo(e,t){Jr.push(e),e.on("message",r=>{if(r.type===Mf)Jo(r.port);else for(let s of Df)s(r)}).on("close",()=>{Jr.splice(Jr.indexOf(e),1)}).on("exit",()=>{Jr.splice(Jr.indexOf(e),1)}),t||e.unref()}o(Jo,"addPort");Of||Xt.on("message",async e=>{let{type:t}=e;t===vw.ITC_EVENT_TYPES.SHUTDOWN&&(Xt.unref(),setTimeout(()=>{jo.warn("Thread did not voluntarily terminate",ww),process.exit(0)},Cf).unref())})});var Bf=f((oK,Hf)=>{"use strict";var Q_=k(),Xw=p(),Pf=et().LMDB_ERRORS_ENUM;Hf.exports=Zw;async function Zw(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 a=t[i];if(a.startsWith(`${e.schema}.`)||a.startsWith(`txn.${e.schema}.`))try{await Q_.closeEnvironment(global.lmdb_map[a])}catch(c){if(c.message!==Pf.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Q_.closeEnvironment(global.lmdb_map[s]),await Q_.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==Pf.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){Xw.error(t)}}o(Zw,"cleanLMDBMap")});var jf=f((_K,Qf)=>{"use strict";var j_=require("recursive-iterator"),zw=require("alasql"),J_=require("clone"),vf=O(),{handleHDBError:Gf,hdb_errors:eM}=J(),{HDB_ERROR_MSGS:qf,HTTP_STATUS_CODES:Ff}=eM,tM=["DISTINCT_ARRAY"],xf=Symbol("validateTables"),X_=Symbol("validateTable"),cK=Symbol("getAllColumns"),Vf=Symbol("validateAllColumns"),Xo=Symbol("findColumn"),kf=Symbol("validateOrderBy"),Kn=Symbol("validateSegment"),Z_=Symbol("validateColumn"),Yf=Symbol("setColumnsForTable"),$f=Symbol("checkColumnsForAsterisk"),Kf=Symbol("validateGroupBy"),Wf=Symbol("hasColumns"),Zo=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[xf](),this[$f](),this[Vf]()}[xf](){if(this[Wf]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[X_](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[X_](t.table)})}}[Wf](){let t=!1,r=new j_(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[X_](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw Gf(new Error,qf.SCHEMA_NOT_FOUND(t.databaseid),Ff.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw Gf(new Error,qf.TABLE_NOT_FOUND(t.databaseid,t.tableid),Ff.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=J_(s);n.table=J_(t),this.attributes.push(n)})}[Xo](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)}[$f](){let t=new j_(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Yf](r.tableid)}[Yf](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new zw.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Vf](){this[Kn](this.statement.columns,!1),this[Kn](this.statement.joins,!1),this[Kn](this.statement.where,!1),this[Kf](this.statement.group,!1),this[Kn](this.statement.order,!0)}[Kn](t,r){if(!t)return;let s=new j_(t),n=[];for(let{node:i,path:a}of s)!vf.isEmpty(i)&&!vf.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[kf](i):n.push(this[Z_](i)));return n}[Kf](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&tM.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=J_(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Xo](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,a)=>{if(i.toString()===s.toString()){n=i,r.splice(a,1);return}});else{let i=this[Xo](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((a,c)=>{if(a.attribute===i[0].attribute&&a.table.tableid===i[0].table.tableid){n=a,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[kf](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[Z_](t)}[Z_](t){let r=this[Xo](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]}};o(Zo,"SelectValidator");Qf.exports=Zo});var zf=f((lK,Zf)=>{"use strict";var Jf=require("lodash"),Wn=require("mathjs"),rM=require("jsonata"),Xf=O();Zf.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Jf.uniqWith(e,Jf.isEqual):e,searchJSON:sM,mad:Qn.bind(null,Wn.mad),mean:Qn.bind(null,Wn.mean),mode:Qn.bind(null,Wn.mode),prod:Qn.bind(null,Wn.prod),median:Qn.bind(null,Wn.median)};function Qn(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}o(Qn,"aggregateFunction");function sM(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(Xf.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Xf.isEmpty(this.__ala__.res[r])){let s=rM(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}o(sM,"searchJSON")});var th=f((dK,eh)=>{"use strict";var re=require("moment"),z_="YYYY-MM-DDTHH:mm:ss.SSSZZ";re.suppressDeprecationWarnings=!0;eh.exports={current_date:()=>re().utc().format("YYYY-MM-DD"),current_time:()=>re().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return re(e).utc().format("YYYY");case"month":return re(e).utc().format("MM");case"day":return re(e).utc().format("DD");case"hour":return re(e).utc().format("HH");case"minute":return re(e).utc().format("mm");case"second":return re(e).utc().format("ss");case"millisecond":return re(e).utc().format("SSS");default:break}},date:e=>re(e).utc().format(z_),date_format:(e,t)=>re(e).utc().format(t),date_add:(e,t,r)=>re(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>re(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=re(e).utc(),n=re(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>re().utc().valueOf(),get_server_time:()=>re().format(z_),offset_utc:(e,t)=>re(e).utc().utcOffset(t).format(z_)}});var ih=f((SK,nh)=>{"use strict";var nM=require("@turf/area"),iM=require("@turf/length"),oM=require("@turf/circle"),aM=require("@turf/difference"),cM=require("@turf/distance"),_M=require("@turf/boolean-contains"),uM=require("@turf/boolean-equal"),lM=require("@turf/boolean-disjoint"),EM=require("@turf/helpers"),rh=T(),U=O();nh.exports={geoArea:dM,geoLength:SM,geoCircle:fM,geoDifference:hM,geoDistance:sh,geoNear:TM,geoContains:RM,geoEqual:mM,geoCrosses:AM,geoConvert:gM};var eu="geo1 is required",tu="geo2 is required";function dM(e){if(U.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),nM.default(e)}o(dM,"geoArea");function SM(e,t){if(U.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),iM.default(e,{units:t||"kilometers"})}o(SM,"geoLength");function fM(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)),oM.default(e,t,{units:r||"kilometers"})}o(fM,"geoCircle");function hM(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)),aM(e,t)}o(hM,"geoDifference");function sh(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)),cM.default(e,t,{units:r||"kilometers"})}o(sh,"geoDistance");function TM(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 sh(e,t,s)<=r}o(TM,"geoNear");function RM(e,t){if(U.isEmpty(e))throw new Error(eu);if(U.isEmpty(e))throw new Error(tu);return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),_M.default(e,t)}o(RM,"geoContains");function mM(e,t){if(U.isEmpty(e))throw new Error(eu);if(U.isEmpty(e))throw new Error(tu);return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),uM.default(e,t)}o(mM,"geoEqual");function AM(e,t){if(U.isEmpty(e))throw new Error(eu);if(U.isEmpty(e))throw new Error(tu);return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),!lM.default(e,t)}o(AM,"geoCrosses");function gM(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(rh.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(rh.GEO_CONVERSION_ENUM).join(",")}`);return EM[t](e,r)}o(gM,"geoConvert")});var ah=f((hK,oh)=>{var Zr=zf(),$e=th(),Lt=ih();oh.exports=e=>{e.aggr.mad=e.aggr.MAD=Zr.mad,e.aggr.mean=e.aggr.MEAN=Zr.mean,e.aggr.mode=e.aggr.MODE=Zr.mode,e.aggr.prod=e.aggr.PROD=Zr.prod,e.aggr.median=e.aggr.MEDIAN=Zr.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Zr.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Zr.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=$e.current_date,e.fn.current_time=e.fn.CURRENT_TIME=$e.current_time,e.fn.extract=e.fn.EXTRACT=$e.extract,e.fn.date=e.fn.DATE=$e.date,e.fn.date_format=e.fn.DATE_FORMAT=$e.date_format,e.fn.date_add=e.fn.DATE_ADD=$e.date_add,e.fn.date_sub=e.fn.DATE_SUB=$e.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=$e.date_diff,e.fn.now=e.fn.NOW=$e.now,e.fn.offset_utc=e.fn.OFFSET_UTC=$e.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=$e.get_server_time,e.fn.getdate=e.fn.GETDATE=$e.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=$e.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Lt.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Lt.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Lt.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Lt.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Lt.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Lt.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Lt.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Lt.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Lt.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Lt.geoNear}});var uh=f((TK,_h)=>{"use strict";var jn=require("lodash"),he=require("alasql");he.options.cache=!1;var pM=ah(),ch=require("clone"),zo=require("recursive-iterator"),y=p(),D=O(),ks=zr(),NM=T(),{hdb_errors:OM}=J(),IM="IS NULL",St="There was a problem performing this search. Please check the logs and try again.";pM(he);var ea=class{constructor(t,r){if(D.isEmpty(t))throw y.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(),D.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!D.isEmptyOrZeroLength(s))return y.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw y.error("Error thrown from checkEmptySQL in SQLSearch class method search."),y.error(s),new Error(St)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw y.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),y.error(s),new Error(St)}if(Object.keys(this.data).length===0)return y.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw y.error("Error thrown from processJoins in SQLSearch class method search."),y.error(s),new Error(St)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw y.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),y.error(s),new Error(St)}try{return t=await this._finalSQL(),t}catch(s){throw y.error("Error thrown from finalSQL in SQLSearch class method search."),y.error(s),new Error(St)}}_getColumns(){let t=new zo(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(ch(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=jn.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(D.isEmpty(this.statement.where)){y.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new zo(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!D.isEmpty(r)&&r.right)if(D.isNotEmptyAndHasValue(r.right.value)){let s=D.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new he.yy.LogicValue({value:s}):r.right instanceof he.yy.StringValue&&!D.isEmpty(s)&&D.autoCasterIsNumberCheck(s.toString())&&(r.right=new he.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=D.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new he.yy.LogicValue({value:i}):s instanceof he.yy.StringValue&&D.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new he.yy.NumValue({value:i}))});if(t){y.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new zo(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 a=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!D.isEmpty(NM.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(D.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(D.isEmptyOrZeroLength(r.left.columnid)||D.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[a].ignore=!0,this.comparator_search_values[a].comparators=[];continue}this.comparator_search_values[a].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(D.isEmpty(this.exact_search_values[a])&&(this.exact_search_values[a]={ignore:!1,values:new Set}),!this.exact_search_values[a].ignore){let c=!1;switch(r.op){case"=":!D.isEmpty(r.right.value)||!D.isEmpty(r.left.value)?s.add(D.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let _=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<_.length;u++)if(_[u].value)s.add(_[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[a].ignore=c,c?this.exact_search_values[a].values=new Set:this.exact_search_values[a].values=new Set([...this.exact_search_values[a].values,...s])}}}_setAliasesForColumns(){if(D.isEmptyOrZeroLength(this.all_table_attributes)&&D.isEmptyOrZeroLength(this.statement.from)&&D.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&&jn.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(D.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);D.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(D.isEmptyOrZeroLength(this.all_table_attributes)&&!D.isEmptyOrZeroLength(this.columns.columns))return t;if(D.isEmptyOrZeroLength(this.all_table_attributes)&&D.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await he.promise(r)}catch(r){throw y.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),y.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(ch(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(D.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(IM)>-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=jn.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 a=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[a].__hash_name;return n[a]||(n[a]=[],n[a].push(null),this._addColumnToMergedAttributes(a,c)),i.attribute!==c&&(n[a].push(null),this._addColumnToMergedAttributes(a,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,a=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},_=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===a&&(_=!0),!D.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!D.isEmptyOrZeroLength(this.exact_search_values[u].values))if(_)try{c.hash_values=Array.from(this.exact_search_values[u].values);let l=await ks.getDataByHash(c);for(let E of c.hash_values)l.get(E)&&!this.data[i].__merged_data[E]&&(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,E))}catch(l){throw y.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),y.error(l),new Error(St)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async l=>{let E=Object.assign({},c);E.search_value=l;let d=await ks.getDataByValue(E);for(let[S,R]of d)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,R[n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,R[n.attribute]),this._setMergedHashAttribute(i,D.autoCast(S)))}))}catch(l){throw y.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),y.error(l),new Error(St)}else if(!D.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!D.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let l=this.comparator_search_values[u].comparators;for(let E=0,d=l.length;E<d;E++){let S=l[E];c.search_attribute=S.attribute,c.search_value=S.search_value;let R=await ks.getDataByValue(c,S.operation);if(_)for(let[m]of R)this.data[i].__merged_data[m]||(this.data[i].__merged_data[m]=[...s[i]],this._setMergedHashAttribute(i,D.autoCast(m)));else for(let[m,b]of R)this.data[i].__merged_data[m]?this._updateMergedAttribute(i,m,n.attribute,b[n.attribute]):(this.data[i].__merged_data[m]=[...s[i]],this._updateMergedAttribute(i,m,n.attribute,b[n.attribute]),this._setMergedHashAttribute(i,D.autoCast(m)))}}catch(l){throw y.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),y.error(l),new Error(St)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await ks.getDataByValue(c);if(_)for(let[E]of l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,D.autoCast(E)));else for(let[E,d]of l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,d[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,d[n.attribute]),this._setMergedHashAttribute(i,D.autoCast(E)))}catch(l){throw y.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),y.error(l),new Error(St)}}}_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 he.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,a=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===a});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 he.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new he.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 he.yy.FuncValue:new he.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(S=>{S.joinmode&&S.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(S.table);let R=S.joinmode+" JOIN ? AS "+(S.as?S.as:S.table.tableid);S.on&&(R+=" ON "+S.on.toString()),i.push(R),t.push(Object.values(this.data[`${S.table.databaseid_orig}_${S.table.as?S.table.as_orig:S.table.tableid_orig}`].__merged_data))});let a=[],c={};n.forEach(S=>{let R=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__hash_name,m=S.as?S.as_orig:S.tableid_orig;a.push({key:`'${m}.${R}'`,schema:S.databaseid_orig,table:S.as?S.as_orig:S.tableid_orig,keys:new Set}),r.push(`${S.as?S.as:S.tableid}.\`${R}\` AS "${m}.${R}"`),c[S.as?S.as_orig:S.tableid_orig]=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__merged_attributes});let _=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(S=>{S.is_func?r.push(S.initial_select_column.toString()):S.initial_select_column.tableid?r.push(`${S.initial_select_column.tableid}.${S.initial_select_column.columnid} AS ${S.expression.columnid}`):r.push(`${S.initial_select_column.columnid} AS ${S.expression.columnid}`)}));let l="",E="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",E=this.statement.offset?"OFFSET "+this.statement.offset:"");let d=[];try{let S=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${_} ${u} ${l} ${E}`,R=this._convertColumnsToIndexes(S,n);d=await he.promise(R,t),t=null}catch(S){throw y.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),y.error(S),new Error("There was a problem processing the data.")}if(d&&d.length>0){for(let S=0,R=d.length;S<R;S++){let m=d[S];a.forEach(b=>{m[b.key]!==null&&m[b.key]!==void 0&&b.keys.add(m[b.key])})}a.forEach(S=>{let R=Object.keys(this.data[`${S.schema}_${S.table}`].__merged_data),m=jn.difference(R,[...S.keys].map(b=>b.toString()));for(let b=0,$=m.length;b<$;b++){let A=m[b];delete this.data[`${S.schema}_${S.table}`].__merged_data[A]}})}return{existing_attributes:c,joined_length:d?d.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new zo(this.columns);for(let{node:i}of n)if(i&&i.columnid){let a=this._findColumn(i);if(a){let c=a.table.as?a.table.as:a.table.tableid;(!t[c]||t[c].indexOf(a.attribute)<0)&&s.push(a)}}s=jn.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 y.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),y.error(i),new Error(St)}}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,a=[];for(let l in i)a.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:a,get_attributes:n.columns},_=await ks.getDataByHash(c),u=n.columns.length;for(let l=0,E=a.length;l<E;l++){let d=a[l],S=_.get(d);for(let R=0;R<u;R++){let m=n.columns[R],b=S[m]===void 0?null:S[m];this.data[s].__merged_data[d].push(b)}}}}catch(r){throw y.error("Error thrown from getDataByHash function in SQLSearch class method getData."),y.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(a=>{let c=a.aggregatorid?a.expression:a,_=a.aggregatorid?a.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===_}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();y.trace(`Final SQL: ${n}`),s=await he.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),y.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw y.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),y.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 y.error(OM.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),y.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((a,c)=>{let _=n[i],u=new RegExp(`${_}.\`${a}\``,"g"),l=`${_}.[${c}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((a,c)=>{let _=new RegExp(`\`${a}\``,"g"),u=`[${c}]`;s=s.replace(_,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let a=await ks.getDataByValue(i);for(let[c,_]of a)this.data[n].__merged_data[c]||(this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=_[s.attribute]}catch(a){throw y.error("There was an error when processing this SQL operation. Check your logs"),y.error(a),new Error(St)}}return Object.values(Object.values(this.data)[0].__merged_data)}};o(ea,"SQLSearch");_h.exports=ea});var es=f((mK,Eh)=>{"use strict";var CM=jf();Eh.exports={searchByConditions:wM,searchByHash:MM,searchByValue:DM,search:UM};var ru=zr(),lh=require("util"),bM=lh.callbackify(ru.searchByHash),LM=lh.callbackify(ru.searchByValue),yM=uh();async function wM(e){return ru.searchByConditions(e)}o(wM,"searchByConditions");function MM(e,t){try{bM(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}o(MM,"searchByHash");function DM(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),LM(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}o(DM,"searchByValue");function UM(e,t){try{let r=new CM(e);r.validate(),new yM(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}o(UM,"search")});var Xn=f((gK,hh)=>{"use strict";var Jn=require("crypto"),Sh="aes-256-cbc",PM=32,HM=16,su=64,fh=32,BM=su+fh,dh=new Map;hh.exports={encrypt:vM,decrypt:GM,createNatsTableStreamName:qM};function vM(e){let t=Jn.randomBytes(PM),r=Jn.randomBytes(HM),s=Jn.createCipheriv(Sh,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),a=r.toString("hex"),c=n.toString("hex");return i+a+c}o(vM,"encrypt");function GM(e){let t=e.substr(0,su),r=e.substr(su,fh),s=e.substr(BM,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),a=Jn.createDecipheriv(Sh,Buffer.from(t,"hex"),n),c=a.update(i);return c=Buffer.concat([c,a.final()]),c.toString()}o(GM,"decrypt");function qM(e,t){let r=`${e}.${t}`,s=dh.get(r);return s||(s=Jn.createHash("md5").update(`${e}.${t}`).digest("hex"),dh.set(r,s)),s}o(qM,"createNatsTableStreamName")});var iu=f((OK,Th)=>{"use strict";var FM=T(),NK=Sr();function nu(e,t){let r=Object.create(null);if(t.length===1&&FM.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}o(nu,"parseRow");function xM(e,t,r,s){let n=nu(r,e);s.push(n)}o(xM,"searchAll");function VM(e,t,r,s){let n=nu(r,e);s[t]=n}o(VM,"searchAllToMap");function kM(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(kM,"iterateDBI");function ts(e,t,r,s,n){let i=Object.create(null);i[n]=e;let a;s===n?a=e:(a=t,s!==void 0&&(i[s]=a)),r[0].push(a),r[1].push(i)}o(ts,"pushResults");function YM(e,t,r,s,n,i){t.toString().endsWith(e)&&ts(t,r,s,n,i)}o(YM,"endsWith");function $M(e,t,r,s,n,i){t.toString().includes(e)&&ts(t,r,s,n,i)}o($M,"contains");function KM(e,t,r,s,n,i){t>e&&ts(t,r,s,n,i)}o(KM,"greaterThanCompare");function WM(e,t,r,s,n,i){t>=e&&ts(t,r,s,n,i)}o(WM,"greaterThanEqualCompare");function QM(e,t,r,s,n,i){t<e&&ts(t,r,s,n,i)}o(QM,"lessThanCompare");function jM(e,t,r,s,n,i){t<=e&&ts(t,r,s,n,i)}o(jM,"lessThanEqualCompare");Th.exports={parseRow:nu,searchAll:xM,searchAllToMap:VM,iterateDBI:kM,endsWith:YM,contains:$M,greaterThanCompare:KM,greaterThanEqualCompare:WM,lessThanCompare:QM,lessThanEqualCompare:jM,pushResults:ts}});var ss=f((yK,Oh)=>{"use strict";var Ar=k(),CK=p(),Ke=Sr(),ta=de(),ee=et().LMDB_ERRORS_ENUM,bK=O(),JM=T(),ra=iu(),{parseRow:XM}=ra,LK=require("lmdb"),{OVERFLOW_MARKER:Rh,MAX_SEARCH_KEY_LENGTH:ZM}=ta;function mh(e,t,r,s=!1,n=void 0,i=void 0){return rs(e,t,r,(a,c)=>c.getRange({transaction:a,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}o(mh,"iterateFullIndex");function Zn(e,t,r,s,n,i=!1,a=void 0,c=void 0,_=!1,u=!1){return rs(e,t,r,(l,E,d,S)=>{let A={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:a,offset:c,inclusiveEnd:i===!0?!_:!u,exclusiveStart:i===!0?u:_};return S===r?(A.values=!1,E.getRange(A).map(B=>({value:B}))):E.getRange(A)})}o(Zn,"iterateRangeBetween");function rs(e,t,r,s){let n=e.database||e,i=Ar.openDBI(n,r);i[ta.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Ar.openDBI(n,t);let a;e.database?a=e:(a=e.useReadTransaction(),a.database=e);let c=s(a,i,n,t);return c.transaction=a,e.database||(c.onDone=()=>{a.done()}),c}o(rs,"setupTransaction");function Ah(e,t,r,s){let n;return function(i,a){if(typeof i=="string"&&i.endsWith(Rh)){if(!n)if(r)n=Ar.openDBI(e,r);else{let _=Ar.listDBIs(e);for(let u=0,l=_.length;u<l&&(n=Ar.openDBI(e,_[u]),!n[ta.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=n.get(a,{transaction:t,lazy:!0})[s]}return i}}o(Ah,"getOverflowCheck");function zM(e,t,r,s=!1,n=void 0,i=void 0){if(Ke.validateEnv(e),t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);return rs(e,t,t,(a,c,_)=>(sa(r),r=zn(_,r),c.getRange({transaction:a,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(u=>XM(u.value,r))))}o(zM,"searchAll");function eD(e,t,r,s=!1,n=void 0,i=void 0){if(Ke.validateEnv(e),t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);sa(r),r=zn(e.database||e,r);let a=new Map;for(let{key:c,value:_}of mh(e,t,t,s,n,i))a.set(c,ra.parseRow(_,r));return a}o(eD,"searchAllToMap");function tD(e,t,r=!1,s=void 0,n=void 0){if(Ke.validateEnv(e),t===void 0)throw new Error(ee.ATTRIBUTE_REQUIRED);let i=Object.create(null),a=mh(e,void 0,t,r,s,n),c=a.transaction,_=Ah(c.database,c,void 0,t);for(let{key:u,value:l}of a){let E=_(u,l);i[E]===void 0&&(i[E]=[]),i[E].push(l)}return i}o(tD,"iterateDBI");function rD(e,t){if(Ke.validateEnv(e),t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);return Ar.statDBI(e,t).entryCount}o(rD,"countAll");function sD(e,t,r,s,n=!1,i=void 0,a=void 0){return gr(e,r,s),rs(e,t,r,(c,_,u,l)=>(s=Ke.convertKeyValueToWrite(s),l===r?_.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:_.getValues(s,{transaction:c,reverse:n,limit:i,offset:a}).map(E=>({key:s,value:E}))))}o(sD,"equals");function nD(e,t,r){return gr(e,t,r),Ar.openDBI(e,t).getValuesCount(r)}o(nD,"count");function iD(e,t,r,s,n=!1,i=void 0,a=void 0){return gr(e,r,s),rs(e,null,r,(c,_)=>{s=Ke.convertKeyValueToWrite(s);let u=!0;typeof s=="number"&&(u=!1);let l;if(n===!0){let E;for(let d of _.getKeys({transaction:c,start:s}))if(!d.startsWith(s)){E=d;break}return E!==void 0&&(Number.isInteger(a)?a++:i++),l=_.getRange({transaction:c,start:E,end:void 0,reverse:n,limit:i,offset:a}).map(d=>{let{key:S}=d;if(S!==E){if(S.toString().startsWith(s))return d;if(u===!0)return l.DONE}}),l.filter(d=>d)}else return l=_.getRange({transaction:c,start:s,reverse:n,limit:i,offset:a}).map(E=>{if(E.key.toString().startsWith(s))return E;if(u===!0)return l.DONE}),u?l:l.filter(E=>E)})}o(iD,"startsWith");function oD(e,t,r,s,n=!1,i=void 0,a=void 0){return gh(e,t,r,s,n,i,a,!0)}o(oD,"endsWith");function gh(e,t,r,s,n=!1,i=void 0,a=void 0,c=!1){return gr(e,r,s),rs(e,null,r,(_,u,l,E)=>{let d=Ah(l,_,E,r);return a=Number.isInteger(a)?a:0,u.getKeys({transaction:_,end:n?!1:void 0,reverse:n}).flatMap(S=>{let R=S.toString();return R.endsWith(Rh)?u.getValues(S,{transaction:_}).map(m=>{let b=d(S,m);if(c?b.endsWith(s):b.includes(s))return{key:b,value:m}}).filter(m=>m):(c?R.endsWith(s):R.includes(s))?u[ta.DBI_DEFINITION_NAME].is_hash_attribute?{key:S,value:S}:u.getValues(S,{transaction:_}).map(m=>({key:S,value:m})):[]}).slice(a,i===void 0?void 0:i+(a||0))})}o(gh,"contains");function aD(e,t,r,s,n=!1,i=void 0,a=void 0){gr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),Zn(e,t,r,s,_,n,i,a,!0,!1)}o(aD,"greaterThan");function cD(e,t,r,s,n=!1,i=void 0,a=void 0){gr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),Zn(e,t,r,s,_,n,i,a,!1,!1)}o(cD,"greaterThanEqual");function _D(e,t,r,s,n=!1,i=void 0,a=void 0){gr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Zn(e,t,r,_,s,n,i,a,!1,!0)}o(_D,"lessThan");function uD(e,t,r,s,n=!1,i=void 0,a=void 0){gr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Zn(e,t,r,_,s,n,i,a,!1,!1)}o(uD,"lessThanEqual");function lD(e,t,r,s,n,i=!1,a=void 0,c=void 0){if(Ke.validateEnv(e),r===void 0)throw new Error(ee.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ee.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ee.END_VALUE_REQUIRED);if(s=Ke.convertKeyValueToWrite(s),n=Ke.convertKeyValueToWrite(n),s>n)throw new Error(ee.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Zn(e,t,r,s,n,i,a,c)}o(lD,"between");function ED(e,t,r,s){Ke.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);if(sa(r),r=zn(n,r),s===void 0)throw new Error(ee.ID_REQUIRED);let a=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(a=ra.parseRow(c,r)),a}o(ED,"searchByHash");function dD(e,t,r){Ke.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ee.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}o(dD,"checkHashExists");function SD(e,t,r,s,n=[]){return Nh(e,t,r,s,n),ph(e,t,r,s,n).map(i=>i[1])}o(SD,"batchSearchByHash");function fD(e,t,r,s,n=[]){Nh(e,t,r,s,n);let i=new Map;for(let[a,c]of ph(e,t,r,s,n))i.set(a,c);return i}o(fD,"batchSearchByHashToMap");function ph(e,t,r,s,n=[]){return rs(e,t,t,(i,a,c)=>{r=zn(c,r);let _=r.length<3;return s.map(u=>{let l=c.dbis[t].get(u,{transaction:i,lazy:_});if(l)return[u,ra.parseRow(l,r)];n.push(u)}).filter(u=>u)})}o(ph,"batchHashSearch");function Nh(e,t,r,s,n){if(Ke.validateEnv(e),t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);if(sa(r),s==null)throw new Error(ee.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ee.IDS_MUST_BE_ITERABLE)}o(Nh,"initializeBatchSearchByHash");function sa(e){if(!Array.isArray(e))throw e===void 0?new Error(ee.FETCH_ATTRIBUTES_REQUIRED):new Error(ee.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(sa,"validateFetchAttributes");function gr(e,t,r){if(Ke.validateEnv(e),t===void 0)throw new Error(ee.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ee.SEARCH_VALUE_REQUIRED);if(r?.length>ZM)throw new Error(ee.SEARCH_VALUE_TOO_LARGE)}o(gr,"validateComparisonFunctions");function zn(e,t){return t.length===1&&JM.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Ar.listDBIs(e)),t}o(zn,"setGetWholeRowAttributes");Oh.exports={searchAll:zM,searchAllToMap:eD,count:nD,countAll:rD,equals:sD,startsWith:iD,endsWith:oD,contains:gh,searchByHash:ED,setGetWholeRowAttributes:zn,batchSearchByHash:SD,batchSearchByHashToMap:fD,checkHashExists:dD,iterateDBI:tD,greaterThan:aD,greaterThanEqual:cD,lessThan:_D,lessThanEqual:uD,between:lD}});var ti=f((MK,Dh)=>{"use strict";var Ch=es(),pr=p(),bh=U_(),hD=require("lodash"),TD=Xn(),Lh=O(),{promisify:yh}=require("util"),Q=T(),{handleHDBError:na,hdb_errors:RD}=J(),{HDB_ERROR_MSGS:ia,HTTP_STATUS_CODES:wh}=RD,mD=H();mD.initSync();var Ih=k(),AD=ss(),{getSchemaPath:gD}=K(),ei=yh(Ch.searchByValue),pD=yh(Ch.searchByHash),Ys="name",Mh="hash_attribute",ou="schema",ND="schema_table",OD="attribute";Dh.exports={describeAll:ID,describeTable:oa,describeSchema:bD};async function ID(e){try{let t=Lh.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:Ys,search_value:Q.WILDCARD_SEARCH_VALUE,get_attributes:[Ys]},i=await ei(n),a={},c={};for(let d of i)a[d.name]=!0,!t&&!s&&(c[d.name]=r[d.name].describe);let _={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:Q.ID_ATTRIBUTE_STRING,search_value:Q.WILDCARD_SEARCH_VALUE,get_attributes:[Mh,Q.ID_ATTRIBUTE_STRING,Ys,ou]},u=await ei(_),l=[];for(let d of u)try{let S;if(t||s)S=await oa({schema:d.schema,table:d.name});else if(r&&r[d.schema].describe&&r[d.schema].tables[d.name].describe){let R=r[d.schema].tables[d.name].attribute_permissions;S=await oa({schema:d.schema,table:d.name},R)}S&&l.push(S)}catch(S){pr.error(S)}let E={};for(let d in l)t||s?(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],a[l[d].schema]&&delete a[l[d].schema]):c[l[d].schema]&&(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],a[l[d].schema]&&delete a[l[d].schema]);for(let d in a)t||s?E[d]={}:c[d]&&(E[d]={});return E}catch(t){return pr.error("Got an error in describeAll"),pr.error(t),na(new Error,ia.DESCRIBE_ALL_ERR)}}o(ID,"describeAll");async function oa(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={},a=bh.describe_table(e);if(a)throw a;if(r===Q.SYSTEM_SCHEMA_NAME)return global.hdb_schema[Q.SYSTEM_SCHEMA_NAME][s];let c={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Ys,search_value:s,hash_values:[],get_attributes:[Q.WILDCARD_SEARCH_VALUE]},_=Array.from(await ei(c));if(!_||_.length===0)throw na(new Error,ia.TABLE_NOT_FOUND(e.schema,e.table),wh.NOT_FOUND);for await(let u of _)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw na(new Error,ia.INVALID_TABLE_ERR(i));let l={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:ND,search_value:r+"."+s,get_attributes:[OD]},E=Array.from(await ei(l));E=hD.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=CD(n)),i.attributes=E,i.clustering_stream_name=TD.createNatsTableStreamName(u.schema,u.name);try{let d=gD(i.schema,i.name),S=await Ih.openEnvironment(d,i.name),R=Ih.statDBI(S,i.hash_attribute);i.record_count=R.entryCount;for(let{key:m}of AD.lessThan(S,i.hash_attribute,Q.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,1/0,!0,1,0))i.last_updated_record=m}catch(d){pr.warn(`unable to stat table dbi due to ${d}`)}}catch(l){pr.error(`There was an error getting attributes for table '${u.name}'`),pr.error(l)}return i}o(oa,"descTable");function CD(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}o(CD,"getAttrsByPerms");async function bD(e){let t=bh.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:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:ou,search_value:s,hash_values:[],get_attributes:[Mh,Q.ID_ATTRIBUTE_STRING,Ys,ou]},i=Array.from(await ei(n));if(i&&i.length<1){let a={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[Ys]},c=Array.from(await pD(a));if(c&&c.length<1)throw na(new Error,ia.SCHEMA_NOT_FOUND(e.schema),wh.NOT_FOUND);return{}}else{let a={};return await Promise.all(i.map(async c=>{try{let _;if(r&&r.tables[c.name]&&(_=r.tables[c.name]),Lh.isEmpty(_)||_.describe){let u=await oa({schema:e.schema,table:c.name},_?_.attribute_permissions:null);u&&(a[u.name]=u)}}catch(_){pr.error(`Error describing schema table '${e.schema}.${c}'`),pr.error(_)}})),a}}o(bD,"describeSchema")});var ns=f((UK,vh)=>{var $s=jt(),{callbackify:Hh,promisify:LD}=require("util");vh.exports={setSchemaDataToGlobal:Uh,getTableSchema:MD,getSystemSchema:UD,setSchemaDataToGlobalAsync:LD(Uh)};var Bh=ti(),yD=Hh(Bh.describeAll),wD=Hh(Bh.describeTable);function Uh(e){yD(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=$s),global.hdb_schema=r,e(null,null)})}o(Uh,"setSchemaDataToGlobal");function Ph(e,t){return e==="system"?$s[t]:global.hdb_schema[e][t]}o(Ph,"returnSchema");function MD(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?DD(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,Ph(e,t))}):r(null,Ph(e,t))}o(MD,"getTableSchema");function DD(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=$s:global.hdb_schema={system:$s},r();return}wD(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:$s}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}o(DD,"setTableDataToGlobal");function UD(){return $s}o(UD,"getSystemSchema")});var aa=f((HK,xh)=>{"use strict";var is=p(),We=T(),PD=Bf(),Gh=ns(),HD=ti(),BD=Nr(),{validateEvent:Fh}=os(),ri=zr(),vD=require("process"),GD={[We.ITC_EVENT_TYPES.SCHEMA]:qD,[We.ITC_EVENT_TYPES.USER]:xD};async function qD(e){let t=Fh(e);if(t){is.error(t);return}is.trace("ITC schemaHandler received schema event:",e),await PD(e.message),await FD(e.message)}o(qD,"schemaHandler");async function FD(e){try{if(ri.resetReadTxn(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),ri.resetReadTxn(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),ri.resetReadTxn(We.SYSTEM_SCHEMA_NAME,We.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 HD.describeTable({schema:e.schema,table:e.table});break;default:Gh.setSchemaDataToGlobal(qh);break}else Gh.setSchemaDataToGlobal(qh)}catch(t){is.error(t)}}o(FD,"syncSchemaMetadata");function qh(e){e&&is.error(e)}o(qh,"handleErrorCallback");async function xD(e){try{ri.resetReadTxn(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),ri.resetReadTxn(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME);let t=Fh(e);if(t){is.error(t);return}is.trace(`ITC userHandler ${We.HDB_ITC_CLIENT_PREFIX}${vD.pid} received user event:`,e),await BD.setUsersToGlobal()}catch(t){is.error(t)}}o(xD,"userHandler");xh.exports=GD});var os=f((FK,kh)=>{"use strict";var vK=p(),au=O(),VD=T(),{ITC_ERRORS:si}=et(),{parentPort:GK,threadId:kD,isMainThread:YD,workerData:qK}=require("worker_threads"),{onMessageFromWorkers:$D,broadcast:KD}=Xr();kh.exports={sendItcEvent:WD,validateEvent:Vh,SchemaEventMsg:QD,UserEventMsg:jD};var ca;$D(e=>{ca=ca||aa(),Vh(e),ca[e.type]&&ca[e.type](e)});function WD(e){!YD&&e.message&&(e.message.originator=kD),KD(e)}o(WD,"sendItcEvent");function Vh(e){if(typeof e!="object")return si.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||au.isEmpty(e.type))return si.MISSING_TYPE;if(!e.hasOwnProperty("message")||au.isEmpty(e.message))return si.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||au.isEmpty(e.message.originator))return si.MISSING_ORIGIN;if(VD.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return si.INVALID_EVENT(e.type)}o(Vh,"validateEvent");function QD(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}o(QD,"SchemaEventMsg");function jD(e){this.originator=e}o(jD,"UserEventMsg")});var ni=f((kK,Wh)=>{"use strict";var Yh=T(),VK=O(),_a=p(),$h=uf(),Ks,{sendItcEvent:Kh}=os();function JD(e){try{_a.trace("signalSchemaChange called with message:",e),Ks=Ks||aa();let t=new $h(Yh.ITC_EVENT_TYPES.SCHEMA,e);Ks.schema(t),Kh(t)}catch(t){_a.error(t)}}o(JD,"signalSchemaChange");function XD(e){try{_a.trace("signalUserChange called with message:",e),Ks=Ks||aa();let t=new $h(Yh.ITC_EVENT_TYPES.USER,e);Ks.user(t),Kh(t)}catch(t){_a.error(t)}}o(XD,"signalUserChange");Wh.exports={signalSchemaChange:JD,signalUserChange:XD}});var ua=f(($K,jh)=>{"use strict";var Qh=O(),ZD=T(),zD=p(),eU=Fo(),tU=qo(),rU=ni(),{SchemaEventMsg:sU}=os(),nU="already exists in";jh.exports=iU;async function iU(e,t,r){if(Qh.isEmptyOrZeroLength(r))return r;let s=[];Qh.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 oU(e,t.schema,t.name,i)})),n}o(iU,"lmdbCheckForNewAttributes");async function oU(e,t,r,s){let n=new tU(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await aU(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(nU))zD.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}o(oU,"createNewAttribute");async function aU(e){let t;return t=await eU(e),rU.signalSchemaChange(new sU(process.pid,ZD.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}o(aU,"createAttribute")});var Ws=f((WK,Jh)=>{"use strict";var la=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}};o(la,"LMDBTransactionObject");Jh.exports=la});var Zh=f((jK,Xh)=>{"use strict";var cU=Ws(),_U=T().OPERATIONS_ENUM,Ea=class extends cU{constructor(t,r,s,n,i=void 0){super(_U.INSERT,r,s,n,i),this.records=t}};o(Ea,"LMDBInsertTransactionObject");Xh.exports=Ea});var eT=f((XK,zh)=>{"use strict";var uU=Ws(),lU=T().OPERATIONS_ENUM,da=class extends uU{constructor(t,r,s,n,i,a=void 0){super(lU.UPDATE,s,n,i,a),this.records=t,this.original_records=r}};o(da,"LMDBUpdateTransactionObject");zh.exports=da});var rT=f((zK,tT)=>{"use strict";var EU=Ws(),dU=T().OPERATIONS_ENUM,Sa=class extends EU{constructor(t,r,s,n,i,a=void 0){super(dU.UPSERT,s,n,i,a),this.records=t,this.original_records=r}};o(Sa,"LMDBUpsertTransactionObject");tT.exports=Sa});var nT=f((tW,sT)=>{"use strict";var SU=Ws(),fU=T().OPERATIONS_ENUM,fa=class extends SU{constructor(t,r,s,n,i=void 0){super(fU.DELETE,s,n,t,i),this.original_records=r}};o(fa,"LMDBDeleteTransactionObject");sT.exports=fa});var ii=f((nW,cT)=>{"use strict";var sW=require("path"),iT=k(),hU=Zh(),TU=eT(),RU=rT(),mU=nT(),Qs=de(),oT=O(),{CONFIG_PARAMS:AU}=T(),aT=H();aT.initSync();var ha=T().OPERATIONS_ENUM,{getTransactionAuditStorePath:gU}=K();cT.exports=pU;async function pU(e,t){if(aT.get(AU.LOGGING_AUDITLOG)===!1)return;let r=gU(e.schema,e.table),s=await iT.openEnvironment(r,e.table,!0),n=NU(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){iT.initializeDBIs(s,Qs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Qs.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Qs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Qs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),oT.isEmpty(n.user_name)||s.dbis[Qs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let a=0;a<n.hash_values.length;a++)s.dbis[Qs.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[a],i)})}}o(pU,"writeTransaction");function NU(e,t){let r=oT.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===ha.INSERT)return new hU(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ha.UPDATE)return new TU(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ha.UPSERT)return new RU(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ha.DELETE)return new mU(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(NU,"createTransactionObject")});var cu=f((aW,_T)=>{"use strict";var OU=xo(),oW=ko(),oi=T(),IU=$o(),CU=jr().insertRecords,bU=k(),LU=p(),yU=ua(),{getSchemaPath:wU}=K(),MU=ii();_T.exports=DU;async function DU(e){try{let{schema_table:t,attributes:r}=OU(e);IU(e,r,t.hash_attribute),e.schema!==oi.SYSTEM_SCHEMA_NAME&&(r.includes(oi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(oi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(oi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(oi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await yU(e.hdb_auth_header,t,r),n=wU(e.schema,e.table),i=await bU.openEnvironment(n,e.table),a=await CU(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await MU(e,a)}catch(c){LU.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schema_table:t,new_attributes:s,txn_time:a.txn_time}}catch(t){throw t}}o(DU,"lmdbCreateRecords")});var ET=f((_W,lT)=>{"use strict";var uT=T(),UU=cu(),PU=ko(),HU=require("fs-extra"),{getSchemaPath:BU}=K();lT.exports=vU;async function vU(e){let t=[{name:e.schema,createddate:Date.now()}],r=new PU(uT.SYSTEM_SCHEMA_NAME,uT.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await UU(r),await HU.mkdirp(BU(e.schema))}o(vU,"lmdbCreateSchema")});var ST=f((lW,dT)=>{"use strict";var Ta=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};o(Ta,"DeleteRecordsResponseObject");dT.exports=Ta});var lu=f((hW,TT)=>{"use strict";var fT=k(),_u=Sr(),uu=et().LMDB_ERRORS_ENUM,GU=de(),hT=p(),dW=O(),qU=require("lmdb"),FU=ST(),xU=T(),{OVERFLOW_MARKER:SW,MAX_SEARCH_KEY_LENGTH:fW}=GU,VU=xU.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function kU(e,t,r,s){if(_u.validateEnv(e),t===void 0)throw new Error(uu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(uu.IDS_REQUIRED):new Error(uu.IDS_MUST_BE_ITERABLE);try{let n=fT.listDBIs(e);fT.initializeDBIs(e,t,n);let i=new FU,a,c=[],_=[];for(let d=0,S=r.length;d<S;d++)try{a=r[d];let R=e.dbis[t].get(a);if(!R||s&&R[VU]>s){i.skipped.push(a);continue}let m=e.dbis[t].ifVersion(a,qU.IF_EXISTS,()=>{e.dbis[t].remove(a);for(let b=0;b<n.length;b++){let $=n[b];if(!R.hasOwnProperty($)||$===t)continue;let A=e.dbis[$],B=R[$];if(B!=null)try{let Ee=_u.getIndexedValues(B);if(Ee)for(let ce=0,cr=Ee.length;ce<cr;ce++)A.remove(Ee[ce],a)}catch{hT.warn(`cannot delete from attribute: ${$}, ${B}:${a}`)}}});c.push(m),_.push(a),i.original_records.push(R)}catch(R){hT.warn(R),i.skipped.push(a)}let u=[],l=await Promise.all(c);for(let d=0,S=l.length;d<S;d++)l[d]===!0?i.deleted.push(_[d]):(i.skipped.push(_[d]),u.push(d));let E=0;for(let d=0;d<u.length;d++){let S=u[d];i.original_records.splice(S-E,1),E++}return i.txn_time=_u.getNextMonotonicTime(),i}catch(n){throw n}}o(kU,"deleteRecords");TT.exports={deleteRecords:kU}});var ai=f((RW,mT)=>{"use strict";var js=O(),YU=lu(),$U=k(),{getSchemaPath:KU}=K(),WU=ii(),QU=p();mT.exports=jU;async function jU(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(js.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(js.isEmptyOrZeroLength(e.hash_values)&&!js.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let _=e.records[c][s];js.isEmpty(_)||e.hash_values.push(_)}}if(js.isEmptyOrZeroLength(e.hash_values))return RT([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(js.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=KU(e.schema,e.table),i=await $U.openEnvironment(n,e.table),a=await YU.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await WU(e,a)}catch(c){QU.error(`unable to write transaction due to ${c.message}`)}return RT(a.deleted,a.skipped,a.txn_time)}catch(n){throw n}}o(jU,"lmdbDeleteRecords");function RT(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}}o(RT,"createDeleteResponse")});var ci=f((gW,NT)=>{var AT=require("lodash"),gT=Fe(),x=require("joi"),JU=O(),{hdb_schema_table:ft,checkValidTable:pT}=Gs(),{handleHDBError:XU,hdb_errors:ZU}=J(),{HTTP_STATUS_CODES:zU}=ZU,AW=x.object({schema:ft,table:ft,hash_values:x.array().min(0).items(x.alternatives(x.string(),x.number())).required(),get_attributes:x.array().min(1).items(ft).required()}),eP=x.object({schema:ft,table:ft,search_attribute:ft,search_value:x.any().required(),get_attributes:x.array().min(1).items(ft).required(),desc:x.bool(),limit:x.number().integer().min(1),offset:x.number().integer().min(0)}),tP=x.object({schema:ft,table:ft,operator:x.string().valid("and","or").default("and").lowercase(),offset:x.number().integer().min(0),limit:x.number().integer().min(1),get_attributes:x.array().min(1).items(ft).required(),conditions:x.array().min(1).items(x.object({search_attribute:ft,search_type:x.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:x.when("search_type",{switch:[{is:"equals",then:x.any()},{is:"between",then:x.array().items(x.alternatives([x.string(),x.number()])).length(2)}],otherwise:x.alternatives(x.string(),x.number())}).required()})).required()});NT.exports=function(e,t){let r=null;switch(t){case"value":r=gT.validateBySchema(e,eP);break;case"hashes":let i=function(a){n?n+=". "+a:n=a};var s=i;o(i,"addError");let n;i(pT("schema",e.schema)),i(pT("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(a=>typeof a=="string"||typeof a=="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(a=>typeof a=="string"||typeof a=="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=gT.validateBySchema(e,tP);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=JU.checkGlobalSchemaTable(e.schema,e.table);if(n)return XU(new Error,n,zU.NOT_FOUND);let a=global.hdb_schema[e.schema][e.table].attributes,c=[...e.get_attributes];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let u=0,l=e.conditions.length;u<l;u++){let E=e.conditions[u];c.push(E.search_attribute)}let _=AT.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!AT.some(a,l=>l===u||l.attribute===u||l.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var Eu=f((NW,OT)=>{"use strict";var rP=k(),sP=ci(),{getSchemaPath:nP}=K();OT.exports=iP;function iP(e){let t=sP(e,"hashes");if(t)throw t;let r=nP(e.schema,e.table);return rP.openEnvironment(r,e.table)}o(iP,"initialize")});var du=f((IW,IT)=>{"use strict";var oP=ss(),aP=Eu();IT.exports=cP;async function cP(e){let t=await aP(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return oP.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}o(cP,"lmdbGetDataByHash")});var _i=f((bW,CT)=>{"use strict";var Ra=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};o(Ra,"SearchByHashObject");CT.exports=Ra});var LT=f((wW,bT)=>{"use strict";var yW=_i(),_P=ss(),uP=Eu();bT.exports=lP;async function lP(e){let t=await uP(e),r=global.hdb_schema[e.schema][e.table];return _P.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}o(lP,"lmdbSearchByHash")});var ht=f((DW,yT)=>{"use strict";var ma=class{constructor(t,r,s,n,i,a,c,_=!1,u=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=a,this.end_value=c,this.reverse=_,this.limit=u,this.offset=l}};o(ma,"SearchObject");yT.exports=ma});var Aa=f((PW,HT)=>{"use strict";var Ae=ss(),EP=k(),dP=O(),I=de(),as=T(),SP=jt(),wT=et().LMDB_ERRORS_ENUM,{compareKeys:Js}=require("ordered-binary"),{getSchemaPath:fP}=K(),Zt=as.SEARCH_WILDCARDS;async function hP(e,t,r){let s;e.schema===as.SYSTEM_SCHEMA_NAME?s=SP[e.table]:s=global.hdb_schema[e.schema][e.table];let n=PT(e,s.hash_attribute,r,t);return DT(e,n,s.hash_attribute,r)}o(hP,"prepSearch");async function DT(e,t,r,s){let n=fP(e.schema,e.table),i=await EP.openEnvironment(n,e.table),a=UT(i,e,t,r),c=a.transaction||i;if([I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,I.SEARCH_TYPES.SEARCH_ALL,I.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(RP(e,r)===!1){let l=e.search_attribute;if(l===r)return s?MT(a,()=>!0):a.map(d=>({[r]:d.key}));let E=o(d=>({[r]:d.value,[l]:d.key}),"toObject");return s?MT(a,E):a.map(E)}let u=e.search_attribute===r?a.map(l=>l.key):a.map(l=>l.value);return s===!0?Ae.batchSearchByHashToMap(c,r,e.get_attributes,u):Ae.batchSearchByHash(c,r,e.get_attributes,u)}o(DT,"executeSearch");function UT(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:a,limit:c,offset:_}=t;switch(a=typeof a=="boolean"?a:!1,c=Number.isInteger(c)?c:void 0,_=Number.isInteger(_)?_:void 0,r){case I.SEARCH_TYPES.EQUALS:n=Ae.equals(e,i,t.search_attribute,t.search_value,a,c,_);break;case I.SEARCH_TYPES.CONTAINS:n=Ae.contains(e,i,t.search_attribute,t.search_value,a,c,_);break;case I.SEARCH_TYPES.ENDS_WITH:case I.SEARCH_TYPES._ENDS_WITH:n=Ae.endsWith(e,i,t.search_attribute,t.search_value,a,c,_);break;case I.SEARCH_TYPES.STARTS_WITH:case I.SEARCH_TYPES._STARTS_WITH:n=Ae.startsWith(e,i,t.search_attribute,t.search_value,a,c,_);break;case I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Ae.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Ae.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case I.SEARCH_TYPES.SEARCH_ALL:return Ae.searchAll(e,s,t.get_attributes,a,c,_);case I.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Ae.searchAllToMap(e,s,t.get_attributes,a,c,_);case I.SEARCH_TYPES.BETWEEN:n=Ae.between(e,i,t.search_attribute,t.search_value,t.end_value,a,c,_);break;case I.SEARCH_TYPES.GREATER_THAN:case I.SEARCH_TYPES._GREATER_THAN:n=Ae.greaterThan(e,i,t.search_attribute,t.search_value,a,c,_);break;case I.SEARCH_TYPES.GREATER_THAN_EQUAL:case I.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Ae.greaterThanEqual(e,i,t.search_attribute,t.search_value,a,c,_);break;case I.SEARCH_TYPES.LESS_THAN:case I.SEARCH_TYPES._LESS_THAN:n=Ae.lessThan(e,i,t.search_attribute,t.search_value,a,c,_);break;case I.SEARCH_TYPES.LESS_THAN_EQUAL:case I.SEARCH_TYPES._LESS_THAN_EQUAL:n=Ae.lessThanEqual(e,i,t.search_attribute,t.search_value,a,c,_);break;default:return Object.create(null)}return n}o(UT,"searchByType");function TP(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case I.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case I.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case I.SEARCH_TYPES.ENDS_WITH:case I.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case I.SEARCH_TYPES.STARTS_WITH:case I.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case I.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return Js(i,s[0])>=0&&Js(i,s[1])<=0};case I.SEARCH_TYPES.GREATER_THAN:case I.SEARCH_TYPES._GREATER_THAN:return n=>Js(n[r],s)>0;case I.SEARCH_TYPES.GREATER_THAN_EQUAL:case I.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>Js(n[r],s)>=0;case I.SEARCH_TYPES.LESS_THAN:case I.SEARCH_TYPES._LESS_THAN:return n=>Js(n[r],s)<0;case I.SEARCH_TYPES.LESS_THAN_EQUAL:case I.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>Js(n[r],s)<=0;default:return Object.create(null)}}o(TP,"filterByType");function MT(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}o(MT,"createMapFromIterable");function RP(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}o(RP,"checkToFetchMore");function PT(e,t,r,s){if(dP.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),a=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Zt.indexOf(n)>-1)return r===!0?I.SEARCH_TYPES.SEARCH_ALL_TO_MAP:I.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Zt[0])<0&&n.indexOf(Zt[1])<0)return c===!0?r===!0?I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:I.SEARCH_TYPES.EQUALS;if(Zt.indexOf(i)>=0&&Zt.indexOf(a)>=0)return e.search_value=e.search_value.slice(1,-1),I.SEARCH_TYPES.CONTAINS;if(Zt.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),I.SEARCH_TYPES.ENDS_WITH;if(Zt.indexOf(a)>=0)return e.search_value=e.search_value.slice(0,-1),I.SEARCH_TYPES.STARTS_WITH;if(n.includes(Zt[0])||n.includes(Zt[1]))return I.SEARCH_TYPES.EQUALS;throw new Error(wT.UNKNOWN_SEARCH_TYPE)}else switch(s){case as.VALUE_SEARCH_COMPARATORS.BETWEEN:return I.SEARCH_TYPES.BETWEEN;case as.VALUE_SEARCH_COMPARATORS.GREATER:return I.SEARCH_TYPES.GREATER_THAN;case as.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return I.SEARCH_TYPES.GREATER_THAN_EQUAL;case as.VALUE_SEARCH_COMPARATORS.LESS:return I.SEARCH_TYPES.LESS_THAN;case as.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return I.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(wT.UNKNOWN_SEARCH_TYPE)}}o(PT,"createSearchTypeFromSearchObject");HT.exports={executeSearch:DT,createSearchTypeFromSearchObject:PT,prepSearch:hP,searchByType:UT,filterByType:TP}});var vT=f((vW,BT)=>{"use strict";var BW=ht(),mP=ci(),AP=O(),gP=T(),pP=Aa();BT.exports=NP;function NP(e,t){if(!AP.isEmpty(t)&&gP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=mP(e,"value");if(s)throw s;let n=!0;return pP.prepSearch(e,t,n)}o(NP,"lmdbGetDataByValue")});var Xs=f((FW,GT)=>{"use strict";var qW=ht(),OP=ci(),IP=O(),CP=T(),bP=Aa();GT.exports=LP;async function LP(e,t){if(!IP.isEmpty(t)&&CP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=OP(e,"value");if(s)throw s;return bP.prepSearch(e,t,!1)}o(LP,"lmdbSearchByValue")});var FT=f((kW,qT)=>{"use strict";var VW=de(),ga=class{constructor(t,r,s,n,i=void 0,a=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=a,this.conditions=n,this.operator=c}};o(ga,"SearchByConditionsObject");var pa=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};o(pa,"SearchCondition");var Na=class{constructor(t,r){this.attribute=t,this.desc=r}};o(Na,"SortAttribute");qT.exports={SearchByConditionsObject:ga,SearchCondition:pa,SortAttribute:Na}});var $T=f((KW,YT)=>{"use strict";var $W=FT().SearchByConditionsObject,yP=ht(),wP=ci(),Su=ss(),Oa=de(),kT=Aa(),MP=iu(),DP=require("lodash"),{getSchemaPath:UP}=K(),xT=k(),{handleHDBError:PP,hdb_errors:HP}=J(),{HTTP_STATUS_CODES:BP}=HP,vP=1e8;YT.exports=GP;async function GP(e){let t=wP(e,"conditions");if(t)throw PP(t,t.message,BP.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=UP(e.schema,e.table),s=await xT.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)xT.openDBI(s,u.search_attribute);let i=DP.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let l=u.search_type;l===Oa.SEARCH_TYPES.EQUALS?u.estimated_count=Su.count(s,u.search_attribute,u.search_value):l===Oa.SEARCH_TYPES.CONTAINS||l===Oa.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=vP}return u.estimated_count}),a=s.useReadTransaction();a.database=s;let c=await VT(a,e,i[0],n.hash_attribute),_;if(!e.operator||e.operator.toLowerCase()==="and"){let u=s.dbis[n.hash_attribute],l=i.slice(1).map(kT.filterByType),E=l.length,d=Su.setGetWholeRowAttributes(s,e.get_attributes);_=c.map(S=>u.get(S,{transaction:a,lazy:!0})),E>0&&(_=_.filter(S=>{for(let R=0;R<E;R++)if(!l[R](S))return!1;return!0})),(e.offset||e.limit!==void 0)&&(_=_.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),_=_.map(S=>MP.parseRow(S,d))}else{for(let E=1;E<i.length;E++){let d=i[E],S=await VT(a,e,d,n.hash_attribute);c=c.concat(S)}let u=new Set,l=e.offset||0;c=c.filter(E=>u.has(E)?!1:(u.add(E),!0)).slice(l,e.limit&&e.limit+l),_=Su.batchSearchByHash(a,n.hash_attribute,e.get_attributes,c)}return _.onDone=()=>{a.done()},_}o(GP,"lmdbSearchByConditions");async function VT(e,t,r,s){let n=new yP(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Oa.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,kT.searchByType(e,n,i,s).map(a=>a.value)}o(VT,"executeConditionSearch")});var Ca=f((QW,KT)=>{"use strict";var qP=T().OPERATIONS_ENUM,Ia=class{constructor(t,r,s,n=void 0){this.operation=qP.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};o(Ia,"DeleteObject");KT.exports=Ia});var fu=f((JW,eR)=>{"use strict";var JT=ht(),XT=Ca(),ZT=Xs(),zT=ai(),we=T(),WT=O(),QT=k(),{getTransactionAuditStorePath:FP,getSchemaPath:xP}=K(),jT=p();eR.exports=VP;async function VP(e){try{if(WT.isEmpty(global.hdb_schema[e.schema])||WT.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await kP(e),await YP(e);let t=xP(e.schema,e.table);try{await QT.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")jT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=FP(e.schema,e.table);await QT.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")jT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(VP,"lmdbDropTable");async function kP(e){let t=new JT(we.SYSTEM_SCHEMA_NAME,we.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,we.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[we.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await ZT(t)),s=[];for(let i=0;i<r.length;i++){let a=r[i];s.push(a.id)}if(s.length===0)return;let n=new XT(we.SYSTEM_SCHEMA_NAME,we.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await zT(n)}o(kP,"deleteAttributesFromSystem");async function YP(e){let t=new JT(we.SYSTEM_SCHEMA_NAME,we.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,we.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[we.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,we.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,we.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await ZT(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let a=r[i];a.name===e.table&&a.schema===e.schema&&(s=a)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new XT(we.SYSTEM_SCHEMA_NAME,we.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await zT(n)}catch(i){throw i}}o(YP,"dropTableFromSystem")});var rR=f((ZW,tR)=>{"use strict";var $P=require("fs-extra"),KP=ht(),WP=_i(),QP=Ca(),jP=fu(),JP=ai(),XP=du(),ZP=Xs(),zt=T(),{getSchemaPath:zP}=K(),{handleHDBError:eH,hdb_errors:tH}=J(),{HDB_ERROR_MSGS:rH,HTTP_STATUS_CODES:sH}=tH;tR.exports=nH;async function nH(e){let t;try{t=await iH(e.schema);let r=new KP(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await ZP(r));for(let a=0;a<s.length;a++){let c={schema:t,table:s[a].name};try{await jP(c)}catch(_){if(_.message!=="invalid environment")throw _}}let n=new QP(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await JP(n);let i=zP(t);await $P.remove(i)}catch(r){throw r}}o(nH,"lmdbDropSchema");async function iH(e){let t=new WP(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await XP(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw eH(new Error,rH.SCHEMA_NOT_FOUND(e),sH.NOT_FOUND,void 0,void 0,!0);return s}o(iH,"validateDropSchema")});var La=f((e1,sR)=>{"use strict";var ba=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};o(ba,"CreateTableObject");sR.exports=ba});var Tu=f((s1,nR)=>{"use strict";var oH=require("fs-extra"),ya=k(),{getTransactionAuditStorePath:aH}=K(),hu=de(),r1=La();nR.exports=cH;async function cH(e){let t;try{let r=aH(e.schema,e.table);await oH.mkdirp(r),t=await ya.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{ya.createDBI(t,hu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),ya.createDBI(t,hu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),ya.createDBI(t,hu.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}o(cH,"createTransactionsAuditEnvironment")});var pu=f((i1,aR)=>{"use strict";var Ru=T(),iR=k(),_H=jr(),{getSystemSchemaPath:uH,getSchemaPath:lH}=K(),EH=jt(),dH=Fo(),mu=qo(),SH=p(),fH=Tu(),gu=EH.hdb_table,oR=[];for(let e=0;e<gu.attributes.length;e++)oR.push(gu.attributes[e].attribute);aR.exports=hH;async function hH(e,t){let r=lH(t.schema,t.table),s=new mu(t.schema,t.table,Ru.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new mu(t.schema,t.table,Ru.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new mu(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await iR.createEnvironment(r,t.table),e!==void 0){let a=await iR.openEnvironment(uH(),Ru.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await _H.insertRecords(a,gu.hash_attribute,oR,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Au(s),await Au(n),await Au(i)}await fH(t)}catch(a){throw a}}o(hH,"lmdbCreateTable");async function Au(e){try{await dH(e)}catch(t){SH.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(Au,"createAttribute")});var _R=f((a1,cR)=>{"use strict";var TH=xo(),RH=$o(),mH=ua(),ui=T(),AH=jr().updateRecords,gH=k(),{getSchemaPath:pH}=K(),NH=ii(),OH=p();cR.exports=IH;async function IH(e){try{let{schema_table:t,attributes:r}=TH(e);RH(e,r,t.hash_attribute),e.schema!==ui.SYSTEM_SCHEMA_NAME&&(r.includes(ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await mH(e.hdb_auth_header,t,r),n=pH(e.schema,e.table),i=await gH.openEnvironment(n,e.table),a=await AH(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await NH(e,a)}catch(c){OH.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schema_table:t,new_attributes:s,txn_time:a.txn_time}}catch(t){throw t}}o(IH,"lmdbUpdateRecords")});var lR=f((_1,uR)=>{"use strict";var CH=T().OPERATIONS_ENUM,wa=class{constructor(t,r,s,n=void 0){this.operation=CH.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};o(wa,"UpsertObject");uR.exports=wa});var dR=f((E1,ER)=>{"use strict";var l1=lR(),bH=xo(),LH=$o(),yH=ua(),li=T(),wH=jr().upsertRecords,MH=k(),{getSchemaPath:DH}=K(),UH=ii(),PH=p(),{handleHDBError:HH,hdb_errors:BH}=J();ER.exports=vH;async function vH(e){let t;try{t=bH(e)}catch(_){throw HH(_,_.message,BH.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;LH(e,s,r.hash_attribute),e.schema!==li.SYSTEM_SCHEMA_NAME&&(s.includes(li.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(li.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(li.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(li.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await yH(e.hdb_auth_header,r,s),i=DH(e.schema,e.table),a=await MH.openEnvironment(i,e.table),c=await wH(a,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await UH(e,c)}catch(_){PH.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}o(vH,"lmdbUpsertRecords")});var mR=f((S1,RR)=>{"use strict";var GH=ht(),SR=O(),fR=p(),qH=Xs(),hR=T(),FH=lu().deleteRecords,xH=k(),{getSchemaPath:VH}=K(),{promisify:kH}=require("util"),YH=kH(setTimeout),TR=1e4,$H=10;RR.exports=KH;async function KH(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(SR.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 GH(e.schema,e.table,hR.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=Array.from(await qH(n,hR.VALUE_SEARCH_COMPARATORS.LESS))}catch(n){throw fR.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return SR.isEmptyOrZeroLength(s)?(fR.trace("No records found to delete"),{message:"No records found to delete"}):await WH(e,s,t)}o(KH,"lmdbDeleteRecordsBefore");async function WH(e,t,r){let s=VH(e.schema,e.table),n=await xH.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let a=0,c=t.length;a<c;a+=TR){let _=t.slice(a,a+TR),u=[];for(let l=0,E=_.length;l<E;l++)u.push(_[l][r]);try{let l=await FH(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(l.deleted),i.skipped_hashes=i.skipped_hashes.concat(l.skipped)}catch(l){throw l}await YH($H)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}o(WH,"chunkDeletes")});var gR=f((h1,AR)=>{"use strict";var Ma=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};o(Ma,"DeleteBeforeObject");AR.exports=Ma});var NR=f((R1,pR)=>{"use strict";var Da=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};o(Da,"DeleteAuditLogsBeforeResults");pR.exports=Da});var CR=f((g1,IR)=>{"use strict";var Nu=k(),{getTransactionAuditStorePath:QH}=K(),A1=gR(),Ei=de(),jH=O(),OR=NR(),JH=require("util").promisify,XH=JH(setTimeout),ZH=1e4,zH=100;IR.exports=eB;async function eB(e){let t=QH(e.schema,e.table),r=await Nu.openEnvironment(t,e.table,!0),s=Nu.listDBIs(r);Nu.initializeDBIs(r,Ei.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new OR;do n=await tB(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 XH(zH);while(n.transactions_deleted>0);return i}o(eB,"deleteAuditLogsBefore");async function tB(e,t){let r=new OR;try{let s=e.dbis[Ei.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:a}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=a[Ei.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];jH.isEmpty(c)||(n=e.dbis[Ei.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let _=0;_<a.hash_values.length;_++)n=e.dbis[Ei.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[_],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>ZH)break}return await n,r}catch(s){throw s}}o(tB,"deleteTransactions")});var LR=f((N1,bR)=>{"use strict";var Ua=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};o(Ua,"DropAttributeObject");bR.exports=Ua});var wR=f((C1,yR)=>{"use strict";var rB=ht(),sB=Ca(),I1=LR(),yt=T(),nB=O(),Ou=k(),iB=jt(),oB=Xs(),aB=ai(),{getSchemaPath:cB}=K();yR.exports=_B;async function _B(e,t=!0){let r;e.schema===yt.SYSTEM_SCHEMA_NAME?r=iB[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await lB(e),n=cB(e.schema,e.table),i=await Ou.openEnvironment(n,e.table);return t===!0&&await uB(e,i,r.hash_attribute),Ou.dropDBI(i,e.attribute),s}o(_B,"lmdbDropAttribute");async function uB(e,t,r){let s=Ou.openDBI(t,r),n,i=e.attribute;for(let{key:a,value:c,version:_}of s.getRange({start:!1,versions:!0})){let u={};for(let l in c)l!==i&&(u[l]=c[l]);n=t.dbis[r].put(a,u,_)}await n}o(uB,"removeAttributeFromAllObjects");async function lB(e){let t=new rB(yt.SYSTEM_SCHEMA_NAME,yt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await oB(t)).filter(a=>a[yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(nB.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(a=>a[yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new sB(yt.SYSTEM_SCHEMA_NAME,yt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return aB(i)}o(lB,"dropAttributeFromSystem")});var BR=f((y1,HR)=>{"use strict";var Iu=k(),Zs=de(),L1=Sr(),Cu=T(),MR=O(),{getTransactionAuditStorePath:EB}=K(),dB=ss(),Pa=Ws(),SB=p();HR.exports=fB;async function fB(e){let t=EB(e.schema,e.table),r=await Iu.openEnvironment(t,e.table,!0),s=Iu.listDBIs(r);Iu.initializeDBIs(r,Zs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Cu.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return DR(r,e.search_values);case Cu.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,TB(r,e.search_values,n);case Cu.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return hB(r,e.search_values);default:return DR(r)}}o(fB,"readAuditLog");function DR(e,t=[0,Date.now()]){MR.isEmpty(t[0])&&(t[0]=0),MR.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Zs.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 Pa,n))}o(DR,"searchTransactionsByTimestamp");function hB(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let a of e.dbis[Zs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(a);r.set(n,PR(e,i))}return Object.fromEntries(r)}o(hB,"searchTransactionsByUsername");function TB(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=dB.equals(e,Zs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Zs.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:E}of l){let d=Number(E);s.has(d)?s.get(d).push(u.toString()):s.set(d,[u.toString()])}}let n=Array.from(s.keys()),i=PR(e,n),a=new Map;for(let c=0;c<i.length;c++){let _=i[c],u=_.timestamp,l=s.get(u);UR(_,"records",r,l,a),UR(_,"original_records",r,l,a)}return Object.fromEntries(a)}o(TB,"searchTransactionsByHashValues");function UR(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let a=0;a<e[t].length;a++){let c=e[t][a],_=c[r].toString();if(s.indexOf(_)>=0)if(n.has(_)){let u=n.get(_),l=u[u.length-1];if(l.timestamp===i)l[t]=[c];else{let E=new Pa(e.operation,e.user_name,i,void 0);E[t]=[c],u.push(E)}}else{let u=new Pa(e.operation,e.user_name,i,void 0);u[t]=[c],n.set(_,[u])}}}o(UR,"loopRecords");function PR(e,t){let r=[];try{let s=e.dbis[Zs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let a=Object.assign(new Pa,i);r.push(a)}}catch(i){SB.warn(i)}return r}catch(s){throw s}}o(PR,"batchSearchTransactions")});var GR=f((M1,vR)=>{"use strict";var{getSchemaPath:RB}=K(),mB=k();vR.exports={writeTransaction:AB};async function AB(e,t,r){let s=RB(e,t);return(await mB.openEnvironment(s,t)).transaction(r)}o(AB,"writeTransaction")});var VR=f((U1,xR)=>{"use strict";var{getSchemaPath:qR}=K(),FR=k();xR.exports={flush:gB,resetReadTxn:pB};async function gB(e,t){return(await FR.openEnvironment(qR(e,t),t.toString())).flushed}o(gB,"flush");async function pB(e,t){try{(await FR.openEnvironment(qR(e,t),t.toString())).resetReadTxn()}catch{}}o(pB,"resetReadTxn")});var $R=f((H1,YR)=>{"use strict";var NB=p(),{handleHDBError:OB}=J(),IB=A_(),CB=Fo(),bB=cu(),LB=ET(),yB=ai(),wB=du(),MB=LT(),DB=vT(),UB=Xs(),PB=$T(),HB=rR(),BB=pu(),vB=_R(),GB=dR(),qB=mR(),FB=CR(),xB=fu(),VB=wR(),kB=BR(),YB=GR(),kR=VR(),Ha=class extends IB{async searchByConditions(t){return PB(t)}async getDataByHash(t){return await wB(t)}async searchByHash(t){return await MB(t)}async getDataByValue(t,r){return await DB(t,r)}async searchByValue(t){return await UB(t)}async createSchema(t){return await LB(t)}async dropSchema(t){return await HB(t)}async createTable(t,r){return await BB(t,r)}async dropTable(t){return await xB(t)}async createAttribute(t){return await CB(t)}async createRecords(t){return await bB(t)}async updateRecords(t){return await vB(t)}async upsertRecords(t){try{return await GB(t)}catch(r){throw OB(r,null,null,NB.ERR,r)}}async deleteRecords(t){return await yB(t)}async deleteRecordsBefore(t){return await qB(t)}async dropAttribute(t){return await VB(t)}async deleteAuditLogsBefore(t){return await FB(t)}async readAuditLog(t){return await kB(t)}writeTransaction(t,r,s){return YB.writeTransaction(t,r,s)}flush(t,r){return kR.flush(t,r)}resetReadTxn(t,r){return kR.resetReadTxn(t,r)}};o(Ha,"LMDBBridge");YR.exports=Ha});var zr=f((v1,WR)=>{"use strict";var $B=$R(),KB=A_(),WB=H();WB.initSync();var KR;function QB(){return KR instanceof KB?KR:new $B}o(QB,"getBridge");WR.exports=QB()});var _s=f((q1,JR)=>{"use strict";var va=m_(),it=O(),jB=require("util"),Ga=zr(),JB=ns(),bu=p(),{handleHDBError:Or,hdb_errors:XB}=J(),{HTTP_STATUS_CODES:cs}=XB,ZB=jB.promisify(JB.getTableSchema),zB="updated",QR="inserted",jR="upserted";JR.exports={insert:tv,update:rv,upsert:sv,validation:ev,flush:nv};async function ev(e){if(it.isEmpty(e))throw new Error("invalid update parameters defined.");if(it.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(it.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await ZB(e.schema,e.table),r=va(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={},a=!1;return e.operation==="update"&&(a=!0),e.records.forEach(c=>{if(a&&it.isEmptyOrZeroLength(c[s]))throw bu.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!it.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw bu.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!it.isEmpty(c[s])&&c[s]!==""&&n.has(it.autoCast(c[s]))&&(c.skip=!0),n.add(it.autoCast(c[s]));for(let _ in c)i[_]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}o(ev,"validation");async function tv(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=va(e);if(t)throw Or(new Error,t.message,cs.BAD_REQUEST);let r=it.checkSchemaTableExist(e.schema,e.table);if(r)throw Or(new Error,r,cs.BAD_REQUEST);let s=await Ga.createRecords(e);return Ba(QR,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}o(tv,"insertData");async function rv(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=va(e);if(t)throw Or(new Error,t.message,cs.BAD_REQUEST);let r=it.checkSchemaTableExist(e.schema,e.table);if(r)throw Or(new Error,r,cs.BAD_REQUEST);let s=await Ga.updateRecords(e);return it.isEmpty(s.existing_rows)?Ba(zB,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Ba(s.update_action,[],e,s.hashes,void 0,s.txn_time)}o(rv,"updateData");async function sv(e){if(e.operation!=="upsert")throw Or(new Error,"invalid operation, must be upsert",cs.INTERNAL_SERVER_ERROR);let t=va(e);if(t)throw Or(new Error,t.message,cs.BAD_REQUEST);let r=it.checkSchemaTableExist(e.schema,e.table);if(r)throw Or(new Error,r,cs.BAD_REQUEST);try{let s=await Ga.upsertRecords(e);return Ba(jR,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw Or(s,null,null,bu.ERR,n)}}o(sv,"upsertData");function Ba(e,t,r,s,n,i){let a={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===QR?(a.inserted_hashes=t,a.skipped_hashes=s,a):e===jR?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=s,a)}o(Ba,"returnObject");function nv(e){return Ga.flush(e.schema,e.table)}o(nv,"flush")});var em=f((x1,zR)=>{var iv=Fe(),Lu=require("joi"),{hdb_schema_table:XR}=Gs(),ZR={schema:XR,table:XR},ov={date:Lu.date().iso().required()},av={timestamp:Lu.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};zR.exports=function(e,t){let r=t==="timestamp"?{...ZR,...av}:{...ZR,...ov},s=Lu.object(r);return iv.validateBySchema(e,s)}});var nm=f((V1,sm)=>{var cv=Fe(),tm=require("joi"),{hdb_schema_table:rm}=Gs(),_v=tm.object({schema:rm,table:rm,hash_values:tm.array().required()});sm.exports=function(e){return cv.validateBySchema(e,_v)}});var yu=f((k1,im)=>{"use strict";var qa=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};o(qa,"InsertObject");var Fa=class{constructor(t,r,s,n,i,a){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=a}};o(Fa,"NoSQLSeachObject");var xa=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};o(xa,"DeleteResponseObject");im.exports={InsertObject:qa,NoSQLSeachObject:Fa,DeleteResponseObject:xa}});var Du=f(($1,um)=>{"use strict";var am=em(),uv=nm(),Va=O(),om=require("moment"),cm=p(),{promisify:lv,callbackify:Ev}=require("util"),us=T(),dv=ns(),wu=lv(dv.getTableSchema),Mu=zr(),{DeleteResponseObject:Sv}=yu(),{handleHDBError:Ir,hdb_errors:fv}=J(),{HDB_ERROR_MSGS:ka,HTTP_STATUS_CODES:Cr}=fv,hv="records successfully deleted",Tv=Ev(_m);um.exports={delete:Tv,deleteRecord:_m,deleteFilesBefore:Rv,deleteAuditLogsBefore:mv};async function Rv(e){let t=am(e,"date");if(t)throw Ir(t,t.message,Cr.BAD_REQUEST,void 0,void 0,!0);if(!om(e.date,om.ISO_8601).isValid())throw Ir(new Error,ka.INVALID_DATE,Cr.BAD_REQUEST,us.LOG_LEVELS.ERROR,ka.INVALID_DATE,!0);let s=Va.checkSchemaTableExist(e.schema,e.table);if(s)throw Ir(new Error,s,Cr.NOT_FOUND,us.LOG_LEVELS.ERROR,s,!0);let n=await Mu.deleteRecordsBefore(e);if(await wu(e.schema,e.table),cm.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}o(Rv,"deleteFilesBefore");async function mv(e){let t=am(e,"timestamp");if(t)throw Ir(t,t.message,Cr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Ir(new Error,ka.INVALID_VALUE("Timestamp"),Cr.BAD_REQUEST,us.LOG_LEVELS.ERROR,ka.INVALID_VALUE("Timestamp"),!0);let r=Va.checkSchemaTableExist(e.schema,e.table);if(r)throw Ir(new Error,r,Cr.NOT_FOUND,us.LOG_LEVELS.ERROR,r,!0);let s=await Mu.deleteAuditLogsBefore(e);return await wu(e.schema,e.table),cm.info(`Finished deleting audit logs before ${e.timestamp}`),s}o(mv,"deleteAuditLogsBefore");async function _m(e){let t=uv(e);if(t)throw Ir(t,t.message,Cr.BAD_REQUEST,void 0,void 0,!0);let r=Va.checkSchemaTableExist(e.schema,e.table);if(r)throw Ir(new Error,r,Cr.NOT_FOUND,us.LOG_LEVELS.ERROR,r,!0);try{await wu(e.schema,e.table);let s=await Mu.deleteRecords(e);return Va.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${hv}`),s}catch(s){if(s.message===us.SEARCH_NOT_FOUND_MESSAGE){let n=new Sv;return n.message=us.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}o(_m,"deleteRecord")});var Em=f((W1,lm)=>{var Uu=Fe(),ge={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 Av(e){return ge.password.presence=!0,ge.username.presence=!0,ge.role.presence=!0,ge.active.presence=!0,Uu.validateObject(e,ge)}o(Av,"addUserValidation");function gv(e){return ge.password.presence=!1,ge.username.presence=!0,ge.role.presence=!1,ge.active.presence=!1,Uu.validateObject(e,ge)}o(gv,"alterUserValidation");function pv(e){return ge.password.presence=!1,ge.username.presence=!0,ge.role.presence=!1,ge.active.presence=!1,Uu.validateObject(e,ge)}o(pv,"dropUserValidation");lm.exports={addUserValidation:Av,alterUserValidation:gv,dropUserValidation:pv}});var Nr=f((J1,bm)=>{"use strict";var Tm="username is required",Rm="nothing to update, must supply active, role or password to update",mm="password cannot be an empty string",Am="If role is specified, it cannot be empty.",gm="active must be true or false";bm.exports={addUser:wv,alterUser:Mv,dropUser:Uv,userInfo:Pv,listUsers:$a,listUsersExternal:Hv,setUsersToGlobal:di,findAndValidateUser:Gv,getClusterUser:qv,USERNAME_REQUIRED:Tm,ALTERUSER_NOTHING_TO_UPDATE:Rm,EMPTY_PASSWORD:mm,EMPTY_ROLE:Am,ACTIVE_BOOLEAN:gm};var pm=_s(),Nv=Du(),Hu=Wo(),Nm=Em(),Om=es(),Bu=ni(),Qe=O(),Im=require("validate.js"),w=p(),{promisify:vu}=require("util"),Gu=Xn(),dm=T(),Sm=ke(),Ov=Ve(),j1=H(),Iv=Vs(),Cv=jt(),{handleHDBError:wt,hdb_errors:bv}=J(),{HTTP_STATUS_CODES:Mt,AUTHENTICATION_ERROR_MSGS:Pu,HDB_ERROR_MSGS:zs}=bv,{UserEventMsg:qu}=os(),fm=require("lodash"),Cm={username:!0,active:!0,role:!0,password:!0},hm=new Map,Ya=vu(Om.searchByValue),Lv=vu(Om.searchByHash),yv=vu(Nv.delete);async function wv(e){let t=Im.cleanAttributes(e,Cm),r=Nm.addUserValidation(t);if(r)throw wt(new Error,r.message,Mt.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 Ya(s),n=n&&Array.from(n)}catch(_){throw w.error("There was an error searching for a role in add user"),w.error(_),_}if(!n||n.length<1)throw wt(new Error,zs.ROLE_NAME_NOT_FOUND(t.role),Mt.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw wt(new Error,zs.DUP_ROLES_FOUND(t.role),Mt.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Gu.encrypt(t.password)),t.password=Hu.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},a;try{a=await pm.insert(i)}catch(_){throw w.error("There was an error searching for a user."),w.error(_),_}w.debug(a);try{await di()}catch(_){throw w.error("Got an error setting users to global"),w.error(_),_}if(a.skipped_hashes.length===1)throw wt(new Error,zs.USER_ALREADY_EXISTS(t.username),Mt.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],Bu.signalUserChange(new qu(process.pid)),`${c.username} successfully added`}o(wv,"addUser");async function Mv(e){let t=Im.cleanAttributes(e,Cm);if(Qe.isEmptyOrZeroLength(t.username))throw new Error(Tm);if(Qe.isEmptyOrZeroLength(t.password)&&Qe.isEmptyOrZeroLength(t.role)&&Qe.isEmptyOrZeroLength(t.active))throw new Error(Rm);if(!Qe.isEmpty(t.password)&&Qe.isEmptyOrZeroLength(t.password.trim()))throw new Error(mm);if(!Qe.isEmpty(t.active)&&!Qe.isBoolean(t.active))throw new Error(gm);let r=Dv(t.username);if(!Qe.isEmpty(t.password)&&!Qe.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Gu.encrypt(t.password)),t.password=Hu.hash(t.password)),t.role==="")throw new Error(Am);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},a;try{a=Array.from(await Ya(i)||[])}catch(c){throw w.error("Got an error searching for a role."),w.error(c),c}if(!a||a.length===0){let c=zs.ALTER_USER_ROLE_NOT_FOUND(t.role);throw w.error(c),wt(new Error,c,Mt.NOT_FOUND,void 0,void 0,!0)}if(a.length>1){let c=zs.ALTER_USER_DUP_ROLES(t.role);throw w.error(c),wt(new Error,c,Mt.CONFLICT,void 0,void 0,!0)}t.role=a[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await pm.update(s)}catch(i){throw w.error("Error during update."),w.error(i),i}try{await di()}catch(i){throw w.error("Got an error setting users to global"),w.error(i),i}return Bu.signalUserChange(new qu(process.pid)),n}o(Mv,"alterUser");function Dv(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(Dv,"isClusterUser");async function Uv(e){try{let t=Nm.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Qe.isEmpty(global.hdb_users.get(e.username)))throw wt(new Error,zs.USER_NOT_EXIST(e.username),Mt.NOT_FOUND,void 0,void 0,!0);let s;try{s=await yv(r)}catch(n){throw w.error("Got an error deleting a user."),w.error(n),n}w.debug(s);try{await di()}catch(n){throw w.error("Got an error setting users to global."),w.error(n),n}return Bu.signalUserChange(new qu(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}o(Uv,"dropUser");async function Pv(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 Lv(r)}catch(n){throw w.error("Got an error searching for a role."),w.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw w.error(r),r}return t}o(Pv,"userInfo");async function Hv(){let e;try{e=await $a()}catch(t){throw w.error("Got an error listing users."),w.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}o(Hv,"listUsersExternal");async function $a(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Ya(e)}catch(a){throw w.error("Got an error searching for roles."),w.error(a),a}let r={};for(let a of t)r[a.id]=fm.cloneDeep(a);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 Ya(s)}catch(a){throw w.error("Got an error searching for users."),w.error(a),a}let i=new Map;for(let a of n)a=fm.cloneDeep(a),a.role=r[a.role],Bv(a.role),i.set(a.username,a);return(await Iv.getLicense()).enterprise?i:vv(Array.from(i.values()))}catch(e){throw w.error("got an error listing users"),w.error(e),Qe.errorizeMessage(e)}return null}o($a,"listUsers");function Bv(e){try{if(!e){w.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(Cv)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){w.error("Got an error trying to set system permissions."),w.error(t)}}o(Bv,"appendSystemTablesToRole");function vv(e){try{if(w.info("No enterprise license found. System is limited to 1 clustering role and 1 user role"),!e)return new Map;let t=Object.create(null),r=new Map;e.forEach((n,i)=>{n.role&&(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?(w.warn("No roles found with active users."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return w.error("error filtering users."),w.error(t),new Map}}o(vv,"nonEnterpriseFilter");async function di(){try{let e=await $a();global.hdb_users=e}catch(e){throw w.error(e),e}}o(di,"setUsersToGlobal");async function Gv(e,t,r=!0){global.hdb_users||await di();let s=global.hdb_users.get(e);if(!s)throw wt(new Error,Pu.GENERIC_AUTH_FAIL,Mt.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw wt(new Error,Pu.USER_INACTIVE,Mt.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(hm.get(t)===s.password)return n;if(Hu.validate(s.password,t))hm.set(t,s.password);else throw wt(new Error,Pu.GENERIC_AUTH_FAIL,Mt.UNAUTHORIZED,void 0,void 0,!0)}return n}o(Gv,"findAndValidateUser");async function qv(){let e=await $a(),t=Ov.getConfigFromFile(dm.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Qe.isEmpty(r)&&r?.role?.role===dm.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Gu.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Sm.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Sm.SERVER_SUFFIX.ADMIN,r}o(qv,"getClusterUser")});var ym=f((Z1,Lm)=>{"use strict";var Fv=zr();Lm.exports={writeTransaction:xv};function xv(e,t,r){return Fv.writeTransaction(e,t,r)}o(xv,"writeTransaction")});var Es=f((cQ,Wm)=>{"use strict";var le=H();le.initSync();var Vv=require("fs-extra"),kv=require("semver"),Ri=require("path"),{monotonicFactory:Yv}=require("ulidx"),Yu=Yv(),$v=require("util"),Mm=require("child_process"),Kv=$v.promisify(Mm.exec),Wv=Mm.spawn,v=ke(),V=T(),Ka=O(),br=p(),Wa=Xn(),Qv=ym(),Si=Ve(),{encode:Vu,decode:$u}=require("msgpackr"),{isEmpty:ls}=Ka,Dm=Nr(),Um=12e10,{connect:jv,StorageType:Pm,RetentionPolicy:Hm,AckPolicy:Ku,DeliverPolicy:mi,DiscardPolicy:Jv,NatsConnection:eQ,JetStreamManager:tQ,JetStreamClient:rQ,StringCodec:sQ,JSONCodec:Xv,createInbox:Wu,StreamSource:nQ,headers:Zv,toJsMsg:Bm,nuid:iQ,JetStreamOptions:oQ,ErrorCode:wm,nanos:aQ}=require("nats"),{PACKAGE_ROOT:zv}=T(),eG=Us(),vm=Xv(),tG="clustering",rG=eG.engines[v.NATS_SERVER_NAME],sG=Ri.join(zv,"dependencies"),ku=Ri.join(sG,`${process.platform}-${process.arch}`,v.NATS_BINARY_NAME),Fu,xu,fi,hi,Ti,Tt;Wm.exports={runCommand:Gm,checkNATSServerInstalled:nG,createConnection:Qu,getConnection:Qa,getJetStreamManager:Ai,getJetStream:qm,getNATSReferences:je,getServerList:oG,createLocalStream:ju,listStreams:Fm,deleteLocalStream:aG,getServerConfig:gi,listRemoteStreams:cG,viewStream:_G,viewStreamIterator:uG,publishToStream:lG,createWorkQueueStream:EG,addSourceToWorkStream:Vm,request:dG,removeSourceFromWorkStream:Ym,reloadNATS:Ju,reloadNATSHub:SG,reloadNATSLeaf:fG,extractServerName:km,requestErrorHandler:hG,updateWorkStream:TG,createLocalTableStream:$m,createTableStreams:RG,purgeTableStream:Km,purgeSchemaTableStreams:mG,getStreamInfo:AG,updateLocalStreams:pG,closeConnection:iG,getJsmServerName:pi,addNatsMsgHeader:xm};async function Gm(e,t=void 0){let{stdout:r,stderr:s}=await Kv(e,{cwd:t});if(s)throw new Error(s.replace(`
7
7
  `,""));return r.replace(`
8
- `,"")}o(mm,"runCommand");async function bv(){try{await lv.access(Uu)}catch{return!1}let e=await mm(`${Uu} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Ev.eq(t,Iv)}o(bv,"checkNATSServerInstalled");async function Gu(e,t,r,s=!0,n="127.0.0.1"){return Rv({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:he.get(k.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:he.get(k.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:he.get(k.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}o(Gu,"createConnection");async function Lv(){ht&&(await ht.drain(),ht=void 0)}o(Lv,"closeConnection");async function Va(){if(!ht){let e=await dm.getClusterUser();if(_s(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=he.get(k.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);ht=await Gu(t,e.username,e.decrypt_hash)}return ht}o(Va,"getConnection");async function Si(){if(ui)return ui;_s(ht)&&await Va();let{domain:e}=fi(k.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(_s(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ui=await ht.jetstreamManager({domain:e}),ui}o(Si,"getJetStreamManager");async function Am(){if(li)return li;_s(ht)&&await Va();let{domain:e}=fi(k.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(_s(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return li=ht.jetstream({domain:e}),li}o(Am,"getJetStream");async function Ke(){let e=ht||await Va(),t=ui||await Si(),r=li||await Am();return{connection:e,jsm:t,js:r}}o(Ke,"getNATSReferences");async function yv(e){let t=he.get(k.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await dm.getClusterUser(),n=await Gu(t,r,s),i=vu(),a=n.subscribe(i),_=[],c,u=(async()=>{for await(let l of a){let E=Rm.decode(l.data);E.response_time=Date.now()-c,_.push(E)}})();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 Fa.async_set_timeout(e),await a.drain(),await n.close(),await u,_}o(yv,"getServerList");async function qu(e,t){let{jsm:r}=await Ke(),s=he.get(k.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=he.get(k.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=he.get(k.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:fm.File,retention:hm.Limits,subjects:t,discard:mv.Old,duplicate_window:Sm,max_msgs:n,max_bytes:i,max_age:s})}o(qu,"createLocalStream");async function gm(){let{jsm:e}=await Ke(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}o(gm,"listStreams");async function wv(e){let{jsm:t}=await Ke();await t.streams.delete(e)}o(wv,"deleteLocalStream");async function Mv(e){let{connection:t}=await Ke(),r=[],s=vu(),n=t.subscribe(s),i=(async()=>{for await(let a of n)r.push(Rm.decode(a.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}o(Mv,"listRemoteStreams");async function Dv(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await Ke(),i=Pu(),a=[],_={ack_policy:Bu.None,durable_name:i,deliver_subject:i,deliver_policy:di.All};t&&(_.deliver_policy=di.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 l of u){let E=Tm(l),d=Hu(E.data),S={nats_timestamp:E.info.timestampNanos,nats_sequence:E.info.streamSequence,entry:d};E.headers&&(S.origin=E.headers.get(G.MSG_HEADERS.ORIGIN),S.nats_msg_id=E.headers.get(G.MSG_HEADERS.NATS_MSG_ID)),a.push(S),u.getPending()===1&&E.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),a}catch(c){if(await s.consumers.delete(e,i),c.code==="TIMEOUT")return a;throw c}}o(Dv,"viewStream");async function*Uv(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await Ke(),i=Pu(),a={ack_policy:Bu.None,durable_name:i,deliver_subject:i,deliver_policy:di.All};t&&(a.deliver_policy=di.StartTime,a.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,a);let _={timeout:2e3};r&&(_.max=r);let c=await n.subscribe(i,_);for await(let u of c){let l=Tm(u),E=Hu(l.data);E[0]||(E=[E]);for(let d of E){let S={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};l.headers&&(S.origin=l.headers.get(G.MSG_HEADERS.ORIGIN),S.nats_msg_id=l.headers.get(G.MSG_HEADERS.NATS_MSG_ID)),yield S}c.getPending()===1&&l.info.pending===0&&c.stop()}await s.consumers.delete(e,i)}catch(_){if(await s.consumers.delete(e,i),_.code==="TIMEOUT")return[];throw _}}o(Uv,"viewStreamIterator");async function Pv(e,t,r,s){Or.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s),r=pm(s,r);let{js:n}=await Ke(),i=await hi(),a=`${e}.${i}`;try{Or.trace(`publishToStream publishing to subject: ${a}, data:`,s),await n.publish(a,Du(s),{headers:r})}catch(_){if(_.code&&_.code.toString()==="503")Or.trace(`publishToStream creating stream: ${t}`),await qu(t,[a]),await n.publish(a,Du(s),{headers:r});else throw _}}o(Pv,"publishToStream");function pm(e,t){t===void 0&&(t=gv());let r=he.get(k.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(G.MSG_HEADERS.NATS_MSG_ID)){let s=Fa.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${Pu()}`;t.append(G.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(G.MSG_HEADERS.ORIGIN)||t.append(G.MSG_HEADERS.ORIGIN,r),t}o(pm,"addNatsMsgHeader");function fi(e){e=e.toLowerCase();let t=Ei.join(he.get(k.CONFIG_PARAMS.ROOTPATH),Ov);if(e===k.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return _s(Mu)&&(Mu={port:_i.getConfigFromFile(k.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:_i.getConfigFromFile(k.CONFIG_PARAMS.CLUSTERING_NODENAME)+G.SERVER_SUFFIX.HUB,config_file:G.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Ei.join(t,G.PID_FILES.HUB),hdb_nats_path:t}),Mu;if(e===k.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return _s(wu)&&(wu={port:_i.getConfigFromFile(k.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:_i.getConfigFromFile(k.CONFIG_PARAMS.CLUSTERING_NODENAME)+G.SERVER_SUFFIX.LEAF,config_file:G.NATS_CONFIG_FILES.LEAF_SERVER,domain:_i.getConfigFromFile(k.CONFIG_PARAMS.CLUSTERING_NODENAME)+G.SERVER_SUFFIX.LEAF,pid_file_path:Ei.join(t,G.PID_FILES.LEAF),hdb_nats_path:t}),wu;Or.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(fi,"getServerConfig");async function Hv(e){let{jsm:t}=await Ke(),r=await hi();try{await t.streams.add({name:e.stream_name,storage:fm.File,retention:hm.Workqueue,duplicate_window:Sm,subjects:[`${G.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:Bu.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:di.All,max_ack_pending:1e4,deliver_group:e.deliver_group});else throw s}}o(Hv,"createWorkQueueStream");async function Nm(e,t,r){let{jsm:s}=await Ke(),n=await s.streams.info(t),i=Om(s.prefix),a=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:_,table:c}=r,u=xa.createNatsTableStreamName(_,c),l=i===e,E,d,S=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let m=0,b=n.config.sources.length;m<b;m++)if(E=n.config.sources[m],d=m,l&&E.name===u||!l&&E.name===u&&E.external&&E.external.api===`$JS.${e}.API`){S=!0;break}if(S===!0){if(E.opt_start_time===a)return;n.config.sources.splice(d,1),await s.streams.update(t,n.config)}let R={name:u,opt_start_time:a,filter_subject:`${G.SUBJECT_PREFIXES.TXN}.>`};l||(R.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(R),await s.streams.update(t,n.config)}o(Nm,"addSourceToWorkStream");function Om(e){return e.split(".")[1]}o(Om,"extractServerName");async function Im(e,t,r){let{schema:s,table:n}=r,i=xa.createNatsTableStreamName(s,n),{jsm:a}=await Ke(),_=await a.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 a.streams.update(t,_.config)}o(Im,"removeSourceFromWorkStream");async function Bv(e,t,r=2e3,s=vu()){if(!Fa.isObject(t))throw new Error("data param must be an object");let n=Du(t),{connection:i}=await Ke(),a={timeout:r};s&&(a.reply=s,a.noMux=!0);let _=await i.request(e,n,a);return Hu(_.data)}o(Bv,"request");function Fu(e){return new Promise(async(t,r)=>{let s=hv(Uu,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",a=>{r(a)}),s.stdout.on("data",a=>{i+=a.toString()}),s.stderr.on("data",a=>{n+=a.toString()}),s.stderr.on("close",a=>{n&&r(n),t(i)})})}o(Fu,"reloadNATS");async function vv(){let{pid_file_path:e}=fi(k.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Fu(e)}o(vv,"reloadNATSHub");async function Gv(){let{pid_file_path:e}=fi(k.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Fu(e)}o(Gv,"reloadNATSLeaf");function qv(e,t,r){let s;switch(e.code){case lm.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case lm.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}o(qv,"requestErrorHandler");async function Fv(e,t){let r=t+G.SERVER_SUFFIX.LEAF;await Tv.writeTransaction(k.SYSTEM_SCHEMA_NAME,k.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await Nm(r,G.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await Im(r,G.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}o(Fv,"updateWorkStream");async function Cm(e,t){let r=xa.createNatsTableStreamName(e,t),s=await hi(),n=Yv(e,t,s);await qu(r,[n])}o(Cm,"createLocalTableStream");async function xv(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await Cm(s,n)}}o(xv,"createTableStreams");async function bm(e,t){if(he.get(k.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=xa.createNatsTableStreamName(e,t),{jsm:s}=await Ke();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Or.warn(r);else throw r}}o(bm,"purgeTableStream");async function Vv(e,t){if(he.get(k.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await bm(e,t[r])}o(Vv,"purgeSchemaTableStreams");async function kv(e){return(await Si()).streams.info(e)}o(kv,"getStreamInfo");function Yv(e,t,r){return`${G.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}o(Yv,"createSubjectName");async function hi(){if(ci)return ci;if(ci=(await Si())?.nc?.info?.server_name,ci===void 0)throw new Error("Unable to get jetstream manager server name");return ci}o(hi,"getJsmServerName");async function $v(){let e=await Si(),t=await hi(),r=await gm();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let a=Kv(s),_=i.split(".");if(!(_[_.length-1]===t&&!a)){if(n.name===G.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let u=`${G.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Or.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}else if(n.name===G.WORK_QUEUE_CONSUMER_NAMES.stream_name){let u=`${G.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Or.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u,await e.consumers.update(G.WORK_QUEUE_CONSUMER_NAMES.stream_name,G.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${G.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let u=i.split(".");u[u.length-1]=t;let l=u.join(".");Or.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}o($v,"updateLocalStreams");function Kv(e){let{config:t}=e,r=!1;if(t.name===G.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===G.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=he.get(k.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=he.get(k.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=he.get(k.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}o(Kv,"updateStreamLimits")});var Ja=f((E1,Mm)=>{"use strict";var Ti=require("path"),Wa=require("fs-extra"),Wv=Ud(),Qv=Bd(),jv=Gd(),Jv=Fd(),xu=ss(),js=O(),we=Fe(),Ka=T(),Ya=ct(),{CONFIG_PARAMS:se}=Ka,mi=p(),Qa=v(),ym=$n(),Vu=ka(),Ri="clustering",Xv=1e4,wm=5;Mm.exports={generateNatsConfig:Zv,removeNatsConfig:zv};async function Zv(e=!1,t=void 0){Qa.initSync();let r=Qa.get(se.ROOTPATH),s=Ti.join(r,Ri,Ya.PID_FILES.HUB),n=Ti.join(r,Ri,Ya.PID_FILES.LEAF),i=we.getConfigFromFile(se.CLUSTERING_LEAFSERVER_STREAMS_PATH),a=Ti.join(r,Ri,Ya.NATS_CONFIG_FILES.HUB_SERVER),_=Ti.join(r,Ri,Ya.NATS_CONFIG_FILES.LEAF_SERVER),c=we.getConfigFromFile(se.CLUSTERING_TLS_CERTIFICATE),u=we.getConfigFromFile(se.CLUSTERING_TLS_PRIVATEKEY),l=we.getConfigFromFile(se.CLUSTERING_TLS_CERT_AUTH),E=we.getConfigFromFile(se.CLUSTERING_TLS_INSECURE),d=we.getConfigFromFile(se.CLUSTERING_TLS_VERIFY),S=we.getConfigFromFile(se.CLUSTERING_NODENAME),R=we.getConfigFromFile(se.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await Vu.checkNATSServerInstalled()||ja("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await xu.listUsers(),b=we.getConfigFromFile(se.CLUSTERING_USER),$=await xu.getClusterUser();(js.isEmpty($)||$.active!==!0)&&ja(`Invalid cluster user '${b}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await $a(se.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await $a(se.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await $a(se.CLUSTERING_HUBSERVER_NETWORK_PORT),await $a(se.CLUSTERING_LEAFSERVER_NETWORK_PORT));let A=[],H=[];for(let[dn,Is]of m.entries())Is.role.role===Ka.ROLE_TYPES_ENUM.CLUSTER_USER&&Is.active&&(A.push(new Jv(Is.username,ym.decrypt(Is.hash))),H.push(new jv(Is.username,ym.decrypt(Is.hash))));let le=[],{hub_routes:ae}=we.getClusteringRoutes();if(!js.isEmptyOrZeroLength(ae))for(let dn of ae)le.push(`tls://${$.sys_name_encoded}:${$.uri_encoded_d_hash}@${dn.host}:${dn.port}`);let or=new Wv(we.getConfigFromFile(se.CLUSTERING_HUBSERVER_NETWORK_PORT),S,s,c,u,l,E,d,R,we.getConfigFromFile(se.CLUSTERING_HUBSERVER_CLUSTER_NAME),we.getConfigFromFile(se.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),le,A,H);l==null&&(delete or.tls.ca_file,delete or.leafnodes.tls.ca_file),t=js.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Ka.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Wa.writeJson(a,or),mi.trace(`Hub server config written to ${a}`));let En=`tls://${$.sys_name_encoded}:${$.uri_encoded_d_hash}@0.0.0.0:${R}`,ki=`tls://${$.uri_encoded_name}:${$.uri_encoded_d_hash}@0.0.0.0:${R}`,Gr=new Qv(we.getConfigFromFile(se.CLUSTERING_LEAFSERVER_NETWORK_PORT),S,n,i,[En],[ki],A,H,c,u,l,E);l==null&&delete Gr.tls.ca_file,(t===void 0||t===Ka.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Wa.writeJson(_,Gr),mi.trace(`Leaf server config written to ${_}`))}o(Zv,"generateNatsConfig");async function $a(e){let t=Qa.get(e);return js.isEmpty(t)&&ja(`port undefined for '${e}'`),await js.isPortTaken(t)&&ja(`'${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}o($a,"isPortAvailable");function ja(e){let t=`Error generating clustering config: ${e}`;mi.error(t),console.error(t),process.exit(1)}o(ja,"generateNatsConfigError");async function zv(e){let{port:t,config_file:r}=Vu.getServerConfig(e),{username:s,decrypt_hash:n}=await xu.getClusterUser(),i=0,a=500;for(;i<wm;){try{let u=await Vu.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){mi.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=wm)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 js.async_set_timeout(a*i)}let _="0".repeat(Xv),c=Ti.join(Qa.get(se.ROOTPATH),Ri,r);await Wa.writeFile(c,_),await Wa.remove(c),mi.notify(e,"started.")}o(zv,"removeNatsConfig")});var vm=f((S1,Bm)=>{"use strict";var We=v(),eG=vs(),P=T(),Ai=ct(),Xt=require("path"),{PACKAGE_ROOT:Xa}=T(),Dm=v(),Js="/dev/null",tG=Xt.join(Xa,"launchServiceScripts"),Um=Xt.join(Xa,"utility/scripts"),rG=Xt.join(Um,P.HDB_RESTART_SCRIPT),Pm=Xt.resolve(Xa,"dependencies",`${process.platform}-${process.arch}`,Ai.NATS_BINARY_NAME);function Hm(){let t=eG.licenseSearch().ram_allocation||P.RAM_ALLOCATION_ENUM.DEFAULT,r=P.MEM_SETTING_KEY+t;return{name:P.PROCESS_DESCRIPTORS.HDB,script:P.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:{[P.PROCESS_NAME_ENV_PROP]:P.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0},node_args:r,cwd:Xa}}o(Hm,"generateMainServerConfig");var sG=9930;function nG(){We.initSync(!0);let e=We.get(P.CONFIG_PARAMS.ROOTPATH),t=Xt.join(e,"clustering",Ai.NATS_CONFIG_FILES.HUB_SERVER),r=Xt.join(We.get(P.HDB_SETTINGS_NAMES.LOG_PATH_KEY),P.LOG_NAMES.HDB),s=Dm.get(P.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Ai.LOG_LEVEL_FLAGS[We.get(P.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:P.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==sG?"-"+s:""),script:Pm,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[P.PROCESS_NAME_ENV_PROP]:P.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return We.get(P.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Js,i.error_file=Js),i}o(nG,"generateNatsHubServerConfig");var iG=9940;function oG(){We.initSync(!0);let e=We.get(P.CONFIG_PARAMS.ROOTPATH),t=Xt.join(e,"clustering",Ai.NATS_CONFIG_FILES.LEAF_SERVER),r=Xt.join(We.get(P.HDB_SETTINGS_NAMES.LOG_PATH_KEY),P.LOG_NAMES.HDB),s=Dm.get(P.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Ai.LOG_LEVEL_FLAGS[We.get(P.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==iG?"-"+s:""),script:Pm,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[P.PROCESS_NAME_ENV_PROP]:P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return We.get(P.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Js,i.error_file=Js),i}o(oG,"generateNatsLeafServerConfig");function aG(){We.initSync();let e=Xt.join(We.get(P.CONFIG_PARAMS.LOGGING_ROOT),P.LOG_NAMES.HDB),t={name:P.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:P.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[P.PROCESS_NAME_ENV_PROP]:P.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:tG,autorestart:!1};return We.get(P.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Js,t.error_file=Js),t}o(aG,"generateClusteringUpgradeV4ServiceConfig");function _G(){return{...{name:P.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[P.PROCESS_NAME_ENV_PROP]:P.PROCESS_DESCRIPTORS.RESTART_HDB},instances:1,autorestart:!1,cwd:Um},script:rG}}o(_G,"generateRestart");function cG(){return{apps:[Hm()]}}o(cG,"generateAllServiceConfigs");Bm.exports={generateAllServiceConfigs:cG,generateMainServerConfig:Hm,generateRestart:_G,generateNatsHubServerConfig:nG,generateNatsLeafServerConfig:oG,generateClusteringUpgradeV4ServiceConfig:aG}});var qm=f((h1,Gm)=>{var uG=Ze(),lG={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Gm.exports=function(e){return uG.validateObject(e,lG)}});var ku=f((T1,Fm)=>{"use strict";var EG=T().OPERATIONS_ENUM,Za=class{constructor(t,r,s,n=void 0){this.operation=EG.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};o(Za,"UpdateObject");Fm.exports=Za});var Vm=f((m1,xm)=>{"use strict";var dG={OPERATION:"operation",REFRESH:"refresh"},za=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};o(za,"JWTTokens");var e_=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};o(e_,"JWTRSAKeys");xm.exports={JWTTokens:za,TOKEN_TYPE_ENUM:dG,JWTRSAKeys:e_}});var Wm=f((g1,Km)=>{"use strict";var pi=require("jsonwebtoken"),Yu=require("fs-extra"),$u=O(),nt=T(),{handleHDBError:Me,hdb_errors:SG}=X(),{HTTP_STATUS_CODES:De,AUTHENTICATION_ERROR_MSGS:Ue}=SG,gi=p(),km=xo(),Qu=ss(),fG=os().update,hG=ku(),TG=Zn(),{UserEventMsg:RG}=rs(),Ir=v();Ir.initSync();var Ku=require("path"),{JWTTokens:mG,JWTRSAKeys:AG,TOKEN_TYPE_ENUM:t_}=Vm(),gG=Ir.get(nt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Ir.get(nt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",pG=Ir.get(nt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Ir.get(nt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",r_="RS256",Wu;Km.exports={createTokens:NG,validateOperationToken:IG,refreshOperationToken:OG,validateRefreshToken:$m};async function NG(e){if($u.isEmpty(e)||typeof e!="object")throw Me(new Error,Ue.INVALID_AUTH_OBJECT,De.BAD_REQUEST,void 0,void 0,!0);if($u.isEmpty(e.username))throw Me(new Error,Ue.USERNAME_REQUIRED,De.BAD_REQUEST,void 0,void 0,!0);if($u.isEmpty(e.password))throw Me(new Error,Ue.PASSWORD_REQUIRED,De.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Qu.findAndValidateUser(e.username,e.password),!t)throw Me(new Error,Ue.INVALID_CREDENTIALS,De.UNAUTHORIZED,void 0,void 0,!0)}catch(d){throw gi.error(d),Me(new Error,Ue.INVALID_CREDENTIALS,De.UNAUTHORIZED,void 0,void 0,!0)}let r=await s_(),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},a=await Ym(i,r.private_key,r.passphrase),_=await pi.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:pG,algorithm:r_,subject:t_.REFRESH}),c=km.hash(_),u=new hG(nt.SYSTEM_SCHEMA_NAME,nt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:c}]),l,E;try{l=await fG(u)}catch(d){gi.error(d),E=d}if(E!==void 0||l.skipped_hashes.length>0)throw Me(new Error,Ue.REFRESH_TOKEN_SAVE_FAILED,De.INTERNAL_SERVER_ERROR);return TG.signalUserChange(new RG(process.pid)),new mG(a,_)}o(NG,"createTokens");async function Ym(e,t,r){return await pi.sign(e,{key:t,passphrase:r},{expiresIn:gG,algorithm:r_,subject:t_.OPERATION})}o(Ym,"signOperationToken");async function s_(){if(Wu===void 0)try{let e=Ku.join(Ir.getHdbBasePath(),nt.LICENSE_KEY_DIR_NAME,nt.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Ku.join(Ir.getHdbBasePath(),nt.LICENSE_KEY_DIR_NAME,nt.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Ku.join(Ir.getHdbBasePath(),nt.LICENSE_KEY_DIR_NAME,nt.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Yu.readFile(e)).toString(),n=(await Yu.readFile(t)).toString(),i=(await Yu.readFile(r)).toString();Wu=new AG(i,n,s)}catch(e){throw gi.error(e),Me(new Error,Ue.NO_ENCRYPTION_KEYS,De.INTERNAL_SERVER_ERROR)}return Wu}o(s_,"getJWTRSAKeys");async function OG(e){if(!e)throw Me(new Error,Ue.INVALID_BODY,De.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Me(new Error,Ue.REFRESH_TOKEN_REQUIRED,De.BAD_REQUEST,void 0,void 0,!0);await $m(e.refresh_token);let t=await s_(),r=await pi.decode(e.refresh_token);return{operation_token:await Ym({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}o(OG,"refreshOperationToken");async function IG(e){try{let t=await s_(),r=await pi.verify(e,t.public_key,{algorithms:r_,subject:t_.OPERATION});return await Qu.findAndValidateUser(r.username,void 0,!1)}catch(t){throw gi.warn(t),t.name&&t.name==="TokenExpiredError"?Me(new Error,Ue.TOKEN_EXPIRED,De.FORBIDDEN):Me(new Error,Ue.INVALID_TOKEN,De.UNAUTHORIZED)}}o(IG,"validateOperationToken");async function $m(e){let t;try{let r=await s_(),s=await pi.verify(e,r.public_key,{algorithms:r_,subject:t_.REFRESH});t=await Qu.findAndValidateUser(s.username,void 0,!1)}catch(r){throw gi.warn(r),r.name&&r.name==="TokenExpiredError"?Me(new Error,Ue.TOKEN_EXPIRED,De.FORBIDDEN):Me(new Error,Ue.INVALID_TOKEN,De.UNAUTHORIZED)}if(!km.validate(t.refresh_token,e))throw Me(new Error,Ue.INVALID_TOKEN,De.UNAUTHORIZED);return t}o($m,"validateRefreshToken")});var Xm=f((O1,Jm)=>{"use strict";var CG=qm(),Xs=require("passport"),bG=require("passport-local").Strategy,LG=require("passport-http").BasicStrategy,yG=require("util"),wG=ss(),jm=yG.callbackify(wG.findAndValidateUser),N1=Xe(),MG=T(),Qm=Wm();Xs.use(new bG(function(e,t,r){jm(e,t,r)}));Xs.use(new LG(function(e,t,r){jm(e,t,r)}));Xs.serializeUser(function(e,t){t(null,e)});Xs.deserializeUser(function(e,t){t(null,e)});function DG(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let a=e.headers.authorization.split(" ");s=a[0],n=a[1]}function i(a,_){return a?r(a):_?r(null,_):r("User not found")}switch(o(i,"handleResponse"),s){case"Basic":Xs.authenticate("basic",{session:!1},(a,_)=>{i(a,_)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===MG.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Qm.validateRefreshToken(n).then(a=>{e.body.refresh_token=n,r(null,a)}).catch(a=>{r(a)}):Qm.validateOperationToken(n).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:Xs.authenticate("local",{session:!1},function(a,_){i(a,_)})(e,t,r);break}}o(DG,"authorize");function UG(e,t){let r=CG(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 a=i[e.schema].tables[e.table].attribute_permissions;for(let _ in a)e.attributes.indexOf(a[_].attribute_name)>-1&&!a[_][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${a[_].attribute_name} `))}return t(null,s)}o(UG,"checkPermissions");Jm.exports={authorize:DG,checkPermissions:UG}});var zm=f((C1,Zm)=>{"use strict";var n_=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};o(n_,"Node");var i_=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};o(i_,"NodeSubscription");Zm.exports={Node:n_,NodeSubscription:i_}});var tA=f((L1,eA)=>{"use strict";var PG=T().OPERATIONS_ENUM,o_=class{constructor(t,r,s,n=void 0){this.operation=PG.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};o(o_,"UpsertObject");eA.exports=o_});var sA=f((w1,rA)=>{"use strict";var a_=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};o(a_,"RemotePayloadObject");var __=class{constructor(t,r,s,n,i,a){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=a}};o(__,"RemotePayloadSubscription");rA.exports={RemotePayloadObject:a_,RemotePayloadSubscription:__}});var iA=f((D1,nA)=>{"use strict";var c_=class{constructor(t,r,s=0,n=0,i=0,a=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=a}};o(c_,"TableSizeObject");nA.exports=c_});var aA=f((P1,oA)=>{"use strict";var HG=iA(),BG=Ee(),Zs=V(),vG=p(),{getSchemaPath:GG,getTransactionAuditStorePath:qG}=K();oA.exports=FG;async function FG(e){let t=new HG;try{let r=GG(e.schema,e.name),s=await Zs.openEnvironment(r,e.name),n=Zs.statDBI(s,e.hash_attribute),i=qG(e.schema,e.name),a=await Zs.openEnvironment(i,e.name,!0),_=Zs.statDBI(a,BG.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),c=await Zs.environmentDataSize(r,e.name),u=await Zs.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){vG.warn(`unable to stat table dbi due to ${r}`)}return t}o(FG,"lmdbGetTableSize")});var cA=f((B1,_A)=>{"use strict";var u_=class{constructor(t,r,s,n,i,a,_){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=a,this.harperdb_processes=_}};o(u_,"SystemInformationObject");_A.exports=u_});var Ni=f((G1,EA)=>{"use strict";var pe=require("systeminformation"),cs=p(),xG=T(),VG=aA(),lA=jn(),{getThreadInfo:uA}=Wr(),kG=v();kG.initSync();var YG=cA(),{openEnvironment:$G}=V(),{getSchemaPath:KG}=K(),l_;EA.exports={getHDBProcessInfo:Zu,getNetworkInfo:el,getDiskInfo:zu,getMemoryInfo:Xu,getCPUInfo:Ju,getTimeInfo:ju,getSystemInformation:tl,systemInformation:WG,getTableSize:rl,getMetrics:sl};function ju(){return pe.time()}o(ju,"getTimeInfo");async function Ju(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:a,governor:_,socket:c,cache:u,...l}=await pe.cpu();l.cpu_speed=await pe.cpuCurrentSpeed();let{raw_currentload:E,raw_currentload_idle:d,raw_currentload_irq:S,raw_currentload_nice:R,raw_currentload_system:m,raw_currentload_user:b,cpus:$,...A}=await pe.currentLoad();return A.cpus=[],$.forEach(H=>{let{raw_load:le,raw_load_idle:ae,raw_load_irq:or,raw_load_nice:En,raw_load_system:ki,raw_load_user:Gr,...dn}=H;A.cpus.push(dn)}),l.current_load=A,l}catch(e){return cs.error(`error in getCPUInfo: ${e}`),{}}}o(Ju,"getCPUInfo");async function Xu(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await pe.mem();return Object.assign(n,process.memoryUsage())}catch(e){return cs.error(`error in getMemoryInfo: ${e}`),{}}}o(Xu,"getMemoryInfo");async function Zu(){let e={core:[],clustering:[]};try{return(await pe.processes()).list.forEach(r=>{r.params.includes(xG.HDB_PROC_NAME)||r.name.includes("harperdb")?e.core.push(r):r.name==="nats-server"&&e.clustering.push(r)}),e}catch(t){return cs.error(`error in getHDBProcessInfo: ${t}`),e}}o(Zu,"getHDBProcessInfo");async function zu(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await pe.disksIO();e.io=i;let{rx_sec:a,tx_sec:_,wx_sec:c,...u}=await pe.fsStats();return e.read_write=u,e.size=await pe.fsSize(),e}catch(t){return cs.error(`error in getDiskInfo: ${t}`),e}}o(zu,"getDiskInfo");async function el(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await pe.networkInterfaceDefault(),e.latency=await pe.inetChecksite("google.com"),(await pe.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:a,dhcp:_,dnsSuffix:c,ieee8021xAuth:u,ieee8021xState:l,carrier_changes:E,...d}=s;e.interfaces.push(d)}),(await pe.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:a,..._}=s;e.stats.push(_)}),e}catch(t){return cs.error(`error in getNetworkInfo: ${t}`),e}}o(el,"getNetworkInfo");async function tl(){if(l_!==void 0)return l_;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:a,..._}=await pe.osInfo();e=_;let c=await pe.versions("node, npm");return e.node_version=c.node,e.npm_version=c.npm,l_=e,l_}catch(t){return cs.error(`error in getSystemInformation: ${t}`),e}}o(tl,"getSystemInformation");async function rl(){let e=[],t=await lA.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await VG(s));return e}o(rl,"getTableSize");async function sl(){let e=await lA.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=KG(i,n),_=(await $G(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){cs.notify(`Error getting stats for table ${n}: ${i}`)}}return t}o(sl,"getMetrics");async function WG(e){let t=new YG;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await tl(),t.time=ju(),t.cpu=await Ju(),t.memory=await Xu(),t.disk=await zu(),t.network=await el(),t.harperdb_processes=await Zu(),t.table_size=await rl(),t.metrics=await sl(),t.threads=await uA(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await tl();break;case"time":t.time=ju();break;case"cpu":t.cpu=await Ju();break;case"memory":t.memory=await Xu();break;case"disk":t.disk=await zu();break;case"network":t.network=await el();break;case"harperdb_processes":t.harperdb_processes=await Zu();break;case"table_size":t.table_size=await rl();break;case"database_metrics":t.metrics=await sl();break;case"threads":t.threads=await uA();break;default:break}return t}o(WG,"systemInformation")});var TA=f((V1,hA)=>{"use strict";var QG=os(),nl=O(),il=require("util"),us=T(),dA=v();dA.initSync();var jG=Xm(),SA=Jr(),{Node:F1,NodeSubscription:x1}=zm(),JG=si(),XG=tA(),{RemotePayloadObject:ZG,RemotePayloadSubscription:zG}=sA(),{handleHDBError:eq,hdb_errors:tq}=X(),{HTTP_STATUS_CODES:rq,HDB_ERROR_MSGS:sq}=tq,nq=ft(),iq=Ni(),oq=Fr(),aq=il.promisify(jG.authorize),_q=il.promisify(SA.searchByHash),cq=il.promisify(SA.searchByValue);hA.exports={authHeaderToUser:uq,isEmpty:lq,getNodeRecord:Eq,upsertNodeRecord:dq,buildNodePayloads:Sq,checkClusteringEnabled:fq,getAllNodeRecords:hq,getSystemInfo:Tq,reverseSubscription:fA};async function uq(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await aq(t,null),e}o(uq,"authHeaderToUser");function lq(e){return e==null}o(lq,"isEmpty");async function Eq(e){let t=new JG(us.SYSTEM_SCHEMA_NAME,us.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return _q(t)}o(Eq,"getNodeRecord");async function dq(e){let t=new XG(us.SYSTEM_SCHEMA_NAME,us.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return QG.upsert(t)}o(dq,"upsertNodeRecord");function fA(e){if(nl.isEmpty(e.subscribe)||nl.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}o(fA,"reverseSubscription");function Sq(e,t,r,s){let n=[];for(let i=0,a=e.length;i<a;i++){let _=e[i],{schema:c,table:u}=_,l=nl.getTableHashAttribute(c,u),{subscribe:E,publish:d}=fA(_),S=new zG(c,u,l,d,E,_.start_time);n.push(S)}return new ZG(r,t,n,s)}o(Sq,"buildNodePayloads");function fq(){if(!dA.get(us.CONFIG_PARAMS.CLUSTERING_ENABLED))throw eq(new Error,sq.CLUSTERING_NOT_ENABLED,rq.BAD_REQUEST,void 0,void 0,!0)}o(fq,"checkClusteringEnabled");async function hq(){let e=new nq(us.SYSTEM_SCHEMA_NAME,us.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await cq(e))}o(hq,"getAllNodeRecords");async function Tq(){let e=await iq.getSystemInformation();return{hdb_version:oq.version(),node_version:e.node_version,platform:e.platform}}o(Tq,"getSystemInfo")});var zs=f((J1,MA)=>{"use strict";var q=T(),mA=O(),Oi=Ja(),E_=ka(),Mt=ct(),F=require("pm2"),Cr=vm(),d_=v(),Zt=p(),Rq=TA(),{startWorker:ol,onMessageFromWorkers:mq}=Wr(),Y1=Ni(),Aq=require("util"),AA=require("child_process"),{execFile:gq}=AA,$1=Aq.promisify(AA.exec),K1=require("systeminformation");MA.exports={enterPM2Mode:pq,start:ls,stop:al,reload:gA,restart:pA,list:_l,describe:cl,connect:zt,kill:bq,startAllServices:Lq,startService:ul,getUniqueServicesList:OA,restartAllServices:yq,isServiceRegistered:IA,reloadStopStart:CA,restartHdb:NA,deleteProcess:Iq,startClusteringProcesses:yA,startClusteringThreads:wA,isHdbRestartRunning:Cq,isClusteringRunning:Mq,stopClustering:wq,reloadClustering:Dq};var{PACKAGE_ROOT:W1}=T(),Q1=T(),{loggerWithTag:j1}=Zt,Ii=!1;mq(e=>{e.type==="restart"&&d_.initSync(!0)});function pq(){Ii=!0}o(pq,"enterPM2Mode");function zt(){return new Promise((e,t)=>{F.connect((r,s)=>{Zt.setupConsoleLogging(),r&&t(r),e(s)})})}o(zt,"connect");var Pe,Nq=10,RA;function ls(e){if(Ii)return Oq(e);let t=gq(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=Pe.indexOf(t);i>-1&&Pe.splice(i,1),!RA&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<Nq&&ls(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=d_.get(q.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),a=/\[\d+][^\[]+\[(\w+)]/g,_,c=0,u;for(;_=a.exec(n);){if(_.index&&Mt.LOG_LEVEL_HIERARCHY[i]>=Mt.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===Mt.LOG_LEVELS.ERR||u===Mt.LOG_LEVELS.WRN?Zt.OUTPUTS.STDERR:Zt.OUTPUTS.STDOUT;Zt.logCustomLevel(u||"info",d,r,n.slice(c,_.index).trim())}let[l,E]=_;c=_.index+l.length,u=Mt.LOG_LEVELS[E]}if(Mt.LOG_LEVEL_HIERARCHY[i]>=Mt.LOG_LEVEL_HIERARCHY[u||"info"]){let l=u===Mt.LOG_LEVELS.ERR||u===Mt.LOG_LEVELS.WRN?Zt.OUTPUTS.STDERR:Zt.OUTPUTS.STDOUT;Zt.logCustomLevel(u||"info",l,r,n.slice(c).trim())}}if(o(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!Pe){Pe=[];let n=o(()=>{RA=!0,Pe&&(Pe.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)}Pe.push(t)}o(ls,"start");function Oq(e){return new Promise(async(t,r)=>{try{await zt()}catch(s){r(s)}F.start(e,(s,n)=>{s&&(F.disconnect(),r(s)),F.disconnect(),t(n)})})}o(Oq,"startWithPM2");function al(e){if(!Ii){for(let t of Pe||[])t.name===e&&(Pe.splice(Pe.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await zt()}catch(s){r(s)}F.stop(e,async(s,n)=>{s&&(F.disconnect(),r(s)),F.delete(e,(i,a)=>{i&&(F.disconnect(),r(s)),F.disconnect(),t(a)})})})}o(al,"stop");function gA(e){return new Promise(async(t,r)=>{try{await zt()}catch(s){r(s)}F.reload(e,(s,n)=>{s&&(F.disconnect(),r(s)),F.disconnect(),t(n)})})}o(gA,"reload");function pA(e){if(!Ii)for(let t of Pe||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await zt()}catch(s){r(s)}F.restart(e,(s,n)=>{F.disconnect(),t(n)})})}o(pA,"restart");function Iq(e){return new Promise(async(t,r)=>{try{await zt()}catch(s){r(s)}F.delete(e,(s,n)=>{s&&(F.disconnect(),r(s)),F.disconnect(),t(n)})})}o(Iq,"deleteProcess");async function NA(){await ls(Cr.generateRestart())}o(NA,"restartHdb");async function Cq(){let e=await _l();for(let t in e)if(e[t].name===q.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(Cq,"isHdbRestartRunning");function _l(){return new Promise(async(e,t)=>{try{await zt()}catch(r){t(r)}F.list((r,s)=>{r&&(F.disconnect(),t(r)),F.disconnect(),e(s)})})}o(_l,"list");function cl(e){return new Promise(async(t,r)=>{try{await zt()}catch(s){r(s)}F.describe(e,(s,n)=>{s&&(F.disconnect(),r(s)),F.disconnect(),t(n)})})}o(cl,"describe");function bq(){if(!Ii){for(let e of Pe||[])e.kill();Pe=[];return}return new Promise(async(e,t)=>{try{await zt()}catch(r){t(r)}F.killDaemon((r,s)=>{r&&(F.disconnect(),t(r)),F.disconnect(),e(s)})})}o(bq,"kill");async function Lq(){try{await yA(),await wA(),await ls(Cr.generateAllServiceConfigs())}catch(e){throw F.disconnect(),e}}o(Lq,"startAllServices");async function ul(e){try{let t;switch(e=e.toLowerCase(),e){case q.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=Cr.generateMainServerConfig();break;case q.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=Cr.generateNatsIngestServiceConfig();break;case q.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=Cr.generateNatsReplyServiceConfig();break;case q.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=Cr.generateNatsHubServerConfig(),await ls(t),await Oi.removeNatsConfig(e);return;case q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=Cr.generateNatsLeafServerConfig(),await ls(t),await Oi.removeNatsConfig(e);return;case q.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=Cr.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await ls(t)}catch(t){throw F.disconnect(),t}}o(ul,"startService");async function OA(){try{let e=await _l(),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 F.disconnect(),e}}o(OA,"getUniqueServicesList");async function yq(e=[]){try{let t=!1,r=await OA();for(let s=0,n=Object.values(r).length;s<n;s++){let a=Object.values(r)[s].name;e.includes(a)||(a===q.PROCESS_DESCRIPTORS.HDB?t=!0:await pA(a))}t&&await CA(q.PROCESS_DESCRIPTORS.HDB)}catch(t){throw F.disconnect(),t}}o(yq,"restartAllServices");async function IA(e){return Pe?.find(t=>t.name===e)?!0:!mA.isEmptyOrZeroLength(await cl(e))}o(IA,"isServiceRegistered");async function CA(e){let t=e===q.PROCESS_DESCRIPTORS.HDB?d_.get(q.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):d_.get(q.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await cl(e),s=mA.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await al(e),await ul(e)):e===q.PROCESS_DESCRIPTORS.HDB?await NA():await gA(e)}o(CA,"reloadStopStart");var bA,LA;async function yA(){for(let e in q.CLUSTERING_PROCESSES){let t=q.CLUSTERING_PROCESSES[e];await ul(t)}}o(yA,"startClusteringProcesses");async function wA(){bA=ol(q.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,{name:q.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE}),LA=ol(q.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:q.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await E_.createWorkQueueStream(Mt.WORK_QUEUE_CONSUMER_NAMES),await E_.updateLocalStreams();let e=await Rq.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===q.PRE_4_0_0_VERSION){Zt.info("Starting clustering upgrade 4.0.0 process"),ol(q.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(wA,"startClusteringThreads");async function wq(){for(let e in q.CLUSTERING_PROCESSES)if(e===q.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)await bA.terminate();else if(e===q.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await LA.terminate();else{let t=q.CLUSTERING_PROCESSES[e];await al(t)}}o(wq,"stopClustering");async function Mq(){for(let e in q.CLUSTERING_PROCESSES){let t=q.CLUSTERING_PROCESSES[e];if(await IA(t)===!1)return!1}return!0}o(Mq,"isClusteringRunning");async function Dq(){await Oi.generateNatsConfig(!0),await E_.reloadNATSHub(),await E_.reloadNATSLeaf(),await Oi.removeNatsConfig(q.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Oi.removeNatsConfig(q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(Dq,"reloadClustering")});var Tl=f((Z1,vA)=>{"use strict";var Uq=require("minimist"),{isMainThread:dl,parentPort:PA}=require("worker_threads"),Z=T(),{PROCESS_DESCRIPTORS_VALIDATE:Ci}=Z,Dt=p(),Sl=O(),S_=Ja(),en=ka(),ll=ct(),HA=Fe(),Ut=zs(),DA=Ni(),Pq=qr(),{restartWorkers:f_,onMessageFromWorkers:Hq}=Wr(),{handleHDBError:Bq,hdb_errors:vq}=X(),{HTTP_STATUS_CODES:Gq}=vq,h_=v();h_.initSync();var bi=`Restarting HarperDB. This may take up to ${Z.RESTART_TIMEOUT_MS/1e3} seconds.`,qq="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",UA="Clustering is not enabled so cannot be restarted",Fq="Invalid service",Es,Tt;vA.exports={restart:BA,restartService:fl};dl&&Hq(e=>{e.type===Z.ITC_EVENT_TYPES.RESTART&&(e.workerType?fl({service:e.workerType}):BA({operation:"restart"}))});async function BA(e){Tt=Object.keys(e).length===0,Es=await Ut.isServiceRegistered(Z.HDB_PROC_DESCRIPTOR);let t=Uq(process.argv);if(t.service){await fl(t);return}if(Tt&&!Es){console.error(qq);return}if(Tt&&console.log(bi),Es){Ut.enterPM2Mode(),Dt.notify(bi);let r=Pq(Object.keys(Z.CONFIG_PARAM_MAP),!0);return Sl.isEmptyOrZeroLength(Object.keys(r))||HA.updateConfigValue(void 0,void 0,r,!0,!0),Vq(),bi}return dl?(Dt.notify(bi),await hl(),setTimeout(()=>{f_()},50)):PA.postMessage({type:Z.ITC_EVENT_TYPES.RESTART}),bi}o(BA,"restart");async function fl(e){let{service:t}=e;if(Z.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw Bq(new Error,Fq,Gq.BAD_REQUEST,void 0,void 0,!0);if(Es=await Ut.isServiceRegistered(Z.HDB_PROC_DESCRIPTOR),!dl)return PA.postMessage({type:Z.ITC_EVENT_TYPES.RESTART,workerType:t}),`Restarting ${t}`;let r;switch(t){case Ci.clustering:if(!h_.get(Z.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=UA;break}Tt&&console.log("Restarting clustering"),Dt.notify("Restarting clustering"),await hl();break;case Ci.clustering_config:case Ci["clustering config"]:if(!h_.get(Z.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=UA;break}Tt&&console.log("Restarting clustering_config"),Dt.notify("Restarting clustering_config"),await Ut.reloadClustering();break;case"custom_functions":case"custom functions":case Ci.harperdb:case Ci.http_workers:if(Tt&&!Es){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Tt&&console.log("Restarting http_workers"),Dt.notify("Restarting http_workers"),Es?await Ut.restart(Z.HDB_PROC_DESCRIPTOR):setTimeout(()=>{f_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Dt.error(r),Tt&&console.error(r),r):`Restarting ${t}`}o(fl,"restartService");async function xq(){await en.publishToStream(`${ll.SUBJECT_PREFIXES.TXN}.${ll.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,ll.WORK_QUEUE_CONSUMER_NAMES.stream_name,en.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}o(xq,"postDummyNatsMsg");async function Vq(){await hl(),await Ut.restart(Z.HDB_PROC_DESCRIPTOR),await Sl.async_set_timeout(2e3),h_.get(Z.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await El(),Tt&&(await en.closeConnection(),process.exit(0))}o(Vq,"restartPM2Mode");async function hl(){if(!HA.getConfigFromFile(Z.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await DA.getHDBProcessInfo()).clustering.length===0)Dt.trace("Clustering not running, restart will start clustering services"),await S_.generateNatsConfig(!0),await Ut.startClusteringProcesses(),await Ut.startClusteringThreads(),await El(),Tt&&await en.closeConnection();else{await xq(),await S_.generateNatsConfig(!0),Es?(Dt.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Ut.restart(Z.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ut.restart(Z.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await DA.getHDBProcessInfo()).clustering.forEach(n=>{Dt.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await Sl.async_set_timeout(3e3),await El(),await en.updateLocalStreams(),Tt&&await en.closeConnection(),Dt.trace("Restart clustering restarting ingest and reply service threads");let t=f_(Z.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=f_(Z.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}o(hl,"restartClustering");async function El(){await S_.removeNatsConfig(Z.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await S_.removeNatsConfig(Z.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}o(El,"removeNatsConfig")});var ml=f((eQ,GA)=>{"use strict";var Li=v();Li.initSync();var tn=require("fs-extra"),Rl=require("path"),rn=T(),kq=require("crypto"),Yq=require("uuid").v4;GA.exports=$q;function $q(){if(Li.getHdbBasePath()!==void 0){let e=Rl.join(Li.getHdbBasePath(),rn.LICENSE_KEY_DIR_NAME,rn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=Rl.join(Li.getHdbBasePath(),rn.LICENSE_KEY_DIR_NAME,rn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=Rl.join(Li.getHdbBasePath(),rn.LICENSE_KEY_DIR_NAME,rn.JWT_ENUM.JWT_PASSPHRASE_NAME);try{tn.accessSync(r),tn.accessSync(e),tn.accessSync(t)}catch(s){if(s.code==="ENOENT"){let n=Yq(),i=kq.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:n}});tn.writeFileSync(r,n),tn.writeFileSync(e,i.privateKey),tn.writeFileSync(t,i.publicKey)}else throw s}}}o($q,"checkJWTTokenExist")});var FA=f((rQ,qA)=>{"use strict";var T_=class{constructor(t,r,s){this.info_id=t,this.data_version_num=r,this.hdb_version_num=s}};o(T_,"HdbInfoInsertObject");qA.exports={HdbInfoInsertObject:T_}});var kA=f((nQ,VA)=>{"use strict";var xA=T(),R_=class{constructor(t,r){this[xA.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[xA.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};o(R_,"UpgradeObject");VA.exports={UpgradeObject:R_}});var m_=f((oQ,$A)=>{"use strict";var it=require("prompt"),sn=require("chalk"),YA=p(),Rt=require("os"),Al=qr(),gl=["yes","y"];async function Kq(e){let t=`${Rt.EOL}`+sn.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Rt.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Rt.EOL}${Rt.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Rt.EOL}`;it.override=Al(["CONFIRM_UPGRADE"]),it.start(),it.message=t;let r={properties:{CONFIRM_UPGRADE:{description:sn.magenta(`${Rt.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},s;try{s=await it.get([r])}catch(n){return YA.error("There was an error when prompting user about an upgrade."),YA.error(n),!1}return gl.includes(s.CONFIRM_UPGRADE)}o(Kq,"forceUpdatePrompt");async function Wq(e){let t=`${Rt.EOL}`+sn.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Rt.EOL}`);it.override=Al(["CONFIRM_DOWNGRADE"]),it.start(),it.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:sn.magenta(`${Rt.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},s=await it.get([r]);return gl.includes(s.CONFIRM_DOWNGRADE)}o(Wq,"forceDowngradePrompt");async function Qq(){let e=`${Rt.EOL}`+sn.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");it.override=Al(["GENERATE_CERTS"]),it.start(),it.message=e;let t={properties:{GENERATE_CERTS:{description:sn.magenta(`${Rt.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await it.get([t]);return gl.includes(r.GENERATE_CERTS)}o(Qq,"upgradeCertsPrompt");$A.exports={forceUpdatePrompt:Kq,forceDowngradePrompt:Wq,upgradeCertsPrompt:Qq}});var pl=f((_Q,KA)=>{"use strict";var A_=class{constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};o(A_,"UpgradeDirective");KA.exports=A_});var QA=f((SQ,WA)=>{"use strict";var jq=O(),Jq=Fe(),uQ=p(),lQ=require("path"),EQ=require("fs"),dQ=T();WA.exports={getOldPropsValue:Xq};function Xq(e,t,r=!1){let s=t.getRaw(e);return jq.isNotEmptyAndHasValue(s)?s:r?Jq.getDefaultConfig(e):""}o(Xq,"getOldPropsValue")});var ZA=f((hQ,XA)=>{"use strict";var br=require("path"),Lr=require("fs-extra"),Zq=require("properties-reader"),zq=pl(),ne=p(),{getOldPropsValue:j}=QA(),{HDB_SETTINGS_NAMES:N,CONFIG_PARAMS:ds}=T(),Ss=Fe(),g_=v(),jA=O(),Pt=T(),Nl=new zq("3.1.0"),JA=[];function eF(){let e=Zq(g_.get(N.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),ne.info(t);let r=` ;Settings for the HarperDB process.
8
+ `,"")}o(Gm,"runCommand");async function nG(){try{await Vv.access(ku)}catch{return!1}let e=await Gm(`${ku} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return kv.eq(t,rG)}o(nG,"checkNATSServerInstalled");async function Qu(e,t,r,s=!0,n="127.0.0.1"){return jv({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:le.get(V.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:le.get(V.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:le.get(V.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}o(Qu,"createConnection");async function iG(){Tt&&(await Tt.drain(),Tt=void 0)}o(iG,"closeConnection");async function Qa(){if(!Tt){let e=await Dm.getClusterUser();if(ls(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=le.get(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);Tt=await Qu(t,e.username,e.decrypt_hash)}return Tt}o(Qa,"getConnection");async function Ai(){if(hi)return hi;ls(Tt)&&await Qa();let{domain:e}=gi(V.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ls(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return hi=await Tt.jetstreamManager({domain:e}),hi}o(Ai,"getJetStreamManager");async function qm(){if(Ti)return Ti;ls(Tt)&&await Qa();let{domain:e}=gi(V.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ls(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ti=Tt.jetstream({domain:e}),Ti}o(qm,"getJetStream");async function je(){let e=Tt||await Qa(),t=hi||await Ai(),r=Ti||await qm();return{connection:e,jsm:t,js:r}}o(je,"getNATSReferences");async function oG(e){let t=le.get(V.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await Dm.getClusterUser(),n=await Qu(t,r,s),i=Wu(),a=n.subscribe(i),c=[],_,u=(async()=>{for await(let l of a){let E=vm.decode(l.data);E.response_time=Date.now()-_,c.push(E)}})();return _=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await Ka.async_set_timeout(e),await a.drain(),await n.close(),await u,c}o(oG,"getServerList");async function ju(e,t){let{jsm:r}=await je(),s=le.get(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=le.get(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=le.get(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Pm.File,retention:Hm.Limits,subjects:t,discard:Jv.Old,duplicate_window:Um,max_msgs:n,max_bytes:i,max_age:s})}o(ju,"createLocalStream");async function Fm(){let{jsm:e}=await je(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}o(Fm,"listStreams");async function aG(e){let{jsm:t}=await je();await t.streams.delete(e)}o(aG,"deleteLocalStream");async function cG(e){let{connection:t}=await je(),r=[],s=Wu(),n=t.subscribe(s),i=(async()=>{for await(let a of n)r.push(vm.decode(a.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}o(cG,"listRemoteStreams");async function _G(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await je(),i=Yu(),a=[],c={ack_policy:Ku.None,durable_name:i,deliver_subject:i,deliver_policy:mi.All};t&&(c.deliver_policy=mi.StartTime,c.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,c);let _={timeout:2e3};r&&(_.max=r);let u=await n.subscribe(i,_);for await(let l of u){let E=Bm(l),d=$u(E.data),S={nats_timestamp:E.info.timestampNanos,nats_sequence:E.info.streamSequence,entry:d};E.headers&&(S.origin=E.headers.get(v.MSG_HEADERS.ORIGIN),S.nats_msg_id=E.headers.get(v.MSG_HEADERS.NATS_MSG_ID)),a.push(S),u.getPending()===1&&E.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),a}catch(_){if(await s.consumers.delete(e,i),_.code==="TIMEOUT")return a;throw _}}o(_G,"viewStream");async function*uG(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await je(),i=Yu(),a={ack_policy:Ku.None,durable_name:i,deliver_subject:i,deliver_policy:mi.All};t&&(a.deliver_policy=mi.StartTime,a.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,a);let c={timeout:2e3};r&&(c.max=r);let _=await n.subscribe(i,c);for await(let u of _){let l=Bm(u),E=$u(l.data);E[0]||(E=[E]);for(let d of E){let S={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};l.headers&&(S.origin=l.headers.get(v.MSG_HEADERS.ORIGIN),S.nats_msg_id=l.headers.get(v.MSG_HEADERS.NATS_MSG_ID)),yield S}_.getPending()===1&&l.info.pending===0&&_.stop()}await s.consumers.delete(e,i)}catch(c){if(await s.consumers.delete(e,i),c.code==="TIMEOUT")return[];throw c}}o(uG,"viewStreamIterator");async function lG(e,t,r,s){br.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s);let n=!0;le.get(V.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)===!1&&r&&r.has(v.MSG_HEADERS.NATS_MSG_ID)&&(n=!1),r=xm(s,r);let{js:i}=await je(),a=await pi(),c=`${e}.${a}`;try{br.trace(`publishToStream publishing to subject: ${c}, data:`,s),n&&await i.publish(c,Vu(s),{headers:r})}catch(_){if(_.code&&_.code.toString()==="503")br.trace(`publishToStream creating stream: ${t}`),await ju(t,[c]),n&&await i.publish(c,Vu(s),{headers:r});else throw _}}o(lG,"publishToStream");function xm(e,t){t===void 0&&(t=Zv());let r=le.get(V.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(v.MSG_HEADERS.NATS_MSG_ID)){let s=Ka.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${Yu()}`;t.append(v.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(v.MSG_HEADERS.ORIGIN)||t.append(v.MSG_HEADERS.ORIGIN,r),t}o(xm,"addNatsMsgHeader");function gi(e){e=e.toLowerCase();let t=Ri.join(le.get(V.CONFIG_PARAMS.ROOTPATH),tG);if(e===V.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ls(xu)&&(xu={port:Si.getConfigFromFile(V.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Si.getConfigFromFile(V.CONFIG_PARAMS.CLUSTERING_NODENAME)+v.SERVER_SUFFIX.HUB,config_file:v.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Ri.join(t,v.PID_FILES.HUB),hdb_nats_path:t}),xu;if(e===V.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ls(Fu)&&(Fu={port:Si.getConfigFromFile(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Si.getConfigFromFile(V.CONFIG_PARAMS.CLUSTERING_NODENAME)+v.SERVER_SUFFIX.LEAF,config_file:v.NATS_CONFIG_FILES.LEAF_SERVER,domain:Si.getConfigFromFile(V.CONFIG_PARAMS.CLUSTERING_NODENAME)+v.SERVER_SUFFIX.LEAF,pid_file_path:Ri.join(t,v.PID_FILES.LEAF),hdb_nats_path:t}),Fu;br.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(gi,"getServerConfig");async function EG(e){let{jsm:t}=await je(),r=await pi();try{await t.streams.add({name:e.stream_name,storage:Pm.File,retention:Hm.Workqueue,duplicate_window:Um,subjects:[`${v.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:Ku.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:mi.All,max_ack_pending:1e4,deliver_group:e.deliver_group});else throw s}}o(EG,"createWorkQueueStream");async function Vm(e,t,r){let{jsm:s}=await je(),n=await s.streams.info(t),i=km(s.prefix),a=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:_}=r,u=Wa.createNatsTableStreamName(c,_),l=i===e,E,d,S=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let m=0,b=n.config.sources.length;m<b;m++)if(E=n.config.sources[m],d=m,l&&E.name===u||!l&&E.name===u&&E.external&&E.external.api===`$JS.${e}.API`){S=!0;break}if(S===!0){if(E.opt_start_time===a)return;n.config.sources.splice(d,1),await s.streams.update(t,n.config)}let R={name:u,opt_start_time:a,filter_subject:`${v.SUBJECT_PREFIXES.TXN}.>`};l||(R.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(R),await s.streams.update(t,n.config)}o(Vm,"addSourceToWorkStream");function km(e){return e.split(".")[1]}o(km,"extractServerName");async function Ym(e,t,r){let{schema:s,table:n}=r,i=Wa.createNatsTableStreamName(s,n),{jsm:a}=await je(),c=await a.streams.info(t);if(!Array.isArray(c.config.sources)||c.config.sources.length===0)return;let _=c.config.sources.length,u;for(;_--;)if(u=c.config.sources[_],u.name===i&&u.external.api===`$JS.${e}.API`){c.config.sources.splice(_,1);break}await a.streams.update(t,c.config)}o(Ym,"removeSourceFromWorkStream");async function dG(e,t,r=2e3,s=Wu()){if(!Ka.isObject(t))throw new Error("data param must be an object");let n=Vu(t),{connection:i}=await je(),a={timeout:r};s&&(a.reply=s,a.noMux=!0);let c=await i.request(e,n,a);return $u(c.data)}o(dG,"request");function Ju(e){return new Promise(async(t,r)=>{let s=Wv(ku,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",a=>{r(a)}),s.stdout.on("data",a=>{i+=a.toString()}),s.stderr.on("data",a=>{n+=a.toString()}),s.stderr.on("close",a=>{n&&r(n),t(i)})})}o(Ju,"reloadNATS");async function SG(){let{pid_file_path:e}=gi(V.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Ju(e)}o(SG,"reloadNATSHub");async function fG(){let{pid_file_path:e}=gi(V.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Ju(e)}o(fG,"reloadNATSLeaf");function hG(e,t,r){let s;switch(e.code){case wm.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case wm.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}o(hG,"requestErrorHandler");async function TG(e,t){let r=t+v.SERVER_SUFFIX.LEAF;await Qv.writeTransaction(V.SYSTEM_SCHEMA_NAME,V.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await Vm(r,v.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await Ym(r,v.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}o(TG,"updateWorkStream");async function $m(e,t){let r=Wa.createNatsTableStreamName(e,t),s=await pi(),n=gG(e,t,s);await ju(r,[n])}o($m,"createLocalTableStream");async function RG(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await $m(s,n)}}o(RG,"createTableStreams");async function Km(e,t){if(le.get(V.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Wa.createNatsTableStreamName(e,t),{jsm:s}=await je();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")br.warn(r);else throw r}}o(Km,"purgeTableStream");async function mG(e,t){if(le.get(V.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await Km(e,t[r])}o(mG,"purgeSchemaTableStreams");async function AG(e){return(await Ai()).streams.info(e)}o(AG,"getStreamInfo");function gG(e,t,r){return`${v.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}o(gG,"createSubjectName");async function pi(){if(fi)return fi;if(fi=(await Ai())?.nc?.info?.server_name,fi===void 0)throw new Error("Unable to get jetstream manager server name");return fi}o(pi,"getJsmServerName");async function pG(){let e=await Ai(),t=await pi(),r=await Fm();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let a=NG(s),c=i.split(".");if(!(c[c.length-1]===t&&!a)){if(n.name===v.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let u=`${v.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;br.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}else if(n.name===v.WORK_QUEUE_CONSUMER_NAMES.stream_name){let u=`${v.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;br.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u,await e.consumers.update(v.WORK_QUEUE_CONSUMER_NAMES.stream_name,v.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${v.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let u=i.split(".");u[u.length-1]=t;let l=u.join(".");br.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}o(pG,"updateLocalStreams");function NG(e){let{config:t}=e,r=!1;if(t.name===v.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===v.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=le.get(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=le.get(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=le.get(V.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}o(NG,"updateStreamLimits")});var tc=f((uQ,Jm)=>{"use strict";var Ni=require("path"),Za=require("fs-extra"),OG=Xd(),IG=eS(),CG=rS(),bG=nS(),Xu=Nr(),en=O(),Me=Ve(),Xa=T(),ja=ke(),{CONFIG_PARAMS:se}=Xa,Ii=p(),za=H(),Qm=Xn(),Zu=Es(),Oi="clustering",LG=1e4,jm=5;Jm.exports={generateNatsConfig:yG,removeNatsConfig:wG};async function yG(e=!1,t=void 0){za.initSync();let r=za.get(se.ROOTPATH),s=Ni.join(r,Oi,ja.PID_FILES.HUB),n=Ni.join(r,Oi,ja.PID_FILES.LEAF),i=Me.getConfigFromFile(se.CLUSTERING_LEAFSERVER_STREAMS_PATH),a=Ni.join(r,Oi,ja.NATS_CONFIG_FILES.HUB_SERVER),c=Ni.join(r,Oi,ja.NATS_CONFIG_FILES.LEAF_SERVER),_=Me.getConfigFromFile(se.CLUSTERING_TLS_CERTIFICATE),u=Me.getConfigFromFile(se.CLUSTERING_TLS_PRIVATEKEY),l=Me.getConfigFromFile(se.CLUSTERING_TLS_CERT_AUTH),E=Me.getConfigFromFile(se.CLUSTERING_TLS_INSECURE),d=Me.getConfigFromFile(se.CLUSTERING_TLS_VERIFY),S=Me.getConfigFromFile(se.CLUSTERING_NODENAME),R=Me.getConfigFromFile(se.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await Zu.checkNATSServerInstalled()||ec("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await Xu.listUsers(),b=Me.getConfigFromFile(se.CLUSTERING_USER),$=await Xu.getClusterUser();(en.isEmpty($)||$.active!==!0)&&ec(`Invalid cluster user '${b}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Ja(se.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Ja(se.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Ja(se.CLUSTERING_HUBSERVER_NETWORK_PORT),await Ja(se.CLUSTERING_LEAFSERVER_NETWORK_PORT));let A=[],B=[];for(let[mn,ws]of m.entries())ws.role.role===Xa.ROLE_TYPES_ENUM.CLUSTER_USER&&ws.active&&(A.push(new bG(ws.username,Qm.decrypt(ws.hash))),B.push(new CG(ws.username,Qm.decrypt(ws.hash))));let Ee=[],{hub_routes:ce}=Me.getClusteringRoutes();if(!en.isEmptyOrZeroLength(ce))for(let mn of ce)Ee.push(`tls://${$.sys_name_encoded}:${$.uri_encoded_d_hash}@${mn.host}:${mn.port}`);let cr=new OG(Me.getConfigFromFile(se.CLUSTERING_HUBSERVER_NETWORK_PORT),S,s,_,u,l,E,d,R,Me.getConfigFromFile(se.CLUSTERING_HUBSERVER_CLUSTER_NAME),Me.getConfigFromFile(se.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Ee,A,B);l==null&&(delete cr.tls.ca_file,delete cr.leafnodes.tls.ca_file),t=en.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Xa.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Za.writeJson(a,cr),Ii.trace(`Hub server config written to ${a}`));let Rn=`tls://${$.sys_name_encoded}:${$.uri_encoded_d_hash}@0.0.0.0:${R}`,ji=`tls://${$.uri_encoded_name}:${$.uri_encoded_d_hash}@0.0.0.0:${R}`,Vr=new IG(Me.getConfigFromFile(se.CLUSTERING_LEAFSERVER_NETWORK_PORT),S,n,i,[Rn],[ji],A,B,_,u,l,E);l==null&&delete Vr.tls.ca_file,(t===void 0||t===Xa.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Za.writeJson(c,Vr),Ii.trace(`Leaf server config written to ${c}`))}o(yG,"generateNatsConfig");async function Ja(e){let t=za.get(e);return en.isEmpty(t)&&ec(`port undefined for '${e}'`),await en.isPortTaken(t)&&ec(`'${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}o(Ja,"isPortAvailable");function ec(e){let t=`Error generating clustering config: ${e}`;Ii.error(t),console.error(t),process.exit(1)}o(ec,"generateNatsConfigError");async function wG(e){let{port:t,config_file:r}=Zu.getServerConfig(e),{username:s,decrypt_hash:n}=await Xu.getClusterUser(),i=0,a=500;for(;i<jm;){try{let u=await Zu.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){Ii.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=jm)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 en.async_set_timeout(a*i)}let c="0".repeat(LG),_=Ni.join(za.get(se.ROOTPATH),Oi,r);await Za.writeFile(_,c),await Za.remove(_),Ii.notify(e,"started.")}o(wG,"removeNatsConfig")});var rA=f((EQ,tA)=>{"use strict";var Je=H(),MG=Vs(),P=T(),Ci=ke(),er=require("path"),{PACKAGE_ROOT:rc}=T(),Xm=H(),tn="/dev/null",DG=er.join(rc,"launchServiceScripts"),Zm=er.join(rc,"utility/scripts"),UG=er.join(Zm,P.HDB_RESTART_SCRIPT),zm=er.resolve(rc,"dependencies",`${process.platform}-${process.arch}`,Ci.NATS_BINARY_NAME);function eA(){let t=MG.licenseSearch().ram_allocation||P.RAM_ALLOCATION_ENUM.DEFAULT,r=P.MEM_SETTING_KEY+t;return{name:P.PROCESS_DESCRIPTORS.HDB,script:P.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:{[P.PROCESS_NAME_ENV_PROP]:P.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0},node_args:r,cwd:rc}}o(eA,"generateMainServerConfig");var PG=9930;function HG(){Je.initSync(!0);let e=Je.get(P.CONFIG_PARAMS.ROOTPATH),t=er.join(e,"clustering",Ci.NATS_CONFIG_FILES.HUB_SERVER),r=er.join(Je.get(P.HDB_SETTINGS_NAMES.LOG_PATH_KEY),P.LOG_NAMES.HDB),s=Xm.get(P.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Ci.LOG_LEVEL_FLAGS[Je.get(P.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:P.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==PG?"-"+s:""),script:zm,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[P.PROCESS_NAME_ENV_PROP]:P.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Je.get(P.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=tn,i.error_file=tn),i}o(HG,"generateNatsHubServerConfig");var BG=9940;function vG(){Je.initSync(!0);let e=Je.get(P.CONFIG_PARAMS.ROOTPATH),t=er.join(e,"clustering",Ci.NATS_CONFIG_FILES.LEAF_SERVER),r=er.join(Je.get(P.HDB_SETTINGS_NAMES.LOG_PATH_KEY),P.LOG_NAMES.HDB),s=Xm.get(P.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Ci.LOG_LEVEL_FLAGS[Je.get(P.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==BG?"-"+s:""),script:zm,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[P.PROCESS_NAME_ENV_PROP]:P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Je.get(P.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=tn,i.error_file=tn),i}o(vG,"generateNatsLeafServerConfig");function GG(){Je.initSync();let e=er.join(Je.get(P.CONFIG_PARAMS.LOGGING_ROOT),P.LOG_NAMES.HDB),t={name:P.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:P.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[P.PROCESS_NAME_ENV_PROP]:P.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:DG,autorestart:!1};return Je.get(P.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=tn,t.error_file=tn),t}o(GG,"generateClusteringUpgradeV4ServiceConfig");function qG(){return{...{name:P.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[P.PROCESS_NAME_ENV_PROP]:P.PROCESS_DESCRIPTORS.RESTART_HDB},instances:1,autorestart:!1,cwd:Zm},script:UG}}o(qG,"generateRestart");function FG(){return{apps:[eA()]}}o(FG,"generateAllServiceConfigs");tA.exports={generateAllServiceConfigs:FG,generateMainServerConfig:eA,generateRestart:qG,generateNatsHubServerConfig:HG,generateNatsLeafServerConfig:vG,generateClusteringUpgradeV4ServiceConfig:GG}});var nA=f((SQ,sA)=>{var xG=Fe(),VG={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};sA.exports=function(e){return xG.validateObject(e,VG)}});var zu=f((fQ,iA)=>{"use strict";var kG=T().OPERATIONS_ENUM,sc=class{constructor(t,r,s,n=void 0){this.operation=kG.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};o(sc,"UpdateObject");iA.exports=sc});var aA=f((TQ,oA)=>{"use strict";var YG={OPERATION:"operation",REFRESH:"refresh"},nc=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};o(nc,"JWTTokens");var ic=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};o(ic,"JWTRSAKeys");oA.exports={JWTTokens:nc,TOKEN_TYPE_ENUM:YG,JWTRSAKeys:ic}});var EA=f((mQ,lA)=>{"use strict";var Li=require("jsonwebtoken"),el=require("fs-extra"),tl=O(),ot=T(),{handleHDBError:De,hdb_errors:$G}=J(),{HTTP_STATUS_CODES:Ue,AUTHENTICATION_ERROR_MSGS:Pe}=$G,bi=p(),cA=Wo(),nl=Nr(),KG=_s().update,WG=zu(),QG=ni(),{UserEventMsg:jG}=os(),Lr=H();Lr.initSync();var rl=require("path"),{JWTTokens:JG,JWTRSAKeys:XG,TOKEN_TYPE_ENUM:oc}=aA(),ZG=Lr.get(ot.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Lr.get(ot.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",zG=Lr.get(ot.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Lr.get(ot.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",ac="RS256",sl;lA.exports={createTokens:eq,validateOperationToken:rq,refreshOperationToken:tq,validateRefreshToken:uA};async function eq(e){if(tl.isEmpty(e)||typeof e!="object")throw De(new Error,Pe.INVALID_AUTH_OBJECT,Ue.BAD_REQUEST,void 0,void 0,!0);if(tl.isEmpty(e.username))throw De(new Error,Pe.USERNAME_REQUIRED,Ue.BAD_REQUEST,void 0,void 0,!0);if(tl.isEmpty(e.password))throw De(new Error,Pe.PASSWORD_REQUIRED,Ue.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await nl.findAndValidateUser(e.username,e.password),!t)throw De(new Error,Pe.INVALID_CREDENTIALS,Ue.UNAUTHORIZED,void 0,void 0,!0)}catch(d){throw bi.error(d),De(new Error,Pe.INVALID_CREDENTIALS,Ue.UNAUTHORIZED,void 0,void 0,!0)}let r=await cc(),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},a=await _A(i,r.private_key,r.passphrase),c=await Li.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:zG,algorithm:ac,subject:oc.REFRESH}),_=cA.hash(c),u=new WG(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:_}]),l,E;try{l=await KG(u)}catch(d){bi.error(d),E=d}if(E!==void 0||l.skipped_hashes.length>0)throw De(new Error,Pe.REFRESH_TOKEN_SAVE_FAILED,Ue.INTERNAL_SERVER_ERROR);return QG.signalUserChange(new jG(process.pid)),new JG(a,c)}o(eq,"createTokens");async function _A(e,t,r){return await Li.sign(e,{key:t,passphrase:r},{expiresIn:ZG,algorithm:ac,subject:oc.OPERATION})}o(_A,"signOperationToken");async function cc(){if(sl===void 0)try{let e=rl.join(Lr.getHdbBasePath(),ot.LICENSE_KEY_DIR_NAME,ot.JWT_ENUM.JWT_PASSPHRASE_NAME),t=rl.join(Lr.getHdbBasePath(),ot.LICENSE_KEY_DIR_NAME,ot.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=rl.join(Lr.getHdbBasePath(),ot.LICENSE_KEY_DIR_NAME,ot.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await el.readFile(e)).toString(),n=(await el.readFile(t)).toString(),i=(await el.readFile(r)).toString();sl=new XG(i,n,s)}catch(e){throw bi.error(e),De(new Error,Pe.NO_ENCRYPTION_KEYS,Ue.INTERNAL_SERVER_ERROR)}return sl}o(cc,"getJWTRSAKeys");async function tq(e){if(!e)throw De(new Error,Pe.INVALID_BODY,Ue.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw De(new Error,Pe.REFRESH_TOKEN_REQUIRED,Ue.BAD_REQUEST,void 0,void 0,!0);await uA(e.refresh_token);let t=await cc(),r=await Li.decode(e.refresh_token);return{operation_token:await _A({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}o(tq,"refreshOperationToken");async function rq(e){try{let t=await cc(),r=await Li.verify(e,t.public_key,{algorithms:ac,subject:oc.OPERATION});return await nl.findAndValidateUser(r.username,void 0,!1)}catch(t){throw bi.warn(t),t.name&&t.name==="TokenExpiredError"?De(new Error,Pe.TOKEN_EXPIRED,Ue.FORBIDDEN):De(new Error,Pe.INVALID_TOKEN,Ue.UNAUTHORIZED)}}o(rq,"validateOperationToken");async function uA(e){let t;try{let r=await cc(),s=await Li.verify(e,r.public_key,{algorithms:ac,subject:oc.REFRESH});t=await nl.findAndValidateUser(s.username,void 0,!1)}catch(r){throw bi.warn(r),r.name&&r.name==="TokenExpiredError"?De(new Error,Pe.TOKEN_EXPIRED,Ue.FORBIDDEN):De(new Error,Pe.INVALID_TOKEN,Ue.UNAUTHORIZED)}if(!cA.validate(t.refresh_token,e))throw De(new Error,Pe.INVALID_TOKEN,Ue.UNAUTHORIZED);return t}o(uA,"validateRefreshToken")});var hA=f((pQ,fA)=>{"use strict";var sq=nA(),rn=require("passport"),nq=require("passport-local").Strategy,iq=require("passport-http").BasicStrategy,oq=require("util"),aq=Nr(),SA=oq.callbackify(aq.findAndValidateUser),gQ=et(),cq=T(),dA=EA();rn.use(new nq(function(e,t,r){SA(e,t,r)}));rn.use(new iq(function(e,t,r){SA(e,t,r)}));rn.serializeUser(function(e,t){t(null,e)});rn.deserializeUser(function(e,t){t(null,e)});function _q(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let a=e.headers.authorization.split(" ");s=a[0],n=a[1]}function i(a,c){return a?r(a):c?r(null,c):r("User not found")}switch(o(i,"handleResponse"),s){case"Basic":rn.authenticate("basic",{session:!1},(a,c)=>{i(a,c)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===cq.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?dA.validateRefreshToken(n).then(a=>{e.body.refresh_token=n,r(null,a)}).catch(a=>{r(a)}):dA.validateOperationToken(n).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:rn.authenticate("local",{session:!1},function(a,c){i(a,c)})(e,t,r);break}}o(_q,"authorize");function uq(e,t){let r=sq(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 a=i[e.schema].tables[e.table].attribute_permissions;for(let c in a)e.attributes.indexOf(a[c].attribute_name)>-1&&!a[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${a[c].attribute_name} `))}return t(null,s)}o(uq,"checkPermissions");fA.exports={authorize:_q,checkPermissions:uq}});var RA=f((OQ,TA)=>{"use strict";var _c=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};o(_c,"Node");var uc=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};o(uc,"NodeSubscription");TA.exports={Node:_c,NodeSubscription:uc}});var AA=f((CQ,mA)=>{"use strict";var lq=T().OPERATIONS_ENUM,lc=class{constructor(t,r,s,n=void 0){this.operation=lq.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};o(lc,"UpsertObject");mA.exports=lc});var il=f((LQ,gA)=>{"use strict";var Ec=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};o(Ec,"RemotePayloadObject");var dc=class{constructor(t,r,s,n,i,a){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=a}};o(dc,"RemotePayloadSubscription");gA.exports={RemotePayloadObject:Ec,RemotePayloadSubscription:dc}});var NA=f((wQ,pA)=>{"use strict";var Sc=class{constructor(t,r,s=0,n=0,i=0,a=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=a}};o(Sc,"TableSizeObject");pA.exports=Sc});var IA=f((DQ,OA)=>{"use strict";var Eq=NA(),dq=de(),sn=k(),Sq=p(),{getSchemaPath:fq,getTransactionAuditStorePath:hq}=K();OA.exports=Tq;async function Tq(e){let t=new Eq;try{let r=fq(e.schema,e.name),s=await sn.openEnvironment(r,e.name),n=sn.statDBI(s,e.hash_attribute),i=hq(e.schema,e.name),a=await sn.openEnvironment(i,e.name,!0),c=sn.statDBI(a,dq.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),_=await sn.environmentDataSize(r,e.name),u=await sn.environmentDataSize(i,e.name);t.schema=e.schema,t.table=e.name,t.table_size=_,t.record_count=n.entryCount,t.transaction_log_size=u,t.transaction_log_record_count=c.entryCount}catch(r){Sq.warn(`unable to stat table dbi due to ${r}`)}return t}o(Tq,"lmdbGetTableSize")});var bA=f((PQ,CA)=>{"use strict";var fc=class{constructor(t,r,s,n,i,a,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=a,this.harperdb_processes=c}};o(fc,"SystemInformationObject");CA.exports=fc});var nn=f((BQ,MA)=>{"use strict";var Rq=require("fs-extra"),mq=require("path"),pe=require("systeminformation"),yr=p(),ol=T(),Aq=IA(),yA=ti(),{getThreadInfo:LA}=Xr(),wA=H();wA.initSync();var gq=bA(),{openEnvironment:pq}=k(),{getSchemaPath:Nq}=K(),hc;MA.exports={getHDBProcessInfo:ul,getNetworkInfo:El,getDiskInfo:ll,getMemoryInfo:_l,getCPUInfo:cl,getTimeInfo:al,getSystemInformation:dl,systemInformation:Oq,getTableSize:Sl,getMetrics:fl};function al(){return pe.time()}o(al,"getTimeInfo");async function cl(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:a,governor:c,socket:_,cache:u,...l}=await pe.cpu();l.cpu_speed=await pe.cpuCurrentSpeed();let{raw_currentload:E,raw_currentload_idle:d,raw_currentload_irq:S,raw_currentload_nice:R,raw_currentload_system:m,raw_currentload_user:b,cpus:$,...A}=await pe.currentLoad();return A.cpus=[],$.forEach(B=>{let{raw_load:Ee,raw_load_idle:ce,raw_load_irq:cr,raw_load_nice:Rn,raw_load_system:ji,raw_load_user:Vr,...mn}=B;A.cpus.push(mn)}),l.current_load=A,l}catch(e){return yr.error(`error in getCPUInfo: ${e}`),{}}}o(cl,"getCPUInfo");async function _l(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await pe.mem();return Object.assign(n,process.memoryUsage())}catch(e){return yr.error(`error in getMemoryInfo: ${e}`),{}}}o(_l,"getMemoryInfo");async function ul(){let e={core:[],clustering:[]};try{let t=await pe.processes(),r;try{r=Number.parseInt(await Rq.readFile(mq.join(wA.get(ol.CONFIG_PARAMS.ROOTPATH),ol.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===ol.NODE_ERROR_CODES.ENOENT)yr.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 yr.error(`error in getHDBProcessInfo: ${t}`),e}}o(ul,"getHDBProcessInfo");async function ll(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await pe.disksIO();e.io=i;let{rx_sec:a,tx_sec:c,wx_sec:_,...u}=await pe.fsStats();return e.read_write=u,e.size=await pe.fsSize(),e}catch(t){return yr.error(`error in getDiskInfo: ${t}`),e}}o(ll,"getDiskInfo");async function El(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await pe.networkInterfaceDefault(),e.latency=await pe.inetChecksite("google.com"),(await pe.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:a,dhcp:c,dnsSuffix:_,ieee8021xAuth:u,ieee8021xState:l,carrier_changes:E,...d}=s;e.interfaces.push(d)}),(await pe.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:a,...c}=s;e.stats.push(c)}),e}catch(t){return yr.error(`error in getNetworkInfo: ${t}`),e}}o(El,"getNetworkInfo");async function dl(){if(hc!==void 0)return hc;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:a,...c}=await pe.osInfo();e=c;let _=await pe.versions("node, npm");return e.node_version=_.node,e.npm_version=_.npm,hc=e,hc}catch(t){return yr.error(`error in getSystemInformation: ${t}`),e}}o(dl,"getSystemInformation");async function Sl(){let e=[],t=await yA.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await Aq(s));return e}o(Sl,"getTableSize");async function fl(){let e=await yA.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=Nq(r,n),c=(await pq(i,n)).getStats();s[n]={puts:c.puts,deletes:c.deletes,txns:c.txns,pageFlushes:c.pageFlushes,writes:c.writes,pagesWritten:c.pagesWritten,timeDuringTxns:c.timeDuringTxns,timeStartTxns:c.timeStartTxns,timePageFlushes:c.timePageFlushes,timeSync:c.timeSync}}catch(i){yr.notify(`Error getting stats for table ${n}: ${i}`)}}return t}o(fl,"getMetrics");async function Oq(e){let t=new gq;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await dl(),t.time=al(),t.cpu=await cl(),t.memory=await _l(),t.disk=await ll(),t.network=await El(),t.harperdb_processes=await ul(),t.table_size=await Sl(),t.metrics=await fl(),t.threads=await LA(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await dl();break;case"time":t.time=al();break;case"cpu":t.cpu=await cl();break;case"memory":t.memory=await _l();break;case"disk":t.disk=await ll();break;case"network":t.network=await El();break;case"harperdb_processes":t.harperdb_processes=await ul();break;case"table_size":t.table_size=await Sl();break;case"database_metrics":case"metrics":t.metrics=await fl();break;case"threads":t.threads=await LA();break;default:break}return t}o(Oq,"systemInformation")});var Tc=f((FQ,HA)=>{"use strict";var Iq=_s(),hl=O(),Tl=require("util"),ds=T(),DA=H();DA.initSync();var Cq=hA(),UA=es(),{Node:GQ,NodeSubscription:qQ}=RA(),bq=_i(),Lq=AA(),{RemotePayloadObject:yq,RemotePayloadSubscription:wq}=il(),{handleHDBError:Mq,hdb_errors:Dq}=J(),{HTTP_STATUS_CODES:Uq,HDB_ERROR_MSGS:Pq}=Dq,Hq=ht(),Bq=nn(),vq=Yr(),Gq=Tl.promisify(Cq.authorize),qq=Tl.promisify(UA.searchByHash),Fq=Tl.promisify(UA.searchByValue);HA.exports={authHeaderToUser:xq,isEmpty:Vq,getNodeRecord:kq,upsertNodeRecord:Yq,buildNodePayloads:$q,checkClusteringEnabled:Kq,getAllNodeRecords:Wq,getSystemInfo:Qq,reverseSubscription:PA};async function xq(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Gq(t,null),e}o(xq,"authHeaderToUser");function Vq(e){return e==null}o(Vq,"isEmpty");async function kq(e){let t=new bq(ds.SYSTEM_SCHEMA_NAME,ds.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return qq(t)}o(kq,"getNodeRecord");async function Yq(e){let t=new Lq(ds.SYSTEM_SCHEMA_NAME,ds.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Iq.upsert(t)}o(Yq,"upsertNodeRecord");function PA(e){if(hl.isEmpty(e.subscribe)||hl.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}o(PA,"reverseSubscription");function $q(e,t,r,s){let n=[];for(let i=0,a=e.length;i<a;i++){let c=e[i],{schema:_,table:u}=c,l=hl.getTableHashAttribute(_,u),{subscribe:E,publish:d}=PA(c),S=new wq(_,u,l,d,E,c.start_time);n.push(S)}return new yq(r,t,n,s)}o($q,"buildNodePayloads");function Kq(){if(!DA.get(ds.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Mq(new Error,Pq.CLUSTERING_NOT_ENABLED,Uq.BAD_REQUEST,void 0,void 0,!0)}o(Kq,"checkClusteringEnabled");async function Wq(){let e=new Hq(ds.SYSTEM_SCHEMA_NAME,ds.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Fq(e))}o(Wq,"getAllNodeRecords");async function Qq(){let e=await Bq.getSystemInformation();return{hdb_version:vq.version(),node_version:e.node_version,platform:e.platform}}o(Qq,"getSystemInfo")});var on=f((QQ,jA)=>{"use strict";var q=T(),vA=O(),yi=tc(),Rc=Es(),Dt=ke(),F=require("pm2"),wr=rA(),mc=H(),tr=p(),jq=Tc(),{startWorker:Rl,onMessageFromWorkers:Jq}=Xr(),VQ=nn(),Xq=require("util"),GA=require("child_process"),{execFile:Zq}=GA,kQ=Xq.promisify(GA.exec),YQ=require("systeminformation");jA.exports={enterPM2Mode:zq,start:Ss,stop:ml,reload:qA,restart:FA,list:Al,describe:gl,connect:rr,kill:nF,startAllServices:iF,startService:pl,getUniqueServicesList:VA,restartAllServices:oF,isServiceRegistered:kA,reloadStopStart:YA,restartHdb:xA,deleteProcess:rF,startClusteringProcesses:WA,startClusteringThreads:QA,isHdbRestartRunning:sF,isClusteringRunning:cF,stopClustering:aF,reloadClustering:_F};var{PACKAGE_ROOT:$Q}=T(),KQ=T(),{loggerWithTag:WQ}=tr,wi=!1;Jq(e=>{e.type==="restart"&&mc.initSync(!0)});function zq(){wi=!0}o(zq,"enterPM2Mode");function rr(){return new Promise((e,t)=>{F.connect((r,s)=>{tr.setupConsoleLogging(),r&&t(r),e(s)})})}o(rr,"connect");var He,eF=10,BA;function Ss(e){if(wi)return tF(e);let t=Zq(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=He.indexOf(t);i>-1&&He.splice(i,1),!BA&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<eF&&Ss(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=mc.get(q.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),a=/\[\d+][^\[]+\[(\w+)]/g,c,_=0,u;for(;c=a.exec(n);){if(c.index&&Dt.LOG_LEVEL_HIERARCHY[i]>=Dt.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===Dt.LOG_LEVELS.ERR||u===Dt.LOG_LEVELS.WRN?tr.OUTPUTS.STDERR:tr.OUTPUTS.STDOUT;tr.logCustomLevel(u||"info",d,r,n.slice(_,c.index).trim())}let[l,E]=c;_=c.index+l.length,u=Dt.LOG_LEVELS[E]}if(Dt.LOG_LEVEL_HIERARCHY[i]>=Dt.LOG_LEVEL_HIERARCHY[u||"info"]){let l=u===Dt.LOG_LEVELS.ERR||u===Dt.LOG_LEVELS.WRN?tr.OUTPUTS.STDERR:tr.OUTPUTS.STDOUT;tr.logCustomLevel(u||"info",l,r,n.slice(_).trim())}}if(o(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!He){He=[];let n=o(()=>{BA=!0,He&&(He.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)}He.push(t)}o(Ss,"start");function tF(e){return new Promise(async(t,r)=>{try{await rr()}catch(s){r(s)}F.start(e,(s,n)=>{s&&(F.disconnect(),r(s)),F.disconnect(),t(n)})})}o(tF,"startWithPM2");function ml(e){if(!wi){for(let t of He||[])t.name===e&&(He.splice(He.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await rr()}catch(s){r(s)}F.stop(e,async(s,n)=>{s&&(F.disconnect(),r(s)),F.delete(e,(i,a)=>{i&&(F.disconnect(),r(s)),F.disconnect(),t(a)})})})}o(ml,"stop");function qA(e){return new Promise(async(t,r)=>{try{await rr()}catch(s){r(s)}F.reload(e,(s,n)=>{s&&(F.disconnect(),r(s)),F.disconnect(),t(n)})})}o(qA,"reload");function FA(e){if(!wi)for(let t of He||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await rr()}catch(s){r(s)}F.restart(e,(s,n)=>{F.disconnect(),t(n)})})}o(FA,"restart");function rF(e){return new Promise(async(t,r)=>{try{await rr()}catch(s){r(s)}F.delete(e,(s,n)=>{s&&(F.disconnect(),r(s)),F.disconnect(),t(n)})})}o(rF,"deleteProcess");async function xA(){await Ss(wr.generateRestart())}o(xA,"restartHdb");async function sF(){let e=await Al();for(let t in e)if(e[t].name===q.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(sF,"isHdbRestartRunning");function Al(){return new Promise(async(e,t)=>{try{await rr()}catch(r){t(r)}F.list((r,s)=>{r&&(F.disconnect(),t(r)),F.disconnect(),e(s)})})}o(Al,"list");function gl(e){return new Promise(async(t,r)=>{try{await rr()}catch(s){r(s)}F.describe(e,(s,n)=>{s&&(F.disconnect(),r(s)),F.disconnect(),t(n)})})}o(gl,"describe");function nF(){if(!wi){for(let e of He||[])e.kill();He=[];return}return new Promise(async(e,t)=>{try{await rr()}catch(r){t(r)}F.killDaemon((r,s)=>{r&&(F.disconnect(),t(r)),F.disconnect(),e(s)})})}o(nF,"kill");async function iF(){try{await WA(),await QA(),await Ss(wr.generateAllServiceConfigs())}catch(e){throw F.disconnect(),e}}o(iF,"startAllServices");async function pl(e){try{let t;switch(e=e.toLowerCase(),e){case q.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=wr.generateMainServerConfig();break;case q.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=wr.generateNatsIngestServiceConfig();break;case q.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=wr.generateNatsReplyServiceConfig();break;case q.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=wr.generateNatsHubServerConfig(),await Ss(t),await yi.removeNatsConfig(e);return;case q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=wr.generateNatsLeafServerConfig(),await Ss(t),await yi.removeNatsConfig(e);return;case q.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=wr.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ss(t)}catch(t){throw F.disconnect(),t}}o(pl,"startService");async function VA(){try{let e=await Al(),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 F.disconnect(),e}}o(VA,"getUniqueServicesList");async function oF(e=[]){try{let t=!1,r=await VA();for(let s=0,n=Object.values(r).length;s<n;s++){let a=Object.values(r)[s].name;e.includes(a)||(a===q.PROCESS_DESCRIPTORS.HDB?t=!0:await FA(a))}t&&await YA(q.PROCESS_DESCRIPTORS.HDB)}catch(t){throw F.disconnect(),t}}o(oF,"restartAllServices");async function kA(e){return He?.find(t=>t.name===e)?!0:!vA.isEmptyOrZeroLength(await gl(e))}o(kA,"isServiceRegistered");async function YA(e){let t=e===q.PROCESS_DESCRIPTORS.HDB?mc.get(q.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):mc.get(q.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await gl(e),s=vA.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await ml(e),await pl(e)):e===q.PROCESS_DESCRIPTORS.HDB?await xA():await qA(e)}o(YA,"reloadStopStart");var $A,KA;async function WA(){for(let e in q.CLUSTERING_PROCESSES){let t=q.CLUSTERING_PROCESSES[e];await pl(t)}}o(WA,"startClusteringProcesses");async function QA(){$A=Rl(q.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,{name:q.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE}),KA=Rl(q.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:q.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Rc.createWorkQueueStream(Dt.WORK_QUEUE_CONSUMER_NAMES),await Rc.updateLocalStreams();let e=await jq.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===q.PRE_4_0_0_VERSION){tr.info("Starting clustering upgrade 4.0.0 process"),Rl(q.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(QA,"startClusteringThreads");async function aF(){for(let e in q.CLUSTERING_PROCESSES)if(e===q.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)await $A.terminate();else if(e===q.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await KA.terminate();else{let t=q.CLUSTERING_PROCESSES[e];await ml(t)}}o(aF,"stopClustering");async function cF(){for(let e in q.CLUSTERING_PROCESSES){let t=q.CLUSTERING_PROCESSES[e];if(await kA(t)===!1)return!1}return!0}o(cF,"isClusteringRunning");async function _F(){await yi.generateNatsConfig(!0),await Rc.reloadNATSHub(),await Rc.reloadNATSLeaf(),await yi.removeNatsConfig(q.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await yi.removeNatsConfig(q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(_F,"reloadClustering")});var yl=f((JQ,tg)=>{"use strict";var uF=require("minimist"),{isMainThread:Il,parentPort:ZA}=require("worker_threads"),z=T(),{PROCESS_DESCRIPTORS_VALIDATE:Mi}=z,Ut=p(),Cl=O(),Ac=tc(),an=Es(),Nl=ke(),zA=Ve(),Pt=on(),JA=nn(),lF=kr(),{restartWorkers:gc,onMessageFromWorkers:EF}=Xr(),{handleHDBError:dF,hdb_errors:SF}=J(),{HTTP_STATUS_CODES:fF}=SF,pc=H();pc.initSync();var Di=`Restarting HarperDB. This may take up to ${z.RESTART_TIMEOUT_MS/1e3} seconds.`,hF="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",XA="Clustering is not enabled so cannot be restarted",TF="Invalid service",fs,Rt;tg.exports={restart:eg,restartService:bl};Il&&EF(e=>{e.type===z.ITC_EVENT_TYPES.RESTART&&(e.workerType?bl({service:e.workerType}):eg({operation:"restart"}))});async function eg(e){Rt=Object.keys(e).length===0,fs=await Pt.isServiceRegistered(z.HDB_PROC_DESCRIPTOR);let t=uF(process.argv);if(t.service){await bl(t);return}if(Rt&&!fs){console.error(hF);return}if(Rt&&console.log(Di),fs){Pt.enterPM2Mode(),Ut.notify(Di);let r=lF(Object.keys(z.CONFIG_PARAM_MAP),!0);return Cl.isEmptyOrZeroLength(Object.keys(r))||zA.updateConfigValue(void 0,void 0,r,!0,!0),mF(),Di}return Il?(Ut.notify(Di),await Ll(),setTimeout(()=>{gc()},50)):ZA.postMessage({type:z.ITC_EVENT_TYPES.RESTART}),Di}o(eg,"restart");async function bl(e){let{service:t}=e;if(z.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw dF(new Error,TF,fF.BAD_REQUEST,void 0,void 0,!0);if(fs=await Pt.isServiceRegistered(z.HDB_PROC_DESCRIPTOR),!Il)return ZA.postMessage({type:z.ITC_EVENT_TYPES.RESTART,workerType:t}),`Restarting ${t}`;let r;switch(t){case Mi.clustering:if(!pc.get(z.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=XA;break}Rt&&console.log("Restarting clustering"),Ut.notify("Restarting clustering"),await Ll();break;case Mi.clustering_config:case Mi["clustering config"]:if(!pc.get(z.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=XA;break}Rt&&console.log("Restarting clustering_config"),Ut.notify("Restarting clustering_config"),await Pt.reloadClustering();break;case"custom_functions":case"custom functions":case Mi.harperdb:case Mi.http_workers:if(Rt&&!fs){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Rt&&console.log("Restarting http_workers"),Ut.notify("Restarting http_workers"),fs?await Pt.restart(z.HDB_PROC_DESCRIPTOR):setTimeout(()=>{gc("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Ut.error(r),Rt&&console.error(r),r):`Restarting ${t}`}o(bl,"restartService");async function RF(){await an.publishToStream(`${Nl.SUBJECT_PREFIXES.TXN}.${Nl.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,Nl.WORK_QUEUE_CONSUMER_NAMES.stream_name,an.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}o(RF,"postDummyNatsMsg");async function mF(){await Ll(),await Pt.restart(z.HDB_PROC_DESCRIPTOR),await Cl.async_set_timeout(2e3),pc.get(z.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await Ol(),Rt&&(await an.closeConnection(),process.exit(0))}o(mF,"restartPM2Mode");async function Ll(){if(!zA.getConfigFromFile(z.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await JA.getHDBProcessInfo()).clustering.length===0)Ut.trace("Clustering not running, restart will start clustering services"),await Ac.generateNatsConfig(!0),await Pt.startClusteringProcesses(),await Pt.startClusteringThreads(),await Ol(),Rt&&await an.closeConnection();else{await RF(),await Ac.generateNatsConfig(!0),fs?(Ut.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Pt.restart(z.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Pt.restart(z.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await JA.getHDBProcessInfo()).clustering.forEach(n=>{Ut.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await Cl.async_set_timeout(3e3),await Ol(),await an.updateLocalStreams(),Rt&&await an.closeConnection(),Ut.trace("Restart clustering restarting ingest and reply service threads");let t=gc(z.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=gc(z.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}o(Ll,"restartClustering");async function Ol(){await Ac.removeNatsConfig(z.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ac.removeNatsConfig(z.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}o(Ol,"removeNatsConfig")});var Ml=f((ZQ,rg)=>{"use strict";var Ui=H();Ui.initSync();var cn=require("fs-extra"),wl=require("path"),_n=T(),AF=require("crypto"),gF=require("uuid").v4;rg.exports=pF;function pF(){if(Ui.getHdbBasePath()!==void 0){let e=wl.join(Ui.getHdbBasePath(),_n.LICENSE_KEY_DIR_NAME,_n.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=wl.join(Ui.getHdbBasePath(),_n.LICENSE_KEY_DIR_NAME,_n.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=wl.join(Ui.getHdbBasePath(),_n.LICENSE_KEY_DIR_NAME,_n.JWT_ENUM.JWT_PASSPHRASE_NAME);try{cn.accessSync(r),cn.accessSync(e),cn.accessSync(t)}catch(s){if(s.code==="ENOENT"){let n=gF(),i=AF.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:n}});cn.writeFileSync(r,n),cn.writeFileSync(e,i.privateKey),cn.writeFileSync(t,i.publicKey)}else throw s}}}o(pF,"checkJWTTokenExist")});var ng=f((ej,sg)=>{"use strict";var Nc=class{constructor(t,r,s){this.info_id=t,this.data_version_num=r,this.hdb_version_num=s}};o(Nc,"HdbInfoInsertObject");sg.exports={HdbInfoInsertObject:Nc}});var ag=f((rj,og)=>{"use strict";var ig=T(),Oc=class{constructor(t,r){this[ig.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[ig.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};o(Oc,"UpgradeObject");og.exports={UpgradeObject:Oc}});var Ic=f((nj,_g)=>{"use strict";var at=require("prompt"),un=require("chalk"),cg=p(),mt=require("os"),Dl=kr(),Ul=["yes","y"];async function NF(e){let t=`${mt.EOL}`+un.bold.green("Your current HarperDB version requires that we complete an update process.")+`${mt.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${mt.EOL}${mt.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${mt.EOL}`;at.override=Dl(["CONFIRM_UPGRADE"]),at.start(),at.message=t;let r={properties:{CONFIRM_UPGRADE:{description:un.magenta(`${mt.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},s;try{s=await at.get([r])}catch(n){return cg.error("There was an error when prompting user about an upgrade."),cg.error(n),!1}return Ul.includes(s.CONFIRM_UPGRADE)}o(NF,"forceUpdatePrompt");async function OF(e){let t=`${mt.EOL}`+un.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${mt.EOL}`);at.override=Dl(["CONFIRM_DOWNGRADE"]),at.start(),at.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:un.magenta(`${mt.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},s=await at.get([r]);return Ul.includes(s.CONFIRM_DOWNGRADE)}o(OF,"forceDowngradePrompt");async function IF(){let e=`${mt.EOL}`+un.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");at.override=Dl(["GENERATE_CERTS"]),at.start(),at.message=e;let t={properties:{GENERATE_CERTS:{description:un.magenta(`${mt.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await at.get([t]);return Ul.includes(r.GENERATE_CERTS)}o(IF,"upgradeCertsPrompt");_g.exports={forceUpdatePrompt:NF,forceDowngradePrompt:OF,upgradeCertsPrompt:IF}});var Pl=f((oj,ug)=>{"use strict";var Cc=class{constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};o(Cc,"UpgradeDirective");ug.exports=Cc});var Eg=f((Ej,lg)=>{"use strict";var CF=O(),bF=Ve(),cj=p(),_j=require("path"),uj=require("fs"),lj=T();lg.exports={getOldPropsValue:LF};function LF(e,t,r=!1){let s=t.getRaw(e);return CF.isNotEmptyAndHasValue(s)?s:r?bF.getDefaultConfig(e):""}o(LF,"getOldPropsValue")});var hg=f((Sj,fg)=>{"use strict";var Mr=require("path"),Dr=require("fs-extra"),yF=require("properties-reader"),wF=Pl(),ne=p(),{getOldPropsValue:j}=Eg(),{HDB_SETTINGS_NAMES:N,CONFIG_PARAMS:hs}=T(),Ts=Ve(),bc=H(),dg=O(),Ht=T(),Hl=new wF("3.1.0"),Sg=[];function MF(){let e=yF(bc.get(N.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),ne.info(t);let r=` ;Settings for the HarperDB process.
9
9
 
10
10
  ;The directory selected during install where the database files reside.
11
11
  ${N.HDB_ROOT_KEY} = ${j(N.HDB_ROOT_KEY,e)}
@@ -28,9 +28,9 @@ ${N.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${j(N.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
28
28
  ;Limit the amount of time the parser will wait to receive the complete HTTP headers.. Defaults to 60,000 ms (1 minute).
29
29
  ${N.SERVER_HEADERS_TIMEOUT_KEY} = ${j(N.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
30
30
  ;Define whether to log to file or not.
31
- ${N.LOG_TO_FILE} = ${Ss.getDefaultConfig(ds.LOGGING_FILE)}
31
+ ${N.LOG_TO_FILE} = ${Ts.getDefaultConfig(hs.LOGGING_FILE)}
32
32
  ;Define whether to log to stdout/stderr or not. NOTE HarperDB must run in foreground in order to receive the std stream from HarperDB.
33
- ${N.LOG_TO_STDSTREAMS} = ${Ss.getDefaultConfig(ds.LOGGING_STDSTREAMS)}
33
+ ${N.LOG_TO_STDSTREAMS} = ${Ts.getDefaultConfig(hs.LOGGING_STDSTREAMS)}
34
34
  ;Set to control amount of logging generated. Accepted levels are trace, debug, warn, error, fatal.
35
35
  ${N.LOG_LEVEL_KEY} = ${j(N.LOG_LEVEL_KEY,e)}
36
36
  ;The path where log files will be written. If there is no file name included in the path, the log file will be created by default as 'hdb_log.log'
@@ -63,22 +63,22 @@ ${N.OPERATION_TOKEN_TIMEOUT_KEY} = ${j(N.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
63
63
  ;Defines the length of time a refresh token will be valid until it expires. Example values: https://github.com/vercel/ms
64
64
  ${N.REFRESH_TOKEN_TIMEOUT_KEY} = ${j(N.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
65
65
  ;The port the IPC server will run on.
66
- ${N.IPC_SERVER_PORT} = ${Ss.getDefaultConfig(ds.IPC_NETWORK_PORT)}
66
+ ${N.IPC_SERVER_PORT} = ${Ts.getDefaultConfig(hs.IPC_NETWORK_PORT)}
67
67
  ;Run HDB in the foreground.
68
- ${N.RUN_IN_FOREGROUND} = ${Ss.getDefaultConfig(ds.OPERATIONSAPI_FOREGROUND)}
68
+ ${N.RUN_IN_FOREGROUND} = ${Ts.getDefaultConfig(hs.OPERATIONSAPI_FOREGROUND)}
69
69
  ;Set to true to enable custom API endpoints. Requires a valid enterprise license.
70
- ${N.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${Ss.getDefaultConfig(ds.CUSTOMFUNCTIONS_ENABLED)}
70
+ ${N.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${Ts.getDefaultConfig(hs.CUSTOMFUNCTIONS_ENABLED)}
71
71
  ;The port used to access the custom functions server.
72
- ${N.CUSTOM_FUNCTIONS_PORT_KEY} = ${Ss.getDefaultConfig(ds.CUSTOMFUNCTIONS_NETWORK_PORT)}
72
+ ${N.CUSTOM_FUNCTIONS_PORT_KEY} = ${Ts.getDefaultConfig(hs.CUSTOMFUNCTIONS_NETWORK_PORT)}
73
73
  ;The path to the folder containing HarperDB custom function files.
74
- ${N.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${br.join(j(N.HDB_ROOT_KEY,e),"custom_functions")}
74
+ ${N.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${Mr.join(j(N.HDB_ROOT_KEY,e),"custom_functions")}
75
75
  ;Set the max number of processes HarperDB will start for the Custom Functions server
76
- ${N.MAX_CUSTOM_FUNCTION_PROCESSES} = ${Ss.getDefaultConfig(ds.HTTP_THREADS)}
77
- `,s=g_.get("settings_path"),n=br.dirname(s),i=br.join(n,"3_1_0_upgrade_settings.bak");try{ne.info(`Backing up old settings file to: ${i}`),Lr.copySync(s,i)}catch(_){throw ne.error(_),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),_}try{ne.info("New settings file values for 3.1.0 upgrade:",r),ne.info(`Creating new/upgraded settings file at '${s}'`),Lr.writeFileSync(s,r),ne.info("Updating env variables with new settings values")}catch(_){throw console.error("There was a problem writing the new settings file. Please check the log for details."),ne.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),ne.error(_),Lr.copySync(i,s),_}g_.initSync();let a="New settings file for 3.1.0 upgrade successfully created.";return console.log(a),ne.info(a),a}o(eF,"updateSettingsFile_3_1_0");function tF(){let e=br.join(jA.getHomeDir(),Pt.HDB_HOME_DIR_NAME,Pt.LICENSE_KEY_DIR_NAME,Pt.LICENSE_FILE_NAME),t=br.join(jA.getHomeDir(),Pt.HDB_HOME_DIR_NAME,Pt.LICENSE_KEY_DIR_NAME,Pt.REG_KEY_FILE_NAME),r=br.join(g_.getHdbBasePath(),Pt.LICENSE_KEY_DIR_NAME,Pt.LICENSE_FILE_NAME),s=br.join(r,Pt.LICENSE_FILE_NAME),n=br.join(r,Pt.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),ne.info(i);let a="Creating .license directory";console.log(a),ne.info(a),Lr.mkdirpSync(r);try{Lr.accessSync(e);try{let _="Moving licence file";console.log(_),ne.info(_),Lr.moveSync(e,s);let c="License file successfully moved.";console.log(c),ne.info(c)}catch{let c="moving license file failed";console.error(c),ne.error(c)}}catch{let c=`license file '${e}' does not exist.`;console.warn(c),ne.warn(c)}try{Lr.accessSync(t);try{let _="Moving registration file";console.log(_),ne.info(_),Lr.moveSync(t,n);let c="Registration file successfully moved.";console.log(c),ne.info(c)}catch{let c="moving registration file failed";console.error(c),ne.error(c)}}catch{let c=`registration file '${t}' does not exist.`;console.warn(c),ne.warn(c)}}o(tF,"moveLicenseFiles");Nl.sync_functions.push(eF);Nl.sync_functions.push(tF);JA.push(Nl);XA.exports=JA});var rg=f((RQ,tg)=>{"use strict";var Ol=require("joi"),zA=Ze(),{route_constraints:eg}=z_();tg.exports={setRoutesValidator:rF,deleteRoutesValidator:sF};function rF(e){let t=Ol.object({server:Ol.valid("hub","leaf").required(),routes:eg.required()});return zA.validateBySchema(e,t)}o(rF,"setRoutesValidator");function sF(e){let t=Ol.object({routes:eg.required()});return zA.validateBySchema(e,t)}o(sF,"deleteRoutesValidator")});var ag=f((AQ,og)=>{"use strict";var fs=Fe(),Il=O(),p_=T(),sg=rg(),{handleHDBError:ng,hdb_errors:nF}=X(),{HTTP_STATUS_CODES:ig}=nF,iF="cluster routes successfully set",oF="cluster routes successfully deleted";og.exports={setRoutes:aF,getRoutes:_F,deleteRoutes:cF};function aF(e){let t=sg.setRoutesValidator(e);if(t)throw ng(t,t.message,ig.BAD_REQUEST,void 0,void 0,!0);let r=fs.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],a=[];for(let _=0,c=e.routes.length;_<c;_++){let u=e.routes[_];u.port=Il.autoCast(u.port);let l=s.some(d=>d.host===u.host&&d.port===u.port),E=n.some(d=>d.host===u.host&&d.port===u.port);l||E?i.push(u):(s.push(u),a.push(u))}return e.server==="hub"?fs.updateConfigValue(p_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):fs.updateConfigValue(p_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:iF,set:a,skipped:i}}o(aF,"setRoutes");function _F(){let e=fs.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}o(_F,"getRoutes");function cF(e){let t=sg.deleteRoutesValidator(e);if(t)throw ng(t,t.message,ig.BAD_REQUEST,void 0,void 0,!0);let r=fs.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],a=[],_=!1,c=!1;for(let u=0,l=e.routes.length;u<l;u++){let E=e.routes[u],d=!1;for(let S=0,R=s.length;S<R;S++){let m=s[S];if(E.host===m.host&&E.port===m.port){s.splice(S,1),d=!0,_=!0,i.push(E);break}}if(!d){let S=!0;for(let R=0,m=n.length;R<m;R++){let b=n[R];if(E.host===b.host&&E.port===b.port){n.splice(R,1),c=!0,S=!1,i.push(E);break}}S&&a.push(E)}}return _&&(s=Il.isEmptyOrZeroLength(s)?null:s,fs.updateConfigValue(p_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),c&&(n=Il.isEmptyOrZeroLength(n)?null:n,fs.updateConfigValue(p_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:oF,deleted:i,skipped:a}}o(cF,"deleteRoutes")});var Eg=f((NQ,lg)=>{"use strict";var Qe=V(),{insertRecords:uF}=$r(),lF=Er(),yr=Ee(),EF=O(),{STORAGE_TYPES_ENUM:pQ}=T(),er=p(),dF=O(),Ht=require("fs-extra"),tr=require("path"),SF=require("cli-progress"),yi=require("assert"),fF=require("pino"),hF=v();lg.exports=TF;var N_,_g,O_,Cl,Ne,wi=!1;async function TF(e=!0){return N_=hF.getHdbBasePath(),_g=tr.join(N_,"schema"),O_=tr.join(N_,"4_0_0_upgrade_tmp"),Cl=tr.join(N_,"transactions"),console.info("Reindexing upgrade started for schemas"),er.notify("Reindexing upgrade started for schemas"),await cg(_g,!1,e),await Ht.pathExists(Cl)&&(console.info(`
76
+ ${N.MAX_CUSTOM_FUNCTION_PROCESSES} = ${Ts.getDefaultConfig(hs.HTTP_THREADS)}
77
+ `,s=bc.get("settings_path"),n=Mr.dirname(s),i=Mr.join(n,"3_1_0_upgrade_settings.bak");try{ne.info(`Backing up old settings file to: ${i}`),Dr.copySync(s,i)}catch(c){throw ne.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{ne.info("New settings file values for 3.1.0 upgrade:",r),ne.info(`Creating new/upgraded settings file at '${s}'`),Dr.writeFileSync(s,r),ne.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),ne.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),ne.error(c),Dr.copySync(i,s),c}bc.initSync();let a="New settings file for 3.1.0 upgrade successfully created.";return console.log(a),ne.info(a),a}o(MF,"updateSettingsFile_3_1_0");function DF(){let e=Mr.join(dg.getHomeDir(),Ht.HDB_HOME_DIR_NAME,Ht.LICENSE_KEY_DIR_NAME,Ht.LICENSE_FILE_NAME),t=Mr.join(dg.getHomeDir(),Ht.HDB_HOME_DIR_NAME,Ht.LICENSE_KEY_DIR_NAME,Ht.REG_KEY_FILE_NAME),r=Mr.join(bc.getHdbBasePath(),Ht.LICENSE_KEY_DIR_NAME,Ht.LICENSE_FILE_NAME),s=Mr.join(r,Ht.LICENSE_FILE_NAME),n=Mr.join(r,Ht.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),ne.info(i);let a="Creating .license directory";console.log(a),ne.info(a),Dr.mkdirpSync(r);try{Dr.accessSync(e);try{let c="Moving licence file";console.log(c),ne.info(c),Dr.moveSync(e,s);let _="License file successfully moved.";console.log(_),ne.info(_)}catch{let _="moving license file failed";console.error(_),ne.error(_)}}catch{let _=`license file '${e}' does not exist.`;console.warn(_),ne.warn(_)}try{Dr.accessSync(t);try{let c="Moving registration file";console.log(c),ne.info(c),Dr.moveSync(t,n);let _="Registration file successfully moved.";console.log(_),ne.info(_)}catch{let _="moving registration file failed";console.error(_),ne.error(_)}}catch{let _=`registration file '${t}' does not exist.`;console.warn(_),ne.warn(_)}}o(DF,"moveLicenseFiles");Hl.sync_functions.push(MF);Hl.sync_functions.push(DF);Sg.push(Hl);fg.exports=Sg});var Ag=f((hj,mg)=>{"use strict";var Bl=require("joi"),Tg=Fe(),{route_constraints:Rg}=__();mg.exports={setRoutesValidator:UF,deleteRoutesValidator:PF};function UF(e){let t=Bl.object({server:Bl.valid("hub","leaf").required(),routes:Rg.required()});return Tg.validateBySchema(e,t)}o(UF,"setRoutesValidator");function PF(e){let t=Bl.object({routes:Rg.required()});return Tg.validateBySchema(e,t)}o(PF,"deleteRoutesValidator")});var Ig=f((Rj,Og)=>{"use strict";var Rs=Ve(),vl=O(),Lc=T(),gg=Ag(),{handleHDBError:pg,hdb_errors:HF}=J(),{HTTP_STATUS_CODES:Ng}=HF,BF="cluster routes successfully set",vF="cluster routes successfully deleted";Og.exports={setRoutes:GF,getRoutes:qF,deleteRoutes:FF};function GF(e){let t=gg.setRoutesValidator(e);if(t)throw pg(t,t.message,Ng.BAD_REQUEST,void 0,void 0,!0);let r=Rs.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],a=[];for(let c=0,_=e.routes.length;c<_;c++){let u=e.routes[c];u.port=vl.autoCast(u.port);let l=s.some(d=>d.host===u.host&&d.port===u.port),E=n.some(d=>d.host===u.host&&d.port===u.port);l||E?i.push(u):(s.push(u),a.push(u))}return e.server==="hub"?Rs.updateConfigValue(Lc.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Rs.updateConfigValue(Lc.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:BF,set:a,skipped:i}}o(GF,"setRoutes");function qF(){let e=Rs.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}o(qF,"getRoutes");function FF(e){let t=gg.deleteRoutesValidator(e);if(t)throw pg(t,t.message,Ng.BAD_REQUEST,void 0,void 0,!0);let r=Rs.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],a=[],c=!1,_=!1;for(let u=0,l=e.routes.length;u<l;u++){let E=e.routes[u],d=!1;for(let S=0,R=s.length;S<R;S++){let m=s[S];if(E.host===m.host&&E.port===m.port){s.splice(S,1),d=!0,c=!0,i.push(E);break}}if(!d){let S=!0;for(let R=0,m=n.length;R<m;R++){let b=n[R];if(E.host===b.host&&E.port===b.port){n.splice(R,1),_=!0,S=!1,i.push(E);break}}S&&a.push(E)}}return c&&(s=vl.isEmptyOrZeroLength(s)?null:s,Rs.updateConfigValue(Lc.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),_&&(n=vl.isEmptyOrZeroLength(n)?null:n,Rs.updateConfigValue(Lc.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:vF,deleted:i,skipped:a}}o(FF,"deleteRoutes")});var wg=f((gj,yg)=>{"use strict";var Xe=k(),{insertRecords:xF}=jr(),VF=Sr(),Ur=de(),kF=O(),{STORAGE_TYPES_ENUM:Aj}=T(),sr=p(),YF=O(),Bt=require("fs-extra"),nr=require("path"),$F=require("cli-progress"),Pi=require("assert"),KF=require("pino"),WF=H();yg.exports=QF;var yc,Cg,wc,Gl,Ne,Hi=!1;async function QF(e=!0){return yc=WF.getHdbBasePath(),Cg=nr.join(yc,"schema"),wc=nr.join(yc,"4_0_0_upgrade_tmp"),Gl=nr.join(yc,"transactions"),console.info("Reindexing upgrade started for schemas"),sr.notify("Reindexing upgrade started for schemas"),await bg(Cg,!1,e),await Bt.pathExists(Gl)&&(console.info(`
78
78
 
79
- Reindexing upgrade started for transaction logs`),er.notify("Reindexing upgrade started for transaction logs"),await cg(Cl,!0,e)),er.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(wi?", but errors occurred":"")}o(TF,"reindexUpgrade");async function cg(e,t,r){let s=await Ht.readdir(e),n=s.length;for(let i=0;i<n;i++){let a=s[i],_=tr.join(e,a.toString());if(a===".DS_Store")continue;let c=await Ht.readdir(_),u=c.length;for(let l=0;l<u;l++){let E=c[l];if(E!==".DS_Store"&&Ht.statSync(tr.join(_,E)).isDirectory())try{await RF(a,E,t),Ne.info(`Reindexing started for ${a}.${E}`),er.notify(`${t?"Transaction":"Schema"} reindexing started for ${a}.${E}`),await AF(a,E,_,t,r),Ne.info(`Reindexing completed for ${a}.${E}`),er.notify(`Reindexing completed for ${a}.${E}`)}catch(d){wi=!0,d.schema_path=_,d.table_name=E,er.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),er.error(d),Ne.error(d),console.error(d)}}}if(!wi)try{await Ht.rm(O_,{recursive:!0})}catch{}}o(cg,"processTables");async function RF(e,t,r){let n=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=tr.join(O_,n);await Ht.ensureDir(O_),await Ht.writeFile(i,""),Ne=fF({level:"debug",formatters:{bindings(){}}},i)}o(RF,"initPinoLogger");var mF=20;async function AF(e,t,r,s,n){let i;try{i=await Qe.openEnvironment(r,t,s)}catch(A){if(A.message==="MDB_INVALID: File is not an LMDB file"){er.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),Ne.error(A);return}throw A}let a=NF(i.dbis),_=Qe.openDBI(i,a),c=Object.keys(i.dbis),u=Qe.statDBI(i,a);Ne.info(`Old environment stats: ${JSON.stringify(u)}`);let l=new SF.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});l.start(u.entryCount,0,{});let E=await Qe.createEnvironment(r,t,!1);Qe.createDBI(E,a,!1,!0);let d=[];try{for(let A of _.getRange({start:!1}))A.value=Object.assign({},A.value),d.push(A),s||e==="system"&&(t==="hdb_schema"&&(A.key=A.key.toString(),A.value.name=A.value.name.toString()),t==="hdb_table"&&(A.key=A.key.toString(),A.value.schema=A.value.schema.toString(),A.value.name=A.value.name.toString()),t==="hdb_attribute"&&(A.key=A.key.toString(),A.value.schema=A.value.schema.toString(),A.value.table=A.value.table.toString(),A.value.attribute=A.value.attribute.toString())),d.length>mF&&await S();await S()}catch(A){throw wi=!0,Ne.error(A),A}async function S(){let A,H=d.map(({value:ae})=>ae);s?A=await Promise.all(H.map(ae=>gF(E,ae))):A=await uF(E,a,c.filter(ae=>ae!=="__blob__"),H,!1);for(let ae=0,or=d.length;ae<or;ae++){let{key:En,value:ki}=d[ae];Ne.info(`Record hash value: ${En} hash: ${a}`);let Gr;s?Gr=A[ae]:Gr=A.written_hashes.indexOf(En)>-1,yi(Gr,!0),pF(E,a,ki[a],s),Ne.info(`Insert success, written hashes: ${A.written_hashes}`),l.increment()}d=[],l.value/l.total*100%10===0&&er.notify(`${e}.${t} ${l.value}/${l.total} records inserted`),Ne.info(`${l.value}/${l.total} records inserted`)}o(S,"finishOutstanding"),l.stop();let R=Qe.statDBI(i,a),m=Qe.statDBI(E,a);if(Ne.info(`Old stats entry count: ${R.entryCount}. New stats entry count: ${m.entryCount}`),yi.deepStrictEqual(R.entryCount,m.entryCount),await Qe.closeEnvironment(i),await Qe.closeEnvironment(E),delete global.lmdb_map[`${e}.${t}`],n){let A=tr.join(r,t),H=tr.join(A,"data.mdb"),le=tr.join(A,"lock.mdb");await Ht.unlink(H),await Ht.unlink(le),await Ht.rmdir(A),Ne.info(`Deleted old environment files from schema folder: ${H}, ${le}`)}let b=await Qe.openEnvironment(r,t),$=Qe.statDBI(b,a);Ne.info(`New stats: ${JSON.stringify(m)}. New stats after move: ${JSON.stringify($)}`),yi.deepStrictEqual($.entryCount,m.entryCount),await Qe.closeEnvironment(b),delete global.lmdb_map[`${e}.${t}`]}o(AF,"processTable");async function gF(e,t){Qe.initializeDBIs(e,yr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,yr.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[yr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[yr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),dF.isEmpty(t.user_name)||e.dbis[yr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let s of t.hash_values)e.dbis[yr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s,r)})}o(gF,"insertTransaction");function pF(e,t,r,s){let i=e.dbis[t].get(r);yi.deepStrictEqual(typeof i,"object");let a;if(s){let _={[yr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[yr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};a=Object.entries(_)}else a=Object.entries(i);for(let[_,c]of a)if(_!==t&&e.dbis[_]!==void 0&&!EF.isEmptyOrZeroLength(c))if(s&&_==="hash_value")for(let u=0,l=c.length;u<l;u++){let E=c[u];ug(e,_,E,r)}else ug(e,_,c,r)}o(pF,"validateIndices");function ug(e,t,r,s){try{let n=!1,i=lF.getIndexedValues(r);if(!i)return;for(let a of i)n=e.dbis[t].doesExist(a,s),n||Ne.info(`Validate indices did not find value in new DBI: ${a}. Hash: ${s}`),yi.deepStrictEqual(n,!0)}catch(n){wi=!0,Ne.error(n),console.error(n)}}o(ug,"validateIndex");function NF(e){let t;for(let[r,s]of Object.entries(e))if(s.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}o(NF,"getHashDBI")});var wl=f((IQ,Sg)=>{"use strict";var OF=require("mkcert"),I_=require("path"),bl=require("fs-extra"),Ll=p(),IF=v(),yl=T(),nn=X_(),CF=qr(),bF=Fe();Sg.exports={generateKeys:LF,updateConfigCert:dg};async function LF(){let e=IF.getHdbBasePath(),t=I_.join(e,yl.LICENSE_KEY_DIR_NAME),r=await OF.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:365,caKey:nn.CERTIFICATE_VALUES.key,caCert:nn.CERTIFICATE_VALUES.cert}),s=I_.join(t,nn.CERTIFICATE_PEM_NAME),n=I_.join(t,nn.PRIVATEKEY_PEM_NAME),i=I_.join(t,nn.CA_PEM_NAME);try{await bl.writeFile(s,r.cert)}catch(a){throw Ll.error(a),console.error("There was a problem creating the certificate file. Please check the install log for details."),a}try{await bl.writeFile(n,r.key)}catch(a){throw Ll.error(a),console.error("There was a problem creating the private key file. Please check the install log for details."),a}try{await bl.writeFile(i,nn.CERTIFICATE_VALUES.cert)}catch(a){throw Ll.error(a),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),a}dg(s,n,i)}o(LF,"generateKeys");function dg(e,t,r){let s=CF(Object.keys(yl.CONFIG_PARAM_MAP),!0),n=yl.CONFIG_PARAMS,i={[n.CLUSTERING_TLS_CERTIFICATE]:s[n.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]?s[n.CLUSTERING_TLS_CERTIFICATE]:e,[n.CLUSTERING_TLS_PRIVATEKEY]:s[n.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]?s[n.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]:t,[n.CLUSTERING_TLS_CERT_AUTH]:s[n.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]?s[n.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]:r,[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE]:s[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE.toLowerCase()]:e,[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY]:s[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY.toLowerCase()]:t,[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH]:s[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH.toLowerCase()]:r,[n.OPERATIONSAPI_TLS_CERTIFICATE]:s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]?s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]:e,[n.OPERATIONSAPI_TLS_PRIVATEKEY]:s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]?s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]:t,[n.OPERATIONSAPI_TLS_CERT_AUTH]:s[n.OPERATIONSAPI_TLS_CERT_AUTH.toLowerCase()]?s[n.OPERATIONSAPI_TLS_CERT_AUTH.toLowerCase()]:r};bF.updateConfigValue(void 0,void 0,i,!1,!0)}o(dg,"updateConfigCert")});var mg=f((bQ,Rg)=>{"use strict";var C_=require("path"),wr=require("fs-extra"),yF=pl(),hs=p(),fg=Fe(),Ml=v(),mt=T(),b_=O(),wF=require("properties-reader"),MF=ft(),DF=ku(),UF=Jr(),PF=require("util"),HF=PF.promisify(UF.searchByValue),BF=os(),vF=ag(),GF=ct(),qF=Eg(),hg=wl(),FF=m_(),Ui=new yF("4.0.0"),Tg=[],Mi,Di;async function xF(){try{if(await FF.upgradeCertsPrompt()){if(console.log("Generating new certificates."),Mi){let t=b_.changeExtension(Mi,".bak");await wr.move(Mi,t)}if(Di){let t=b_.changeExtension(Di,".bak");await wr.move(Di,t)}await hg.generateKeys()}else console.log("Using existing certificates."),hg.updateConfigCert(Mi,Di,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}o(xF,"generateNewKeys");async function VF(){console.log("Updating HarperDB nodes."),hs.info("Updating HarperDB nodes.");let e=[];try{let t=new MF(mt.SYSTEM_SCHEMA_NAME,mt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await HF(t)),s=[];for(let i=0,a=r.length;i<a;i++){let _=r[i];if(!GF.NATS_TERM_CONSTRAINTS_RX.test(_.name)){let l=`Node name '${_.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(l),l}let c={host:_.host,port:_.port};e.push(c);let u=[];for(let l=0,E=_.subscriptions.length;l<E;l++){let d=_.subscriptions[l],S=d.channel.split(":");u.push({schema:S[0],table:S[1],publish:d.publish,subscribe:d.subscribe})}s.push({name:_.name,subscriptions:u,system_info:{hdb_version:mt.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(b_.isEmptyOrZeroLength(s))return;let n=new DF(mt.SYSTEM_SCHEMA_NAME,mt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,s);await BF.update(n)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{vF.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}o(VF,"updateNodes");async function kF(){let e=Ml.get(mt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(C_.join("config","settings.js"))){hs.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),hs.info(t);let r=C_.dirname(e),s=Ml.get(mt.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),n=C_.join(s,"backup","4_0_0_upgrade_settings.bak"),i=C_.join(s,mt.HDB_CONFIG_FILE);try{hs.info(`Backing up old settings file to: ${n}`),console.log(`Backing up old settings file to: ${n}`),wr.copySync(e,n)}catch(E){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),E}try{hs.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),hs.info("Updating env variables with new settings values");let E=fg.initOldConfig(e);Mi=E[mt.CONFIG_PARAMS.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()],Di=E[mt.CONFIG_PARAMS.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()],fg.createConfigFile(E)}catch(E){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),E}let a=b_.getPropsFilePath();wr.accessSync(a,wr.constants.F_OK|wr.constants.R_OK);let c=wF(a).get(mt.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
80
- install_user = ${c}`;try{wr.writeFileSync(a,u)}catch(E){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),E}try{Ml.initSync(!0)}catch(E){throw console.error("Unable to initialize new properties. Please check the log for details."),E}let l="New settings file for 4.0.0 upgrade successfully created.";try{wr.removeSync(r),console.log(l),hs.info(l)}catch(E){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),E}}o(kF,"updateSettingsFile_4_0_0");Ui.async_functions.push(kF);Ui.async_functions.push(xF);Ui.async_functions.push(qF);Ui.async_functions.push(VF);Tg.push(Ui);Rg.exports=Tg});var Dl=f((yQ,Ng)=>{"use strict";var Ts=O(),YF=T(),Ag=p(),{DATA_VERSION:$F,UPGRADE_VERSION:KF}=YF.UPGRADE_JSON_FIELD_NAMES_ENUM,gg=ZA(),L_=mg(),Rs=new Map;gg&&gg.forEach(e=>{Rs.set(e.version,e)});L_&&L_.forEach(e=>{Rs.set(e.version,e)});L_&&L_.forEach(e=>{Rs.set(e.version,e)});function WF(){return[...Rs.keys()].sort(Ts.compareVersions)}o(WF,"getSortedVersions");function pg(e){let t=e[$F],r=e[KF];return Ts.isEmptyOrZeroLength(t)||Ts.isEmptyOrZeroLength(r)?(Ag.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),Ag.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...Rs.keys()].sort(Ts.compareVersions).filter(function(s){return Ts.compareVersions(s,t)>0&&Ts.compareVersions(s,r)<=0})}o(pg,"getVersionsForUpgrade");function QF(e){return pg(e).length>0}o(QF,"hasUpgradesRequired");function jF(e){return Ts.isEmptyOrZeroLength(e)?null:Rs.has(e)?Rs.get(e):null}o(jF,"getDirectiveByVersion");Ng.exports={getSortedVersions:WF,getDirectiveByVersion:jF,getVersionsForUpgrade:pg,hasUpgradesRequired:QF}});var y_=f((MQ,yg)=>{"use strict";var Ig=require("util"),Ul=require("chalk"),JF=require("os"),Cg=os(),XF=Jr(),je=T(),bg=FA(),Hl=mu(),{UpgradeObject:Og}=kA(),{forceDowngradePrompt:ZF}=m_(),zF=Fr(),Pi=p(),on=O(),e0=es(),t0=Dl(),r0=Ig.promisify(XF.searchByValue),Bl=Ig.promisify(e0.setSchemaDataToGlobal),s0="info_id",n0="2.9.9",i0="3.0.0";async function o0(e){let t=new bg.HdbInfoInsertObject(1,e,e),r=new Hl.InsertObject(je.OPERATIONS_ENUM.INSERT,je.SYSTEM_SCHEMA_NAME,je.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,je.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await Bl(),Cg.insert(r)}o(o0,"insertHdbInstallInfo");async function Pl(e){let t,r=await Lg(),s=new Map([[0,{}]]);for(let _ of r)s.set(_.info_id,_);let i=Math.max.apply(null,[...s.keys()])+1;t=new bg.HdbInfoInsertObject(i,e,e);let a=new Hl.InsertObject(je.OPERATIONS_ENUM.INSERT,je.SYSTEM_SCHEMA_NAME,je.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,je.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await Bl(),Cg.insert(a)}o(Pl,"insertHdbUpgradeInfo");async function Lg(){let e=new Hl.NoSQLSeachObject(je.SYSTEM_SCHEMA_NAME,je.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,s0,je.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await r0(e))}catch(r){Pi.info(r)}return t}o(Lg,"getAllHdbInfoRecords");async function a0(){let e=await Lg();if(e.length===0)return;let t,r=new Map;for(let n of e)r.set(n.info_id,n);let s=Math.max.apply(null,[...r.keys()]);return t=r.get(s),t}o(a0,"getLatestHdbInfoRecord");async function _0(){Pi.info("Checking if HDB software has been updated");try{let e=zF.version(),t=await a0(),r;if(on.isEmpty(t))r=n0;else if(r=t.data_version_num,on.compareVersions(r.toString(),e.toString())>0){if(!on.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(Ul.yellow(`This instance's data was last run on version ${r}`)),console.error(Ul.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${JF.EOL}${je.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");on.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(Ul.yellow(`This instance's data was last run on version ${r}`)),await ZF(new Og(r,e))?await Pl(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(await Bl(),c0(r),e.toString()===r.toString())return;let s=new Og(r,e);if(t0.hasUpgradesRequired(s))return s;on.compareVersions(s.data_version.toString(),s.upgrade_version.toString())<0&&(await Pl(s.upgrade_version),Pi.notify(`HarperDB running on upgraded version: ${s.upgrade_version}`))}catch(e){throw Pi.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),Pi.fatal(e),e}}o(_0,"getVersionUpdateInfo");function c0(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${je.HDB_SUPPORT_ADDRESS}`;if(!global.hdb_schema.system.hasOwnProperty("hdb_info"))throw console.log(t),new Error(t);if(!on.isEmpty(e)&&e<i0)throw console.log(t),new Error(t)}o(c0,"checkIfInstallIsSupported");yg.exports={insertHdbInstallInfo:o0,insertHdbUpgradeInfo:Pl,getVersionUpdateInfo:_0}});var Pg=f((UQ,Ug)=>{"use strict";var vl=require("joi"),{boolean:u0,string:wg,number:l0}=vl.types(),Mg=require("fs-extra"),Hi=T(),Dg=require("path"),E0=Ze();Ug.exports=d0;function d0(e){let t=wg.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=vl.object({[Hi.INSTALL_PROMPTS.ROOTPATH]:vl.custom(S0),[Hi.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:l0.min(0),[Hi.INSTALL_PROMPTS.TC_AGREEMENT]:wg.valid("yes","YES","Yes"),[Hi.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Hi.INSTALL_PROMPTS.CLUSTERING_ENABLED]:u0});return E0.validateBySchema(e,r)}o(d0,"installValidator");function S0(e,t){if(Mg.existsSync(Dg.join(e,"system/hdb_user/data.mdb"))||Mg.existsSync(Dg.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}o(S0,"validateRootAvailable")});var Bg=f((HQ,Hg)=>{"use strict";var{mkdirpSync:f0}=require("fs-extra"),At=require("path"),Bt=T(),M_=p(),w_=V(),Gl=Kt(),h0=K();Hg.exports=T0;async function T0(e){M_.trace("Mounting HarperDB");let t=At.join(e,Bt.SCHEMA_DIR_NAME,Bt.SYSTEM_SCHEMA_NAME);ot(e),ot(At.join(e,"backup")),ot(At.join(e,"trash")),ot(At.join(e,"keys")),ot(At.join(e,"keys",Bt.LICENSE_FILE_NAME)),ot(At.join(e,"log")),ot(At.join(e,"doc")),ot(At.join(e,"schema")),ot(t),ot(At.join(e,Bt.TRANSACTIONS_DIR_NAME)),ot(At.join(e,"clustering","leaf")),ot(At.join(e,"custom_functions")),await R0()}o(T0,"mountHdb");async function R0(){let e,t=pa(),r=Object.keys(Gl);for(let s=0;s<r.length;s++){let n=r[s],i,a=Gl[n].hash_attribute;try{let c=h0.initSystemSchemaPaths(Bt.SYSTEM_SCHEMA_NAME,n);e=e??Eu();let u=new t(Bt.SYSTEM_SCHEMA_NAME,n,a);await e(void 0,u),i=await w_.openEnvironment(c,n)}catch(c){throw M_.error(`issue creating environment for ${Bt.SYSTEM_SCHEMA_NAME}.${n}: ${c}`),c}let _=Gl[n].attributes;for(let c=0;c<_.length;c++){let u=_[c].attribute;try{Bt.TIME_STAMP_NAMES.indexOf(u)>=0?await w_.createDBI(i,u,!0):u===a?await w_.createDBI(i,u,!1,!0):await w_.createDBI(i,u,!0,!1)}catch(l){throw M_.error(`issue creating dbi for ${Bt.SYSTEM_SCHEMA_NAME}.${n}.${u}: ${l}`),l}}}}o(R0,"createLMDBTables");function ot(e){f0(e,{mode:Bt.HDB_FILE_PERMISSIONS}),M_.info(`Directory ${e} created`)}o(ot,"makeDirectory")});var Vg=f((vQ,xg)=>{var Mr=require("validate.js"),Gg=Ze(),an=T(),{handleHDBError:m0,hdb_errors:A0}=X(),{HDB_ERROR_MSGS:te,HTTP_STATUS_CODES:g0}=A0,ql=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),p0={STRUCTURE_USER:"structure_user"},vg=Object.values(an.ROLE_TYPES_ENUM),N0="attribute_permissions",O0="attribute_name",{PERMS_CRUD_ENUM:_n}=an,I0=[N0,...Object.values(_n)],qg=[_n.READ,_n.INSERT,_n.UPDATE],C0=[O0,...qg];function b0(e){let t=ql();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Fg(e,t)}o(b0,"addRoleValidation");function L0(e){let t=ql();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Fg(e,t)}o(L0,"alterRoleValidation");function y0(e){let t=ql();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,Gg.validateObject(e,t)}o(y0,"dropRoleValidation");var w0=["operation","role","id","permission","hdb_user","hdb_auth_header"];function Fg(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let a=0,_=s.length;a<_;a++)w0.includes(s[a])||n.push(s[a]);n.length>0&&ie(te.INVALID_ROLE_JSON_KEYS(n),r);let i=Gg.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{ie(a,r)}),e.permission){let a=M0(e);a&&ie(a,r),vg.forEach(_=>{e.permission[_]&&!Mr.isBoolean(e.permission[_])&&ie(te.SU_CU_ROLE_BOOLEAN_ERROR(_),r)})}for(let a in e.permission)if(vg.indexOf(a)<0){if(a===p0.STRUCTURE_USER){let c=e.permission[a];if(typeof c=="boolean")continue;if(Array.isArray(c)){for(let u=0,l=c.length;u<l;u++){let E=c[u];global.hdb_schema[E]||ie(te.SCHEMA_NOT_FOUND(E),r)}continue}ie(te.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let _=e.permission[a];if(!a||!global.hdb_schema[a]){ie(te.SCHEMA_NOT_FOUND(a),r);continue}if(_.tables)for(let c in _.tables){let u=_.tables[c];if(!c||!global.hdb_schema[a][c]){ie(te.TABLE_NOT_FOUND(a,c),r);continue}if(Object.keys(u).forEach(l=>{I0.includes(l)||ie(te.INVALID_PERM_KEY(l),r,a,c)}),Object.values(_n).forEach(l=>{Mr.isDefined(u[l])?Mr.isBoolean(u[l])||ie(te.TABLE_PERM_NOT_BOOLEAN(l),r,a,c):ie(te.TABLE_PERM_MISSING(l),r,a,c)}),Mr.isDefined(u.attribute_permissions)){if(!Mr.isArray(u.attribute_permissions)){ie(te.ATTR_PERMS_NOT_ARRAY,r,a,c);continue}}else{ie(te.ATTR_PERMS_ARRAY_MISSING,r,a,c);continue}if(u.attribute_permissions){let l=global.hdb_schema[a][c].attributes.map(({attribute:d})=>d),E={read:!1,insert:!1,update:!1};for(let d in u.attribute_permissions){let S=u.attribute_permissions[d];if(Object.keys(S).forEach(m=>{!C0.includes(m)&&m!==_n.DELETE&&ie(te.INVALID_ATTR_PERM_KEY(m),r,a,c)}),!Mr.isDefined(S.attribute_name)){ie(te.ATTR_PERM_MISSING_NAME,r,a,c);continue}let R=S.attribute_name;if(!l.includes(R)){ie(te.INVALID_ATTRIBUTE_IN_PERMS(R),r,a,c);continue}qg.forEach(m=>{Mr.isDefined(S[m])?Mr.isBoolean(S[m])||ie(te.ATTR_PERM_NOT_BOOLEAN(m,R),r,a,c):ie(te.ATTR_PERM_MISSING(m,R),r,a,c)}),!E.read&&S.read===!0&&(E.read=!0),!E.insert&&S.insert===!0&&(E.insert=!0),!E.update&&S.update===!0&&(E.update=!0)}if(u.read===!1&&E.read===!0||u.insert===!1&&E.insert===!0||u.update===!1&&E.update===!0){let d=`${a}.${c}`;ie(te.MISMATCHED_TABLE_ATTR_PERMS(d),r,a,c)}}}}return D0(r)}o(Fg,"customValidate");xg.exports={addRoleValidation:b0,alterRoleValidation:L0,dropRoleValidation:y0};function M0(e){let{operation:t,permission:r}=e;if(t===an.OPERATIONS_ENUM.ADD_ROLE||t===an.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return te.SU_CU_ROLE_COMBINED_ERROR;{let a=r.super_user?an.ROLE_TYPES_ENUM.SUPER_USER:an.ROLE_TYPES_ENUM.CLUSTER_USER;return te.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(M0,"validateNoSUPerms");function D0(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:te.ROLE_PERMS_ERROR,...e};return m0(new Error,s,g0.BAD_REQUEST)}else return null}o(D0,"generateRolePermResponse");function ie(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}o(ie,"addPermError")});var jg=f((qQ,Qg)=>{"use strict";var kg=os(),Yg=Jr(),U0=pu(),Vl=Vg(),kl=Zn(),P0=require("uuid").v4,Yl=require("util"),H0=vs(),rr=T(),$g=O(),$l=Yl.promisify(Yg.searchByValue),B0=Yl.promisify(Yg.searchByHash),v0=Yl.promisify(U0.delete),G0=ft(),q0=si(),{hdb_errors:F0,handleHDBError:Bi}=X(),{HDB_ERROR_MSGS:Kg,HTTP_STATUS_CODES:Fl}=F0,{UserEventMsg:Kl}=rs();Qg.exports={addRole:x0,alterRole:k0,dropRole:Y0,listRoles:Wg};function xl(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}o(xl,"scrubRoleDetails");async function x0(e){let t=Vl.addRoleValidation(e);if(t)throw t;if(!(await H0.getLicense()).enterprise){let a=await Wg();if(V0(e,a))throw new Error(`Your current license only supports ${rr.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} cluster_user role. ${rr.SUPPORT_HELP_MSG}`);if(a.length>=2)throw new Error(`Your current license only supports ${rr.BASIC_LICENSE_MAX_NON_CU_ROLES+rr.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} roles. ${rr.SUPPORT_HELP_MSG}`)}e=xl(e);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await $l(s)||[])}catch(a){throw Bi(a)}if(n&&n.length>0)throw Bi(new Error,Kg.ROLE_ALREADY_EXISTS(e.role),Fl.CONFLICT,void 0,void 0,!0);e.id||(e.id=P0());let i={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await kg.insert(i),kl.signalUserChange(new Kl(process.pid)),e=xl(e),e}o(x0,"addRole");function V0(e,t){let r=!1;if(e.permission.cluster_user===!0)for(let s=0;s<t.length;s++){let i=t[s].permission;if(!$g.isEmpty(i)&&i.cluster_user===!0)return!0}return r}o(V0,"checkClusterUserRole");async function k0(e){let t=Vl.alterRoleValidation(e);if(t)throw t;e=xl(e);let r={operation:"update",schema:"system",table:"hdb_role",hash_attribute:"rolename",records:[e]};try{await kg.update(r)}catch(s){throw Bi(s)}return kl.signalUserChange(new Kl(process.pid)),e}o(k0,"alterRole");async function Y0(e){let t=Vl.dropRoleValidation(e);if(t)throw Bi(new Error,t,Fl.BAD_REQUEST,void 0,void 0,!0);let r=new q0(rr.SYSTEM_SCHEMA_NAME,rr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await B0(r));if(s.length===0)throw Bi(new Error,Kg.ROLE_NOT_FOUND,Fl.NOT_FOUND,void 0,void 0,!0);let n=new G0(rr.SYSTEM_SCHEMA_NAME,rr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await $l(n)),a=!1;if($g.isEmptyOrZeroLength(i)===!1){for(let c=0;c<i.length;c++)if(i[c].active===!0){a=!0;break}}if(a===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let _={table:"hdb_role",schema:"system",hash_values:[e.id]};return await v0(_),kl.signalUserChange(new Kl(process.pid)),`${s[0].role} successfully deleted`}o(Y0,"dropRole");async function Wg(){return $l({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}o(Wg,"listRoles")});var Ql=f((xQ,ip)=>{"use strict";var vi=require("os"),ep=require("inquirer"),Br=require("fs-extra"),$0=require("properties-reader"),gs=require("chalk"),ms=require("path"),K0=require("human-readable-ids").hri,W0=require("ora"),oe=p(),Pr=v(),Gi=O(),Wl=qr(),tp=y_(),rp=Fr(),C=T(),Q0=Pg(),j0=Bg(),sp=Fe(),J0=ss(),X0=jg(),Z0=ml(),z0=es(),ex=require("util").promisify,tx=ex(z0.setSchemaDataToGlobal),rx=wl(),cn=o(e=>e,"PROMPT_ANSWER_TRANSFORMER"),Oe=o(e=>gs.magenta.bold(e),"HDB_PROMPT_MSG"),sx="https://harperdb.io/legal/end-user-license-agreement",Hr=vi.EOL,Dr="",nx="yes",Jg="Starting HarperDB install...",Xg="HarperDB installation was successful.",Zg="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",ix="An out of date version of HarperDB is already installed.",zg="It appears HarperDB is already installed. Exiting install...",ox="Aborting install",ax=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),_x=new RegExp(/^[^\s.,*>]+$/),cx=vi.homedir(),ux=ms.join(cx,C.HDB_ROOT_DIR_NAME),lx=9925,Ex="HDB_ADMIN",dx="CLUSTER_USER",He={DESTINATION:"Please enter a destination for HarperDB:",HDB_PORT:"Please enter a server listening port for HarperDB:",HDB_USERNAME:"Please enter a username for the HDB_ADMIN:",HDB_PASS:"Please enter a password for the HDB_ADMIN:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:"},As;ip.exports=Sx;async function Sx(){if(console.log(Oe(Hr+Jg+Hr)),oe.notify(Jg),Gi.isEmptyOrZeroLength(vi.userInfo().uid))throw`Installing user: ${vi.userInfo().username} has no pid. Please install with a properly created user. Cancelling install.`;let e=hx(),t=Q0(e);if(t)throw t.message;await Tx(),await Rx(e);let r=await fx(e),s=W0({prefixText:Oe("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),As=r[C.INSTALL_PROMPTS.ROOTPATH],Gi.isEmpty(As))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Pr.setHdbBasePath(As),await j0(As),await mx(),await Ax(r),oe.initLogSettings(!0),await px(r),await Nx(r),await rx.generateKeys(),await Ox(),Z0(),s.stop(),console.log(Oe(Hr+Xg+Hr)),oe.notify(Xg)}o(Sx,"install");async function fx(e){oe.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:cn,when:Ur(e[C.INSTALL_PROMPTS.ROOTPATH],He.DESTINATION),name:C.INSTALL_PROMPTS.ROOTPATH,prefix:Dr,default:ux,validate:async n=>vt(n)?vt(n):await Br.pathExists(ms.join(n,"system","hdb_user.mdb"))?`'${n}' is already in use. Please enter a different path.`:!0,message:Oe(He.DESTINATION)},{type:"input",transformer:cn,when:Ur(e[C.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT],He.HDB_PORT),name:C.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:Dr,default:lx,validate:n=>ax.test(n)?!0:"Invalid port.",message:Oe(He.HDB_PORT)},{type:"input",transformer:cn,when:Ur(e[C.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],He.HDB_USERNAME),name:C.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Dr,default:Ex,validate:n=>vt(n)?vt(n):(t=n,!0),message:Oe(He.HDB_USERNAME)},{type:"password",when:Ur(e[C.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],He.HDB_PASS),name:C.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Dr,validate:n=>vt(n)?vt(n):!0,message:Oe(He.HDB_PASS)}];if(Gi.autoCastBoolean(e[C.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let n=[{type:"input",transformer:cn,when:Ur(e[C.INSTALL_PROMPTS.CLUSTERING_NODENAME],He.NODE_NAME),name:C.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Dr,default:K0.random(),validate:i=>_x.test(i)?!0:"Invalid node name, must not contain ., * or >",message:Oe(He.NODE_NAME)},{type:"input",transformer:cn,when:Ur(e[C.INSTALL_PROMPTS.CLUSTERING_USER],He.CLUSTER_USERNAME),name:C.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Dr,default:dx,validate:i=>vt(i)?vt(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:Oe(He.CLUSTER_USERNAME)},{type:"password",when:Ur(e[C.INSTALL_PROMPTS.CLUSTERING_PASSWORD],He.CLUSTER_PASS),name:C.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Dr,validate:i=>vt(i)?vt(i):!0,message:Oe(He.CLUSTER_PASS)}];r.push(...n)}let s=await ep.prompt(r);if(Object.keys(s).length===0)return e;for(let n in s)e[n]===void 0&&(e[n]=s[n]);return e}o(fx,"installPrompts");function Ur(e,t){return e!==void 0?(t.includes("password")?(console.log(`${Oe(t)} ${gs.gray("[hidden]")}`),oe.trace(`${Oe(t)} [hidden]`)):(console.log(`${Oe(t)} ${e}`),oe.trace(`${Oe(t)} ${e}`)),!1):!0}o(Ur,"displayCmdEnvVar");function vt(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}o(vt,"checkForEmptyValue");function hx(){let e=Object.keys(C.INSTALL_PROMPTS),t=Wl(e),r=Wl(Object.keys(C.CONFIG_PARAM_MAP),!0),s={};for(let n of e){let i=C.CONFIG_PARAM_MAP[n.toLowerCase()];t[n]?i===void 0?s[n]=t[n]:s[i.toUpperCase()]=t[n]:i!==void 0&&r[i.toLowerCase()]&&(s[n]=r[i.toLowerCase()])}return s}o(hx,"checkForPromptOverride");async function Tx(){oe.trace("Checking for existing install.");let e=Gi.getPropsFilePath(),t=await Br.pathExists(e),r;if(t){oe.trace(`Install found an existing boot prop file at:${e}`);let s=$0(e),n=sp.getConfigValue(C.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||s.get(C.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Br.pathExists(n)}if(r){if(oe.trace(`Install found existing HDB config at:${e}`),await tp.getVersionUpdateInfo()){let n=`Please use \`harperdb upgrade\` to update to ${rp.version()}. Exiting install...`;console.log(Hr+gs.magenta.bold(ix)),console.log(gs.magenta.bold(n)),oe.error(n)}else console.log(Hr+gs.magenta.bold(zg)),oe.error(zg);process.exit(0)}}o(Tx,"checkForExistingInstall");async function Rx(e){oe.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${sx}${Hr}and can be viewed by typing or copying and pasting the URL into your web browser.${Hr}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:Dr,transformer:cn,when:Ur(e[C.INSTALL_PROMPTS.TC_AGREEMENT],t),name:C.INSTALL_PROMPTS.TC_AGREEMENT,message:Oe(t),validate:n=>n.toLowerCase()==="yes"||n.toLowerCase()==="no"?!0:gs.yellow("Please enter 'yes' or 'no'")},s=await ep.prompt([r]);s[C.INSTALL_PROMPTS.TC_AGREEMENT]&&s[C.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==nx&&(console.log(gs.yellow(Zg)),oe.error(Zg),process.exit(0))}o(Rx,"termsAgreement");async function mx(){let e=ms.join(As,C.HDB_CONFIG_FILE),t;try{t=vi.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(!t)throw new Error("Could not determine current username in this environment. Please set the USERNAME environment variable in your OS and try install again.");let r=`settings_path = ${e}
81
- install_user = ${t}`,s=Gi.getHomeDir(),n=ms.join(s,C.HDB_HOME_DIR_NAME),i=ms.join(n,C.LICENSE_KEY_DIR_NAME);try{Br.mkdirpSync(n,{mode:C.HDB_FILE_PERMISSIONS}),Br.mkdirpSync(i,{mode:C.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${C.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let a=ms.join(n,C.BOOT_PROPS_FILE_NAME);try{await Br.writeFile(a,r)}catch(_){throw oe.error(`There was an error creating the boot file at path: ${a}`),_}Pr.setProperty(C.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Pr.setProperty(C.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Pr.setProperty(Pr.BOOT_PROPS_FILE_PATH,a)}o(mx,"createBootPropertiesFile");async function Ax(e){oe.trace("Creating HarperDB config file");let t=Wl(Object.keys(C.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{sp.createConfigFile(t),Pr.initSync()}catch(r){gx(r)}}o(Ax,"createConfigFile");function gx(e){oe.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(ox);let t=ms.resolve(Pr.get(Pr.BOOT_PROPS_FILE_PATH),"../");t&&Br.removeSync(t),As&&Br.removeSync(As),process.exit(1)}o(gx,"rollbackInstall");async function np(e,t){oe.trace("Creating admin user"),await tx();let r;try{r=await X0.addRole(e)}catch(s){throw new Error(`Error creating role - ${s}`)}if(t)try{t.role=r.role,await J0.addUser(t)}catch(s){throw new Error(`Error creating user - ${s}`)}}o(np,"createAdminUser");async function px(e){oe.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[C.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[C.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await np(t,r),delete e[C.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[C.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}o(px,"createSuperUser");async function Nx(e){oe.trace("Creating Cluster user.");let t;e[C.INSTALL_PROMPTS.CLUSTERING_USER]&&e[C.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[C.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[C.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await np({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[C.INSTALL_PROMPTS.CLUSTERING_USER],delete e[C.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}o(Nx,"createClusterUser");async function Ox(){let e=rp.version();if(e)await tp.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}o(Ox,"insertHdbVersionInfo")});var jl=f((kQ,ap)=>{var Ix=require("os"),op=v();ap.exports={checkPermission:Cx};function Cx(){if(Ix.userInfo().username!==op.get("install_user"))throw new Error(`Error: Must execute as ${op.get("install_user")}`)}o(Cx,"checkPermission")});var up=f(($Q,cp)=>{"use strict";var Jl=O(),Je=p(),_p=Dl();cp.exports={processDirectives:bx};async function bx(e){console.log("Starting upgrade process...");let t=_p.getVersionsForUpgrade(e),r=wx(t),s=[],n=r.length;for(let i=0;i<n;i++){let a=r[i],_=`Running upgrade for version ${a.version}`;Je.notify(_),console.log(_);let c=[],u=[];try{c=Lx(a.sync_functions)}catch(l){throw Je.error(`Error while running an upgrade script for ${a.version}`),l}try{u=await yx(a.async_functions)}catch(l){throw Je.error(`Error while running an upgrade script for ${a.version}`),l}s.push(...c,...u)}return s}o(bx,"processDirectives");function Lx(e){if(Jl.isEmptyOrZeroLength(e))return Je.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Je.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Je.info(`Running function ${r.name}`),!(r instanceof Function)){Je.info("Variable being processed is not a function");continue}let s=r();Je.info(s),t.push(s)}return t}o(Lx,"runSyncFunctions");async function yx(e){if(Jl.isEmptyOrZeroLength(e))return Je.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Je.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let s=0;s<r;s++){let n=e[s];if(Je.info(`Running function ${n.name}`),!(n instanceof Function)){Je.info("Variable being processed is not a function");continue}let i=await n();Je.info(i),t.push(i)}return t}o(yx,"runAsyncFunctions");function wx(e){if(Jl.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let s=_p.getDirectiveByVersion(r);s&&t.push(s)}return t}o(wx,"getUpgradeDirectivesToInstall")});var zl=f((WQ,hp)=>{"use strict";var D_=v();D_.initSync();var Sp=require("chalk"),lp=require("fs-extra"),nr=p(),sr=T(),Ep=Fr(),Mx=up(),Xl=O(),fp=y_(),Dx=m_(),dp=j_(),Ux=es(),Px=require("util").promisify,Hx=Px(Ux.setSchemaDataToGlobal),Zl,{UPGRADE_VERSION:U_}=sr.UPGRADE_JSON_FIELD_NAMES_ENUM;hp.exports={upgrade:Bx};async function Bx(e){await Hx(),Zl===void 0&&(Zl=zs()),lp.existsSync(D_.get(D_.BOOT_PROPS_FILE_PATH))||(qi("The hdb_boot_properties file was not found. Please install HDB.",sr.LOG_LEVELS.ERROR),process.exit(1)),lp.existsSync(D_.get(sr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(qi("The hdb settings file was not found. Please make sure HDB is installed.",sr.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await fp.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),qi(`This version of HarperDB is ${Ep.version()}`,sr.LOG_LEVELS.INFO);let r=t[U_]?t[U_]:Ep.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${sr.HDB_SUPPORT_ADDRESS}`),nr.notify("Missing new version field from upgrade info object"),process.exit(1)),await vx();let s,n=0;try{s=await Dx.forceUpdatePrompt(t)}catch(i){nr.error("There was an error when prompting user about upgrade."),nr.error(i),s=!1,n=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(n)),nr.info(`Starting upgrade to version ${r}`),await Gx(t),qi(`HarperDB was successfully upgraded to version ${t[U_]}`,sr.LOG_LEVELS.INFO)}o(Bx,"upgrade");async function vx(){let e=!1,t=await dp.findPs(sr.HDB_PROC_NAME);if(Xl.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await dp.findPs("hdb_express");Xl.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await Zl.list();Xl.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(Sp.red(r)),nr.error(r),process.exit(1)}}o(vx,"checkIfRunning");async function Gx(e){try{await Mx.processDirectives(e)}catch(t){throw qi("There was an error during the data upgrade. Please check the logs.",sr.LOG_LEVELS.ERROR),t}try{await fp.insertHdbUpgradeInfo(e[U_])}catch(t){nr.error("Error updating the 'hdb_info' system table."),nr.error(t)}}o(Gx,"runUpgrade");function qi(e,t=void 0){t||(t=nr.info),nr[t](e),console.log(Sp.magenta(e))}o(qi,"printToLogAndConsole")});var gp=f((jQ,Ap)=>{"use strict";var{promises:tE,createReadStream:qx,createWriteStream:Fx}=require("fs"),{createGzip:xx}=require("zlib"),{promisify:Vx}=require("util"),{pipeline:kx}=require("stream"),Yx=Vx(kx),$x=require("path"),Ns=v();Ns.initSync();var ps=p(),{CONFIG_PARAMS:Fi,ITC_EVENT_TYPES:Kx}=T(),{onMessageFromWorkers:Wx}=Wr(),Qx=6e4,jx="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",Jx="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",eE,Rp;Ap.exports=mp;Wx(e=>{e.type===Kx.RESTART&&(Ns.initSync(!0),clearInterval(Rp),Ns.get(Fi.LOGGING_ROTATION_ENABLED)&&mp())});async function mp(){try{let e=ps.getLogFilePath(),t=Ns.get(Fi.LOGGING_ROTATION_MAXSIZE),r=Ns.get(Fi.LOGGING_ROTATION_INTERVAL);if(!t&&!r){ps.error(jx);return}let s=Ns.get(Fi.LOGGING_ROTATION_PATH);if(!s){ps.error(Jx);return}let n;if(t){let a=t.slice(-1),_=t.slice(0,-1);a==="G"?n=_*1e9:a==="M"?n=_*1e6:n=_*1e3}let i;if(r){let a=r.slice(-1),_=r.slice(0,-1);a==="D"?i=_*1440:a==="H"?i=_*60:i=_}eE=Date.now()/6e4,ps.trace("Log rotate enabled, maxSize:",t,"interval:",r),Rp=setInterval(async()=>{if(n){let a;a=await tE.stat(e),a.size>=n&&await Tp(e,s)}i&&Date.now()/6e4-eE>=i&&(await Tp(e,s),eE=Date.now()/6e4)},Qx).unref()}catch(e){ps.error(e)}}o(mp,"logRotator");async function Tp(e,t){let r=Ns.get(Fi.LOGGING_ROTATION_COMPRESS),s=$x.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await Yx(qx(e),xx(),Fx(s)),await tE.unlink(e)):await tE.rename(e,s),ps.closeLogFile(),ps.notify(`hdb.log rotated, old log moved to ${s}`)}o(Tp,"moveLogFile")});var bp=f((XQ,Cp)=>{"use strict";var{startWorker:Xx,setMonitorListener:Zx}=Wr(),{createServer:zx}=require("net"),eV=v(),tV=T(),pp=p(),rV=Ls(),Os=[];Cp.exports={startHTTPThreads:sV,startSocketServer:nV,updateWorkerIdleness:Ip,mostIdleRouting:B_,remoteAffinityRouting:Op};eV.initSync();function sV(e=2){for(let t=0;t<e;t++)Xx("server/threads/threadHTTPServer.js",{name:tV.THREAD_TYPES.HTTP,onStarted(r){Os.push(r),r.expectedIdle=1,r.lastIdle=0,r.requests=1,r.on("message",n=>{if(n.requestId){let i=H_.get(n.requestId);i&&i(n)}}),r.on("exit",s),r.on("shutdown",s);function s(){let n=Os.indexOf(r);n>-1&&Os.splice(n,1)}o(s,"removeWorker")}});return Os}o(sV,"startHTTPThreads");function nV(e,t=0,r){let s;r?r==="ip"?s=Op:s=iV(r):s=B_;let n=zx({allowHalfOpen:!0,pauseOnConnect:!s.readsData},i=>{s(i,(a,_)=>{if(!a)return pp.error("No HTTP workers found");a.requests++,i._handle.fd>=0?a.postMessage({type:e,fd:i._handle.fd,data:_}):_V(i,a,e)})}).listen(t);return pp.info(`HarperDB ${rV.version} Server running on port ${t}`),n}o(nV,"startSocketServer");var P_=0;function B_(e,t){let r,s=0;for(let n of Os){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=P_)return P_=i,t(r);s=i}P_=0,t(r)}o(B_,"findMostIdleWorker");var Np=36e5,un=new Map;function Op(e,t){let r=e.remoteAddress,s=un.get(r),n=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=n,t(s.worker);B_(e,i=>{un.set(r,{worker:i,lastUsed:n}),t(i)})}o(Op,"findByRemoteAddressAffinity");function iV(e){let t=new RegExp(`${e}:s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){s.on("data",i=>{s._handle.readStop();let _=i.toString("latin1").match(t)?.[1],c=un.get(_),u=Date.now();if(c&&c.worker.threadId!==-1)return c.lastUsed=u,n(c.worker);B_(s,l=>{un.set(_,{worker:l,lastUsed:u}),n(l,i)})})}o(r,"findByHeaderAffinity")}o(iV,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of un)r.lastUsed+Np<e&&un.delete(t)},Np).unref();var oV=1e3;function Ip(){P_=0;for(let e of Os)e.expectedIdle=e.recentELU.idle+oV,e.requests=1;Os.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}o(Ip,"updateWorkerIdleness");Zx(Ip);var H_=new Map,aV=1;function _V(e,t,r){let s=aV++;t.postMessage({type:r,requestId:s,event:"connection"}),e.on("data",n=>{let i=n.toString("latin1");t.postMessage({type:r,requestId:s,data:i,event:"data"})}).on("close",n=>{t.postMessage({type:r,requestId:s,event:"close",hadError:n})}).on("error",n=>{t.postMessage({type:r,requestId:s,event:"error",error:n})}).on("drain",n=>{t.postMessage({type:r,requestId:s,event:"drain",error:n})}).on("end",()=>{t.postMessage({type:r,requestId:s,event:"end"})}).resume(),H_.set(s,n=>{n.event=="data"&&e.write(Buffer.from(n.data,"latin1")),n.event=="end"&&(e.end(n.data&&Buffer.from(n.data,"latin1")),H_.delete(s)),n.event=="destroy"&&(e.destroy(),H_.delete(s))})}o(_V,"proxySocket")});var v_=f((rj,Bp)=>{"use strict";var Be=v();Be.initSync();var zQ=Tl(),J=T(),ce=p(),ln=require("fs-extra"),xi=require("path"),cV=ml(),uV=Ql(),rE=require("chalk"),lV=Ls(),EV=jl(),pt=O(),Mp=Fe(),Dp=qr(),dV=Ja(),SV=zl(),fV=gp(),hV=require("minimist"),{PACKAGE_ROOT:TV}=T(),{startHTTPThreads:RV,startSocketServer:Lp,mostIdleRouting:ej,remoteAffinityRouting:tj}=bp(),mV=y_(),{isMainThread:AV}=require("worker_threads"),gV=Kt(),pV=jn(),NV=au(),OV=pa(),yp=T(),gt,IV="Upgrade complete. Starting HarperDB.",CV="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",bV="HarperDB not found, starting install process.",LV="There was an error during install, check install_log.log for more details. Exiting.",yV="HarperDB successfully started.";async function Up(e=!1,t=!1){if(console.log(rE.magenta("Starting HarperDB...")),await UV()===!1){console.log(bV);try{await uV()}catch(n){console.error(LV),ce.error(n),process.exit(1)}}gt===void 0&&(gt=zs());let r;try{let n=await mV.getVersionUpdateInfo();n!==void 0&&(r=n[J.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await SV.upgrade(n),console.log(IV))}catch(n){r?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${r}. Exiting HarperDB.`),ce.error(n)):(console.error(CV),ce.error(n)),process.exit(1)}if(!e){let n=Dp(Object.keys(J.CONFIG_PARAM_MAP),!0);!pt.isEmpty(n)&&!pt.isEmptyOrZeroLength(Object.keys(n))&&Mp.updateConfigValue(void 0,void 0,n,!0,!0)}cV(),await DV(),MV();try{EV.checkPermission()}catch(n){ce.error(n),console.error(n.message),process.exit(1)}pt.autoCastBoolean(Be.get(J.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&AV&&await dV.generateNatsConfig(t)}o(Up,"initialize");async function Pp(e=!1){try{let t=hV(process.argv);t.ROOTPATH&&Mp.updateConfigObject("settings_path",xi.join(t.ROOTPATH,J.HDB_CONFIG_FILE)),await Up(e,!0);let r=pt.autoCastBoolean(Be.get(J.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)),s=process.env.IS_SCRIPTED_SERVICE&&!t.service,n=r,i=pt.autoCastBoolean(Be.get(J.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY));if(pt.isEmpty(t.service)){RV(Be.get(yp.CONFIG_PARAMS.HTTP_THREADS));let a=Be.get(yp.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);Lp(J.SERVICES.HDB_CORE,parseInt(Be.get(J.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT),10),a),i&&Lp(J.SERVICES.CUSTOM_FUNCTIONS,parseInt(Be.get(J.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_PORT),10),a),n&&(s||await gt.startClusteringProcesses(),await gt.startClusteringThreads())}else{if(typeof t.service!="string"){let _=`Run service argument expected a string but received: ${t.service}`;ce.error(_),console.log(_),process.exit(1)}let a=t.service.split(",");for(let _ of a){let c=_.toLowerCase();if(J.PROCESS_DESCRIPTORS_VALIDATE[c]===void 0){ce.error(`Run received unrecognized service command argument: ${c}`);continue}if(c===J.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase()&&!i){ce.error(`${c} is not enabled in settings`);continue}if(c.includes("clustering")&&!r){ce.error(`${c} is not enabled in settings`);continue}c==="clustering"?await gt.startClusteringProcesses():await gt.startService(J.PROCESS_DESCRIPTORS_VALIDATE[c]);let u=`${J.PROCESS_DESCRIPTORS_VALIDATE[c]} successfully started.`;ce.notify(u),console.log(u)}}Be.get(J.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await fV(),s||Hp()}catch(t){console.error(t),ce.error(t),process.exit(1)}}o(Pp,"main");function Hp(){ce.suppressLogging(()=>{console.log(rE.magenta(""+ln.readFileSync(xi.join(TV,"utility/install/ascii_logo.txt")))),console.log(rE.magenta(`|------------- HarperDB ${lV.version} successfully started ------------|`))}),ce.notify(yV)}o(Hp,"started");async function wV(){if(PV())return Pp();try{gt===void 0&&(gt=zs()),gt.enterPM2Mode(),await Up(),pt.autoCastBoolean(Be.get(J.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await gt.startClusteringProcesses(),await gt.startService(J.PROCESS_DESCRIPTORS.HDB),Hp(),process.exit(0)}catch(e){console.error(e),ce.error(e),process.exit(1)}}o(wV,"launch");function MV(){let e=xi.join(Be.getHdbBasePath(),J.LICENSE_KEY_DIR_NAME,J.LICENSE_FILE_NAME),t=xi.join(e,J.LICENSE_FILE_NAME),r=xi.join(e,J.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:s,HARPERDB_LICENSE:n}=Dp(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(pt.isEmpty(s)||pt.isEmpty(n))return;ln.mkdirpSync(e),ln.writeFileSync(r,s),ln.writeFileSync(t,n)}catch(s){let n=`Failed to write license & fingerprint due to: ${s.message}`;console.error(n),ce.error(n)}}o(MV,"writeLicenseFromVars");async function DV(){if(Be.getHdbBasePath()!==void 0){ce.info("Checking Transaction Audit Environments exist");for(let t of Object.keys(gV))await wp(J.SYSTEM_SCHEMA_NAME,t);let e=await pV.describeAll();for(let t of Object.keys(e))for(let r of Object.keys(e[t]))await wp(t,r);ce.info("Finished checking Transaction Audit Environments exist")}}o(DV,"checkAuditLogEnvironmentsExist");async function wp(e,t){try{let r=new OV(e,t);await NV(r)}catch(r){let s=`Unable to create the transaction audit environment for ${e}.${t}, due to: ${r.message}`;console.error(s),ce.error(s)}}o(wp,"openCreateAuditEnvironment");Bp.exports={launch:wV,main:Pp};async function UV(){try{await ln.stat(pt.getPropsFilePath()),await ln.stat(Be.get(J.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(e.code==="ENOENT")return!1;throw ce.error(`Error checking for HDB install - ${e}`),e}return!0}o(UV,"isHdbInstalled");function PV(){return pt.autoCastBoolean(Be.get(J.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND))}o(PV,"getRunInForeground")});var Gp=f((nj,vp)=>{var HV=Ql(),BV=p();vp.exports=vV;async function vV(){try{await HV()}catch(e){console.error("There was an error during the install."),console.error(e),BV.error(e),process.exit(1)}}o(vV,"install")});var Yp=f((oj,kp)=>{var q_=vs(),qp=require("chalk"),Gt=p(),Fp=jl(),xp=require("prompt"),{promisify:GV}=require("util"),G_=T(),qV=require("fs-extra"),FV=require("path"),xV=O(),VV=Fr(),Vp=v();Vp.initSync();var kV=require("moment"),YV=GV(xp.get),$V=FV.join(Vp.getHdbBasePath(),G_.LICENSE_KEY_DIR_NAME,G_.LICENSE_FILE_NAME,G_.LICENSE_FILE_NAME);kp.exports={getFingerprint:WV,setLicense:KV,parseLicense:sE,register:QV,getRegistrationInfo:JV};async function KV(e){if(e&&e.key&&e.company){try{Gt.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await sE(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Gt.error(r),Gt.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}o(KV,"setLicense");async function WV(){try{Fp.checkPermission()}catch(t){throw Gt.error(t),new Error("You do not have permission to generate a fingerprint.")}let e={};try{e=await q_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Gt.error(r),Gt.error(t),new Error(r)}return e}o(WV,"getFingerprint");async function sE(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");console.log("Validating license input...");let r=q_.validateLicense(e,t);if(console.log("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(console.log("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(console.log(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Gt.info("writing license to disk"),await qV.writeFile($V,JSON.stringify({license_key:e,company:t}))}catch(s){throw Gt.error("Failed to write License"),s}return"Registration successful."}o(sE,"parseLicense");async function QV(){let e=await jV();return sE(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}o(QV,"register");async function jV(){try{Fp.checkPermission()}catch(s){return console.error(s.message)}let e=await q_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:qp.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:qp.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{xp.start()}catch(s){Gt.error(s)}let r;try{r=await YV(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}o(jV,"promptForRegistration");async function JV(){let e={registered:!1,version:null,storage_type:null,ram_allocation:null,license_expiration_date:null},t;try{t=await q_.getLicense()}catch(r){throw Gt.error(`There was an error when searching licenses due to: ${r.message}`),r}if(xV.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=VV.version(),e.storage_type=G_.STORAGE_TYPES_ENUM.LMDB,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=kV.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}o(JV,"getRegistrationInfo")});var Wp=f((_j,Kp)=>{"use strict";var XV=Yp(),ZV=p(),$p="Registration failed.";async function zV(){let e;try{e=await XV.register()}catch(t){return ZV.error(`Registration error ${t}`),$p}return e||$p}o(zV,"register");Kp.exports={register:zV}});var Xp=f((uj,Jp)=>{"use strict";var ek=p(),tk=T(),rk=require("util"),sk=require("child_process"),Qp=rk.promisify(sk.exec),nk=Ni(),Vi=zs(),jp="Stopping HarperDB.";Jp.exports=ik;async function ik(){console.log(jp),ek.notify(jp),await Vi.isServiceRegistered(tk.HDB_PROC_DESCRIPTOR)&&Vi.enterPM2Mode();let e=await Vi.getUniqueServicesList();for(let r in e)await Vi.stop(r);await Vi.kill();let t=await nk.getHDBProcessInfo();t.clustering.forEach(r=>{Qp(`kill ${r.pid}`)}),t.core.forEach(r=>{Qp(`kill ${r.pid}`)})}o(ik,"stop")});var vr=p(),ok=Fr(),F_=T(),Zp=require("fs"),zp=require("path"),ak=require("os"),{PACKAGE_ROOT:eN}=T(),_k=vE(),{SERVICE_ACTIONS_ENUM:ir}=F_;uk();function ck(){let e=zp.join(eN,"bin",`harperdb.${F_.CODE_EXTENSION}`),t;try{t=Zp.statSync(e)}catch{vr.info("Couldn't find the harperdb executable process.");return}let r=ak.userInfo();if(t&&r.uid>=0&&t.uid!==r.uid){let s="You are not the owner of the HarperDB process. Please log in as the owner and try the command again.";throw vr.error(s),console.log(s),new Error(s)}}o(ck,"checkCallingUserSync");function uk(){let e=_k();if(e)if(e.error){console.error(e.error),vr.error(e.error);return}else e.warn&&(console.warn(e.warn),vr.warn(e.warn));let t;Zp.readdir(zp.join(eN,"bin"),r=>{if(r)return vr.error(r);if(process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase()),t!==F_.SERVICE_ACTIONS_ENUM.INSTALL)try{ck()}catch(n){throw console.log(n.message),n}let s;switch(t){case ir.RUN:console.warn('The "run" command is deprecated, please use "start" instead');case ir.START:s=v_().launch();break;case ir.INSTALL:Gp()().then(()=>v_().main(!0)).catch(l=>{console.error(l)});break;case ir.REGISTER:Wp().register().then(l=>{console.log(l)}).catch(l=>{console.error(l)});break;case ir.STOP:Xp()().then(()=>{process.exit(0)}).catch(l=>{console.error(l)});break;case ir.RESTART:Tl().restart({}).then().catch(l=>{vr.error(l),console.error(`There was an error restarting harperdb. ${l}`),process.exit(1)});break;case ir.VERSION:ok.printVersion();break;case ir.UPGRADE:vr.setLogLevel(F_.LOG_LEVELS.INFO),zl().upgrade(null).then(()=>{console.log("Your instance of HDB is up to date!")}).catch(l=>{vr.error(`Got an error during upgrade ${l}`)});break;case void 0:v_().main();break;default:console.warn(`The "${t}" command is not understood.`);case ir.HELP:console.log(`
79
+ Reindexing upgrade started for transaction logs`),sr.notify("Reindexing upgrade started for transaction logs"),await bg(Gl,!0,e)),sr.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Hi?", but errors occurred":"")}o(QF,"reindexUpgrade");async function bg(e,t,r){let s=await Bt.readdir(e),n=s.length;for(let i=0;i<n;i++){let a=s[i],c=nr.join(e,a.toString());if(a===".DS_Store")continue;let _=await Bt.readdir(c),u=_.length;for(let l=0;l<u;l++){let E=_[l];if(E!==".DS_Store"&&Bt.statSync(nr.join(c,E)).isDirectory())try{await jF(a,E,t),Ne.info(`Reindexing started for ${a}.${E}`),sr.notify(`${t?"Transaction":"Schema"} reindexing started for ${a}.${E}`),await XF(a,E,c,t,r),Ne.info(`Reindexing completed for ${a}.${E}`),sr.notify(`Reindexing completed for ${a}.${E}`)}catch(d){Hi=!0,d.schema_path=c,d.table_name=E,sr.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),sr.error(d),Ne.error(d),console.error(d)}}}if(!Hi)try{await Bt.rm(wc,{recursive:!0})}catch{}}o(bg,"processTables");async function jF(e,t,r){let n=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=nr.join(wc,n);await Bt.ensureDir(wc),await Bt.writeFile(i,""),Ne=KF({level:"debug",formatters:{bindings(){}}},i)}o(jF,"initPinoLogger");var JF=20;async function XF(e,t,r,s,n){let i;try{i=await Xe.openEnvironment(r,t,s)}catch(A){if(A.message==="MDB_INVALID: File is not an LMDB file"){sr.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),Ne.error(A);return}throw A}let a=e0(i.dbis),c=Xe.openDBI(i,a),_=Object.keys(i.dbis),u=Xe.statDBI(i,a);Ne.info(`Old environment stats: ${JSON.stringify(u)}`);let l=new $F.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});l.start(u.entryCount,0,{});let E=await Xe.createEnvironment(r,t,!1);Xe.createDBI(E,a,!1,!0);let d=[];try{for(let A of c.getRange({start:!1}))A.value=Object.assign({},A.value),d.push(A),s||e==="system"&&(t==="hdb_schema"&&(A.key=A.key.toString(),A.value.name=A.value.name.toString()),t==="hdb_table"&&(A.key=A.key.toString(),A.value.schema=A.value.schema.toString(),A.value.name=A.value.name.toString()),t==="hdb_attribute"&&(A.key=A.key.toString(),A.value.schema=A.value.schema.toString(),A.value.table=A.value.table.toString(),A.value.attribute=A.value.attribute.toString())),d.length>JF&&await S();await S()}catch(A){throw Hi=!0,Ne.error(A),A}async function S(){let A,B=d.map(({value:ce})=>ce);s?A=await Promise.all(B.map(ce=>ZF(E,ce))):A=await xF(E,a,_.filter(ce=>ce!=="__blob__"),B,!1);for(let ce=0,cr=d.length;ce<cr;ce++){let{key:Rn,value:ji}=d[ce];Ne.info(`Record hash value: ${Rn} hash: ${a}`);let Vr;s?Vr=A[ce]:Vr=A.written_hashes.indexOf(Rn)>-1,Pi(Vr,!0),zF(E,a,ji[a],s),Ne.info(`Insert success, written hashes: ${A.written_hashes}`),l.increment()}d=[],l.value/l.total*100%10===0&&sr.notify(`${e}.${t} ${l.value}/${l.total} records inserted`),Ne.info(`${l.value}/${l.total} records inserted`)}o(S,"finishOutstanding"),l.stop();let R=Xe.statDBI(i,a),m=Xe.statDBI(E,a);if(Ne.info(`Old stats entry count: ${R.entryCount}. New stats entry count: ${m.entryCount}`),Pi.deepStrictEqual(R.entryCount,m.entryCount),await Xe.closeEnvironment(i),await Xe.closeEnvironment(E),delete global.lmdb_map[`${e}.${t}`],n){let A=nr.join(r,t),B=nr.join(A,"data.mdb"),Ee=nr.join(A,"lock.mdb");await Bt.unlink(B),await Bt.unlink(Ee),await Bt.rmdir(A),Ne.info(`Deleted old environment files from schema folder: ${B}, ${Ee}`)}let b=await Xe.openEnvironment(r,t),$=Xe.statDBI(b,a);Ne.info(`New stats: ${JSON.stringify(m)}. New stats after move: ${JSON.stringify($)}`),Pi.deepStrictEqual($.entryCount,m.entryCount),await Xe.closeEnvironment(b),delete global.lmdb_map[`${e}.${t}`]}o(XF,"processTable");async function ZF(e,t){Xe.initializeDBIs(e,Ur.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ur.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Ur.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Ur.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),YF.isEmpty(t.user_name)||e.dbis[Ur.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let s of t.hash_values)e.dbis[Ur.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s,r)})}o(ZF,"insertTransaction");function zF(e,t,r,s){let i=e.dbis[t].get(r);Pi.deepStrictEqual(typeof i,"object");let a;if(s){let c={[Ur.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Ur.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};a=Object.entries(c)}else a=Object.entries(i);for(let[c,_]of a)if(c!==t&&e.dbis[c]!==void 0&&!kF.isEmptyOrZeroLength(_))if(s&&c==="hash_value")for(let u=0,l=_.length;u<l;u++){let E=_[u];Lg(e,c,E,r)}else Lg(e,c,_,r)}o(zF,"validateIndices");function Lg(e,t,r,s){try{let n=!1,i=VF.getIndexedValues(r);if(!i)return;for(let a of i)n=e.dbis[t].doesExist(a,s),n||Ne.info(`Validate indices did not find value in new DBI: ${a}. Hash: ${s}`),Pi.deepStrictEqual(n,!0)}catch(n){Hi=!0,Ne.error(n),console.error(n)}}o(Lg,"validateIndex");function e0(e){let t;for(let[r,s]of Object.entries(e))if(s.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}o(e0,"getHashDBI")});var Vl=f((Nj,Dg)=>{"use strict";var t0=require("mkcert"),Mc=require("path"),ql=require("fs-extra"),Fl=p(),r0=H(),xl=T(),ln=a_(),s0=kr(),n0=Ve();Dg.exports={generateKeys:i0,updateConfigCert:Mg};async function i0(){let e=r0.getHdbBasePath(),t=Mc.join(e,xl.LICENSE_KEY_DIR_NAME),r=await t0.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:365,caKey:ln.CERTIFICATE_VALUES.key,caCert:ln.CERTIFICATE_VALUES.cert}),s=Mc.join(t,ln.CERTIFICATE_PEM_NAME),n=Mc.join(t,ln.PRIVATEKEY_PEM_NAME),i=Mc.join(t,ln.CA_PEM_NAME);try{await ql.writeFile(s,r.cert)}catch(a){throw Fl.error(a),console.error("There was a problem creating the certificate file. Please check the install log for details."),a}try{await ql.writeFile(n,r.key)}catch(a){throw Fl.error(a),console.error("There was a problem creating the private key file. Please check the install log for details."),a}try{await ql.writeFile(i,ln.CERTIFICATE_VALUES.cert)}catch(a){throw Fl.error(a),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),a}Mg(s,n,i)}o(i0,"generateKeys");function Mg(e,t,r){let s=s0(Object.keys(xl.CONFIG_PARAM_MAP),!0),n=xl.CONFIG_PARAMS,i={[n.CLUSTERING_TLS_CERTIFICATE]:s[n.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]?s[n.CLUSTERING_TLS_CERTIFICATE]:e,[n.CLUSTERING_TLS_PRIVATEKEY]:s[n.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]?s[n.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]:t,[n.CLUSTERING_TLS_CERT_AUTH]:s[n.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]?s[n.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]:r,[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE]:s[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE.toLowerCase()]:e,[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY]:s[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY.toLowerCase()]:t,[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH]:s[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH.toLowerCase()]:r,[n.OPERATIONSAPI_TLS_CERTIFICATE]:s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]?s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]:e,[n.OPERATIONSAPI_TLS_PRIVATEKEY]:s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]?s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]:t,[n.OPERATIONSAPI_TLS_CERT_AUTH]:s[n.OPERATIONSAPI_TLS_CERT_AUTH.toLowerCase()]?s[n.OPERATIONSAPI_TLS_CERT_AUTH.toLowerCase()]:r};n0.updateConfigValue(void 0,void 0,i,!1,!0)}o(Mg,"updateConfigCert")});var vg=f((Ij,Bg)=>{"use strict";var Dc=require("path"),Pr=require("fs-extra"),o0=Pl(),ms=p(),Ug=Ve(),kl=H(),At=T(),Uc=O(),a0=require("properties-reader"),c0=ht(),_0=zu(),u0=es(),l0=require("util"),E0=l0.promisify(u0.searchByValue),d0=_s(),S0=Ig(),f0=ke(),h0=wg(),Pg=Vl(),T0=Ic(),Gi=new o0("4.0.0"),Hg=[],Bi,vi;async function R0(){try{if(await T0.upgradeCertsPrompt()){if(console.log("Generating new certificates."),Bi){let t=Uc.changeExtension(Bi,".bak");await Pr.move(Bi,t)}if(vi){let t=Uc.changeExtension(vi,".bak");await Pr.move(vi,t)}await Pg.generateKeys()}else console.log("Using existing certificates."),Pg.updateConfigCert(Bi,vi,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}o(R0,"generateNewKeys");async function m0(){console.log("Updating HarperDB nodes."),ms.info("Updating HarperDB nodes.");let e=[];try{let t=new c0(At.SYSTEM_SCHEMA_NAME,At.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await E0(t)),s=[];for(let i=0,a=r.length;i<a;i++){let c=r[i];if(!f0.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let l=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(l),l}let _={host:c.host,port:c.port};e.push(_);let u=[];for(let l=0,E=c.subscriptions.length;l<E;l++){let d=c.subscriptions[l],S=d.channel.split(":");u.push({schema:S[0],table:S[1],publish:d.publish,subscribe:d.subscribe})}s.push({name:c.name,subscriptions:u,system_info:{hdb_version:At.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(Uc.isEmptyOrZeroLength(s))return;let n=new _0(At.SYSTEM_SCHEMA_NAME,At.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,s);await d0.update(n)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{S0.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}o(m0,"updateNodes");async function A0(){let e=kl.get(At.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(Dc.join("config","settings.js"))){ms.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),ms.info(t);let r=Dc.dirname(e),s=kl.get(At.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),n=Dc.join(s,"backup","4_0_0_upgrade_settings.bak"),i=Dc.join(s,At.HDB_CONFIG_FILE);try{ms.info(`Backing up old settings file to: ${n}`),console.log(`Backing up old settings file to: ${n}`),Pr.copySync(e,n)}catch(E){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),E}try{ms.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),ms.info("Updating env variables with new settings values");let E=Ug.initOldConfig(e);Bi=E[At.CONFIG_PARAMS.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()],vi=E[At.CONFIG_PARAMS.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()],Ug.createConfigFile(E)}catch(E){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),E}let a=Uc.getPropsFilePath();Pr.accessSync(a,Pr.constants.F_OK|Pr.constants.R_OK);let _=a0(a).get(At.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
80
+ install_user = ${_}`;try{Pr.writeFileSync(a,u)}catch(E){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),E}try{kl.initSync(!0)}catch(E){throw console.error("Unable to initialize new properties. Please check the log for details."),E}let l="New settings file for 4.0.0 upgrade successfully created.";try{Pr.removeSync(r),console.log(l),ms.info(l)}catch(E){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),E}}o(A0,"updateSettingsFile_4_0_0");Gi.async_functions.push(A0);Gi.async_functions.push(R0);Gi.async_functions.push(h0);Gi.async_functions.push(m0);Hg.push(Gi);Bg.exports=Hg});var Yl=f((bj,xg)=>{"use strict";var As=O(),g0=T(),Gg=p(),{DATA_VERSION:p0,UPGRADE_VERSION:N0}=g0.UPGRADE_JSON_FIELD_NAMES_ENUM,qg=hg(),Pc=vg(),gs=new Map;qg&&qg.forEach(e=>{gs.set(e.version,e)});Pc&&Pc.forEach(e=>{gs.set(e.version,e)});Pc&&Pc.forEach(e=>{gs.set(e.version,e)});function O0(){return[...gs.keys()].sort(As.compareVersions)}o(O0,"getSortedVersions");function Fg(e){let t=e[p0],r=e[N0];return As.isEmptyOrZeroLength(t)||As.isEmptyOrZeroLength(r)?(Gg.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),Gg.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...gs.keys()].sort(As.compareVersions).filter(function(s){return As.compareVersions(s,t)>0&&As.compareVersions(s,r)<=0})}o(Fg,"getVersionsForUpgrade");function I0(e){return Fg(e).length>0}o(I0,"hasUpgradesRequired");function C0(e){return As.isEmptyOrZeroLength(e)?null:gs.has(e)?gs.get(e):null}o(C0,"getDirectiveByVersion");xg.exports={getSortedVersions:O0,getDirectiveByVersion:C0,getVersionsForUpgrade:Fg,hasUpgradesRequired:I0}});var Hc=f((yj,Wg)=>{"use strict";var kg=require("util"),$l=require("chalk"),b0=require("os"),Yg=_s(),L0=es(),Ze=T(),$g=ng(),Wl=yu(),{UpgradeObject:Vg}=ag(),{forceDowngradePrompt:y0}=Ic(),w0=Yr(),qi=p(),En=O(),M0=ns(),D0=Yl(),U0=kg.promisify(L0.searchByValue),Ql=kg.promisify(M0.setSchemaDataToGlobal),P0="info_id",H0="2.9.9",B0="3.0.0";async function v0(e){let t=new $g.HdbInfoInsertObject(1,e,e),r=new Wl.InsertObject(Ze.OPERATIONS_ENUM.INSERT,Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Ze.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await Ql(),Yg.insert(r)}o(v0,"insertHdbInstallInfo");async function Kl(e){let t,r=await Kg(),s=new Map([[0,{}]]);for(let c of r)s.set(c.info_id,c);let i=Math.max.apply(null,[...s.keys()])+1;t=new $g.HdbInfoInsertObject(i,e,e);let a=new Wl.InsertObject(Ze.OPERATIONS_ENUM.INSERT,Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Ze.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await Ql(),Yg.insert(a)}o(Kl,"insertHdbUpgradeInfo");async function Kg(){let e=new Wl.NoSQLSeachObject(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,P0,Ze.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await U0(e))}catch(r){qi.info(r)}return t}o(Kg,"getAllHdbInfoRecords");async function G0(){let e=await Kg();if(e.length===0)return;let t,r=new Map;for(let n of e)r.set(n.info_id,n);let s=Math.max.apply(null,[...r.keys()]);return t=r.get(s),t}o(G0,"getLatestHdbInfoRecord");async function q0(){qi.info("Checking if HDB software has been updated");try{let e=w0.version(),t=await G0(),r;if(En.isEmpty(t))r=H0;else if(r=t.data_version_num,En.compareVersions(r.toString(),e.toString())>0){if(!En.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log($l.yellow(`This instance's data was last run on version ${r}`)),console.error($l.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${b0.EOL}${Ze.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");En.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log($l.yellow(`This instance's data was last run on version ${r}`)),await y0(new Vg(r,e))?await Kl(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(await Ql(),F0(r),e.toString()===r.toString())return;let s=new Vg(r,e);if(D0.hasUpgradesRequired(s))return s;En.compareVersions(s.data_version.toString(),s.upgrade_version.toString())<0&&(await Kl(s.upgrade_version),qi.notify(`HarperDB running on upgraded version: ${s.upgrade_version}`))}catch(e){throw qi.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),qi.fatal(e),e}}o(q0,"getVersionUpdateInfo");function F0(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${Ze.HDB_SUPPORT_ADDRESS}`;if(!global.hdb_schema.system.hasOwnProperty("hdb_info"))throw console.log(t),new Error(t);if(!En.isEmpty(e)&&e<B0)throw console.log(t),new Error(t)}o(F0,"checkIfInstallIsSupported");Wg.exports={insertHdbInstallInfo:v0,insertHdbUpgradeInfo:Kl,getVersionUpdateInfo:q0}});var Zg=f((Mj,Xg)=>{"use strict";var jl=require("joi"),{boolean:x0,string:Qg,number:V0}=jl.types(),jg=require("fs-extra"),Fi=T(),Jg=require("path"),k0=Fe();Xg.exports=Y0;function Y0(e){let t=Qg.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=jl.object({[Fi.INSTALL_PROMPTS.ROOTPATH]:jl.custom($0),[Fi.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:V0.min(0),[Fi.INSTALL_PROMPTS.TC_AGREEMENT]:Qg.valid("yes","YES","Yes"),[Fi.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Fi.INSTALL_PROMPTS.CLUSTERING_ENABLED]:x0});return k0.validateBySchema(e,r)}o(Y0,"installValidator");function $0(e,t){if(jg.existsSync(Jg.join(e,"system/hdb_user/data.mdb"))||jg.existsSync(Jg.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}o($0,"validateRootAvailable")});var ep=f((Uj,zg)=>{"use strict";var{mkdirpSync:K0}=require("fs-extra"),gt=require("path"),vt=T(),vc=p(),Bc=k(),Jl=jt(),W0=K();zg.exports=Q0;async function Q0(e){vc.trace("Mounting HarperDB");let t=gt.join(e,vt.SCHEMA_DIR_NAME,vt.SYSTEM_SCHEMA_NAME);ct(e),ct(gt.join(e,"backup")),ct(gt.join(e,"trash")),ct(gt.join(e,"keys")),ct(gt.join(e,"keys",vt.LICENSE_FILE_NAME)),ct(gt.join(e,"log")),ct(gt.join(e,"doc")),ct(gt.join(e,"schema")),ct(t),ct(gt.join(e,vt.TRANSACTIONS_DIR_NAME)),ct(gt.join(e,"clustering","leaf")),ct(gt.join(e,"custom_functions")),await j0()}o(Q0,"mountHdb");async function j0(){let e,t=La(),r=Object.keys(Jl);for(let s=0;s<r.length;s++){let n=r[s],i,a=Jl[n].hash_attribute;try{let _=W0.initSystemSchemaPaths(vt.SYSTEM_SCHEMA_NAME,n);e=e??pu();let u=new t(vt.SYSTEM_SCHEMA_NAME,n,a);await e(void 0,u),i=await Bc.openEnvironment(_,n)}catch(_){throw vc.error(`issue creating environment for ${vt.SYSTEM_SCHEMA_NAME}.${n}: ${_}`),_}let c=Jl[n].attributes;for(let _=0;_<c.length;_++){let u=c[_].attribute;try{vt.TIME_STAMP_NAMES.indexOf(u)>=0?await Bc.createDBI(i,u,!0):u===a?await Bc.createDBI(i,u,!1,!0):await Bc.createDBI(i,u,!0,!1)}catch(l){throw vc.error(`issue creating dbi for ${vt.SYSTEM_SCHEMA_NAME}.${n}.${u}: ${l}`),l}}}}o(j0,"createLMDBTables");function ct(e){K0(e,{mode:vt.HDB_FILE_PERMISSIONS}),vc.info(`Directory ${e} created`)}o(ct,"makeDirectory")});var op=f((Hj,ip)=>{var Hr=require("validate.js"),rp=Fe(),dn=T(),{handleHDBError:J0,hdb_errors:X0}=J(),{HDB_ERROR_MSGS:te,HTTP_STATUS_CODES:Z0}=X0,Xl=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),z0={STRUCTURE_USER:"structure_user"},tp=Object.values(dn.ROLE_TYPES_ENUM),ex="attribute_permissions",tx="attribute_name",{PERMS_CRUD_ENUM:Sn}=dn,rx=[ex,...Object.values(Sn)],sp=[Sn.READ,Sn.INSERT,Sn.UPDATE],sx=[tx,...sp];function nx(e){let t=Xl();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,np(e,t)}o(nx,"addRoleValidation");function ix(e){let t=Xl();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,np(e,t)}o(ix,"alterRoleValidation");function ox(e){let t=Xl();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,rp.validateObject(e,t)}o(ox,"dropRoleValidation");var ax=["operation","role","id","permission","hdb_user","hdb_auth_header"];function np(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let a=0,c=s.length;a<c;a++)ax.includes(s[a])||n.push(s[a]);n.length>0&&ie(te.INVALID_ROLE_JSON_KEYS(n),r);let i=rp.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{ie(a,r)}),e.permission){let a=cx(e);a&&ie(a,r),tp.forEach(c=>{e.permission[c]&&!Hr.isBoolean(e.permission[c])&&ie(te.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let a in e.permission)if(tp.indexOf(a)<0){if(a===z0.STRUCTURE_USER){let _=e.permission[a];if(typeof _=="boolean")continue;if(Array.isArray(_)){for(let u=0,l=_.length;u<l;u++){let E=_[u];global.hdb_schema[E]||ie(te.SCHEMA_NOT_FOUND(E),r)}continue}ie(te.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let c=e.permission[a];if(!a||!global.hdb_schema[a]){ie(te.SCHEMA_NOT_FOUND(a),r);continue}if(c.tables)for(let _ in c.tables){let u=c.tables[_];if(!_||!global.hdb_schema[a][_]){ie(te.TABLE_NOT_FOUND(a,_),r);continue}if(Object.keys(u).forEach(l=>{rx.includes(l)||ie(te.INVALID_PERM_KEY(l),r,a,_)}),Object.values(Sn).forEach(l=>{Hr.isDefined(u[l])?Hr.isBoolean(u[l])||ie(te.TABLE_PERM_NOT_BOOLEAN(l),r,a,_):ie(te.TABLE_PERM_MISSING(l),r,a,_)}),Hr.isDefined(u.attribute_permissions)){if(!Hr.isArray(u.attribute_permissions)){ie(te.ATTR_PERMS_NOT_ARRAY,r,a,_);continue}}else{ie(te.ATTR_PERMS_ARRAY_MISSING,r,a,_);continue}if(u.attribute_permissions){let l=global.hdb_schema[a][_].attributes.map(({attribute:d})=>d),E={read:!1,insert:!1,update:!1};for(let d in u.attribute_permissions){let S=u.attribute_permissions[d];if(Object.keys(S).forEach(m=>{!sx.includes(m)&&m!==Sn.DELETE&&ie(te.INVALID_ATTR_PERM_KEY(m),r,a,_)}),!Hr.isDefined(S.attribute_name)){ie(te.ATTR_PERM_MISSING_NAME,r,a,_);continue}let R=S.attribute_name;if(!l.includes(R)){ie(te.INVALID_ATTRIBUTE_IN_PERMS(R),r,a,_);continue}sp.forEach(m=>{Hr.isDefined(S[m])?Hr.isBoolean(S[m])||ie(te.ATTR_PERM_NOT_BOOLEAN(m,R),r,a,_):ie(te.ATTR_PERM_MISSING(m,R),r,a,_)}),!E.read&&S.read===!0&&(E.read=!0),!E.insert&&S.insert===!0&&(E.insert=!0),!E.update&&S.update===!0&&(E.update=!0)}if(u.read===!1&&E.read===!0||u.insert===!1&&E.insert===!0||u.update===!1&&E.update===!0){let d=`${a}.${_}`;ie(te.MISMATCHED_TABLE_ATTR_PERMS(d),r,a,_)}}}}return _x(r)}o(np,"customValidate");ip.exports={addRoleValidation:nx,alterRoleValidation:ix,dropRoleValidation:ox};function cx(e){let{operation:t,permission:r}=e;if(t===dn.OPERATIONS_ENUM.ADD_ROLE||t===dn.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return te.SU_CU_ROLE_COMBINED_ERROR;{let a=r.super_user?dn.ROLE_TYPES_ENUM.SUPER_USER:dn.ROLE_TYPES_ENUM.CLUSTER_USER;return te.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(cx,"validateNoSUPerms");function _x(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:te.ROLE_PERMS_ERROR,...e};return J0(new Error,s,Z0.BAD_REQUEST)}else return null}o(_x,"generateRolePermResponse");function ie(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}o(ie,"addPermError")});var dp=f((vj,Ep)=>{"use strict";var ap=_s(),cp=es(),ux=Du(),eE=op(),tE=ni(),lx=require("uuid").v4,rE=require("util"),Ex=Vs(),ir=T(),_p=O(),sE=rE.promisify(cp.searchByValue),dx=rE.promisify(cp.searchByHash),Sx=rE.promisify(ux.delete),fx=ht(),hx=_i(),{hdb_errors:Tx,handleHDBError:xi}=J(),{HDB_ERROR_MSGS:up,HTTP_STATUS_CODES:Zl}=Tx,{UserEventMsg:nE}=os();Ep.exports={addRole:Rx,alterRole:Ax,dropRole:gx,listRoles:lp};function zl(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}o(zl,"scrubRoleDetails");async function Rx(e){let t=eE.addRoleValidation(e);if(t)throw t;if(!(await Ex.getLicense()).enterprise){let a=await lp();if(mx(e,a))throw new Error(`Your current license only supports ${ir.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} cluster_user role. ${ir.SUPPORT_HELP_MSG}`);if(a.length>=2)throw new Error(`Your current license only supports ${ir.BASIC_LICENSE_MAX_NON_CU_ROLES+ir.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} roles. ${ir.SUPPORT_HELP_MSG}`)}e=zl(e);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await sE(s)||[])}catch(a){throw xi(a)}if(n&&n.length>0)throw xi(new Error,up.ROLE_ALREADY_EXISTS(e.role),Zl.CONFLICT,void 0,void 0,!0);e.id||(e.id=lx());let i={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await ap.insert(i),tE.signalUserChange(new nE(process.pid)),e=zl(e),e}o(Rx,"addRole");function mx(e,t){let r=!1;if(e.permission.cluster_user===!0)for(let s=0;s<t.length;s++){let i=t[s].permission;if(!_p.isEmpty(i)&&i.cluster_user===!0)return!0}return r}o(mx,"checkClusterUserRole");async function Ax(e){let t=eE.alterRoleValidation(e);if(t)throw t;e=zl(e);let r={operation:"update",schema:"system",table:"hdb_role",hash_attribute:"rolename",records:[e]};try{await ap.update(r)}catch(s){throw xi(s)}return tE.signalUserChange(new nE(process.pid)),e}o(Ax,"alterRole");async function gx(e){let t=eE.dropRoleValidation(e);if(t)throw xi(new Error,t,Zl.BAD_REQUEST,void 0,void 0,!0);let r=new hx(ir.SYSTEM_SCHEMA_NAME,ir.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await dx(r));if(s.length===0)throw xi(new Error,up.ROLE_NOT_FOUND,Zl.NOT_FOUND,void 0,void 0,!0);let n=new fx(ir.SYSTEM_SCHEMA_NAME,ir.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await sE(n)),a=!1;if(_p.isEmptyOrZeroLength(i)===!1){for(let _=0;_<i.length;_++)if(i[_].active===!0){a=!0;break}}if(a===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Sx(c),tE.signalUserChange(new nE(process.pid)),`${s[0].role} successfully deleted`}o(gx,"dropRole");async function lp(){return sE({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}o(lp,"listRoles")});var oE=f((qj,Np)=>{"use strict";var Vi=require("os"),Rp=require("inquirer"),Fr=require("fs-extra"),px=require("properties-reader"),Os=require("chalk"),ps=require("path"),Nx=require("human-readable-ids").hri,Ox=require("ora"),oe=p(),Gr=H(),ki=O(),iE=kr(),mp=Hc(),Ap=Yr(),C=T(),Ix=Zg(),Cx=ep(),gp=Ve(),bx=Nr(),Lx=dp(),yx=Ml(),wx=ns(),Mx=require("util").promisify,Dx=Mx(wx.setSchemaDataToGlobal),Ux=Vl(),fn=o(e=>e,"PROMPT_ANSWER_TRANSFORMER"),Oe=o(e=>Os.magenta.bold(e),"HDB_PROMPT_MSG"),Px="https://harperdb.io/legal/end-user-license-agreement",qr=Vi.EOL,Br="",Hx="yes",Sp="Starting HarperDB install...",fp="HarperDB installation was successful.",hp="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Bx="An out of date version of HarperDB is already installed.",Tp="It appears HarperDB is already installed. Exiting install...",vx="Aborting install",Gx=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),qx=new RegExp(/^[^\s.,*>]+$/),Fx=Vi.homedir(),xx=ps.join(Fx,C.HDB_ROOT_DIR_NAME),Vx=9925,kx="HDB_ADMIN",Yx="CLUSTER_USER",Be={DESTINATION:"Please enter a destination for HarperDB:",HDB_PORT:"Please enter a server listening port for HarperDB:",HDB_USERNAME:"Please enter a username for the HDB_ADMIN:",HDB_PASS:"Please enter a password for the HDB_ADMIN:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:"},Ns;Np.exports=$x;async function $x(){if(console.log(Oe(qr+Sp+qr)),oe.notify(Sp),ki.isEmptyOrZeroLength(Vi.userInfo().uid))throw`Installing user: ${Vi.userInfo().username} has no pid. Please install with a properly created user. Cancelling install.`;let e=Wx(),t=Ix(e);if(t)throw t.message;await Qx(),await jx(e);let r=await Kx(e),s=Ox({prefixText:Oe("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),Ns=r[C.INSTALL_PROMPTS.ROOTPATH],ki.isEmpty(Ns))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Gr.setHdbBasePath(Ns),await Cx(Ns),await Jx(),await Xx(r),oe.initLogSettings(!0),await zx(r),await eV(r),await Ux.generateKeys(),await tV(),yx(),s.stop(),console.log(Oe(qr+fp+qr)),oe.notify(fp)}o($x,"install");async function Kx(e){oe.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:fn,when:vr(e[C.INSTALL_PROMPTS.ROOTPATH],Be.DESTINATION),name:C.INSTALL_PROMPTS.ROOTPATH,prefix:Br,default:xx,validate:async n=>Gt(n)?Gt(n):await Fr.pathExists(ps.join(n,"system","hdb_user.mdb"))?`'${n}' is already in use. Please enter a different path.`:!0,message:Oe(Be.DESTINATION)},{type:"input",transformer:fn,when:vr(e[C.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT],Be.HDB_PORT),name:C.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:Br,default:Vx,validate:n=>Gx.test(n)?!0:"Invalid port.",message:Oe(Be.HDB_PORT)},{type:"input",transformer:fn,when:vr(e[C.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Be.HDB_USERNAME),name:C.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Br,default:kx,validate:n=>Gt(n)?Gt(n):(t=n,!0),message:Oe(Be.HDB_USERNAME)},{type:"password",when:vr(e[C.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Be.HDB_PASS),name:C.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Br,validate:n=>Gt(n)?Gt(n):!0,message:Oe(Be.HDB_PASS)}];if(ki.autoCastBoolean(e[C.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let n=[{type:"input",transformer:fn,when:vr(e[C.INSTALL_PROMPTS.CLUSTERING_NODENAME],Be.NODE_NAME),name:C.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Br,default:Nx.random(),validate:i=>qx.test(i)?!0:"Invalid node name, must not contain ., * or >",message:Oe(Be.NODE_NAME)},{type:"input",transformer:fn,when:vr(e[C.INSTALL_PROMPTS.CLUSTERING_USER],Be.CLUSTER_USERNAME),name:C.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Br,default:Yx,validate:i=>Gt(i)?Gt(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:Oe(Be.CLUSTER_USERNAME)},{type:"password",when:vr(e[C.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Be.CLUSTER_PASS),name:C.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Br,validate:i=>Gt(i)?Gt(i):!0,message:Oe(Be.CLUSTER_PASS)}];r.push(...n)}let s=await Rp.prompt(r);if(Object.keys(s).length===0)return e;for(let n in s)e[n]===void 0&&(e[n]=s[n]);return e}o(Kx,"installPrompts");function vr(e,t){return e!==void 0?(t.includes("password")?(console.log(`${Oe(t)} ${Os.gray("[hidden]")}`),oe.trace(`${Oe(t)} [hidden]`)):(console.log(`${Oe(t)} ${e}`),oe.trace(`${Oe(t)} ${e}`)),!1):!0}o(vr,"displayCmdEnvVar");function Gt(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}o(Gt,"checkForEmptyValue");function Wx(){let e=Object.keys(C.INSTALL_PROMPTS),t=iE(e),r=iE(Object.keys(C.CONFIG_PARAM_MAP),!0),s={};for(let n of e){let i=C.CONFIG_PARAM_MAP[n.toLowerCase()];t[n]?i===void 0?s[n]=t[n]:s[i.toUpperCase()]=t[n]:i!==void 0&&r[i.toLowerCase()]&&(s[n]=r[i.toLowerCase()])}return s}o(Wx,"checkForPromptOverride");async function Qx(){oe.trace("Checking for existing install.");let e=ki.getPropsFilePath(),t=await Fr.pathExists(e),r;if(t){oe.trace(`Install found an existing boot prop file at:${e}`);let s=px(e),n=gp.getConfigValue(C.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||s.get(C.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Fr.pathExists(n)}if(r){if(oe.trace(`Install found existing HDB config at:${e}`),await mp.getVersionUpdateInfo()){let n=`Please use \`harperdb upgrade\` to update to ${Ap.version()}. Exiting install...`;console.log(qr+Os.magenta.bold(Bx)),console.log(Os.magenta.bold(n)),oe.error(n)}else console.log(qr+Os.magenta.bold(Tp)),oe.error(Tp);process.exit(0)}}o(Qx,"checkForExistingInstall");async function jx(e){oe.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Px}${qr}and can be viewed by typing or copying and pasting the URL into your web browser.${qr}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:Br,transformer:fn,when:vr(e[C.INSTALL_PROMPTS.TC_AGREEMENT],t),name:C.INSTALL_PROMPTS.TC_AGREEMENT,message:Oe(t),validate:n=>n.toLowerCase()==="yes"||n.toLowerCase()==="no"?!0:Os.yellow("Please enter 'yes' or 'no'")},s=await Rp.prompt([r]);s[C.INSTALL_PROMPTS.TC_AGREEMENT]&&s[C.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Hx&&(console.log(Os.yellow(hp)),oe.error(hp),process.exit(0))}o(jx,"termsAgreement");async function Jx(){let e=ps.join(Ns,C.HDB_CONFIG_FILE),t;try{t=Vi.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(!t)throw new Error("Could not determine current username in this environment. Please set the USERNAME environment variable in your OS and try install again.");let r=`settings_path = ${e}
81
+ install_user = ${t}`,s=ki.getHomeDir(),n=ps.join(s,C.HDB_HOME_DIR_NAME),i=ps.join(n,C.LICENSE_KEY_DIR_NAME);try{Fr.mkdirpSync(n,{mode:C.HDB_FILE_PERMISSIONS}),Fr.mkdirpSync(i,{mode:C.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${C.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let a=ps.join(n,C.BOOT_PROPS_FILE_NAME);try{await Fr.writeFile(a,r)}catch(c){throw oe.error(`There was an error creating the boot file at path: ${a}`),c}Gr.setProperty(C.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Gr.setProperty(C.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Gr.setProperty(Gr.BOOT_PROPS_FILE_PATH,a)}o(Jx,"createBootPropertiesFile");async function Xx(e){oe.trace("Creating HarperDB config file");let t=iE(Object.keys(C.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{gp.createConfigFile(t),Gr.initSync()}catch(r){Zx(r)}}o(Xx,"createConfigFile");function Zx(e){oe.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(vx);let t=ps.resolve(Gr.get(Gr.BOOT_PROPS_FILE_PATH),"../");t&&Fr.removeSync(t),Ns&&Fr.removeSync(Ns),process.exit(1)}o(Zx,"rollbackInstall");async function pp(e,t){oe.trace("Creating admin user"),await Dx();let r;try{r=await Lx.addRole(e)}catch(s){throw new Error(`Error creating role - ${s}`)}if(t)try{t.role=r.role,await bx.addUser(t)}catch(s){throw new Error(`Error creating user - ${s}`)}}o(pp,"createAdminUser");async function zx(e){oe.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[C.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[C.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await pp(t,r),delete e[C.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[C.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}o(zx,"createSuperUser");async function eV(e){oe.trace("Creating Cluster user.");let t;e[C.INSTALL_PROMPTS.CLUSTERING_USER]&&e[C.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[C.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[C.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await pp({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[C.INSTALL_PROMPTS.CLUSTERING_USER],delete e[C.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}o(eV,"createClusterUser");async function tV(){let e=Ap.version();if(e)await mp.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}o(tV,"insertHdbVersionInfo")});var aE=f((xj,Ip)=>{var rV=require("os"),Op=H();Ip.exports={checkPermission:sV};function sV(){if(rV.userInfo().username!==Op.get("install_user"))throw new Error(`Error: Must execute as ${Op.get("install_user")}`)}o(sV,"checkPermission")});var Lp=f((kj,bp)=>{"use strict";var cE=O(),ze=p(),Cp=Yl();bp.exports={processDirectives:nV};async function nV(e){console.log("Starting upgrade process...");let t=Cp.getVersionsForUpgrade(e),r=aV(t),s=[],n=r.length;for(let i=0;i<n;i++){let a=r[i],c=`Running upgrade for version ${a.version}`;ze.notify(c),console.log(c);let _=[],u=[];try{_=iV(a.sync_functions)}catch(l){throw ze.error(`Error while running an upgrade script for ${a.version}`),l}try{u=await oV(a.async_functions)}catch(l){throw ze.error(`Error while running an upgrade script for ${a.version}`),l}s.push(..._,...u)}return s}o(nV,"processDirectives");function iV(e){if(cE.isEmptyOrZeroLength(e))return ze.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ze.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(ze.info(`Running function ${r.name}`),!(r instanceof Function)){ze.info("Variable being processed is not a function");continue}let s=r();ze.info(s),t.push(s)}return t}o(iV,"runSyncFunctions");async function oV(e){if(cE.isEmptyOrZeroLength(e))return ze.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ze.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let s=0;s<r;s++){let n=e[s];if(ze.info(`Running function ${n.name}`),!(n instanceof Function)){ze.info("Variable being processed is not a function");continue}let i=await n();ze.info(i),t.push(i)}return t}o(oV,"runAsyncFunctions");function aV(e){if(cE.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let s=Cp.getDirectiveByVersion(r);s&&t.push(s)}return t}o(aV,"getUpgradeDirectivesToInstall")});var lE=f(($j,Pp)=>{"use strict";var Gc=H();Gc.initSync();var Dp=require("chalk"),yp=require("fs-extra"),ar=p(),or=T(),wp=Yr(),cV=Lp(),_E=O(),Up=Hc(),_V=Ic(),Mp=i_(),uV=ns(),lV=require("util").promisify,EV=lV(uV.setSchemaDataToGlobal),uE,{UPGRADE_VERSION:qc}=or.UPGRADE_JSON_FIELD_NAMES_ENUM;Pp.exports={upgrade:dV};async function dV(e){await EV(),uE===void 0&&(uE=on()),yp.existsSync(Gc.get(Gc.BOOT_PROPS_FILE_PATH))||(Yi("The hdb_boot_properties file was not found. Please install HDB.",or.LOG_LEVELS.ERROR),process.exit(1)),yp.existsSync(Gc.get(or.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(Yi("The hdb settings file was not found. Please make sure HDB is installed.",or.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await Up.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),Yi(`This version of HarperDB is ${wp.version()}`,or.LOG_LEVELS.INFO);let r=t[qc]?t[qc]:wp.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${or.HDB_SUPPORT_ADDRESS}`),ar.notify("Missing new version field from upgrade info object"),process.exit(1)),await SV();let s,n=0;try{s=await _V.forceUpdatePrompt(t)}catch(i){ar.error("There was an error when prompting user about upgrade."),ar.error(i),s=!1,n=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(n)),ar.info(`Starting upgrade to version ${r}`),await fV(t),Yi(`HarperDB was successfully upgraded to version ${t[qc]}`,or.LOG_LEVELS.INFO)}o(dV,"upgrade");async function SV(){let e=!1,t=await Mp.findPs(or.HDB_PROC_NAME);if(_E.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await Mp.findPs("hdb_express");_E.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await uE.list();_E.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(Dp.red(r)),ar.error(r),process.exit(1)}}o(SV,"checkIfRunning");async function fV(e){try{await cV.processDirectives(e)}catch(t){throw Yi("There was an error during the data upgrade. Please check the logs.",or.LOG_LEVELS.ERROR),t}try{await Up.insertHdbUpgradeInfo(e[qc])}catch(t){ar.error("Error updating the 'hdb_info' system table."),ar.error(t)}}o(fV,"runUpgrade");function Yi(e,t=void 0){t||(t=ar.info),ar[t](e),console.log(Dp.magenta(e))}o(Yi,"printToLogAndConsole")});var qp=f((Wj,Gp)=>{"use strict";var{promises:dE,createReadStream:hV,createWriteStream:TV}=require("fs"),{createGzip:RV}=require("zlib"),{promisify:mV}=require("util"),{pipeline:AV}=require("stream"),gV=mV(AV),pV=require("path"),Cs=H();Cs.initSync();var Is=p(),{CONFIG_PARAMS:$i,ITC_EVENT_TYPES:NV}=T(),{onMessageFromWorkers:OV}=Xr(),IV=6e4,CV="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",bV="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",EE,Bp;Gp.exports=vp;OV(e=>{e.type===NV.RESTART&&(Cs.initSync(!0),clearInterval(Bp),Cs.get($i.LOGGING_ROTATION_ENABLED)&&vp())});async function vp(){try{let e=Is.getLogFilePath(),t=Cs.get($i.LOGGING_ROTATION_MAXSIZE),r=Cs.get($i.LOGGING_ROTATION_INTERVAL);if(!t&&!r){Is.error(CV);return}let s=Cs.get($i.LOGGING_ROTATION_PATH);if(!s){Is.error(bV);return}let n;if(t){let a=t.slice(-1),c=t.slice(0,-1);a==="G"?n=c*1e9:a==="M"?n=c*1e6:n=c*1e3}let i;if(r){let a=r.slice(-1),c=r.slice(0,-1);a==="D"?i=c*1440:a==="H"?i=c*60:i=c}EE=Date.now()/6e4,Is.trace("Log rotate enabled, maxSize:",t,"interval:",r),Bp=setInterval(async()=>{if(n){let a;a=await dE.stat(e),a.size>=n&&await Hp(e,s)}i&&Date.now()/6e4-EE>=i&&(await Hp(e,s),EE=Date.now()/6e4)},IV).unref()}catch(e){Is.error(e)}}o(vp,"logRotator");async function Hp(e,t){let r=Cs.get($i.LOGGING_ROTATION_COMPRESS),s=pV.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await gV(hV(e),RV(),TV(s)),await dE.unlink(e)):await dE.rename(e,s),Is.closeLogFile(),Is.notify(`hdb.log rotated, old log moved to ${s}`)}o(Hp,"moveLogFile")});var $p=f((jj,Yp)=>{"use strict";var{startWorker:LV,setMonitorListener:yV}=Xr(),{createServer:wV}=require("net"),MV=H(),DV=T(),Fp=p(),UV=Us(),bs=[];Yp.exports={startHTTPThreads:PV,startSocketServer:HV,updateWorkerIdleness:kp,mostIdleRouting:Vc,remoteAffinityRouting:Vp};MV.initSync();function PV(e=2){for(let t=0;t<e;t++)LV("server/threads/threadHTTPServer.js",{name:DV.THREAD_TYPES.HTTP,onStarted(r){bs.push(r),r.expectedIdle=1,r.lastIdle=0,r.requests=1,r.on("message",n=>{if(n.requestId){let i=xc.get(n.requestId);i&&i(n)}}),r.on("exit",s),r.on("shutdown",s);function s(){let n=bs.indexOf(r);n>-1&&bs.splice(n,1)}o(s,"removeWorker")}});return bs}o(PV,"startHTTPThreads");function HV(e,t=0,r){let s;r?r==="ip"?s=Vp:s=BV(r):s=Vc;let n=wV({allowHalfOpen:!0,pauseOnConnect:!s.readsData},i=>{s(i,(a,c)=>{if(!a)return Fp.error("No HTTP workers found");a.requests++,i._handle.fd>=0?a.postMessage({type:e,fd:i._handle.fd,data:c}):qV(i,a,e)})}).listen(t);return Fp.info(`HarperDB ${UV.version} Server running on port ${t}`),n}o(HV,"startSocketServer");var Fc=0;function Vc(e,t){let r,s=0;for(let n of bs){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=Fc)return Fc=i,t(r);s=i}Fc=0,t(r)}o(Vc,"findMostIdleWorker");var xp=36e5,hn=new Map;function Vp(e,t){let r=e.remoteAddress,s=hn.get(r),n=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=n,t(s.worker);Vc(e,i=>{hn.set(r,{worker:i,lastUsed:n}),t(i)})}o(Vp,"findByRemoteAddressAffinity");function BV(e){let t=new RegExp(`${e}:s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){s.on("data",i=>{s._handle.readStop();let c=i.toString("latin1").match(t)?.[1],_=hn.get(c),u=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=u,n(_.worker);Vc(s,l=>{hn.set(c,{worker:l,lastUsed:u}),n(l,i)})})}o(r,"findByHeaderAffinity")}o(BV,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of hn)r.lastUsed+xp<e&&hn.delete(t)},xp).unref();var vV=1e3;function kp(){Fc=0;for(let e of bs)e.expectedIdle=e.recentELU.idle+vV,e.requests=1;bs.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}o(kp,"updateWorkerIdleness");yV(kp);var xc=new Map,GV=1;function qV(e,t,r){let s=GV++;t.postMessage({type:r,requestId:s,event:"connection"}),e.on("data",n=>{let i=n.toString("latin1");t.postMessage({type:r,requestId:s,data:i,event:"data"})}).on("close",n=>{t.postMessage({type:r,requestId:s,event:"close",hadError:n})}).on("error",n=>{t.postMessage({type:r,requestId:s,event:"error",error:n})}).on("drain",n=>{t.postMessage({type:r,requestId:s,event:"drain",error:n})}).on("end",()=>{t.postMessage({type:r,requestId:s,event:"end"})}).resume(),xc.set(s,n=>{n.event=="data"&&e.write(Buffer.from(n.data,"latin1")),n.event=="end"&&(e.end(n.data&&Buffer.from(n.data,"latin1")),xc.delete(s)),n.event=="destroy"&&(e.destroy(),xc.delete(s))})}o(qV,"proxySocket")});var Yc=f((eJ,zp)=>{"use strict";var Ie=H();Ie.initSync();var Xj=yl(),X=T(),ae=p(),Ls=require("fs-extra"),Tn=require("path"),FV=Ml(),xV=oE(),SE=require("chalk"),VV=Us(),kV=aE(),Nt=O(),Qp=Ve(),jp=kr(),YV=tc(),$V=lE(),KV=qp(),WV=require("minimist"),{PACKAGE_ROOT:QV}=T(),{startHTTPThreads:jV,startSocketServer:Kp,mostIdleRouting:Zj,remoteAffinityRouting:zj}=$p(),JV=Hc(),{isMainThread:XV}=require("worker_threads"),ZV=jt(),zV=ti(),ek=Tu(),tk=La(),kc=T(),pt,rk="Upgrade complete. Starting HarperDB.",sk="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",nk="HarperDB not found, starting install process.",ik="There was an error during install, check install_log.log for more details. Exiting.",ok="HarperDB successfully started.";async function Jp(e=!1,t=!1){if(console.log(SE.magenta("Starting HarperDB...")),await uk()===!1){console.log(nk);try{await xV()}catch(n){console.error(ik),ae.error(n),process.exit(1)}}await Ls.writeFile(Tn.join(Ie.get(kc.CONFIG_PARAMS.ROOTPATH),kc.HDB_PID_FILE),`${process.pid}`),ae.info("HarperDB PID",process.pid),pt===void 0&&(pt=on());let r;try{let n=await JV.getVersionUpdateInfo();n!==void 0&&(r=n[X.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await $V.upgrade(n),console.log(rk))}catch(n){r?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${r}. Exiting HarperDB.`),ae.error(n)):(console.error(sk),ae.error(n)),process.exit(1)}if(!e){let n=jp(Object.keys(X.CONFIG_PARAM_MAP),!0);!Nt.isEmpty(n)&&!Nt.isEmptyOrZeroLength(Object.keys(n))&&Qp.updateConfigValue(void 0,void 0,n,!0,!0)}FV(),await _k(),ck();try{kV.checkPermission()}catch(n){ae.error(n),console.error(n.message),process.exit(1)}Nt.autoCastBoolean(Ie.get(X.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&XV&&await YV.generateNatsConfig(t)}o(Jp,"initialize");async function Xp(e=!1){try{let t=WV(process.argv);t.ROOTPATH&&Qp.updateConfigObject("settings_path",Tn.join(t.ROOTPATH,X.HDB_CONFIG_FILE)),await Jp(e,!0);let r=Nt.autoCastBoolean(Ie.get(X.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)),s=process.env.IS_SCRIPTED_SERVICE&&!t.service,n=r,i=Nt.autoCastBoolean(Ie.get(X.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY));if(Nt.isEmpty(t.service)){jV(Ie.get(kc.CONFIG_PARAMS.HTTP_THREADS));let a=Ie.get(kc.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);Kp(X.SERVICES.HDB_CORE,parseInt(Ie.get(X.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT),10),a),i&&Kp(X.SERVICES.CUSTOM_FUNCTIONS,parseInt(Ie.get(X.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_PORT),10),a),n&&(s||await pt.startClusteringProcesses(),await pt.startClusteringThreads())}else{if(typeof t.service!="string"){let c=`Run service argument expected a string but received: ${t.service}`;ae.error(c),console.log(c),process.exit(1)}let a=t.service.split(",");for(let c of a){let _=c.toLowerCase();if(X.PROCESS_DESCRIPTORS_VALIDATE[_]===void 0){ae.error(`Run received unrecognized service command argument: ${_}`);continue}if(_===X.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase()&&!i){ae.error(`${_} is not enabled in settings`);continue}if(_.includes("clustering")&&!r){ae.error(`${_} is not enabled in settings`);continue}_==="clustering"?await pt.startClusteringProcesses():await pt.startService(X.PROCESS_DESCRIPTORS_VALIDATE[_]);let u=`${X.PROCESS_DESCRIPTORS_VALIDATE[_]} successfully started.`;ae.notify(u),console.log(u)}}Ie.get(X.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await KV(),s||Zp()}catch(t){console.error(t),ae.error(t),process.exit(1)}}o(Xp,"main");function Zp(){ae.suppressLogging(()=>{console.log(SE.magenta(""+Ls.readFileSync(Tn.join(QV,"utility/install/ascii_logo.txt")))),console.log(SE.magenta(`|------------- HarperDB ${VV.version} successfully started ------------|`))}),ae.notify(ok)}o(Zp,"started");async function ak(){if(lk())return Xp();try{pt===void 0&&(pt=on()),pt.enterPM2Mode(),await Jp(),Nt.autoCastBoolean(Ie.get(X.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await pt.startClusteringProcesses(),await pt.startService(X.PROCESS_DESCRIPTORS.HDB),Zp(),process.exit(0)}catch(e){console.error(e),ae.error(e),process.exit(1)}}o(ak,"launch");function ck(){let e=Tn.join(Ie.getHdbBasePath(),X.LICENSE_KEY_DIR_NAME,X.LICENSE_FILE_NAME),t=Tn.join(e,X.LICENSE_FILE_NAME),r=Tn.join(e,X.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:s,HARPERDB_LICENSE:n}=jp(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Nt.isEmpty(s)||Nt.isEmpty(n))return;Ls.mkdirpSync(e),Ls.writeFileSync(r,s),Ls.writeFileSync(t,n)}catch(s){let n=`Failed to write license & fingerprint due to: ${s.message}`;console.error(n),ae.error(n)}}o(ck,"writeLicenseFromVars");async function _k(){if(Ie.getHdbBasePath()!==void 0){ae.info("Checking Transaction Audit Environments exist");for(let t of Object.keys(ZV))await Wp(X.SYSTEM_SCHEMA_NAME,t);let e=await zV.describeAll();for(let t of Object.keys(e))for(let r of Object.keys(e[t]))await Wp(t,r);ae.info("Finished checking Transaction Audit Environments exist")}}o(_k,"checkAuditLogEnvironmentsExist");async function Wp(e,t){try{let r=new tk(e,t);await ek(r)}catch(r){let s=`Unable to create the transaction audit environment for ${e}.${t}, due to: ${r.message}`;console.error(s),ae.error(s)}}o(Wp,"openCreateAuditEnvironment");zp.exports={launch:ak,main:Xp};async function uk(){try{await Ls.stat(Nt.getPropsFilePath()),await Ls.stat(Ie.get(X.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(e.code==="ENOENT")return!1;throw ae.error(`Error checking for HDB install - ${e}`),e}return!0}o(uk,"isHdbInstalled");function lk(){return Nt.autoCastBoolean(Ie.get(X.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND))}o(lk,"getRunInForeground")});var tN=f((rJ,eN)=>{var Ek=oE(),dk=p();eN.exports=Sk;async function Sk(){try{await Ek()}catch(e){console.error("There was an error during the install."),console.error(e),dk.error(e),process.exit(1)}}o(Sk,"install")});var aN=f((nJ,oN)=>{var Kc=Vs(),rN=require("chalk"),qt=p(),sN=aE(),nN=require("prompt"),{promisify:fk}=require("util"),$c=T(),hk=require("fs-extra"),Tk=require("path"),Rk=O(),mk=Yr(),iN=H();iN.initSync();var Ak=require("moment"),gk=fk(nN.get),pk=Tk.join(iN.getHdbBasePath(),$c.LICENSE_KEY_DIR_NAME,$c.LICENSE_FILE_NAME,$c.LICENSE_FILE_NAME);oN.exports={getFingerprint:Ok,setLicense:Nk,parseLicense:fE,register:Ik,getRegistrationInfo:bk};async function Nk(e){if(e&&e.key&&e.company){try{qt.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await fE(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw qt.error(r),qt.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}o(Nk,"setLicense");async function Ok(){try{sN.checkPermission()}catch(t){throw qt.error(t),new Error("You do not have permission to generate a fingerprint.")}let e={};try{e=await Kc.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw qt.error(r),qt.error(t),new Error(r)}return e}o(Ok,"getFingerprint");async function fE(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");console.log("Validating license input...");let r=Kc.validateLicense(e,t);if(console.log("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(console.log("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(console.log(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{qt.info("writing license to disk"),await hk.writeFile(pk,JSON.stringify({license_key:e,company:t}))}catch(s){throw qt.error("Failed to write License"),s}return"Registration successful."}o(fE,"parseLicense");async function Ik(){let e=await Ck();return fE(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}o(Ik,"register");async function Ck(){try{sN.checkPermission()}catch(s){return console.error(s.message)}let e=await Kc.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:rN.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:rN.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{nN.start()}catch(s){qt.error(s)}let r;try{r=await gk(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}o(Ck,"promptForRegistration");async function bk(){let e={registered:!1,version:null,storage_type:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Kc.getLicense()}catch(r){throw qt.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Rk.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=mk.version(),e.storage_type=$c.STORAGE_TYPES_ENUM.LMDB,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Ak.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}o(bk,"getRegistrationInfo")});var uN=f((oJ,_N)=>{"use strict";var Lk=aN(),yk=p(),cN="Registration failed.";async function wk(){let e;try{e=await Lk.register()}catch(t){return yk.error(`Registration error ${t}`),cN}return e||cN}o(wk,"register");_N.exports={register:wk}});var SN=f((cJ,dN)=>{"use strict";var Mk=p(),Dk=T(),Uk=require("util"),Pk=require("child_process"),lN=Uk.promisify(Pk.exec),Hk=nn(),Ki=on(),EN="Stopping HarperDB.";dN.exports=Bk;async function Bk(){console.log(EN),Mk.notify(EN),await Ki.isServiceRegistered(Dk.HDB_PROC_DESCRIPTOR)&&Ki.enterPM2Mode();let e=await Ki.getUniqueServicesList();for(let r in e)await Ki.stop(r);await Ki.kill();let t=await Hk.getHDBProcessInfo();t.clustering.forEach(r=>{lN(`kill ${r.pid}`)}),t.core.forEach(r=>{lN(`kill ${r.pid}`)})}o(Bk,"stop")});var hN=f((uJ,fN)=>{"use strict";var{handleHDBError:vk,hdb_errors:Gk}=J(),{HTTP_STATUS_CODES:qk}=Gk,Fk=Es(),xk=Tc(),hE=O(),Wc=require("joi"),Vk=Fe(),kk=2e3,Yk=Wc.object({timeout:Wc.number().min(1),connected_nodes:Wc.boolean(),routes:Wc.boolean()});fN.exports=$k;async function $k(e){xk.checkClusteringEnabled();let t=Vk.validateBySchema(e,Yk);if(t)throw vk(t,t.message,qk.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||hE.autoCastBoolean(s),a=n===void 0||hE.autoCastBoolean(n),c={nodes:[]},_=await Fk.getServerList(r??kk),u={};if(i)for(let l=0,E=_.length;l<E;l++){let d=_[l].statsz;d&&(u[_[l].server.name]=d.routes)}for(let l=0,E=_.length;l<E;l++){if(_[l].statsz)continue;let d=_[l].server,S=_[l].data;if(d.name.endsWith("-hub")){let R={name:d.name.slice(0,-4),response_time:_[l].response_time};i&&(R.connected_nodes=u[d.name]?u[d.name].map(m=>m.name.slice(0,-4)):[]),a&&(R.routes=S.cluster?.urls?S.cluster?.urls.map(m=>({host:m.split(":")[0],port:hE.autoCast(m.split(":")[1])})):[]),c.nodes.push(R)}}return c}o($k,"clusterNetwork")});var NN=f((EJ,pN)=>{"use strict";var RE=Tc(),Kk=Es(),mN=H(),Qc=T(),ys=ke(),Wk=O(),TE=p(),{RemotePayloadObject:Qk}=il(),{ErrorCode:TN}=require("nats"),RN=mN.get(Qc.CONFIG_PARAMS.CLUSTERING_ENABLED),AN=mN.get(Qc.CONFIG_PARAMS.CLUSTERING_NODENAME);pN.exports={clusterStatus:jk,buildNodeStatus:gN};async function jk(){let e={node_name:AN,is_enabled:RN,connections:[]};if(!RN)return e;let t=await RE.getAllNodeRecords();if(Wk.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(gN(t[s],e.connections));return await Promise.allSettled(r),e}o(jk,"clusterStatus");async function gN(e,t){let r=e.name,s=new Qk(Qc.OPERATIONS_ENUM.CLUSTER_STATUS,AN,void 0,await RE.getSystemInfo()),n,i,a=ys.CLUSTER_STATUS_STATUSES.OPEN;try{let _=Date.now();n=await Kk.request(ys.REQUEST_SUBJECT(r),s),i=Date.now()-_,n.status===ys.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=ys.CLUSTER_STATUS_STATUSES.CLOSED,TE.error(`Error getting node status from ${r} `,n))}catch(_){TE.warn(`Error getting node status from ${r}`,_),_.code===TN.NoResponders?a=ys.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:_.code===TN.Timeout?a=ys.CLUSTER_STATUS_STATUSES.TIMEOUT:a=ys.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Jk(r,a,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let _={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==Qc.PRE_4_0_0_VERSION&&await RE.upsertNodeRecord(_)}catch(_){TE.error("Cluster status encountered an error updating system info for node:",r,_)}t.push(c)}o(gN,"buildNodeStatus");function Jk(e,t,r,s,n,i,a,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=a,this.system_info=c}o(Jk,"NodeStatusObject")});var LN=f((SJ,bN)=>{"use strict";var mE=require("fs-extra"),AE=require("path"),Xk=require("yaml"),Wi=Es(),Qi=T(),ON=ke(),IN=p(),Zk=Nr(),zk=hN(),eY=NN(),tY=nn(),CN=H();CN.initSync();var Ft={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored"},ve={LEAF:"leaf server",HUB:"hub server"},jc;bN.exports=rY;async function rY(){jc=CN.get(Qi.CONFIG_PARAMS.ROOTPATH);let e={harperdb:{status:Ft.STOPPED}},t;try{t=Number.parseInt(await mE.readFile(AE.join(jc,Qi.HDB_PID_FILE),"utf8"))}catch(s){throw s.code===Qi.NODE_ERROR_CODES.ENOENT?new Error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB"):s}let r=await tY.getHDBProcessInfo();for(let s of r.core)if(s.pid===t){e.harperdb.status=Ft.RUNNING,e.harperdb.pid=t;break}if(e.clustering=await sY(r),e.clustering[ve.HUB].status===Ft.RUNNING&&e.clustering[ve.LEAF].status===Ft.RUNNING){let s=[],n=await zk({});for(let a of n.nodes){let c={};for(let _ in a)c[_.replace("_"," ")]=a[_];s.push(c)}e.clustering.network=s;let i=await eY.clusterStatus();e.clustering.replication={["node name"]:i.node_name,["is enabled"]:i.is_enabled,connections:[]};for(let a of i.connections){let c={};c["node name"]=a?.node_name,c.status=a?.status,c.ports={clustering:a?.ports?.clustering,"operations api":a?.ports?.operations_api},c["latency ms"]=a?.latency_ms,c.uptime=a?.uptime,c.subscriptions=a?.subscriptions,c["system info"]={"hdb version":a?.system_info?.hdb_version,"node version":a?.system_info?.node_version,platform:a?.system_info?.platform},e.clustering.replication.connections.push(c)}await Wi.closeConnection()}console.log(Xk.stringify(e)),process.exit()}o(rY,"status");async function sY(e){let t={[ve.HUB]:{},[ve.LEAF]:{}};if(e.clustering.length===0)return t[ve.HUB].status=Ft.STOPPED,t[ve.LEAF].status=Ft.STOPPED,t;let{port:r}=Wi.getServerConfig(Qi.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:s,decrypt_hash:n}=await Zk.getClusterUser();try{(await Wi.createConnection(r,s,n,!1)).close(),t[ve.HUB].status=Ft.RUNNING}catch{t[ve.HUB].status=Ft.ERRORED}let{port:i}=Wi.getServerConfig(Qi.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await Wi.createConnection(i,s,n,!1)).close(),t[ve.LEAF].status=Ft.RUNNING}catch{t[ve.LEAF].status=Ft.ERRORED}try{t[ve.HUB].pid=Number.parseInt(await mE.readFile(AE.join(jc,"clustering",ON.PID_FILES.HUB),"utf8"))}catch(a){IN.error(a),t[ve.HUB].pid=void 0}try{t[ve.LEAF].pid=Number.parseInt(await mE.readFile(AE.join(jc,"clustering",ON.PID_FILES.LEAF),"utf8"))}catch(a){IN.error(a),t[ve.LEAF].pid=void 0}return t}o(sY,"getHubLeafStatus")});var xr=p(),nY=Yr(),Jc=T(),yN=require("fs"),wN=require("path"),iY=require("os"),{PACKAGE_ROOT:MN}=T(),oY=ed(),{SERVICE_ACTIONS_ENUM:xt}=Jc;cY();function aY(){let e=wN.join(MN,"bin",`harperdb.${Jc.CODE_EXTENSION}`),t;try{t=yN.statSync(e)}catch{xr.info("Couldn't find the harperdb executable process.");return}let r=iY.userInfo();if(t&&r.uid>=0&&t.uid!==r.uid){let s="You are not the owner of the HarperDB process. Please log in as the owner and try the command again.";throw xr.error(s),console.log(s),new Error(s)}}o(aY,"checkCallingUserSync");function cY(){let e=oY();if(e)if(e.error){console.error(e.error),xr.error(e.error);return}else e.warn&&(console.warn(e.warn),xr.warn(e.warn));let t;yN.readdir(wN.join(MN,"bin"),r=>{if(r)return xr.error(r);if(process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase()),t!==Jc.SERVICE_ACTIONS_ENUM.INSTALL)try{aY()}catch(n){throw console.log(n.message),n}let s;switch(t){case xt.RUN:console.warn('The "run" command is deprecated, please use "start" instead');case xt.START:s=Yc().launch();break;case xt.INSTALL:tN()().then(()=>Yc().main(!0)).catch(E=>{console.error(E)});break;case xt.REGISTER:uN().register().then(E=>{console.log(E)}).catch(E=>{console.error(E)});break;case xt.STOP:SN()().then(()=>{process.exit(0)}).catch(E=>{console.error(E)});break;case xt.RESTART:yl().restart({}).then().catch(E=>{xr.error(E),console.error(`There was an error restarting harperdb. ${E}`),process.exit(1)});break;case xt.VERSION:nY.printVersion();break;case xt.UPGRADE:xr.setLogLevel(Jc.LOG_LEVELS.INFO),lE().upgrade(null).then(()=>{console.log("Your instance of HDB is up to date!")}).catch(E=>{xr.error(`Got an error during upgrade ${E}`)});break;case xt.STATUS:LN()().then().catch(E=>{console.error(E)});break;case void 0:Yc().main();break;default:console.warn(`The "${t}" command is not understood.`);case xt.HELP:console.log(`
82
82
  Usage: harperdb [command]
83
83
 
84
84
  With no command, harperdb will simply run HarperDB (in the foreground)
@@ -90,4 +90,5 @@ Commands:
90
90
  restart - Restart the harperdb background process
91
91
  install - Install harperdb
92
92
  register - Register harperdb
93
- upgrade - Upgrade harperdb`)}})}o(uk,"harperDBService");
93
+ upgrade - Upgrade harperdb
94
+ status - Print the status of HarperDB and clustering`)}})}o(cY,"harperDBService");