harperdb 4.0.3 → 4.0.4

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,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";var ug=Object.defineProperty;var o=(e,t)=>ug(e,"name",{value:t,configurable:!0});var d=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var T=d((I0,ml)=>{"use strict";var be=require("path"),lg=require("fs");function Eg(){let e=__dirname;for(;!lg.existsSync(be.join(e,"package.json"));){let t=be.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}o(Eg,"getHDBPackageRoot");var Et=Eg(),_l="js",_n=_l,dg="harperdb-config.yaml",Sg="defaultConfig.yaml",hg="hdb",cl=`hdbServer.${_n}`,ul=`customFunctionsServer.${_n}`,ll=`hdbIpcServer.${_n}`,fg=`restartHdb.${_n}`,t_="HarperDB",di="Custom Functions",Si="Clustering Hub",hi="Clustering Leaf",r_="Clustering Ingest Service",s_="Clustering Reply Service",Tg="foreground.pid",e_={HDB:t_,IPC:"IPC",CLUSTERING_HUB:Si,CLUSTERING_LEAF:hi,CLUSTERING_INGEST_SERVICE:r_,CLUSTERING_REPLY_SERVICE:s_,CUSTOM_FUNCTIONS:di,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",PM2_LOGROTATE:"pm2-logrotate",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},Rg={HDB:"hdb.log",IPC:"ipc.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log",CLUSTERING_INGEST_SERVICE:"clustering_ingest_service.log",CLUSTERING_REPLY_SERVICE:"clustering_reply_service.log",CUSTOM_FUNCTIONS:"custom_functions.log",INSTALL:"install.log",CLI:"cli.log",PM2:"pm2.log",CLUSTERING_UPGRADE:"clustering_upgrade.log",JOBS:"jobs.log"},Ag={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},mg={harperdb:t_,ipc:"IPC","clustering hub":Si,"clustering leaf":hi,"clustering ingest service":r_,"clustering reply service":s_,"custom functions":di,custom_functions:di,"pm2-logrotate":e_.PM2_LOGROTATE,logrotate:e_.PM2_LOGROTATE,clustering:"clustering","clustering config":"clustering config"},gg={CLUSTERING_HUB_PROC_DESCRIPTOR:Si,CLUSTERING_LEAF_PROC_DESCRIPTOR:hi,CLUSTERING_INGEST_PROC_DESCRIPTOR:r_,CLUSTERING_REPLY_SERVICE_DESCRIPTOR:s_},Ei={HDB:be.join(Et,"server/harperdb"),IPC:be.join(Et,"server/ipc"),CUSTOM_FUNCTIONS:be.join(Et,"server/customFunctions"),CLUSTERING_HUB:be.join(Et,"server/nats"),CLUSTERING_LEAF:be.join(Et,"server/nats")},pg={HDB:be.join(Ei.HDB,cl),IPC:be.join(Ei.IPC,ll),CUSTOM_FUNCTIONS:be.join(Ei.CUSTOM_FUNCTIONS,ul)},Ng={HDB:be.join(Et,"launchServiceScripts/launchHarperDB.js"),CUSTOM_FUNCTIONS:be.join(Et,"launchServiceScripts/launchCustomFunctions.js"),NATS_INGEST_SERVICE:be.join(Et,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:be.join(Et,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:be.resolve(Et,"launchServiceScripts/launchUpdateNodes4-0-0.js")},Og={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},El="support@harperdb.io",Ig="customer-success@harperdb.io",dl=1,Cg=4141,Sl="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",bg="https://www.harperdb.io/product",Lg=`For support, please submit a request at ${Sl} or contact ${El}`,hl=`For license support, please contact ${Ig}`,yg="None of the specified records were found.",wg="hash attribute not found",Dg=`Your current license only supports ${dl} role. ${hl}`,Mg="Your current license only supports 3 connections to a node.",Ug="127.0.0.1",Pg=1,Bg=/^\.$/,Hg=/^\.\.$/,vg="U+002E",Gg=/\//g,qg="U+002F",Fg=/U\+002F/g,Vg=/^U\+002E$/,xg=/^U\+002EU\+002E$/,kg="d",$g=999999,Yg="*",Kg="--max-old-space-size=",Wg="system",Qg="__hdb_hash",jg=".harperdb",Jg=".hdb",Zg="keys",Xg="hdb_boot_properties.file",zg=".updateConfig.json",ep="SIGTSTP",tp=24,rp=6e4,sp=448,np="blob",ip="trash",op="schema",ap="transactions",_p=".count",cp="id",up="install_log.log",lp="run_log.log",Ep="PROCESS_NAME",dp={SETTINGS_PATH_KEY:"settings_path"},fl=require("lodash"),Sp={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"},hp={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},fp={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Tp={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"},Rp={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"},Ke="hdb_internal:",Ap={CREATE_SCHEMA:Ke+"create_schema",CREATE_TABLE:Ke+"create_table",CREATE_ATTRIBUTE:Ke+"create_attribute",ADD_USER:Ke+"add_user",ALTER_USER:Ke+"alter_user",DROP_USER:Ke+"drop_user",HDB_NODES:Ke+"hdb_nodes",HDB_USERS:Ke+"hdb_users",HDB_WORKERS:Ke+"hdb_workers",CATCHUP:Ke+"catchup",SCHEMA_CATCHUP:Ke+"schema_catchup",WORKER_ROOM:Ke+"cluster_workers"},mp={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"},gp="060493.ks",pp=".license",Np={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},m={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",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"},Op={CSV:".csv",JSON:".json"},Ip={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key"},Cp={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},ur={};ur[m.CREATE_SCHEMA]=m.CREATE_SCHEMA;ur[m.CREATE_TABLE]=m.CREATE_TABLE;ur[m.CREATE_ATTRIBUTE]=m.CREATE_ATTRIBUTE;ur[m.INSERT]=m.INSERT;ur[m.UPDATE]=m.UPDATE;ur[m.UPSERT]=m.UPSERT;ur[m.DELETE]=m.DELETE;var x=Object.create(null);x[m.DESCRIBE_ALL]=m.DESCRIBE_ALL;x[m.DESCRIBE_TABLE]=m.DESCRIBE_TABLE;x[m.DESCRIBE_SCHEMA]=m.DESCRIBE_SCHEMA;x[m.READ_LOG]=m.READ_LOG;x[m.ADD_NODE]=m.ADD_NODE;x[m.LIST_USERS]=m.LIST_USERS;x[m.LIST_ROLES]=m.LIST_ROLES;x[m.USER_INFO]=m.USER_INFO;x[m.SQL]=m.SQL;x[m.GET_JOB]=m.GET_JOB;x[m.SEARCH_JOBS_BY_START_DATE]=m.SEARCH_JOBS_BY_START_DATE;x[m.DELETE_FILES_BEFORE]=m.DELETE_FILES_BEFORE;x[m.EXPORT_LOCAL]=m.EXPORT_LOCAL;x[m.EXPORT_TO_S3]=m.EXPORT_TO_S3;x[m.CLUSTER_STATUS]=m.CLUSTER_STATUS;x[m.REMOVE_NODE]=m.REMOVE_NODE;x[m.RESTART]=m.RESTART;x[m.CUSTOM_FUNCTIONS_STATUS]=m.CUSTOM_FUNCTIONS_STATUS;x[m.GET_CUSTOM_FUNCTIONS]=m.GET_CUSTOM_FUNCTIONS;x[m.GET_CUSTOM_FUNCTION]=m.GET_CUSTOM_FUNCTION;x[m.SET_CUSTOM_FUNCTION]=m.SET_CUSTOM_FUNCTION;x[m.DROP_CUSTOM_FUNCTION]=m.DROP_CUSTOM_FUNCTION;x[m.ADD_CUSTOM_FUNCTION_PROJECT]=m.ADD_CUSTOM_FUNCTION_PROJECT;x[m.DROP_CUSTOM_FUNCTION_PROJECT]=m.DROP_CUSTOM_FUNCTION_PROJECT;x[m.PACKAGE_CUSTOM_FUNCTION_PROJECT]=m.PACKAGE_CUSTOM_FUNCTION_PROJECT;x[m.DEPLOY_CUSTOM_FUNCTION_PROJECT]=m.DEPLOY_CUSTOM_FUNCTION_PROJECT;var bp={RUN:"run",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade"},Lp={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Tl={HDB_ROOT_KEY:"HDB_ROOT",SERVER_PORT_KEY:"SERVER_PORT",CERT_KEY:"CERTIFICATE",PRIVATE_KEY_KEY:"PRIVATE_KEY",HTTP_SECURE_ENABLED_KEY:"HTTPS_ON",CORS_ENABLED_KEY:"CORS_ON",CORS_WHITELIST_KEY:"CORS_WHITELIST",LOG_LEVEL_KEY:"LOG_LEVEL",LOGGER_KEY:"LOGGER",LOG_PATH_KEY:"LOG_PATH",LOG_ROTATE:"LOG_ROTATE",LOG_ROTATE_MAX_SIZE:"LOG_ROTATE_MAX_SIZE",LOG_ROTATE_RETAIN:"LOG_ROTATE_RETAIN",LOG_ROTATE_COMPRESS:"LOG_ROTATE_COMPRESS",LOG_ROTATE_DATE_FORMAT:"LOG_ROTATE_DATE_FORMAT",LOG_ROTATE_ROTATE_MODULE:"LOG_ROTATE_ROTATE_MODULE",LOG_ROTATE_WORKER_INTERVAL:"LOG_ROTATE_WORKER_INTERVAL",LOG_ROTATE_ROTATE_INTERVAL:"LOG_ROTATE_ROTATE_INTERVAL",LOG_ROTATE_TIMEZONE:"LOG_ROTATE_TIMEZONE",LOG_DAILY_ROTATE_KEY:"LOG_DAILY_ROTATE",LOG_MAX_DAILY_FILES_KEY:"LOG_MAX_DAILY_FILES",PROPS_ENV_KEY:"NODE_ENV",SETTINGS_PATH_KEY:"settings_path",CLUSTERING_PORT_KEY:"CLUSTERING_PORT",CLUSTERING_NODE_NAME_KEY:"NODE_NAME",CLUSTERING_ENABLED_KEY:"CLUSTERING",ALLOW_SELF_SIGNED_SSL_CERTS:"ALLOW_SELF_SIGNED_SSL_CERTS",MAX_HDB_PROCESSES:"MAX_HDB_PROCESSES",INSTALL_USER:"install_user",CLUSTERING_USER_KEY:"CLUSTERING_USER",MAX_CLUSTERING_PROCESSES:"MAX_CLUSTERING_PROCESSES",SERVER_TIMEOUT_KEY:"SERVER_TIMEOUT_MS",SERVER_KEEP_ALIVE_TIMEOUT_KEY:"SERVER_KEEP_ALIVE_TIMEOUT",SERVER_HEADERS_TIMEOUT_KEY:"SERVER_HEADERS_TIMEOUT",DISABLE_TRANSACTION_LOG_KEY:"DISABLE_TRANSACTION_LOG",OPERATION_TOKEN_TIMEOUT_KEY:"OPERATION_TOKEN_TIMEOUT",REFRESH_TOKEN_TIMEOUT_KEY:"REFRESH_TOKEN_TIMEOUT",IPC_SERVER_PORT:"IPC_SERVER_PORT",CUSTOM_FUNCTIONS_ENABLED_KEY:"CUSTOM_FUNCTIONS",CUSTOM_FUNCTIONS_PORT_KEY:"CUSTOM_FUNCTIONS_PORT",CUSTOM_FUNCTIONS_DIRECTORY_KEY:"CUSTOM_FUNCTIONS_DIRECTORY",MAX_CUSTOM_FUNCTION_PROCESSES:"MAX_CUSTOM_FUNCTION_PROCESSES",LOG_TO_FILE:"LOG_TO_FILE",LOG_TO_STDSTREAMS:"LOG_TO_STDSTREAMS",RUN_IN_FOREGROUND:"RUN_IN_FOREGROUND",LOCAL_STUDIO_ON:"LOCAL_STUDIO_ON",STORAGE_WRITE_ASYNC:"STORAGE_WRITE_ASYNC"},yp=fl.invert(Tl),f={CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root",HTTP_THREADS:"http_threads",IPC_NETWORK_PORT:"ipc_network_port",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_DATEFORMAT:"logging_rotation_dateFormat",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_RETAIN:"logging_rotation_retain",LOGGING_ROTATION_ROTATE:"logging_rotation_rotate",LOGGING_ROTATION_ROTATEINTERVAL:"logging_rotation_rotateInterval",LOGGING_ROTATION_ROTATEMODULE:"logging_rotation_rotateModule",LOGGING_ROTATION_TIMEZONE:"logging_rotation_timezone",LOGGING_ROTATION_WORKERINTERVAL:"logging_rotation_workerInterval",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT:"operationsApi_authentication_operationTokenTimeout",OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT:"operationsApi_authentication_refreshTokenTimeout",OPERATIONSAPI_FOREGROUND:"operationsApi_foreground",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERT_AUTH:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_NODEENV:"operationsApi_nodeEnv",ROOTPATH:"rootPath",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync"},wp={hdb_root_key:f.ROOTPATH,hdb_root:f.ROOTPATH,server_port_key:f.OPERATIONSAPI_NETWORK_PORT,server_port:f.OPERATIONSAPI_NETWORK_PORT,cert_key:f.OPERATIONSAPI_TLS_CERTIFICATE,certificate:f.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:f.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:f.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:f.OPERATIONSAPI_NETWORK_HTTPS,https_on:f.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:f.OPERATIONSAPI_NETWORK_CORS,cors_on:f.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:f.LOGGING_LEVEL,log_level:f.LOGGING_LEVEL,log_path_key:f.LOGGING_ROOT,log_path:f.LOGGING_ROOT,log_daily_rotate:f.LOGGING_ROTATION_ROTATE,log_rotate:f.LOGGING_ROTATION_ROTATE,log_rotate_max_size:f.LOGGING_ROTATION_MAXSIZE,log_rotate_retain:f.LOGGING_ROTATION_RETAIN,log_rotate_compress:f.LOGGING_ROTATION_COMPRESS,log_rotate_date_format:f.LOGGING_ROTATION_DATEFORMAT,log_rotate_rotate_module:f.LOGGING_ROTATION_ROTATEMODULE,log_rotate_worker_interval:f.LOGGING_ROTATION_WORKERINTERVAL,log_rotate_rotate_interval:f.LOGGING_ROTATION_ROTATEINTERVAL,log_rotate_timezone:f.LOGGING_ROTATION_TIMEZONE,props_env_key:f.OPERATIONSAPI_NODEENV,node_env:f.OPERATIONSAPI_NODEENV,clustering_node_name_key:f.CLUSTERING_NODENAME,node_name:f.CLUSTERING_NODENAME,clustering_enabled_key:f.CLUSTERING_ENABLED,clustering:f.CLUSTERING_ENABLED,max_http_threads:f.HTTP_THREADS,max_hdb_processes:f.HTTP_THREADS,server_timeout_key:f.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:f.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:f.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:f.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:f.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:f.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:f.LOGGING_AUDITLOG,disable_transaction_log:f.LOGGING_AUDITLOG,operation_token_timeout_key:f.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:f.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:f.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:f.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,ipc_server_port:f.IPC_NETWORK_PORT,custom_functions_enabled_key:f.CUSTOMFUNCTIONS_ENABLED,custom_functions:f.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:f.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:f.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:f.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:f.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:f.HTTP_THREADS,log_to_file:f.LOGGING_FILE,log_to_stdstreams:f.LOGGING_STDSTREAMS,run_in_foreground:f.OPERATIONSAPI_FOREGROUND,local_studio_on:f.LOCALSTUDIO_ENABLED,clustering_port:f.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:f.CLUSTERING_USER,clustering_enabled:f.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:f.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:f.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:f.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:f.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:f.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:f.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:f.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_nodename:f.CLUSTERING_NODENAME,clustering_tls_certificate:f.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:f.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:f.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:f.CLUSTERING_TLS_INSECURE,customfunctions_enabled:f.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:f.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:f.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:f.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:f.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:f.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:f.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:f.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:f.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:f.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:f.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:f.CUSTOMFUNCTIONS_NODEENV,http_threads:f.HTTP_THREADS,customfunctions_processes:f.HTTP_THREADS,customfunctions_root:f.CUSTOMFUNCTIONS_ROOT,ipc_network_port:f.IPC_NETWORK_PORT,localstudio_enabled:f.LOCALSTUDIO_ENABLED,logging_file:f.LOGGING_FILE,logging_level:f.LOGGING_LEVEL,logging_root:f.LOGGING_ROOT,logging_rotation_compress:f.LOGGING_ROTATION_COMPRESS,logging_rotation_dateformat:f.LOGGING_ROTATION_DATEFORMAT,logging_rotation_maxsize:f.LOGGING_ROTATION_MAXSIZE,logging_rotation_retain:f.LOGGING_ROTATION_RETAIN,logging_rotation_rotate:f.LOGGING_ROTATION_ROTATE,logging_rotation_rotateinterval:f.LOGGING_ROTATION_ROTATEINTERVAL,logging_rotation_rotatemodule:f.LOGGING_ROTATION_ROTATEMODULE,logging_rotation_timezone:f.LOGGING_ROTATION_TIMEZONE,logging_rotation_workerinterval:f.LOGGING_ROTATION_WORKERINTERVAL,logging_stdstreams:f.LOGGING_STDSTREAMS,logging_auditlog:f.LOGGING_AUDITLOG,operationsapi_authentication_operationtokentimeout:f.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:f.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:f.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:f.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:f.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:f.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:f.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:f.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:f.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:f.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_network_timeout:f.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:f.OPERATIONSAPI_NODEENV,operationsapi_root:f.ROOTPATH,rootpath:f.ROOTPATH,storage_writeasync:f.STORAGE_WRITEASYNC,storage_overlappingsync:f.STORAGE_OVERLAPPINGSYNC},Dp={csv_file_load:"csv_file_load",csv_data_load:m.CSV_DATA_LOAD,csv_url_load:m.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},Mp={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"},Up={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},Pp={FILE_SYSTEM:"fs",LMDB:"lmdb"},Bp={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},Hp={DEVELOPMENT:8192,DEFAULT:512},vp={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"},Gp={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"},qp={ENOENT:"ENOENT",EACCES:"EACCES"},Rl={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},Fp="__clustering__",Vp=Object.values(Rl),xp=15984864e5,Al={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},kp=fl.invert(Al),$p={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"},Yp=111,Kp=`\r
3
3
  `,Wp={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Qp=["*","%"],jp="unauthorized_access",Jp="func_val",Zp={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Xp={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},zp="hdb_ipc_server",eN="hdb_ipc_client_",tN={RESTART:"restart",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request"},rN={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},sN={STOPPED:"stopped",ONLINE:"online"},nN="3.x.x";ml.exports={LOCAL_HARPERDB_OPERATIONS:x,HDB_SUPPORT_ADDRESS:El,HDB_SUPPORT_URL:Sl,HDB_PRICING_URL:bg,SUPPORT_HELP_MSG:Lg,LICENSE_HELP_MSG:hl,HDB_PROC_NAME:cl,HDB_PROC_DESCRIPTOR:t_,CLUSTERING_LEAF_PROC_DESCRIPTOR:hi,CLUSTERING_HUB_PROC_DESCRIPTOR:Si,SYSTEM_SCHEMA_NAME:Wg,HASH_FOLDER_NAME:Qg,HDB_HOME_DIR_NAME:jg,UPDATE_FILE_NAME:zg,LICENSE_KEY_DIR_NAME:Zg,BOOT_PROPS_FILE_NAME:Xg,JOB_TYPE_ENUM:Dp,JOB_STATUS_ENUM:Np,SYSTEM_TABLE_NAMES:Tp,SYSTEM_TABLE_HASH_ATTRIBUTES:Rp,OPERATIONS_ENUM:m,VALID_S3_FILE_TYPES:Op,S3_BUCKET_AUTH_KEYS:Ip,VALID_SQL_OPS_ENUM:Cp,GEO_CONVERSION_ENUM:Lp,HDB_SETTINGS_NAMES:Tl,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:yp,SERVICE_ACTIONS_ENUM:bp,CLUSTER_MESSAGE_TYPE_ENUM:Mp,CLUSTER_CONNECTION_DIRECTION_ENUM:Up,CLUSTER_EVENTS_DEFS_ENUM:vp,PERIOD_REGEX:Bg,DOUBLE_PERIOD_REGEX:Hg,UNICODE_PERIOD:vg,FORWARD_SLASH_REGEX:Gg,UNICODE_FORWARD_SLASH:qg,ESCAPED_FORWARD_SLASH_REGEX:Fg,ESCAPED_PERIOD_REGEX:Vg,ESCAPED_DOUBLE_PERIOD_REGEX:xg,REG_KEY_FILE_NAME:gp,RESTART_TIMEOUT_MS:rp,HDB_FILE_PERMISSIONS:sp,SCHEMA_DIR_NAME:op,TRANSACTIONS_DIR_NAME:ap,LIMIT_COUNT_NAME:_p,ID_ATTRIBUTE_STRING:cp,INSERT_MODULE_ENUM:hp,UPGRADE_JSON_FIELD_NAMES_ENUM:fp,RESTART_CODE:ep,RESTART_CODE_NUM:tp,CLUSTER_OPERATIONS:ur,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:mp,HDB_INTERNAL_SC_CHANNEL_PREFIX:Ke,INTERNAL_SC_CHANNELS:Ap,CLUSTERING_MESSAGE_TYPES:$p,HDB_FILE_SUFFIX:Jg,BLOB_FOLDER_NAME:np,HDB_TRASH_DIR:ip,ORIGINATOR_SET_VALUE:Yp,LICENSE_VALUES:Bp,RAM_ALLOCATION_ENUM:Hp,STORAGE_TYPES_ENUM:Pp,TIME_STAMP_NAMES_ENUM:Rl,TIME_STAMP_NAMES:Vp,PERMS_UPDATE_RELEASE_TIMESTAMP:xp,SEARCH_NOT_FOUND_MESSAGE:yg,SEARCH_ATTRIBUTE_NOT_FOUND:wg,LICENSE_ROLE_DENIED_RESPONSE:Dg,LICENSE_MAX_CONNS_REACHED:Mg,BASIC_LICENSE_MAX_NON_CU_ROLES:dl,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:Cg,VALUE_SEARCH_COMPARATORS:Al,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:kp,LICENSE_FILE_NAME:pp,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:Gp,NEW_LINE:Kp,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:Pg,MOMENT_DAYS_TAG:kg,API_TURNOVER_SEC:$g,LOOPBACK:Ug,CODE_EXTENSION:_n,WILDCARD_SEARCH_VALUE:Yg,NODE_ERROR_CODES:qp,JAVASCRIPT_EXTENSION:_l,PERMS_CRUD_ENUM:Wp,UNAUTHORIZED_PERMISSION_NAME:jp,SEARCH_WILDCARDS:Qp,FUNC_VAL:Jp,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:Zp,JWT_ENUM:Xp,CLUSTERING_FLAG:Fp,RUN_LOG:lp,INSTALL_LOG:up,IPC_SERVER_MODULE:ll,HDB_IPC_SERVER:zp,IPC_EVENT_TYPES:tN,HDB_IPC_CLIENT_PREFIX:eN,CUSTOM_FUNCTION_PROC_NAME:ul,CUSTOM_FUNCTION_PROC_DESCRIPTOR:di,SERVICES:rN,MEM_SETTING_KEY:Kg,HDB_RESTART_SCRIPT:fg,PROCESS_DESCRIPTORS:e_,SERVICE_SERVERS:pg,SERVICE_SERVERS_CWD:Ei,PROCESS_DESCRIPTORS_VALIDATE:mg,LAUNCH_SERVICE_SCRIPTS:Ng,LOG_LEVELS:Ag,PROCESS_NAME_ENV_PROP:Ep,PROCESS_LOG_NAMES:Rg,PM2_PROCESS_STATUSES:sN,CONFIG_PARAM_MAP:wp,CONFIG_PARAMS:f,HDB_CONFIG_FILE:dg,HDB_DEFAULT_CONFIG_FILE:Sg,ROLE_TYPES_ENUM:Og,BOOT_PROP_PARAMS:dp,INSTALL_PROMPTS:Sp,HDB_ROOT_DIR_NAME:hg,CLUSTERING_PROCESSES:gg,FOREGROUND_PID_FILE:Tg,PACKAGE_ROOT:Et,PRE_4_0_0_VERSION:nN}});var ds=d((C0,Nl)=>{"use strict";var gl=require("minimist");Nl.exports=iN;function iN(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=pl(process.env),s=pl(gl(process.argv))):(r=process.env,s=gl(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(iN,"assignCMDENVVariables");function pl(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}o(pl,"objKeysToLowerCase")});var O=d((b0,wl)=>{"use strict";var Fr=require("fs-extra"),Vr=require("path"),Il=require("yaml"),Cl=require("properties-reader"),_e=T(),oN=ds(),aN=require("os"),{PACKAGE_ROOT:o_}=T(),Be={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},fi=Vr.join(o_,"logs"),lr=process.env.pm_id===void 0,_N=Vr.join(o_,"config/yaml/",_e.HDB_DEFAULT_CONFIG_FILE),a_=process.env.PROCESS_NAME===void 0?_e.PROCESS_DESCRIPTORS.INSTALL:process.env.PROCESS_NAME,Ss,Ot,xt,Pe,n_,hs;hs===void 0&&bl();wl.exports={createLogFile:cN,notify:EN,fatal:dN,error:i_,warn:SN,info:uN,debug:lN,trace:yl,setLogLevel:fN,log_level:Pe};function bl(){try{if(hs===void 0){let e=hN();hs=Cl(e),{level:Pe,config_log_path:n_,to_file:Ot,to_stream:xt}=TN(hs.get("settings_path"))}}catch(e){if(hs=void 0,e.code===_e.NODE_ERROR_CODES.ENOENT){let t=oN(Object.keys(_e.CONFIG_PARAM_MAP),!0);for(let i in t){let a=_e.CONFIG_PARAM_MAP[i];a&&a.toLowerCase();let _=t[i];if(a===_e.CONFIG_PARAMS.LOGGING_LEVEL){Pe=_;continue}if(a===_e.CONFIG_PARAMS.LOGGING_STDSTREAMS){xt=_;continue}a===_e.CONFIG_PARAMS.LOGGING_FILE&&(Ot=a)}let{default_level:r,default_to_file:s,default_to_stream:n}=RN();Ot=Ot===void 0?s:Ot,Ot=Ol(Ot),xt=xt===void 0?n:xt,xt=Ol(xt),Pe=Pe===void 0?r:Pe,n_=fi;return}throw i_("Error initializing log settings"),i_(e),e}}o(bl,"initLogSettings");function cN(e,t){if(!lr){yl("createLogFile should only be used if the process is not being managed by pm2");return}hs===void 0&&bl(),a_=t;let r;e===_e.PROCESS_LOG_NAMES.INSTALL?r=fi:r=n_,Ot&&(Ss=Vr.join(r,e),Fr.ensureFileSync(Ss))}o(cN,"createLogFile");function xr(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1;for(let a=0;a<n;a++){let _=t[a];_ instanceof Error&&_.stack?s+=_.stack:typeof _=="object"?s+=JSON.stringify(_):s+=_,a<i&&(s+=" ")}return`{"process_name": "${a_}", "level": "${e}", "timestamp": "${r}", "message": "${s}"}
4
- `}o(xr,"createLogRecord");function Ll(e){Ss===void 0&&(a_=_e.PROCESS_DESCRIPTORS.INSTALL,Fr.ensureDirSync(fi),Ss=Vr.join(fi,_e.PROCESS_LOG_NAMES.INSTALL),Fr.ensureFileSync(Ss)),Fr.appendFileSync(Ss,e)}o(Ll,"writeToLogFile");function Ti(e){Ot&&Ll(e),xt&&process.stdout.write(e)}o(Ti,"nonPm2LogStdOut");function __(e){Ot&&Ll(e),xt&&process.stderr.write(e)}o(__,"nonPm2LogStdErr");function uN(...e){if(Be[Pe]<=Be.info){let t=xr("info",e);if(lr){Ti(t);return}process.stdout.write(t)}}o(uN,"info");function yl(...e){if(Be[Pe]<=Be.trace){let t=xr("trace",e);if(lr){Ti(t);return}process.stdout.write(t)}}o(yl,"trace");function i_(...e){if(Be[Pe]<=Be.error){let t=xr("error",e);if(lr){__(t);return}process.stderr.write(t)}}o(i_,"error");function lN(...e){if(Be[Pe]<=Be.debug){let t=xr("debug",e);if(lr){Ti(t);return}process.stdout.write(t)}}o(lN,"debug");function EN(...e){if(Be[Pe]<=Be.notify){let t=xr("notify",e);if(lr){Ti(t);return}process.stdout.write(t)}}o(EN,"notify");function dN(...e){if(Be[Pe]<=Be.fatal){let t=xr("fatal",e);if(lr){__(t);return}process.stderr.write(t)}}o(dN,"fatal");function SN(...e){if(Be[Pe]<=Be.warn){let t=xr("warn",e);if(lr){__(t);return}process.stderr.write(t)}}o(SN,"warn");function hN(){let e;try{e=aN.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Vr.join(e,_e.HDB_HOME_DIR_NAME,_e.BOOT_PROPS_FILE_NAME);return Fr.existsSync(t)||(t=Vr.join(o_,"utility/hdb_boot_properties.file")),t}o(hN,"getPropsFilePath");function fN(e){Pe=e}o(fN,"setLogLevel");function Ol(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(Ol,"autoCastBoolean");function TN(e){try{if(e.includes("config/settings.js")){let a=Cl(e);return{level:a.get(_e.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Vr.dirname(a.get(_e.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:a.get(_e.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:a.get(_e.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=Il.parseDocument(Fr.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===_e.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(TN,"getLogConfig");function RN(){try{let e=Il.parseDocument(Fr.readFileSync(_N,"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(RN,"getDefaultConfig")});var cn=d((L0,AN)=>{AN.exports={name:"harperdb",version:"4.0.3",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{node:">=14.0.0","preferred-node":"18.13.0","go-lang":"1.19.3","nats-server":"2.9.8"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"See License in ./license/Community+Edition+and+Evaluation+End+User+License+Agreement.pdf",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ data_layer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ data_layer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license --storage_type=lmdb && npm run cover:upgrade && npm run cover:nats && npm run cover:cfserver && npm run cover:lmdbbridge && npm run cover:lmdbutility && npm run cover:hdbserver && npm run cover:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license --storage_type=lmdb","cover:main":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","cover:lmdbbridge":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/data_layer/harperBridge/lmdbBridge/**/*.js' --parallel --config '../unitTests/.mocharc.json'","cover:lmdbutility":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --config '../unitTests/.mocharc.json'","cover:hdbserver":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --config '../unitTests/.mocharc.json'","cover:cfserver":"npm run submodules && cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","cover:nats":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","cover:upgrade":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/data_layer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@fastify/accepts-serializer":"5.1.0","@fastify/autoload":"5.4.0","@fastify/compress":"6.1.1","@fastify/cors":"8.1.0","@fastify/static":"6.5.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4",async:"3.2.3","aws-sdk":"2.1096.0",chalk:"4.1.2","cli-progress":"3.10.0",clone:"2.1.2",esbuild:"^0.14.49","fast-glob":"3.2.11",fastify:"4.8.1","fastify-plugin":"4.2.1","fill-range":"7.0.1","fs-extra":"10.0.1","human-readable-ids":"1.0.4",inquirer:"8.2.2","is-number":"7.0.0",joi:"17.6.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"8.5.1",lmdb:"2.7.6",lodash:"4.17.21",mathjs:"10.4.0",microtime:"3.1.1",minimist:"1.2.6",mkcert:"1.5.0",moment:"2.29.4",msgpackr:"1.8.2",nats:"2.9.2",needle:"3.1.0","node-ipc":"9.1.4","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.3.0",papaparse:"5.3.2",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.3.1",pm2:"5.2.0",prompt:"1.2.2","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.3.5","stream-chain":"2.2.5","stream-json":"1.7.4",systeminformation:"5.12.4","tar-fs":"2.1.1","truncate-utf8-bytes":"1.0.2",ulidx:"0.3.0",uuid:"9.0.0","validate.js":"0.11.1",yaml:"1.10.2"},devDependencies:{axios:"0.27.2",chai:"4.3.4","chai-integer":"0.1.0",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1","hook-std":"2.0.0","intercept-stdout":"0.1.2",mocha:"8.3.2","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",newman:"5.2.3","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.21.0","newman-reporter-teamcity":"0.1.11","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.3.2",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.2.3"}}}});var kr=d((D0,Dl)=>{"use strict";var y0=require("fs-extra"),w0=O();Dl.exports={version:mN,printVersion:pN,nodeVersion:gN};var Er=cn();function mN(){if(Er)return Er.version}o(mN,"version");function gN(){if(Er&&Er.engines&&Er.engines["preferred-node"])return Er.engines["preferred-node"]}o(gN,"nodeVersion");function pN(){Er&&console.log(`HarperDB Version ${Er.version}`)}o(pN,"printVersion")});var Bl=d((M0,Pl)=>{"use strict";var Ml=require("semver/functions/major"),NN=require("semver/functions/satisfies"),Ul=cn(),un=process.versions&&process.versions.node?process.versions.node:void 0;Pl.exports=ON;function ON(){let e=Ul.engines.node,t=Ul.engines["preferred-node"];if(un){if(e&&!NN(un,e))return{error:`This version of HarperDB supports Node.js versions: ${e}, the currently installed Node.js version is: ${un}. Please install a version of Node.js that is withing the defined range.`};if(t&&Ml(un)!==Ml(t))return{warn:`This version of HarperDB is tested against Node.js version ${t}, the currently installed Node.js version is: ${un}. Some issues may occur with untested versions of Node.js.`}}}o(ON,"checkNodeVersion")});var c_=d((U0,Hl)=>{"use strict";var IN=require("util"),CN=require("path"),bN=require("child_process"),LN=IN.promisify(bN.execFile),yN=1e3*1e3*10;Hl.exports={findPs:wN};async function wN(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await LN("ps",["wwxo",`pid,${r}`],{maxBuffer:yN});for(let n of s.trim().split(`
4
+ `}o(xr,"createLogRecord");function Ll(e){Ss===void 0&&(a_=_e.PROCESS_DESCRIPTORS.INSTALL,Fr.ensureDirSync(fi),Ss=Vr.join(fi,_e.PROCESS_LOG_NAMES.INSTALL),Fr.ensureFileSync(Ss)),Fr.appendFileSync(Ss,e)}o(Ll,"writeToLogFile");function Ti(e){Ot&&Ll(e),xt&&process.stdout.write(e)}o(Ti,"nonPm2LogStdOut");function __(e){Ot&&Ll(e),xt&&process.stderr.write(e)}o(__,"nonPm2LogStdErr");function uN(...e){if(Be[Pe]<=Be.info){let t=xr("info",e);if(lr){Ti(t);return}process.stdout.write(t)}}o(uN,"info");function yl(...e){if(Be[Pe]<=Be.trace){let t=xr("trace",e);if(lr){Ti(t);return}process.stdout.write(t)}}o(yl,"trace");function i_(...e){if(Be[Pe]<=Be.error){let t=xr("error",e);if(lr){__(t);return}process.stderr.write(t)}}o(i_,"error");function lN(...e){if(Be[Pe]<=Be.debug){let t=xr("debug",e);if(lr){Ti(t);return}process.stdout.write(t)}}o(lN,"debug");function EN(...e){if(Be[Pe]<=Be.notify){let t=xr("notify",e);if(lr){Ti(t);return}process.stdout.write(t)}}o(EN,"notify");function dN(...e){if(Be[Pe]<=Be.fatal){let t=xr("fatal",e);if(lr){__(t);return}process.stderr.write(t)}}o(dN,"fatal");function SN(...e){if(Be[Pe]<=Be.warn){let t=xr("warn",e);if(lr){__(t);return}process.stderr.write(t)}}o(SN,"warn");function hN(){let e;try{e=aN.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Vr.join(e,_e.HDB_HOME_DIR_NAME,_e.BOOT_PROPS_FILE_NAME);return Fr.existsSync(t)||(t=Vr.join(o_,"utility/hdb_boot_properties.file")),t}o(hN,"getPropsFilePath");function fN(e){Pe=e}o(fN,"setLogLevel");function Ol(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(Ol,"autoCastBoolean");function TN(e){try{if(e.includes("config/settings.js")){let a=Cl(e);return{level:a.get(_e.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Vr.dirname(a.get(_e.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:a.get(_e.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:a.get(_e.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=Il.parseDocument(Fr.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===_e.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(TN,"getLogConfig");function RN(){try{let e=Il.parseDocument(Fr.readFileSync(_N,"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(RN,"getDefaultConfig")});var cn=d((L0,AN)=>{AN.exports={name:"harperdb",version:"4.0.4",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{node:">=14.0.0","preferred-node":"18.13.0","go-lang":"1.19.3","nats-server":"2.9.8"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"See License in ./license/Community+Edition+and+Evaluation+End+User+License+Agreement.pdf",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ data_layer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ data_layer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license --storage_type=lmdb && npm run cover:upgrade && npm run cover:nats && npm run cover:cfserver && npm run cover:lmdbbridge && npm run cover:lmdbutility && npm run cover:hdbserver && npm run cover:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license --storage_type=lmdb","cover:main":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","cover:lmdbbridge":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/data_layer/harperBridge/lmdbBridge/**/*.js' --parallel --config '../unitTests/.mocharc.json'","cover:lmdbutility":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --config '../unitTests/.mocharc.json'","cover:hdbserver":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --config '../unitTests/.mocharc.json'","cover:cfserver":"npm run submodules && cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","cover:nats":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","cover:upgrade":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/data_layer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@fastify/accepts-serializer":"5.1.0","@fastify/autoload":"5.4.0","@fastify/compress":"6.1.1","@fastify/cors":"8.1.0","@fastify/static":"6.5.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4",async:"3.2.3","aws-sdk":"2.1096.0",chalk:"4.1.2","cli-progress":"3.10.0",clone:"2.1.2",esbuild:"^0.14.49","fast-glob":"3.2.11",fastify:"4.8.1","fastify-plugin":"4.2.1","fill-range":"7.0.1","fs-extra":"10.0.1","human-readable-ids":"1.0.4",inquirer:"8.2.2","is-number":"7.0.0",joi:"17.6.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"8.5.1",lmdb:"2.7.6",lodash:"4.17.21",mathjs:"10.4.0",microtime:"3.1.1",minimist:"1.2.6",mkcert:"1.5.0",moment:"2.29.4",msgpackr:"1.8.2",nats:"2.9.2",needle:"3.1.0","node-ipc":"9.1.4","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.3.0",papaparse:"5.3.2",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.3.1",pm2:"5.2.0",prompt:"1.2.2","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.3.5","stream-chain":"2.2.5","stream-json":"1.7.4",systeminformation:"5.12.4","tar-fs":"2.1.1","truncate-utf8-bytes":"1.0.2",ulidx:"0.3.0",uuid:"9.0.0","validate.js":"0.11.1",yaml:"1.10.2"},devDependencies:{axios:"0.27.2",chai:"4.3.4","chai-integer":"0.1.0",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1","hook-std":"2.0.0","intercept-stdout":"0.1.2",mocha:"8.3.2","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",newman:"5.2.3","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.21.0","newman-reporter-teamcity":"0.1.11","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.3.2",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.2.3"}}}});var kr=d((D0,Dl)=>{"use strict";var y0=require("fs-extra"),w0=O();Dl.exports={version:mN,printVersion:pN,nodeVersion:gN};var Er=cn();function mN(){if(Er)return Er.version}o(mN,"version");function gN(){if(Er&&Er.engines&&Er.engines["preferred-node"])return Er.engines["preferred-node"]}o(gN,"nodeVersion");function pN(){Er&&console.log(`HarperDB Version ${Er.version}`)}o(pN,"printVersion")});var Bl=d((M0,Pl)=>{"use strict";var Ml=require("semver/functions/major"),NN=require("semver/functions/satisfies"),Ul=cn(),un=process.versions&&process.versions.node?process.versions.node:void 0;Pl.exports=ON;function ON(){let e=Ul.engines.node,t=Ul.engines["preferred-node"];if(un){if(e&&!NN(un,e))return{error:`This version of HarperDB supports Node.js versions: ${e}, the currently installed Node.js version is: ${un}. Please install a version of Node.js that is withing the defined range.`};if(t&&Ml(un)!==Ml(t))return{warn:`This version of HarperDB is tested against Node.js version ${t}, the currently installed Node.js version is: ${un}. Some issues may occur with untested versions of Node.js.`}}}o(ON,"checkNodeVersion")});var c_=d((U0,Hl)=>{"use strict";var IN=require("util"),CN=require("path"),bN=require("child_process"),LN=IN.promisify(bN.execFile),yN=1e3*1e3*10;Hl.exports={findPs:wN};async function wN(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await LN("ps",["wwxo",`pid,${r}`],{maxBuffer:yN});for(let n of s.trim().split(`
5
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:CN.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(wN,"findPs")});var Te=d((P0,Gl)=>{"use strict";var DN="__dbis__",MN="__environment_name__",UN="__dbi_defintion__",PN={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"},BN=["__createdtime__","__updatedtime__"],HN="\uFFFF",vl={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},vN=Object.values(vl);Gl.exports={INTERNAL_DBIS_NAME:DN,DBI_DEFINITION_NAME:UN,SEARCH_TYPES:PN,TIMESTAMP_NAMES:BN,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:MN,TRANSACTIONS_DBI_NAMES_ENUM:vl,TRANSACTIONS_DBIS:vN,OVERFLOW_MARKER:HN}});var et=d((B0,Wl)=>{"use strict";var ql=T(),Fl=Te(),Vl={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},xl=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),kl={500:xl("There was an error processing your request."),400:"Invalid request"},GN=kl[Vl.INTERNAL_SERVER_ERROR],qN={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.`},FN={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},VN={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"},xN={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ARRAY:"ids must be an array",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${Fl.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Fl.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"},kN={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${ql.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 ${ql.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"},$l={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"},$N={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."},YN={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`},KN={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"},WN={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},QN={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`},Yl={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.`},Kl={INVALID_IPC_DATA_TYPE:"Invalid IPC event data type, must be an object",MISSING_TYPE:"IPC event missing 'type'",MISSING_MSG:"IPC event missing 'message'",MISSING_ORIGIN:"IPC event message missing 'originator' property",INVALID_EVENT:e=>`IPC server received invalid event type: ${e}`},jN={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."},JN={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},ZN={...$l,...VN,...qN,...$N,...YN,...KN,...WN,...QN,...kN,...Yl,...Kl,...jN,...JN,...FN};Wl.exports={CHECK_LOGS_WRAPPER:xl,HDB_ERROR_MSGS:ZN,DEFAULT_ERROR_MSGS:kl,DEFAULT_ERROR_RESP:GN,HTTP_STATUS_CODES:Vl,LMDB_ERRORS_ENUM:xN,AUTHENTICATION_ERROR_MSGS:$l,VALIDATION_ERROR_MSGS:Yl,IPC_ERRORS:Kl}});var J=d((H0,Jl)=>{"use strict";var fs=et(),XN=O(),zN=T(),ln=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Ql),this.http_resp_code=s||fs.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(fs.DEFAULT_ERROR_MSGS[s]?fs.DEFAULT_ERROR_MSGS[s]:fs.DEFAULT_ERROR_MSGS[fs.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,typeof this.message!="string"&&(this.stack=t.stack),i&&XN[n](i)}};o(ln,"HdbError");function Ql(e,t,r,s=zN.LOG_LEVELS.ERROR,n=null,i=!1){if(jl(e))return e;let a=new ln(e,t,r,s,n);return i&&delete a.stack,a}o(Ql,"handleHDBError");function jl(e){return e.__proto__.constructor.name===ln.name}o(jl,"isHDBError");Jl.exports={isHDBError:jl,handleHDBError:Ql,hdb_errors:fs}});var I=d((G0,lE)=>{"use strict";var u_=require("path"),eO=require("fs-extra"),Se=O(),Zl=require("fs-extra"),tO=require("truncate-utf8-bytes"),En=require("os"),rO=require("net"),sO=require("recursive-iterator"),Re=T(),rE=c_(),Xl=require("papaparse"),Ri=require("moment"),{inspect:nO}=require("util"),zl=require("is-number"),v0=require("lodash"),{hdb_errors:Ai}=J(),sE=require("util").promisify(setTimeout),iO=100,oO=5,aO="",_O=4,eE=255,tE={true:!0,false:!1,undefined:null,null:null,NaN:NaN};lE.exports={isEmpty:We,isEmptyOrZeroLength:It,arrayHasEmptyValues:lO,arrayHasEmptyOrZeroLengthValues:EO,buildFolderPath:dO,isBoolean:nE,errorizeMessage:cO,stripFileExtension:hO,autoCast:fO,autoCastJSONDeep:l_,removeDir:RO,compareVersions:AO,isCompatibleDataVersion:mO,escapeRawValue:oE,unescapeValue:gO,stringifyProps:pO,valueConverter:NO,timeoutPromise:IO,isClusterOperation:bO,getClusterUser:wO,sendTransactionToSocketCluster:LO,checkGlobalSchemaTable:yO,getHomeDir:aE,getPropsFilePath:OO,promisifyPapaParse:DO,removeBOM:_E,createEventPromise:MO,checkProcessRunning:UO,checkSchemaTableExist:PO,checkSchemaExists:cE,checkTableExists:uE,getStartOfTomorrowInSeconds:BO,getLimitKey:HO,isObject:SO,isNotEmptyAndHasValue:uO,autoCasterIsNumberCheck:iE,backtickASTSchemaItems:vO,isPortTaken:CO,stopProcess:GO,createForkArgs:qO,autoCastBoolean:FO,async_set_timeout:sE,getTableHashAttribute:VO,doesSchemaExist:xO,doesTableExist:kO,stringifyObj:$O,ms_to_time:YO,PACKAGE_ROOT:Re.PACKAGE_ROOT};function cO(e){return e instanceof Error?e:new Error(e)}o(cO,"errorizeMessage");function We(e){return e==null}o(We,"isEmpty");function uO(e){return!We(e)&&(e||e===0||e===""||nE(e))}o(uO,"isNotEmptyAndHasValue");function It(e){return We(e)||e.length===0||e.size===0}o(It,"isEmptyOrZeroLength");function lO(e){if(We(e))return!0;for(let t=0;t<e.length;t++)if(We(e[t]))return!0;return!1}o(lO,"arrayHasEmptyValues");function EO(e){if(It(e))return!0;for(let t=0;t<e.length;t++)if(It(e[t]))return!0;return!1}o(EO,"arrayHasEmptyOrZeroLengthValues");function dO(...e){try{return e.join(u_.sep)}catch{console.error(e)}}o(dO,"buildFolderPath");function nE(e){return We(e)?!1:e===!0||e===!1}o(nE,"isBoolean");function SO(e){return We(e)?!1:typeof e=="object"}o(SO,"isObject");function hO(e){return It(e)?aO:e.slice(0,-_O)}o(hO,"stripFileExtension");function fO(e){return We(e)||e===""||typeof e!="string"?e:tE[e]!==void 0?tE[e]:iE(e)===!0?Number(e):e}o(fO,"autoCast");function TO(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(TO,"autoCastJSON");function l_(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=l_(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=l_(r);s!==r&&(e[t]=s)}return e}else return TO(e)}o(l_,"autoCastJSONDeep");function iE(e){if(e.startsWith("0.")&&zl(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&zl(e))}o(iE,"autoCasterIsNumberCheck");async function RO(e){if(It(e))throw new Error(`Directory path: ${e} does not exist`);try{await Zl.emptyDir(e),await Zl.remove(e)}catch(t){throw Se.error(`Error removing files in ${e} -- ${t}`),t}}o(RO,"removeDir");function AO(e,t){if(It(e)){Se.info("Invalid current version sent as parameter.");return}if(It(t)){Se.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(AO,"compareVersions");function mO(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}o(mO,"isCompatibleDataVersion");function oE(e){if(We(e))return e;let t=String(e);return t==="."?Re.UNICODE_PERIOD:t===".."?Re.UNICODE_PERIOD+Re.UNICODE_PERIOD:t.replace(Re.FORWARD_SLASH_REGEX,Re.UNICODE_FORWARD_SLASH)}o(oE,"escapeRawValue");function gO(e){if(We(e))return e;let t=String(e);return t===Re.UNICODE_PERIOD?".":t===Re.UNICODE_PERIOD+Re.UNICODE_PERIOD?"..":String(e).replace(Re.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(gO,"unescapeValue");function pO(e,t){if(We(e))return Se.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+En.EOL}!It(s)&&s[0]===";"?r+=" "+s+n+En.EOL:It(s)||(r+=s+"="+n+En.EOL)}catch{Se.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}o(pO,"stringifyProps");function NO(e){let t;try{t=typeof e=="object"?JSON.stringify(e):e}catch(n){Se.error(n),t=e}let r=String(oE(t)),s=Buffer.byteLength(r)>eE?tO(r,eE)+"/blob":r;return{value:t,value_stripped:r,value_path:s}}o(NO,"valueConverter");function aE(){let e;try{e=En.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}o(aE,"getHomeDir");function OO(){let e=u_.join(aE(),Re.HDB_HOME_DIR_NAME,Re.BOOT_PROPS_FILE_NAME);return eO.existsSync(e)||(e=u_.join(__dirname,"../","hdb_boot_properties.file")),e}o(OO,"getPropsFilePath");function IO(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}o(IO,"timeoutPromise");async function CO(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=rO.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}o(CO,"isPortTaken");function bO(e){try{return Re.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Se.error(`Error checking operation against cluster ops ${t}`)}return!1}o(bO,"isClusterOperation");function LO(e,t,r){if(global.hdb_socket_client!==void 0){Se.trace(`Sending transaction to channel: ${e}`);let{hdb_user:s,hdb_auth_header:n,...i}=t;i.__originator||(i.__originator={}),i.__transacted=!0,r&&(i.__originator[r]=Re.ORIGINATOR_SET_VALUE),global.hdb_socket_client.publish(e,i)}}o(LO,"sendTransactionToSocketCluster");function yO(e,t){if(!global.hdb_schema[e])return Ai.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return Ai.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(yO,"checkGlobalSchemaTable");function wO(e,t){if(We(t)){Se.warn("No CLUSTERING_USER defined, clustering disabled");return}if(We(e)||It(e)){Se.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){Se.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){Se.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(wO,"getClusterUser");function DO(){Xl.parsePromise=function(e,t){return new Promise(function(r,s){Xl.parse(e,{header:!0,transformHeader:_E,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}o(DO,"promisifyPapaParse");function _E(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(_E,"removeBOM");function MO(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;Se.info(`Got cluster status event response: ${nO(n)}`);try{i.cancel()}catch{Se.error("Error trying to cancel timeout.")}s(n)})})}o(MO,"createEventPromise");async function UO(e){let t=!0,r=0;do await sE(iO*r++),(await rE.findPs(e)).length>0&&(t=!1);while(t&&r<oO);if(t)throw new Error(`process ${e} was not started`)}o(UO,"checkProcessRunning");function PO(e,t){let r=cE(e);if(r)return r;let s=uE(e,t);if(s)return s}o(PO,"checkSchemaTableExist");function cE(e){if(!global.hdb_schema[e])return Ai.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(cE,"checkSchemaExists");function uE(e,t){if(!global.hdb_schema[e][t])return Ai.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(uE,"checkTableExists");function BO(){let e=Ri().utc().add(1,Re.MOMENT_DAYS_TAG).startOf(Re.MOMENT_DAYS_TAG).unix(),t=Ri().utc().unix();return e-t}o(BO,"getStartOfTomorrowInSeconds");function HO(){return Ri().utc().format("DD-MM-YYYY")}o(HO,"getLimitKey");function vO(e){try{let t=new sO(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){Se.error("Got an error back ticking items."),Se.error(t)}}o(vO,"backtickASTSchemaItems");async function GO(e){let t=En.userInfo();(await rE.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),Se.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}o(GO,"stopProcess");function qO(e){return[e]}o(qO,"createForkArgs");function FO(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(FO,"autoCastBoolean");function VO(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}o(VO,"getTableHashAttribute");function xO(e){return global?.hdb_schema?.[e]!==void 0}o(xO,"doesSchemaExist");function kO(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}o(kO,"doesTableExist");function $O(e){try{return JSON.stringify(e)}catch{return e}}o($O,"stringifyObj");function YO(e){let t=Ri.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(YO,"ms_to_time")});var E_=d((q0,EE)=>{"use strict";var KO={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))},WO="certificate.pem",QO="privateKey.pem",jO="ca.pem";EE.exports={CERTIFICATE_VALUES:KO,CERTIFICATE_PEM_NAME:WO,PRIVATEKEY_PEM_NAME:QO,CA_PEM_NAME:jO}});var tt=d((F0,dE)=>{"use strict";var He=require("validate.js");He.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||He.validators.type.checks[t](e)?null:` must be a '${t}' value`};He.validators.type.checks={Object:function(e){return He.isObject(e)&&!He.isArray(e)},Array:He.isArray,Integer:He.isInteger,Number:He.isNumber,String:He.isString,Date:He.isDate,Boolean:function(e){return typeof e=="boolean"}};He.validators.hasValidFileExt=function(e,t){return!He.isString(e)||e===""||t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`};dE.exports={validateObject:JO,validateObjectAsync:ZO,validateBySchema:XO};function JO(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=He(e,t,{format:"flat"});return r?new Error(r):null}o(JO,"validateObject");async function ZO(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await He.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}o(ZO,"validateObjectAsync");function XO(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(XO,"validateBySchema")});var S_=d((V0,hE)=>{"use strict";var zO=require("fs-extra"),H=require("joi"),eI=require("os"),{boolean:Ae,string:$t,number:Ct,array:d_}=H.types(),dt=require("path"),tI=O(),mi=I(),Yt=E_(),rI=tt(),kt="keys",sI=Yt.CERTIFICATE_PEM_NAME,nI=Yt.PRIVATEKEY_PEM_NAME,iI=Yt.CA_PEM_NAME,oI=Yt.CERTIFICATE_PEM_NAME,aI=Yt.PRIVATEKEY_PEM_NAME,_I=Yt.CA_PEM_NAME,cI=Yt.CERTIFICATE_PEM_NAME,uI=Yt.PRIVATEKEY_PEM_NAME,lI=Yt.CA_PEM_NAME,EI="log",dI="custom_functions",SI="Invalid logging.rotation.maxSize unit. Available units are G, M or K",hI="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",fI="rootPath config parameter is undefined",TI="clustering.enabled config parameter is undefined",dr=Ct.min(0).required(),gi=d_.items({host:$t.required(),port:dr}).empty(null),ve;hE.exports={configValidator:RI,routesValidator:NI,route_constraints:gi};function RI(e){if(ve=e.rootPath,mi.isEmpty(ve))throw fI;let t=Ae.required(),r=H.valid("production","development").required(),s=Ct.min(1).max(1e3).empty(null).default(pI),n=$t.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(SE),i=H.custom(mI).messages({"any.custom":"{:#label} {:#error}"}).empty(null).default(SE),a=$t.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),_=e.clustering?.enabled;if(mi.isEmpty(_))throw TI;let c;return _===!0?c=H.object({enabled:t,hubServer:H.object({cluster:H.object({name:H.required().empty(null),network:H.object({port:dr,routes:gi}).required()}).required(),leafNodes:H.object({network:H.object({port:dr}).required()}).required(),network:H.object({port:dr}).required()}).required(),leafServer:H.object({network:H.object({port:dr,routes:gi}).required()}).required(),nodeName:a,tls:H.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ae.required()}),user:H.string().required()}).required():c=H.object({enabled:t,tls:H.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ae.required()})}).required(),H.object({clustering:c,customFunctions:H.object({enabled:t,network:H.object({cors:Ae.required(),corsAccessList:d_.required(),headersTimeout:Ct.min(1).required(),https:Ae.required(),keepAliveTimeout:Ct.min(1).required(),port:dr,timeout:Ct.min(1).required()}),nodeEnv:r,root:n,tls:H.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),ipc:H.object({network:H.object({port:dr})}).required(),localStudio:H.object({enabled:t}).required(),logging:H.object({file:Ae.required(),level:H.valid("notify","fatal","error","warn","info","debug","trace"),rotation:H.object({compress:Ae.required(),dateFormat:$t.required(),maxSize:$t.custom(gI).required(),retain:Ct.min(0).required(),rotate:Ae.required(),rotateInterval:$t.required(),rotateModule:Ae.required(),timezone:$t.required(),workerInterval:Ct.min(1).required()}).required(),root:n,stdStreams:Ae.required(),auditLog:Ae.required()}).required(),operationsApi:H.object({authentication:H.object({operationTokenTimeout:H.required(),refreshTokenTimeout:H.required()}).required(),foreground:Ae.required(),network:H.object({cors:Ae.required(),corsAccessList:d_.required(),headersTimeout:Ct.min(1).required(),https:Ae.required(),keepAliveTimeout:Ct.min(1).required(),port:dr,timeout:Ct.min(1).required()}).required(),nodeEnv:r,tls:H.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:$t.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:H.object({threads:s}).required(),storage:H.object({writeAsync:Ae.required(),overlappingSync:Ae.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(RI,"configValidator");function AI(e){return zO.existsSync(e)?null:`Specified path ${e} does not exist.`}o(AI,"doesPathExist");function mI(e,t){H.assert(e,$t.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+\.pem+$/).messages({"string.pattern.base":"must be a valid directory path and specify a .pem file"}));let r=AI(e);if(r)return t.message(r)}o(mI,"validatePemFile");function gI(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(SI);let s=e.slice(0,-1);if(isNaN(parseInt(s)))return t.message(hI)}o(gI,"validateRotationMaxSize");function pI(e,t){let r=t.state.path.join("."),s=eI.cpus().length,n=s-1;return n<=2&&(n=2),tI.info(`Detected ${s} cores on this machine, defaulting ${r} to ${n}`),n}o(pI,"setDefaultThreads");function SE(e,t){if(!mi.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(mi.isEmpty(ve))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return dt.join(ve,dI);case"logging.root":return dt.join(ve,EI);case"operationsApi.tls.certificate":return dt.join(ve,kt,sI);case"operationsApi.tls.privateKey":return dt.join(ve,kt,nI);case"operationsApi.tls.certificateAuthority":return dt.join(ve,kt,iI);case"customFunctions.tls.certificate":return dt.join(ve,kt,oI);case"customFunctions.tls.privateKey":return dt.join(ve,kt,aI);case"customFunctions.tls.certificateAuthority":return dt.join(ve,kt,_I);case"clustering.tls.certificate":return dt.join(ve,kt,cI);case"clustering.tls.privateKey":return dt.join(ve,kt,uI);case"clustering.tls.certificateAuthority":return dt.join(ve,kt,lI);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(SE,"setDefaultRoot");function NI(e){let t=H.object({routes:gi});return rI.validateBySchema({routes:e},t)}o(NI,"routesValidator")});var st=d((x0,pE)=>{"use strict";var X=T(),rt=I(),Le=O(),{configValidator:OI,routesValidator:fE}=S_(),St=require("fs-extra"),II=require("yaml"),Ts=require("path"),CI=require("is-number"),Oi=require("properties-reader"),bI=require("lodash"),{handleHDBError:LI}=J(),{HTTP_STATUS_CODES:yI,HDB_ERROR_MSGS:pi}=et(),{PACKAGE_ROOT:wI}=T(),DI="Unable to get config value because config is uninitialized",MI="Config successfully initialized",UI="Error backing up config file",PI="Empty parameter sent to getConfigValue",TE=Ts.join(wI,"config","yaml",X.HDB_DEFAULT_CONFIG_FILE),BI="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Ni,Ge;pE.exports={createConfigFile:HI,getDefaultConfig:vI,getConfigValue:RE,initConfig:AE,flattenConfig:$r,updateConfigValue:mE,updateConfigObject:GI,getConfiguration:qI,setConfiguration:FI,readConfigFile:T_,getClusteringRoutes:VI,initOldConfig:gE,getConfigFromFile:xI};function HI(e){let t=Rs(TE);Ni=$r(t.toJSON());for(let i in e){let a=X.CONFIG_PARAM_MAP[i.toLowerCase()];if(a!==void 0){let _=a.split("_"),c=h_(a,e[i]);try{t.setIn([..._],c)}catch(u){Le.error(u)}}}f_(t);let r=t.toJSON();Ge=$r(r);let s=t.getIn(["rootPath"]),n=Ts.join(s,X.HDB_CONFIG_FILE);St.createFileSync(n),St.writeFileSync(n,String(t)),Le.trace(`Config file written to ${n}`)}o(HI,"createConfigFile");function vI(e){if(Ni===void 0){let r=Rs(TE);Ni=$r(r.toJSON())}let t=X.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return Ni[t.toLowerCase()]}o(vI,"getDefaultConfig");function RE(e){if(rt.isEmpty(e)){Le.error(PI);return}if(Ge===void 0){Le.trace(DI);return}let t=X.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return Ge[t.toLowerCase()]}o(RE,"getConfigValue");function AE(e=!1){if(Ge===void 0||e){let t=rt.getPropsFilePath();try{St.accessSync(t,St.constants.F_OK|St.constants.R_OK)}catch(a){throw Le.error(a),new Error(`HarperDB properties file at path ${t} does not exist`)}let s=Oi(t).get(X.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),n;if(s.includes("config/settings.js"))try{gE(s);return}catch(a){if(a.code!==X.NODE_ERROR_CODES.ENOENT)throw a}try{n=Rs(s)}catch(a){if(a.code===X.NODE_ERROR_CODES.ENOENT){Le.trace(`HarperDB config file not found at ${s}.
6
6
  This can occur during early stages of install where the config file has not yet been created`);return}else throw Le.error(a),new Error(`Error reading HarperDB config file at ${s}`)}f_(n);let i=n.toJSON();Ge=$r(i),Le.trace(MI)}}o(AE,"initConfig");function f_(e){let t=e.toJSON(),r=OI(t);if(r.error)throw pi.CONFIG_VALIDATION(r.error.message);e.setIn(["http","threads"],r.value.http.threads),e.setIn(["customFunctions","root"],r.value.customFunctions.root),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["operationsApi","tls","certificate"],r.value.operationsApi.tls.certificate),e.setIn(["operationsApi","tls","privateKey"],r.value.operationsApi.tls.privateKey),e.setIn(["operationsApi","tls","certificateAuthority"],r.value.operationsApi.tls.certificateAuthority),e.setIn(["customFunctions","tls","certificate"],r.value.customFunctions.tls.certificate),e.setIn(["customFunctions","tls","privateKey"],r.value.customFunctions.tls.privateKey),e.setIn(["customFunctions","tls","certificateAuthority"],r.value.customFunctions.tls.certificateAuthority),e.setIn(["clustering","tls","certificate"],r.value.clustering.tls.certificate),e.setIn(["clustering","tls","privateKey"],r.value.clustering.tls.privateKey),e.setIn(["clustering","tls","certificateAuthority"],r.value.clustering.tls.certificateAuthority)}o(f_,"validateConfig");function GI(e,t){Ge===void 0&&(Ge={});let r=X.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){Le.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ge[r.toLowerCase()]=t}o(GI,"updateConfigObject");function mE(e,t,r=void 0,s=!1,n=!1){Ge===void 0&&AE();let i=RE(X.CONFIG_PARAM_MAP.hdb_root),a=Ts.join(i,X.HDB_CONFIG_FILE),_=Rs(a);if(r===void 0){let l=X.CONFIG_PARAM_MAP[e.toLowerCase()];if(l===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=l.split("_"),h=h_(l,t);_.setIn([...E],h)}else for(let l in r){let E=X.CONFIG_PARAM_MAP[l.toLowerCase()];if(E!==void 0){let h=E.split("_"),S=h_(E,r[l]);try{_.setIn([...h],S)}catch(A){Le.error(A)}}}f_(_);let c=_.getIn(["rootPath"]),u=Ts.join(c,X.HDB_CONFIG_FILE);if(s===!0)try{let l=Ts.join(c,"backup",`${X.HDB_CONFIG_FILE}.bak`);St.copySync(a,l),Le.trace(`Config file: ${a} backed up to: ${l}`)}catch(l){Le.error(UI),Le.error(l)}St.writeFileSync(u,String(_)),n&&(Ge=$r(_.toJSON())),Le.trace(`Config parameter: ${e} updated with value: ${t}`)}o(mE,"updateConfigValue");function $r(e){let t={};for(let r in e)if(!!e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])){let s=$r(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($r,"flattenConfig");function h_(e,t){if(e===X.CONFIG_PARAMS.CLUSTERING_NODENAME||e===X.CONFIG_PARAMS.CLUSTERING_USER){if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(CI(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||rt.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 rt.autoCast(t)}o(h_,"castConfigValue");function qI(){let e=rt.getPropsFilePath(),r=Oi(e).get(X.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return Rs(r).toJSON()}o(qI,"getConfiguration");async function FI(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return mE(void 0,void 0,n,!0),BI}catch(i){throw typeof i=="string"||i instanceof String?LI(i,i,yI.BAD_REQUEST,void 0,void 0,!0):i}}o(FI,"setConfiguration");function T_(){let e=rt.getPropsFilePath();try{St.accessSync(e,St.constants.F_OK|St.constants.R_OK)}catch(n){throw Le.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=Oi(e).get(X.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return Rs(r).toJSON()}o(T_,"readConfigFile");function Rs(e){return II.parseDocument(St.readFileSync(e,"utf8"),{simpleKeys:!0})}o(Rs,"parseYamlDoc");function VI(){let e=T_(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=rt.isEmptyOrZeroLength(t)?[]:t;let r=fE(t);if(r)throw pi.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=rt.isEmptyOrZeroLength(s)?[]:s;let n=fE(s);if(n)throw pi.CONFIG_VALIDATION(n.message);if(!rt.isEmptyOrZeroLength(s)&&!rt.isEmptyOrZeroLength(t)){let i=t.filter(a=>s.some(_=>_.host===a.host&&_.port===a.port));if(!rt.isEmptyOrZeroLength(i)){let a=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw pi.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:s}}o(VI,"getClusteringRoutes");function gE(e){let t=Oi(e);Ge={};for(let r in X.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(rt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=X.CONFIG_PARAM_MAP[r].toLowerCase();n===X.CONFIG_PARAMS.LOGGING_ROOT?Ge[n]=Ts.dirname(s):Ge[n]=s}return Ge}o(gE,"initOldConfig");function xI(e){let t=T_();return bI.get(t,e.replaceAll("_","."))}o(xI,"getConfigFromFile")});var Y=d((k0,OE)=>{"use strict";var R_=require("fs-extra"),bt=require("path"),kI=require("os"),$I=require("properties-reader"),dn=O(),As=I(),w=T(),Ii=st(),YI="Error initializing environment manager",Ci="BOOT_PROPS_FILE_PATH",NE=!1,KI={[w.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[w.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[w.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Kt={};OE.exports={BOOT_PROPS_FILE_PATH:Ci,getHdbBasePath:WI,setHdbBasePath:QI,get:jI,initSync:ZI,setProperty:q,initTestEnvironment:XI};function WI(){return Kt[w.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(WI,"getHdbBasePath");function QI(e){Kt[w.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(QI,"setHdbBasePath");function jI(e){let t=Ii.getConfigValue(e);return t===void 0?Kt[e]:t}o(jI,"get");function q(e,t){KI[e]&&(Kt[e]=t),Ii.updateConfigObject(e,t)}o(q,"setProperty");function JI(){let e;try{e=As.getPropsFilePath(),R_.accessSync(e,R_.constants.F_OK|R_.constants.R_OK),NE=!0;let t=$I(e);return Kt[w.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(w.HDB_SETTINGS_NAMES.INSTALL_USER),Kt[w.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(w.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Kt[Ci]=e,!0}catch{return dn.trace(`Environment manager found no properties file at ${e}`),!1}}o(JI,"doesPropFileExist");function ZI(e=!1){try{(NE||JI())&&(Ii.initConfig(e),Kt[w.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Ii.getConfigValue(w.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){dn.error(YI),dn.error(t),console.error(t),process.exit(1)}}o(ZI,"initSync");function XI(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=bt.join(__dirname,"../../","unitTests");Kt[Ci]=bt.join(c,"hdb_boot_properties.file"),q(w.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,bt.join(c,"settings.test")),q(w.HDB_SETTINGS_NAMES.INSTALL_USER,kI.userInfo().username),q(w.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,bt.join(c,"envDir","utility","keys","privateKey.pem")),q(w.HDB_SETTINGS_NAMES.CERT_KEY,bt.join(c,"envDir","utility","keys","certificate.pem")),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,bt.join(c,"envDir","utility","keys","privateKey.pem")),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,bt.join(c,"envDir","utility","keys","certificate.pem")),q(w.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),q(w.HDB_SETTINGS_NAMES.LOG_PATH_KEY,bt.join(c,"envDir","log")),q(w.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),q(w.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),q(w.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),q(w.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,bt.join(c,"envDir")),q(w.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,As.isEmpty(n)?!0:n),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,As.isEmpty(n)?!0:n),q(w.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),q(w.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,As.isEmpty(i)?!1:i),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,As.isEmpty(i)?!1:i),q(w.HDB_SETTINGS_NAMES.IPC_SERVER_PORT,9383),q(w.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),q(w.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),q(w.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),q(w.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),q(w.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,bt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),q(w.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,As.isEmpty(_)?!1:_),a&&(q("CORS_ACCESSLIST",a),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,a)),s&&(q(w.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(q(w.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(q(w.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Ci}. Please check your boot props and settings files`;dn.fatal(r),dn.error(t)}}o(XI,"initTestEnvironment")});var m_=d(($0,IE)=>{"use strict";var Sn=Y();Sn.initSync();var ms=require("fs-extra"),A_=require("path"),gs=T(),zI=require("crypto"),eC=require("uuid").v4;IE.exports=tC;function tC(){if(Sn.getHdbBasePath()!==void 0){let e=A_.join(Sn.getHdbBasePath(),gs.LICENSE_KEY_DIR_NAME,gs.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=A_.join(Sn.getHdbBasePath(),gs.LICENSE_KEY_DIR_NAME,gs.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=A_.join(Sn.getHdbBasePath(),gs.LICENSE_KEY_DIR_NAME,gs.JWT_ENUM.JWT_PASSPHRASE_NAME);try{ms.accessSync(r),ms.accessSync(e),ms.accessSync(t)}catch(s){if(s.code==="ENOENT"){let n=eC(),i=zI.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:n}});ms.writeFileSync(r,n),ms.writeFileSync(e,i.privateKey),ms.writeFileSync(t,i.publicKey)}else throw s}}}o(tC,"checkJWTTokenExist")});var ps=d((Y0,LE)=>{"use strict";var bE=I(),CE=T(),Li=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,g_=require("joi"),bi={schema_format:{pattern:Li,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},rC=g_.alternatives(g_.string().min(1).max(bi.schema_length.maximum).pattern(Li).messages({"string.pattern.base":"{:#label} "+bi.schema_format.message}),g_.number()).required();function sC(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>bi.schema_length.maximum?`'${e}' maximum of 250 characters`:Li.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}o(sC,"checkValidTable");function nC(e,t){return bE.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}o(nC,"validateSchemaExists");function iC(e,t){let r=t.state.ancestors[0].schema;return bE.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(iC,"validateTableExists");function oC(e,t){return e.toLowerCase()===CE.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${CE.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(oC,"validateSchemaName");LE.exports={common_validators:bi,schema_regex:Li,hdb_schema_table:rC,validateSchemaExists:nC,validateTableExists:iC,validateSchemaName:oC,checkValidTable:sC}});var N_=d((K0,wE)=>{var{hdb_schema_table:yE}=ps(),aC=tt(),p_=require("joi"),_C={undefined:"undefined",null:"null"},cC=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||_C[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"),uC=p_.object({schema:yE,table:yE,records:p_.array().items(p_.object().custom(cC)).required()});wE.exports=function(e){return aC.validateBySchema(e,uC)}});var O_=d((W0,DE)=>{"use strict";var yi=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(yi,"BridgeMethods");DE.exports=yi});var Sr=d((J0,BE)=>{"use strict";var ME=et().LMDB_ERRORS_ENUM,Q0=require("lmdb"),lC=Te(),j0=require("buffer").Buffer,EC=require("microtime"),{OVERFLOW_MARKER:UE,MAX_SEARCH_KEY_LENGTH:wi}=lC,PE=["number","string","symbol","boolean","bigint"];function dC(e){if(!e)throw new Error(ME.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(ME.INVALID_ENVIRONMENT)}o(dC,"validateEnv");function SC(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(SC,"stringifyData");function hC(e){return e instanceof Date?e.valueOf():e}o(hC,"convertKeyValueToWrite");function fC(e){if(e==null)return;if(PE.includes(typeof e))return e.length>wi?[e.slice(0,wi)+UE]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];PE.includes(typeof n)&&(n.length>wi?t.push(n.slice(0,wi)+UE):t.push(n))}}return t}o(fC,"getIndexedValues");function TC(){let e=EC.now().toString(),t=e.length-3;return Number(e.slice(0,t)+"."+e.slice(t))}o(TC,"getMicroTime");BE.exports={validateEnv:dC,stringifyData:SC,convertKeyValueToWrite:hC,getMicroTime:TC,getIndexedValues:fC}});var vE=d((Z0,HE)=>{"use strict";var Di=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};o(Di,"DBIDefinition");HE.exports=Di});var qE=d((X0,GE)=>{"use strict";var Mi=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache={validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};o(Mi,"OpenDBIObject");GE.exports=Mi});var VE=d((z0,FE)=>{"use strict";var Ui=class{constructor(t,r,s,n,i=!1,a=!1,_=void 0){this.path=t,this.mapSize=r,this.maxDbs=s,this.maxReaders=n,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=i,this.trackMetrics=!0,this.noSync=a,_!==void 0&&(this.overlappingSync=_)}};o(Ui,"OpenEnvironmentObject");FE.exports=Ui});var $=d((tV,zE)=>{"use strict";var I_=require("lmdb"),nt=require("fs-extra"),ht=require("path"),Bi=Sr(),xE=O(),me=et().LMDB_ERRORS_ENUM,Hi=vE(),C_=qE(),kE=VE(),hr=Te(),eV=T(),hn=Y();hn.initSync();var $E=hn.get("STORAGE_WRITEASYNC")===!0||hn.get("STORAGE_WRITEASYNC")==="true"||hn.get("STORAGE_WRITEASYNC")==="TRUE",YE=hn.get("STORAGE_OVERLAPPINGSYNC"),KE=1024*1024*1024,WE=1e4,QE=1e3,ft=hr.INTERNAL_DBIS_NAME,jE=hr.DBI_DEFINITION_NAME,RC="data.mdb",AC="lock.mdb",fn=".mdb",mC="-lock",Pi=class{constructor(t,r,s=!1){this.dbi=it(t,r),this.key_type=this.dbi[hr.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[hr.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new I_.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};o(Pi,"TransactionCursor");function b_(e,t){if(e===void 0)throw new Error(me.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(me.ENV_NAME_REQUIRED)}o(b_,"pathEnvNameValidation");async function L_(e,t,r=!0){try{await nt.access(e)}catch(s){throw s.code==="ENOENT"?new Error(me.INVALID_BASE_PATH):s}try{let s=ht.join(e,t+fn);return await nt.access(s,nt.constants.R_OK|nt.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await nt.access(ht.join(e,t,RC),nt.constants.R_OK|nt.constants.F_OK),ht.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(me.INVALID_ENVIRONMENT)}else throw new Error(me.INVALID_ENVIRONMENT);throw s}}o(L_,"validateEnvironmentPath");function vi(e,t){if(Bi.validateEnv(e),t===void 0)throw new Error(me.DBI_NAME_REQUIRED)}o(vi,"validateEnvDBIName");async function gC(e,t,r=!1,s=!1){b_(e,t),t=t.toString();try{return await L_(e,t,s),y_(e,t,r)}catch(n){if(n.message===me.INVALID_ENVIRONMENT){let i=ht.join(e,t);await nt.mkdirp(s?i:e);let a=new kE(s?i:i+fn,KE,WE,QE,!1,$E,YE),_=I_.open(a);_.dbis=Object.create(null);let c=new C_(!1);_.openDB(ft,c),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=w_(e,t,r);return _[hr.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=_,_}throw n}}o(gC,"createEnvironment");async function pC(e,t,r,s=!0){let n=await y_(e,t);if(r===void 0)throw new Error(me.DESTINATION_PATH_REQUIRED);try{await nt.access(ht.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(me.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}o(pC,"copyEnvironment");async function y_(e,t,r=!1){b_(e,t),t=t.toString();let s=w_(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 L_(e,t),i=ht.join(e,t+fn),a=n!=i,_=new kE(n,KE,WE,QE,a,$E,YE),c=I_.open(_);c.dbis=Object.create(null);let u=ZE(c);for(let l=0;l<u.length;l++)it(c,u[l]);return c[hr.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=c,c}o(y_,"openEnvironment");async function NC(e,t,r=!1){b_(e,t),t=t.toString();let s=ht.join(e,t+fn),n=await L_(e,t);if(global.lmdb_map!==void 0){let i=w_(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await JE(a),delete global.lmdb_map[i]}}await nt.remove(n),await nt.remove(n===s?n+mC:ht.join(ht.dirname(n),AC))}o(NC,"deleteEnvironment");async function JE(e){Bi.validateEnv(e);let t=e[hr.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(JE,"closeEnvironment");function w_(e,t,r=!1){let n=`${ht.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}o(w_,"getCachedEnvironmentName");function OC(e){Bi.validateEnv(e);let t=Object.create(null),r=it(e,ft);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==ft)try{t[s]=Object.assign(new Hi,n)}catch{xE.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}o(OC,"listDBIDefinitions");function ZE(e){Bi.validateEnv(e);let t=[],r=it(e,ft);for(let{key:s}of r.getRange({start:!1}))s!==ft&&t.push(s);return t}o(ZE,"listDBIs");function IC(e,t){let s=it(e,ft).getEntry(t),n=new Hi;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{xE.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}o(IC,"getDBIDefinition");function XE(e,t,r,s=!1){if(vi(e,t),t=t.toString(),t===ft)throw new Error(me.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return it(e,t)}catch(n){if(n.message===me.DBI_DOES_NOT_EXIST){let i=new C_(r,s===!0),a=e.openDB(t,i),_=new Hi(r===!0,s);return a[jE]=_,it(e,ft).putSync(t,_),e.dbis[t]=a,a}throw n}}o(XE,"createDBI");function it(e,t){if(vi(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ft?r=IC(e,t):r=new Hi,r===void 0)throw new Error(me.DBI_DOES_NOT_EXIST);let s;try{let n=new C_(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(me.DBI_DOES_NOT_EXIST):n}return s[jE]=r,e.dbis[t]=s,s}o(it,"openDBI");function CC(e,t){vi(e,t),t=t.toString();let r=it(e,t),s=r.getStats();return r[hr.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}o(CC,"statDBI");async function bC(e,t){try{let r=ht.join(e,t+fn);return(await nt.stat(r)).size}catch{throw new Error(me.INVALID_ENVIRONMENT)}}o(bC,"environmentDataSize");function LC(e,t){if(vi(e,t),t=t.toString(),t===ft)throw new Error(me.CANNOT_DROP_INTERNAL_DBIS_NAME);it(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],it(e,ft).removeSync(t)}o(LC,"dropDBI");function yC(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{it(e,n)}catch(i){if(i.message===me.DBI_DOES_NOT_EXIST)XE(e,n,n!==t,n===t);else throw i}}}o(yC,"initializeDBIs");zE.exports={openDBI:it,openEnvironment:y_,createEnvironment:gC,listDBIs:ZE,listDBIDefinitions:OC,createDBI:XE,dropDBI:LC,statDBI:CC,deleteEnvironment:NC,initializeDBIs:yC,TransactionCursor:Pi,environmentDataSize:bC,copyEnvironment:pC,closeEnvironment:JE}});var td=d((rV,ed)=>{"use strict";var Gi=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};o(Gi,"InsertRecordsResponseObject");ed.exports=Gi});var sd=d((sV,rd)=>{"use strict";var qi=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(qi,"UpdateRecordsResponseObject");rd.exports=qi});var id=d((nV,nd)=>{"use strict";var Fi=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};o(Fi,"UpsertRecordsResponseObject");nd.exports=Fi});var Kr=d((_V,ad)=>{"use strict";var wC=$(),DC=td(),MC=sd(),UC=id(),Rn=Sr(),Tn=et().LMDB_ERRORS_ENUM,PC=Te(),fr=T(),BC=I(),HC=require("uuid"),iV=require("lmdb"),{handleHDBError:vC,hdb_errors:GC}=J(),{OVERFLOW_MARKER:oV,MAX_SEARCH_KEY_LENGTH:aV}=PC,D_=fr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Yr=fr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function qC(e,t,r,s,n=!0){B_(e,t,r,s),M_(e,t,r);let i=new DC,a=[],_=[];for(let c=0;c<s.length;c++){let u=s[c];od(u,!0,n);let l=FC(e,t,r,u),E=u[t];a.push(l),_.push(E)}return U_(a,_,s,i)}o(qC,"insertRecords");function FC(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 u=_([[{}]]);Array.isArray(u)&&(_=u[0][fr.FUNC_VAL],s[a]=_)}let c=Rn.getIndexedValues(_);if(c)for(let u=0,l=c.length;u<l;u++)e.dbis[a].put(c[u],n)}e.dbis[t].put(n,s,s[Yr])})}o(FC,"insertRecord");function VC(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}o(VC,"removeSkippedRecords");function od(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[Yr]))&&(e[Yr]=s),t===!0?(r===!0||!Number.isInteger(e[D_]))&&(e[D_]=s):delete e[D_]}o(od,"setTimestamps");function M_(e,t,r){r.indexOf(fr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(fr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(fr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(fr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),wC.initializeDBIs(e,t,r)}o(M_,"initializeTransaction");async function xC(e,t,r,s,n=!0){B_(e,t,r,s),M_(e,t,r);let i=new MC,a=[],_=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],h;try{h=P_(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),a.push(u);continue}_.push(h),c.push(E)}return U_(_,c,s,i,a)}o(xC,"updateRecords");async function kC(e,t,r,s,n=!0){try{B_(e,t,r,s)}catch(c){throw vC(c,c.message,GC.HTTP_STATUS_CODES.BAD_REQUEST)}M_(e,t,r);let i=new UC,a=[],_=[];for(let c=0;c<s.length;c++){let u=s[c],l;BC.isEmpty(u[t])?(l=HC.v4(),u[t]=l):l=u[t];let E=P_(e,t,u,l,i,!1,n);a.push(E),_.push(l)}return U_(a,_,s,i)}o(kC,"upsertRecords");async function U_(e,t,r,s,n=[]){let i=await Promise.all(e);for(let a=0,_=i.length;a<_;a++)i[a]===!0?s.written_hashes.push(t[a]):(s.skipped_hashes.push(t[a]),n.push(a));return s.txn_time=Rn.getMicroTime(),VC(r,n),s}o(U_,"finalizeWrite");function P_(e,t,r,s,n,i=!1,a=!0){let _=e.dbis[t],c=_.getEntry(s),u=c?.value,l=u;if(!u){if(i)return!1;u={}}if(od(r,!l,a),Number.isInteger(r[Yr])&&u[Yr]>r[Yr])return!1;l&&n.original_records.push(u);let E,h=o(()=>{for(let A in r){if(!r.hasOwnProperty(A)||A===t)continue;let R=r[A],L=e.dbis[A];if(L===void 0)continue;let de=u[A];if(typeof R=="function"){let k=R([[u]]);Array.isArray(k)&&(R=k[0][fr.FUNC_VAL],r[A]=R)}if(R===de)continue;let p=Rn.getIndexedValues(de);if(p)for(let k=0,Ie=p.length;k<Ie;k++)L.remove(p[k],s);if(p=Rn.getIndexedValues(R),p)for(let k=0,Ie=p.length;k<Ie;k++)L.put(p[k],s)}let S=Object.assign({},u,r);_.put(s,S,S[Yr])},"do_put");return c?E=_.ifVersion(s,c.version,h):E=_.ifNoExists(s,h),E.then(S=>S?!0:P_(e,t,r,s,n,i,a))}o(P_,"updateUpsertRecord");function $C(e,t,r){if(Rn.validateEnv(e),t===void 0)throw new Error(Tn.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Tn.WRITE_ATTRIBUTES_REQUIRED):new Error(Tn.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o($C,"validateBasic");function B_(e,t,r,s){if($C(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Tn.RECORDS_REQUIRED):new Error(Tn.RECORDS_MUST_BE_ARRAY)}o(B_,"validateWrite");ad.exports={insertRecords:qC,updateRecords:xC,upsertRecords:kC}});var Z=d((cV,cd)=>{"use strict";var H_=T(),Ns=Y(),v_=require("path");Ns.initSync();var Vi,xi,ki;function _d(){if(Vi!==void 0)return Vi;if(Ns.getHdbBasePath()!==void 0)return Vi=v_.join(Ns.getHdbBasePath(),H_.SCHEMA_DIR_NAME),Vi}o(_d,"getBaseSchemaPath");function YC(){if(xi!==void 0)return xi;if(Ns.getHdbBasePath()!==void 0)return xi=v_.join(_d(),H_.SYSTEM_SCHEMA_NAME),xi}o(YC,"getSystemSchemaPath");function KC(){if(ki!==void 0)return ki;if(Ns.getHdbBasePath()!==void 0)return ki=v_.join(Ns.getHdbBasePath(),H_.TRANSACTIONS_DIR_NAME),ki}o(KC,"getTransactionAuditStorePath");cd.exports={getBaseSchemaPath:_d,getSystemSchemaPath:YC,getTransactionAuditStorePath:KC}});var Wt=d((uV,WC)=>{WC.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 G_=d((lV,ud)=>{var{common_validators:Tr}=ps(),An=tt(),Tt="is required",K={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 mn(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(mn,"makeAttributesStrings");function QC(e){return e=mn(e),K.schema.presence={message:Tt},K.table.presence=!1,K.attribute.presence=!1,K.hash_attribute.presence=!1,An.validateObject(e,K)}o(QC,"schema_object");function jC(e){return e=mn(e),K.schema.presence={message:Tt},K.table.presence={message:Tt},K.attribute.presence=!1,K.hash_attribute.presence=!1,An.validateObject(e,K)}o(jC,"table_object");function JC(e){return e=mn(e),K.schema.presence={message:Tt},K.table.presence={message:Tt},K.attribute.presence=!1,K.hash_attribute.presence={message:Tt},An.validateObject(e,K)}o(JC,"create_table_object");function ZC(e){return e=mn(e),K.schema.presence={message:Tt},K.table.presence={message:Tt},K.attribute.presence={message:Tt},K.hash_attribute.presence=!1,An.validateObject(e,K)}o(ZC,"attribute_object");function XC(e){return e=mn(e),K.schema.presence={message:Tt},K.table.presence={message:Tt},K.attribute.presence=!1,K.hash_attribute.presence=!1,An.validateObject(e,K)}o(XC,"describe_table");function zC(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(zC,"validateTableResidence");ud.exports={schema_object:QC,create_table_object:JC,table_object:jC,attribute_object:ZC,describe_table:XC,validateTableResidence:zC}});var Ed=d((EV,ld)=>{"use strict";var eb=require("uuid"),$i=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||eb.v4(),this.schema_table=`${this.schema}.${this.table}`}};o($i,"CreateAttributeObject");ld.exports=$i});var Ki=d((dV,dd)=>{"use strict";var tb=Ed(),Yi=class extends tb{constructor(t,r,s,n,i=!0,a=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=a}};o(Yi,"LMDBCreateAttributeObject");dd.exports=Yi});var hd=d((SV,Sd)=>{"use strict";Sd.exports=sb;var rb="inserted";function sb(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===rb?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}o(sb,"returnObject")});var Wi=d((hV,Td)=>{"use strict";var nb=T(),q_=$(),ib=Kr(),{getSystemSchemaPath:ob,getBaseSchemaPath:ab}=Z(),_b=require("path"),cb=Wt(),ub=G_(),lb=Ki(),Eb=hd(),{handleHDBError:db,hdb_errors:Sb}=J(),hb=I(),F_=cb.hdb_attribute,fd=[];for(let e=0;e<F_.attributes.length;e++)fd.push(F_.attributes[e].attribute);var fb="inserted";Td.exports=Tb;async function Tb(e){let t=ub.attribute_object(e);if(t)throw db(new Error,t.message,Sb.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=hb.isEmpty(e.dup_sort)||e.dup_sort=="true";let r=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(r=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(r)&&r.length>0){for(let n of r)if(n.attribute===e.attribute)throw new Error(`attribute '${n.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new lb(e.schema,e.table,e.attribute,e.id);try{let n=await q_.openEnvironment(_b.join(ab(),e.schema.toString()),e.table);if(n.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);q_.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await q_.openEnvironment(ob(),nb.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:a,skipped_hashes:_}=await ib.insertRecords(i,F_.hash_attribute,fd,[s]);return Eb(fb,a,{records:[s]},_)}catch(n){throw n}}o(Tb,"lmdbCreateAttribute")});var Qi=d((TV,Ad)=>{"use strict";var Qt=I(),Rd=O(),fV=N_();Ad.exports=Rb;function Rb(e){if(Qt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Qt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Qt.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(Qt.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&&Qt.isEmptyOrZeroLength(a[r]))throw Rd.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(!Qt.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw Rd.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`);!Qt.isEmpty(a[r])&&a[r]!==""&&s.has(Qt.autoCast(a[r]))&&(a.skip=!0),s.add(Qt.autoCast(a[r]));for(let _ in a)n[_]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}o(Rb,"insertUpdateValidate")});var Ji=d((RV,md)=>{"use strict";var Ab=T().OPERATIONS_ENUM,ji=class{constructor(t,r,s,n,i=void 0){this.operation=Ab.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};o(ji,"InsertObject");md.exports=ji});var Xi=d((mV,gd)=>{"use strict";var AV=Ji(),Zi=T(),x_=I(),V_=O(),mb=require("uuid"),{handleHDBError:gn,hdb_errors:gb}=J(),{HDB_ERROR_MSGS:pn,HTTP_STATUS_CODES:Nn}=gb;gd.exports=pb;function pb(e,t,r){for(let n=0;n<t.length;n++)Nb(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Ob(i,r,e.operation)}}o(pb,"processRows");function Nb(e){if(Buffer.byteLength(String(e))>Zi.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw gn(new Error,pn.ATTR_NAME_LENGTH_ERR(e),Nn.BAD_REQUEST,void 0,void 0,!0);if(x_.isEmptyOrZeroLength(e)||x_.isEmpty(e.trim()))throw gn(new Error,pn.ATTR_NAME_NULLISH_ERR,Nn.BAD_REQUEST,void 0,void 0,!0)}o(Nb,"validateAttribute");function Ob(e,t,r){if(!e.hasOwnProperty(t)||x_.isEmptyOrZeroLength(e[t])){if(r===Zi.OPERATIONS_ENUM.INSERT||r===Zi.OPERATIONS_ENUM.UPSERT){e[t]=mb.v4();return}throw V_.error("Update transaction aborted due to record with no hash value:",e),gn(new Error,pn.RECORD_MISSING_HASH_ERR,Nn.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Zi.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw V_.error(e),gn(new Error,pn.HASH_VAL_LENGTH_ERR,Nn.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw V_.error(e),gn(new Error,pn.INVALID_FORWARD_SLASH_IN_HASH_ERR,Nn.BAD_REQUEST,void 0,void 0,!0)}o(Ob,"validateHash")});var Nd=d((gV,pd)=>{"use strict";var zi=class{constructor(t,r){this.type=t,this.message=r}};o(zi,"IPCEventObject");pd.exports=zi});var Os=d((pV,Od)=>{"use strict";var Ib=O(),k_=I(),Cb=T(),{IPC_ERRORS:On}=et();Od.exports={sendIpcEvent:bb,validateEvent:Lb,SchemaEventMsg:yb,UserEventMsg:wb};function bb(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):Ib.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}o(bb,"sendIpcEvent");function Lb(e){if(typeof e!="object")return On.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||k_.isEmpty(e.type))return On.MISSING_TYPE;if(!e.hasOwnProperty("message")||k_.isEmpty(e.message))return On.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||k_.isEmpty(e.message.originator))return On.MISSING_ORIGIN;if(Cb.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return On.INVALID_EVENT(e.type)}o(Lb,"validateEvent");function yb(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(yb,"SchemaEventMsg");function wb(e){this.originator=e}o(wb,"UserEventMsg")});var In=d((OV,Ld)=>{"use strict";var Id=T(),NV=I(),eo=O(),Cd=Nd(),{sendIpcEvent:bd}=Os();function Db(e){try{eo.trace("signalSchemaChange called with message:",e);let t=new Cd(Id.IPC_EVENT_TYPES.SCHEMA,e);bd(t)}catch(t){eo.error(t)}}o(Db,"signalSchemaChange");function Mb(e){try{eo.trace("signalUserChange called with message:",e);let t=new Cd(Id.IPC_EVENT_TYPES.USER,e);bd(t)}catch(t){eo.error(t)}}o(Mb,"signalUserChange");Ld.exports={signalSchemaChange:Db,signalUserChange:Mb}});var to=d((IV,wd)=>{"use strict";var yd=I(),Ub=T(),Pb=O(),Bb=Wi(),Hb=Ki(),vb=In(),{SchemaEventMsg:Gb}=Os(),qb="already exists in";wd.exports=Fb;async function Fb(e,t,r){try{if(yd.isEmptyOrZeroLength(r))return r;let s=[];yd.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 Vb(e,t.schema,t.name,i)})),n}catch(s){throw s}}o(Fb,"lmdbCheckForNewAttributes");async function Vb(e,t,r,s){let n=new Hb(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await xb(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(qb))Pb.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}o(Vb,"createNewAttribute");async function xb(e){let t;try{return t=await Bb(e),vb.signalSchemaChange(new Gb(process.pid,Ub.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}o(xb,"createAttribute")});var Is=d((CV,Dd)=>{"use strict";var ro=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(ro,"LMDBTransactionObject");Dd.exports=ro});var Ud=d((bV,Md)=>{"use strict";var kb=Is(),$b=T().OPERATIONS_ENUM,so=class extends kb{constructor(t,r,s,n,i=void 0){super($b.INSERT,r,s,n,i),this.records=t}};o(so,"LMDBInsertTransactionObject");Md.exports=so});var Bd=d((LV,Pd)=>{"use strict";var Yb=Is(),Kb=T().OPERATIONS_ENUM,no=class extends Yb{constructor(t,r,s,n,i,a=void 0){super(Kb.UPDATE,s,n,i,a),this.records=t,this.original_records=r}};o(no,"LMDBUpdateTransactionObject");Pd.exports=no});var vd=d((yV,Hd)=>{"use strict";var Wb=Is(),Qb=T().OPERATIONS_ENUM,io=class extends Wb{constructor(t,r,s,n,i,a=void 0){super(Qb.UPSERT,s,n,i,a),this.records=t,this.original_records=r}};o(io,"LMDBUpsertTransactionObject");Hd.exports=io});var qd=d((wV,Gd)=>{"use strict";var jb=Is(),Jb=T().OPERATIONS_ENUM,oo=class extends jb{constructor(t,r,s,n,i=void 0){super(Jb.DELETE,s,n,t,i),this.original_records=r}};o(oo,"LMDBDeleteTransactionObject");Gd.exports=oo});var Cn=d((DV,kd)=>{"use strict";var Zb=require("path"),Fd=$(),Xb=Ud(),zb=Bd(),eL=vd(),tL=qd(),Cs=Te(),Vd=I(),{CONFIG_PARAMS:rL}=T(),xd=Y();xd.initSync();var ao=T().OPERATIONS_ENUM,{getTransactionAuditStorePath:sL}=Z();kd.exports=nL;async function nL(e,t){if(xd.get(rL.LOGGING_AUDITLOG)===!1)return;let r=Zb.join(sL(),e.schema.toString()),s=await Fd.openEnvironment(r,e.table,!0),n=iL(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Fd.initializeDBIs(s,Cs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Cs.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[Cs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Cs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),Vd.isEmpty(n.user_name)||s.dbis[Cs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let a=0;a<n.hash_values.length;a++)s.dbis[Cs.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[a],i)})}catch(i){throw i}}}o(nL,"writeTransaction");function iL(e,t){let r=Vd.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===ao.INSERT)return new Xb(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ao.UPDATE)return new zb(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ao.UPSERT)return new eL(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ao.DELETE)return new tL(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(iL,"createTransactionObject")});var $_=d((UV,$d)=>{"use strict";var oL=Qi(),MV=Ji(),bs=T(),aL=Xi(),_L=Kr().insertRecords,cL=$(),uL=require("path"),lL=O(),EL=to(),{getBaseSchemaPath:dL}=Z(),SL=Cn();$d.exports=hL;async function hL(e){try{let{schema_table:t,attributes:r}=oL(e);aL(e,r,t.hash_attribute),e.schema!==bs.SYSTEM_SCHEMA_NAME&&(r.includes(bs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(bs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(bs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(bs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await EL(e.hdb_auth_header,t,r),n=uL.join(dL(),e.schema.toString()),i=await cL.openEnvironment(n,e.table),a=await _L(i,t.hash_attribute,r,e.records,e[bs.CLUSTERING_FLAG]!==!0);try{await SL(e,a)}catch(_){lL.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(hL,"lmdbCreateRecords")});var Wd=d((PV,Kd)=>{"use strict";var Yd=T(),fL=$_(),TL=Ji(),RL=require("fs-extra"),AL=require("path"),{getBaseSchemaPath:mL}=Z();Kd.exports=gL;async function gL(e){let t=[{name:e.schema,createddate:Date.now()}],r=new TL(Yd.SYSTEM_SCHEMA_NAME,Yd.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await fL(r),await RL.mkdirp(AL.join(mL(),e.schema.toString()))}o(gL,"lmdbCreateSchema")});var jd=d((BV,Qd)=>{"use strict";var _o=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};o(_o,"DeleteRecordsResponseObject");Qd.exports=_o});var W_=d((qV,Xd)=>{"use strict";var Jd=$(),Y_=Sr(),K_=et().LMDB_ERRORS_ENUM,pL=Te(),Zd=O(),HV=I(),NL=require("lmdb"),OL=jd(),{OVERFLOW_MARKER:vV,MAX_SEARCH_KEY_LENGTH:GV}=pL;async function IL(e,t,r){if(Y_.validateEnv(e),t===void 0)throw new Error(K_.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(K_.IDS_REQUIRED):new Error(K_.IDS_MUST_BE_ARRAY);try{let s=Jd.listDBIs(e);Jd.initializeDBIs(e,t,s);let n=new OL,i,a=[],_=[];for(let E=0,h=r.length;E<h;E++)try{i=r[E];let S=e.dbis[t].get(i);if(!S){n.skipped.push(i);continue}let A=e.dbis[t].ifVersion(i,NL.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let R=0;R<s.length;R++){let L=s[R];if(!S.hasOwnProperty(L)||L===t)continue;let de=e.dbis[L],p=S[L];if(p!=null)try{let k=Y_.getIndexedValues(p);if(k)for(let Ie=0,Ce=k.length;Ie<Ce;Ie++)de.remove(k[Ie],i)}catch{Zd.warn(`cannot delete from attribute: ${L}, ${p}:${i}`)}}});a.push(A),_.push(i),n.original_records.push(S)}catch(S){Zd.warn(S),n.skipped.push(i)}let c=[],u=await Promise.all(a);for(let E=0,h=u.length;E<h;E++)u[E]===!0?n.deleted.push(_[E]):(n.skipped.push(_[E]),c.push(E));let l=0;for(let E=0;E<c.length;E++){let h=c[E];n.original_records.splice(h-l,1),l++}return n.txn_time=Y_.getMicroTime(),n}catch(s){throw s}}o(IL,"deleteRecords");Xd.exports={deleteRecords:IL}});var bn=d((FV,eS)=>{"use strict";var Ls=I(),CL=W_(),bL=$(),LL=require("path"),{getBaseSchemaPath:yL}=Z(),wL=Cn(),DL=O();eS.exports=ML;async function ML(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ls.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ls.isEmptyOrZeroLength(e.hash_values)&&!Ls.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let _=0;_<e.records.length;_++){let c=e.records[_][s];Ls.isEmpty(c)||e.hash_values.push(c)}}if(Ls.isEmptyOrZeroLength(e.hash_values))return zd([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ls.isEmptyOrZeroLength(e.records)){e.records=[];for(let _=0;_<e.hash_values.length;_++)e.records[_]={[s]:e.hash_values[_]}}let n=LL.join(yL(),e.schema.toString()),i=await bL.openEnvironment(n,e.table),a=await CL.deleteRecords(i,s,e.hash_values);try{t===!0&&await wL(e,a)}catch(_){DL.error(`unable to write transaction due to ${_.message}`)}return zd(a.deleted,a.skipped,a.txn_time)}catch(n){throw n}}o(ML,"lmdbDeleteRecords");function zd(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(zd,"createDeleteResponse")});var j_=d((xV,tS)=>{"use strict";var UL=T(),VV=Sr();function Q_(e,t){let r=Object.create(null);if(t.length===1&&UL.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(Q_,"parseRow");function PL(e,t,r,s){let n=Q_(r,e);s.push(n)}o(PL,"searchAll");function BL(e,t,r,s){let n=Q_(r,e);s[t]=n}o(BL,"searchAllToMap");function HL(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(HL,"iterateDBI");function Wr(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(Wr,"pushResults");function vL(e,t,r,s,n,i){t.toString().endsWith(e)&&Wr(t,r,s,n,i)}o(vL,"endsWith");function GL(e,t,r,s,n,i){t.toString().includes(e)&&Wr(t,r,s,n,i)}o(GL,"contains");function qL(e,t,r,s,n,i){t>e&&Wr(t,r,s,n,i)}o(qL,"greaterThanCompare");function FL(e,t,r,s,n,i){t>=e&&Wr(t,r,s,n,i)}o(FL,"greaterThanEqualCompare");function VL(e,t,r,s,n,i){t<e&&Wr(t,r,s,n,i)}o(VL,"lessThanCompare");function xL(e,t,r,s,n,i){t<=e&&Wr(t,r,s,n,i)}o(xL,"lessThanEqualCompare");tS.exports={parseRow:Q_,searchAll:PL,searchAllToMap:BL,iterateDBI:HL,endsWith:vL,contains:GL,greaterThanCompare:qL,greaterThanEqualCompare:FL,lessThanCompare:VL,lessThanEqualCompare:xL,pushResults:Wr}});var ys=d((YV,aS)=>{"use strict";var ot=$(),kL=O(),Qe=Sr(),Rr=Te(),re=et().LMDB_ERRORS_ENUM,kV=I(),$L=T(),Rt=j_(),$V=require("lmdb"),{OVERFLOW_MARKER:rS,MAX_SEARCH_KEY_LENGTH:YL}=Rr,Ln={lazy:!0};function sS(e,t,r,s,n=!1,i=void 0,a=void 0){let _=Object.create(null),c=ot.openDBI(e,r);c[Rr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let u=J_(e,t,r);for(let{key:l,value:E}of c.getRange({start:n?void 0:!1,end:n?!1:void 0,limit:i,offset:a,reverse:n}))s(u(l,E),E,_,t,r);return _}o(sS,"iterateFullIndex");function yn(e,t,r,s,n,i=!1,a=void 0,_=void 0,c=!1,u=!1){let l=[[],[]],E=ot.openDBI(e,r),h=J_(e,t,r);E[Rr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let S=i===!0?s:n,A=i===!0?n:s,R=i===!0?!c:!u,L=i===!0?u:c;for(let{key:de,value:p}of E.getRange({start:A,end:S,reverse:i,limit:a,offset:_,inclusiveEnd:R,exclusiveStart:L}))Rt.pushResults(h(de,p),p,l,t,r);return l}o(yn,"iterateRangeBetween");function J_(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith(rS)){if(!s)if(t)s=ot.openDBI(e,t);else{let _=ot.listDBIs(e);for(let c=0,u=_.length;c<u&&(s=ot.openDBI(e,_[c]),!s[Rr.DBI_DEFINITION_NAME].is_hash_attribute);c++);}n=s.get(i,Ln)[r]}return n}}o(J_,"getOverflowCheck");function KL(e,t,r,s=!1,n=void 0,i=void 0){if(Qe.validateEnv(e),t===void 0)throw new Error(re.HASH_ATTRIBUTE_REQUIRED);co(r),r=wn(e,r);let a=[],_=ot.openDBI(e,t);for(let{key:c,value:u}of _.getRange({start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))Rt.searchAll(r,c,u,a);return a}o(KL,"searchAll");function WL(e,t,r,s=!1,n=void 0,i=void 0){if(Qe.validateEnv(e),t===void 0)throw new Error(re.HASH_ATTRIBUTE_REQUIRED);return co(r),r=wn(e,r),sS(e,t,t,Rt.searchAllToMap.bind(null,r),s,n,i)}o(WL,"searchAllToMap");function QL(e,t,r=!1,s=void 0,n=void 0){if(Qe.validateEnv(e),t===void 0)throw new Error(re.ATTRIBUTE_REQUIRED);return sS(e,void 0,t,Rt.iterateDBI,r,s,n)}o(QL,"iterateDBI");function jL(e,t){if(Qe.validateEnv(e),t===void 0)throw new Error(re.HASH_ATTRIBUTE_REQUIRED);return ot.statDBI(e,t).entryCount}o(jL,"countAll");function JL(e,t,r,s,n=!1,i=void 0,a=void 0){Ar(e,r,s);let _=ot.openDBI(e,r);s=Qe.convertKeyValueToWrite(s);let c=[[],[]];if(_[Rr.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=_.get(s,Ln);u!==void 0&&Rt.pushResults(s,u,c,t,r)}else for(let u of _.getValues(s,{reverse:n,limit:i,offset:a}))Rt.pushResults(s,u,c,t,r);return c}o(JL,"equals");function ZL(e,t,r){return Ar(e,t,r),ot.openDBI(e,t).getValuesCount(r)}o(ZL,"count");function XL(e,t,r,s,n=!1,i=void 0,a=void 0){Ar(e,r,s);let _=[[],[]],c=ot.openDBI(e,r);c[Rr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r),s=Qe.convertKeyValueToWrite(s);let u=!0;if(typeof s=="number"&&(u=!1),n===!0){let l;for(let E of c.getKeys({start:s}))if(!E.startsWith(s)){l=E;break}l!==void 0&&(Number.isInteger(a)?a++:i++);for(let{key:E,value:h}of c.getRange({start:l,end:void 0,reverse:n,limit:i,offset:a}))if(E!==l){if(E.toString().startsWith(s))Rt.pushResults(E,h,_,t,r);else if(u===!0)break}}else for(let{key:l,value:E}of c.getRange({start:s,reverse:n,limit:i,offset:a}))if(l.toString().startsWith(s))Rt.pushResults(l,E,_,t,r);else if(u===!0)break;return _}o(XL,"startsWith");function zL(e,t,r,s,n=!1,i=void 0,a=void 0){return nS(e,t,r,s,n,i,a,!0)}o(zL,"endsWith");function nS(e,t,r,s,n=!1,i=void 0,a=void 0,_=!1){Ar(e,r,s);let c=[[],[]],u=ot.openDBI(e,r);u[Rr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let l=J_(e,t,r);a=Number.isInteger(a)?a:0;for(let h of u.getKeys({end:n?!1:void 0,reverse:n})){if(i===0)break;let S=h.toString();if(S.endsWith(rS))for(let A of u.getValues(h)){let R=l(h,A);(_?R.endsWith(s):R.includes(s))&&E(R,A)}else if(_?S.endsWith(s):S.includes(s))if(u[Rr.DBI_DEFINITION_NAME].is_hash_attribute)E(h,h);else for(let A of u.getValues(h))E(h,A)}function E(h,S){if(a>0){a--;return}i!==0&&(Rt.pushResults(h,S,c,t,r),i--)}return o(E,"found_match"),c}o(nS,"contains");function ey(e,t,r,s,n=!1,i=void 0,a=void 0){Ar(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),yn(e,t,r,s,c,n,i,a,!0,!1)}o(ey,"greaterThan");function ty(e,t,r,s,n=!1,i=void 0,a=void 0){Ar(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),yn(e,t,r,s,c,n,i,a,!1,!1)}o(ty,"greaterThanEqual");function ry(e,t,r,s,n=!1,i=void 0,a=void 0){Ar(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),yn(e,t,r,c,s,n,i,a,!1,!0)}o(ry,"lessThan");function sy(e,t,r,s,n=!1,i=void 0,a=void 0){Ar(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),yn(e,t,r,c,s,n,i,a,!1,!1)}o(sy,"lessThanEqual");function ny(e,t,r,s,n,i=!1,a=void 0,_=void 0){if(Qe.validateEnv(e),r===void 0)throw new Error(re.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(re.START_VALUE_REQUIRED);if(n===void 0)throw new Error(re.END_VALUE_REQUIRED);if(s=Qe.convertKeyValueToWrite(s),n=Qe.convertKeyValueToWrite(n),s>n)throw new Error(re.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return yn(e,t,r,s,n,i,a,_)}o(ny,"between");function iy(e,t,r,s){if(Qe.validateEnv(e),t===void 0)throw new Error(re.HASH_ATTRIBUTE_REQUIRED);if(co(r),r=wn(e,r),s===void 0)throw new Error(re.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?Ln:void 0);return i&&(n=Rt.parseRow(i,r)),n}o(iy,"searchByHash");function oy(e,t,r){if(Qe.validateEnv(e),t===void 0)throw new Error(re.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(re.ID_REQUIRED);let s=!0;return e.dbis[t].get(r,Ln)===void 0&&(s=!1),s}o(oy,"checkHashExists");function ay(e,t,r,s,n=[]){oS(e,t,r,s,n);let i=iS(e,t,r,s,n);return Object.values(i)}o(ay,"batchSearchByHash");function _y(e,t,r,s,n=[]){return oS(e,t,r,s,n),iS(e,t,r,s,n)}o(_y,"batchSearchByHashToMap");function iS(e,t,r,s,n=[]){r=wn(e,r);let i=Object.create(null),a=r.length<3?Ln:void 0;for(let _=0;_<s.length;_++){let c=s[_];try{let u=e.dbis[t].get(c,a);if(u){let l=Rt.parseRow(u,r);i[c]=l}else n.push(c)}catch(u){throw kL.warn(u),u}}return i}o(iS,"batchHashSearch");function oS(e,t,r,s,n){if(Qe.validateEnv(e),t===void 0)throw new Error(re.HASH_ATTRIBUTE_REQUIRED);if(co(r),!Array.isArray(s))throw s===void 0?new Error(re.IDS_REQUIRED):new Error(re.IDS_MUST_BE_ARRAY);Array.isArray(n)||(n=[])}o(oS,"initializeBatchSearchByHash");function co(e){if(!Array.isArray(e))throw e===void 0?new Error(re.FETCH_ATTRIBUTES_REQUIRED):new Error(re.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(co,"validateFetchAttributes");function Ar(e,t,r){if(Qe.validateEnv(e),t===void 0)throw new Error(re.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(re.SEARCH_VALUE_REQUIRED);if(r?.length>YL)throw new Error(re.SEARCH_VALUE_TOO_LARGE)}o(Ar,"validateComparisonFunctions");function wn(e,t){return t.length===1&&$L.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ot.listDBIs(e)),t}o(wn,"setGetWholeRowAttributes");aS.exports={searchAll:KL,searchAllToMap:WL,count:ZL,countAll:jL,equals:JL,startsWith:XL,endsWith:zL,contains:nS,searchByHash:iy,setGetWholeRowAttributes:wn,batchSearchByHash:ay,batchSearchByHashToMap:_y,checkHashExists:oy,iterateDBI:QL,greaterThan:ey,greaterThanEqual:ty,lessThan:ry,lessThanEqual:sy,between:ny}});var Dn=d((WV,lS)=>{var _S=require("lodash"),cS=tt(),V=require("joi"),cy=I(),{hdb_schema_table:At,checkValidTable:uS}=ps(),{handleHDBError:uy,hdb_errors:ly}=J(),{HTTP_STATUS_CODES:Ey}=ly,KV=V.object({schema:At,table:At,hash_values:V.array().min(1).items(V.alternatives(V.string(),V.number())).required(),get_attributes:V.array().min(1).items(At).required()}),dy=V.object({schema:At,table:At,search_attribute:At,search_value:V.any().required(),get_attributes:V.array().min(1).items(At).required(),desc:V.bool(),limit:V.number().integer().min(1),offset:V.number().integer().min(0)}),Sy=V.object({schema:At,table:At,operator:V.string().valid("and","or").default("and").lowercase(),offset:V.number().integer().min(0),limit:V.number().integer().min(1),get_attributes:V.array().min(1).items(At).required(),conditions:V.array().min(1).items(V.object({search_attribute:At,search_type:V.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:V.when("search_type",{switch:[{is:"equals",then:V.any()},{is:"between",then:V.array().items(V.alternatives([V.string(),V.number()])).length(2)}],otherwise:V.alternatives(V.string(),V.number())}).required()})).required()});lS.exports=function(e,t){let r=null;switch(t){case"value":r=cS.validateBySchema(e,dy);break;case"hashes":let i=function(a){n?n+=". "+a:n=a};var s=i;o(i,"addError");let n;i(uS("schema",e.schema)),i(uS("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=cS.validateBySchema(e,Sy);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=cy.checkGlobalSchemaTable(e.schema,e.table);if(n)return uy(new Error,n,Ey.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=_S.filter(_,u=>u!=="*"&&u.attribute!=="*"&&!_S.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 Z_=d((QV,ES)=>{"use strict";var hy=$(),fy=Dn(),Ty=require("path"),{getBaseSchemaPath:Ry}=Z();ES.exports=Ay;function Ay(e){let t=fy(e,"hashes");if(t)throw t;let r=Ty.join(Ry(),e.schema.toString());return hy.openEnvironment(r,e.table)}o(Ay,"initialize")});var X_=d((jV,dS)=>{"use strict";var my=ys(),gy=Z_();dS.exports=py;async function py(e){try{let t=await gy(e),r=global.hdb_schema[e.schema][e.table];return my.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}o(py,"lmdbGetDataByHash")});var ws=d((JV,SS)=>{"use strict";var uo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};o(uo,"SearchByHashObject");SS.exports=uo});var fS=d((XV,hS)=>{"use strict";var ZV=ws(),Ny=ys(),Oy=Z_();hS.exports=Iy;async function Iy(e){try{let t=await Oy(e),r=global.hdb_schema[e.schema][e.table];return Ny.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}o(Iy,"lmdbSearchByHash")});var mt=d((zV,TS)=>{"use strict";var lo=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(lo,"SearchObject");TS.exports=lo});var Eo=d((ex,pS)=>{"use strict";var ye=ys(),Cy=$(),by=require("path"),Ly=I(),C=Te(),Qr=T(),{getBaseSchemaPath:yy}=Z(),wy=Wt(),RS=et().LMDB_ERRORS_ENUM,{compareKeys:Ds}=require("ordered-binary"),jt=Qr.SEARCH_WILDCARDS;async function Dy(e,t,r){let s;e.schema===Qr.SYSTEM_SCHEMA_NAME?s=wy[e.table]:s=global.hdb_schema[e.schema][e.table];let n=gS(e,s.hash_attribute,r,t);return AS(e,n,s.hash_attribute,r)}o(Dy,"prepSearch");async function AS(e,t,r,s){let n=by.join(yy(),e.schema.toString()),i=await Cy.openEnvironment(n,e.table),a=mS(i,e,t,r);if([C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,C.SEARCH_TYPES.SEARCH_ALL,C.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(Py(e,r)===!1)return s===!0?Uy(a):a[1];let c=a[0];return s===!0?ye.batchSearchByHashToMap(i,r,e.get_attributes,c):ye.batchSearchByHash(i,r,e.get_attributes,c)}o(AS,"executeSearch");function mS(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 C.SEARCH_TYPES.EQUALS:n=ye.equals(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.CONTAINS:n=ye.contains(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.ENDS_WITH:case C.SEARCH_TYPES._ENDS_WITH:n=ye.endsWith(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.STARTS_WITH:case C.SEARCH_TYPES._STARTS_WITH:n=ye.startsWith(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return ye.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return ye.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case C.SEARCH_TYPES.SEARCH_ALL:return ye.searchAll(e,s,t.get_attributes,a,_,c);case C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return ye.searchAllToMap(e,s,t.get_attributes,a,_,c);case C.SEARCH_TYPES.BETWEEN:n=ye.between(e,i,t.search_attribute,t.search_value,t.end_value,a,_,c);break;case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:n=ye.greaterThan(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:n=ye.greaterThanEqual(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:n=ye.lessThan(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:n=ye.lessThanEqual(e,i,t.search_attribute,t.search_value,a,_,c);break;default:return Object.create(null)}return n}o(mS,"searchByType");function My(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case C.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case C.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case C.SEARCH_TYPES.ENDS_WITH:case C.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case C.SEARCH_TYPES.STARTS_WITH:case C.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case C.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return Ds(i,s[0])>=0&&Ds(i,s[1])<=0};case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:return n=>Ds(n[r],s)>0;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>Ds(n[r],s)>=0;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:return n=>Ds(n[r],s)<0;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>Ds(n[r],s)<=0;default:return Object.create(null)}}o(My,"filterByType");function Uy(e){let t=Object.create(null);for(let r=0,s=e[0].length;r<s;r++)t[e[0][r]]=e[1][r];return t}o(Uy,"createMapFromArrays");function Py(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(Py,"checkToFetchMore");function gS(e,t,r,s){if(Ly.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?C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:C.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(jt[0])<0&&n.indexOf(jt[1])<0)return _===!0?r===!0?C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:C.SEARCH_TYPES.EQUALS;if(jt.indexOf(i)>=0&&jt.indexOf(a)>=0)return e.search_value=e.search_value.slice(1,-1),C.SEARCH_TYPES.CONTAINS;if(jt.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),C.SEARCH_TYPES.ENDS_WITH;if(jt.indexOf(a)>=0)return e.search_value=e.search_value.slice(0,-1),C.SEARCH_TYPES.STARTS_WITH;if(n.includes(jt[0])||n.includes(jt[1]))return C.SEARCH_TYPES.EQUALS;throw new Error(RS.UNKNOWN_SEARCH_TYPE)}else switch(s){case Qr.VALUE_SEARCH_COMPARATORS.BETWEEN:return C.SEARCH_TYPES.BETWEEN;case Qr.VALUE_SEARCH_COMPARATORS.GREATER:return C.SEARCH_TYPES.GREATER_THAN;case Qr.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return C.SEARCH_TYPES.GREATER_THAN_EQUAL;case Qr.VALUE_SEARCH_COMPARATORS.LESS:return C.SEARCH_TYPES.LESS_THAN;case Qr.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return C.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(RS.UNKNOWN_SEARCH_TYPE)}}o(gS,"createSearchTypeFromSearchObject");pS.exports={executeSearch:AS,createSearchTypeFromSearchObject:gS,prepSearch:Dy,searchByType:mS,filterByType:My}});var OS=d((rx,NS)=>{"use strict";var tx=mt(),By=Dn(),Hy=I(),vy=T(),Gy=Eo();NS.exports=qy;async function qy(e,t){if(!Hy.isEmpty(t)&&vy.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=By(e,"value");if(s)throw s;let n=!0;try{return await Gy.prepSearch(e,t,n)}catch(i){throw i}}o(qy,"lmdbGetDataByValue")});var Ms=d((nx,IS)=>{"use strict";var sx=mt(),Fy=Dn(),Vy=I(),xy=T(),ky=Eo();IS.exports=$y;async function $y(e,t){if(!Vy.isEmpty(t)&&xy.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=Fy(e,"value");if(s)throw s;let n=!1;try{return await ky.prepSearch(e,t,n)}catch(i){throw i}}o($y,"lmdbSearchByValue")});var bS=d((ox,CS)=>{"use strict";var ix=Te(),So=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(So,"SearchByConditionsObject");var ho=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};o(ho,"SearchCondition");var fo=class{constructor(t,r){this.attribute=t,this.desc=r}};o(fo,"SortAttribute");CS.exports={SearchByConditionsObject:So,SearchCondition:ho,SortAttribute:fo}});var US=d((_x,MS)=>{"use strict";var ax=bS().SearchByConditionsObject,Yy=mt(),Ky=Dn(),z_=ys(),To=Te(),DS=Eo(),Wy=j_(),LS=require("lodash"),{getBaseSchemaPath:Qy}=Z(),jy=require("path"),Jy=$(),{handleHDBError:yS,hdb_errors:Zy}=J(),{HTTP_STATUS_CODES:Xy}=Zy,zy=1e8,ew={lazy:!0};MS.exports=tw;async function tw(e){try{let t=Ky(e,"conditions");if(t)throw yS(t,t.message,Xy.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=jy.join(Qy(),e.schema.toString()),s=await Jy.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=LS.sortBy(e.conditions,a=>{if(a.estimated_count===void 0){let _=a.search_type;_===To.SEARCH_TYPES.EQUALS?a.estimated_count=z_.count(s,a.search_attribute,a.search_value):_===To.SEARCH_TYPES.CONTAINS||_===To.SEARCH_TYPES.ENDS_WITH?a.estimated_count=1/0:a.estimated_count=zy}return a.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[a]=await wS(s,e,i[0],n.hash_attribute),_=s.dbis[n.hash_attribute],c=i.slice(1).map(DS.filterByType),u=c.length,l=[],E=z_.setGetWholeRowAttributes(s,e.get_attributes),h=e.offset>-1?e.offset:0,S=e.limit>-1?e.limit:1/0;e:for(let A of a){let R=_.get(A,ew);for(let L=0;L<u;L++)if(!c[L](R))continue e;if(h>0){h--;continue}if(S<=0)break;S--,l.push(Wy.parseRow(R,E))}return l}else{let a=[],_=[];for(let c of i){let[u]=await wS(s,e,c,n.hash_attribute);_.push(u)}if(a=LS.union(..._),e.limit>0||e.offset>0){let c=Number.isInteger(e.limit)?e.limit:a.length;a=a.splice(e.offset,c)}return z_.batchSearchByHash(s,n.hash_attribute,e.get_attributes,a)}}catch(t){throw yS(t)}}o(tw,"lmdbSearchByConditions");async function wS(e,t,r,s){let n=new Yy(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===To.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,DS.searchByType(e,n,i,s)}o(wS,"executeConditionSearch")});var Ao=d((cx,PS)=>{"use strict";var rw=T().OPERATIONS_ENUM,Ro=class{constructor(t,r,s,n=void 0){this.operation=rw.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};o(Ro,"DeleteObject");PS.exports=Ro});var ec=d((ux,BS)=>{"use strict";var mo=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};o(mo,"DropAttributeObject");BS.exports=mo});var rc=d((Ex,HS)=>{"use strict";var sw=mt(),nw=Ao(),lx=ec(),Lt=T(),iw=I(),tc=$(),ow=Wt(),aw=Ms(),_w=bn(),{getBaseSchemaPath:cw}=Z(),uw=require("path");HS.exports=lw;async function lw(e,t=!0){let r;e.schema===Lt.SYSTEM_SCHEMA_NAME?r=ow[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await dw(e),n=uw.join(cw(),e.schema.toString()),i=await tc.openEnvironment(n,e.table);return t===!0&&await Ew(e,i,r.hash_attribute),tc.dropDBI(i,e.attribute),s}o(lw,"lmdbDropAttribute");async function Ew(e,t,r){let s=tc.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(Ew,"removeAttributeFromAllObjects");async function dw(e){let t=new sw(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=(await aw(t)).filter(a=>a[Lt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(iw.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 nw(Lt.SYSTEM_SCHEMA_NAME,Lt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return _w(i)}o(dw,"dropAttributeFromSystem")});var FS=d((dx,qS)=>{"use strict";var Sw=rc(),hw=ec(),vS=I(),GS=O(),fw=et().LMDB_ERRORS_ENUM;qS.exports=Tw;async function Tw(e){if(vS.isEmpty(global.hdb_schema[e.schema])||vS.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);let t=global.hdb_schema[e.schema][e.table],r;try{for(let s=0;s<t.attributes.length;s++){r=t.attributes[s].attribute;let n=new hw(e.schema,e.table,r);try{await Sw(n,!1)}catch(i){i.message!==fw.DBI_DOES_NOT_EXIST&&GS.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw GS.error(`Error dropping attribute ${r}`),s}}o(Tw,"lmdbDropAllAttributes")});var sc=d((hx,jS)=>{"use strict";var YS=mt(),KS=Ao(),WS=Ms(),QS=bn(),Sx=FS(),qe=T(),VS=I(),xS=$(),{getBaseSchemaPath:Rw,getTransactionAuditStorePath:Aw}=Z(),kS=require("path"),$S=O();jS.exports=mw;async function mw(e){try{if(VS.isEmpty(global.hdb_schema[e.schema])||VS.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await gw(e),await pw(e);let t=kS.join(Rw(),e.schema.toString());try{await xS.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")$S.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=kS.join(Aw(),e.schema.toString());await xS.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")$S.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(mw,"lmdbDropTable");async function gw(e){let t=new YS(qe.SYSTEM_SCHEMA_NAME,qe.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,qe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[qe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=await WS(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 KS(qe.SYSTEM_SCHEMA_NAME,qe.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await QS(n)}o(gw,"deleteAttributesFromSystem");async function pw(e){let t=new YS(qe.SYSTEM_SCHEMA_NAME,qe.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,qe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[qe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,qe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,qe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=await WS(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 KS(qe.SYSTEM_SCHEMA_NAME,qe.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await QS(n)}catch(i){throw i}}o(pw,"dropTableFromSystem")});var ZS=d((Tx,JS)=>{"use strict";var Nw=require("fs-extra"),Ow=mt(),Iw=ws(),Cw=Ao(),bw=sc(),Lw=bn(),yw=X_(),ww=Ms(),Jt=T(),fx=I(),Dw=require("path"),{getBaseSchemaPath:Mw}=Z(),{handleHDBError:Uw,hdb_errors:Pw}=J(),{HDB_ERROR_MSGS:Bw,HTTP_STATUS_CODES:Hw}=Pw;JS.exports=vw;async function vw(e){let t;try{t=await Gw(e.schema);let r=new Ow(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=await ww(r);for(let a=0;a<s.length;a++){let _={schema:t,table:s[a].name};try{await bw(_)}catch(c){if(c.message!=="invalid environment")throw c}}let n=new Cw(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Lw(n);let i=Dw.join(Mw(),t.toString());await Nw.remove(i)}catch(r){throw r}}o(vw,"lmdbDropSchema");async function Gw(e){let t=new Iw(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=await yw(t)}catch(n){throw n}for(let n in r)r[n].name===e&&(s=e);if(!s)throw Uw(new Error,Bw.SCHEMA_NOT_FOUND(e),Hw.NOT_FOUND,void 0,void 0,!0);return s}o(Gw,"validateDropSchema")});var po=d((Rx,XS)=>{"use strict";var go=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};o(go,"CreateTableObject");XS.exports=go});var ic=d((mx,zS)=>{"use strict";var qw=require("path"),Fw=require("fs-extra"),No=$(),{getTransactionAuditStorePath:Vw}=Z(),nc=Te(),Ax=po();zS.exports=xw;async function xw(e){let t;try{let r=qw.join(Vw(),e.schema.toString());await Fw.mkdirp(r),t=await No.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{No.createDBI(t,nc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),No.createDBI(t,nc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),No.createDBI(t,nc.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(xw,"createTransactionsAuditEnvironment")});var uc=d((gx,rh)=>{"use strict";var oc=T(),eh=$(),kw=Kr(),$w=require("path"),{getSystemSchemaPath:Yw,getBaseSchemaPath:Kw}=Z(),Ww=Wt(),Qw=Wi(),ac=Ki(),jw=O(),Jw=ic(),cc=Ww.hdb_table,th=[];for(let e=0;e<cc.attributes.length;e++)th.push(cc.attributes[e].attribute);rh.exports=Zw;async function Zw(e,t){let r=$w.join(Kw(),t.schema.toString()),s=new ac(t.schema,t.table,oc.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new ac(t.schema,t.table,oc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new ac(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await eh.createEnvironment(r,t.table),e!==void 0){let a=await eh.openEnvironment(Yw(),oc.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await kw.insertRecords(a,cc.hash_attribute,th,[e]),await _c(s),await _c(n),await _c(i)}await Jw(t)}catch(a){throw a}}o(Zw,"lmdbCreateTable");async function _c(e){try{await Qw(e)}catch(t){jw.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(_c,"createAttribute")});var nh=d((px,sh)=>{"use strict";var Xw=Qi(),zw=Xi(),eD=to(),Us=T(),tD=Kr().updateRecords,rD=$(),sD=require("path"),{getBaseSchemaPath:nD}=Z(),iD=Cn(),oD=O();sh.exports=aD;async function aD(e){try{let{schema_table:t,attributes:r}=Xw(e);zw(e,r,t.hash_attribute),e.schema!==Us.SYSTEM_SCHEMA_NAME&&(r.includes(Us.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Us.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Us.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Us.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await eD(e.hdb_auth_header,t,r),n=sD.join(nD(),e.schema.toString()),i=await rD.openEnvironment(n,e.table),a=await tD(i,t.hash_attribute,r,e.records,e[Us.CLUSTERING_FLAG]!==!0);try{await iD(e,a)}catch(_){oD.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(aD,"lmdbUpdateRecords")});var oh=d((Nx,ih)=>{"use strict";var _D=T().OPERATIONS_ENUM,Oo=class{constructor(t,r,s,n=void 0){this.operation=_D.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};o(Oo,"UpsertObject");ih.exports=Oo});var _h=d((Ix,ah)=>{"use strict";var Ox=oh(),cD=Qi(),uD=Xi(),lD=to(),Ps=T(),ED=Kr().upsertRecords,dD=$(),SD=require("path"),{getBaseSchemaPath:hD}=Z(),fD=Cn(),TD=O(),{handleHDBError:RD,hdb_errors:AD}=J();ah.exports=mD;async function mD(e){let t;try{t=cD(e)}catch(c){throw RD(c,c.message,AD.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;uD(e,s,r.hash_attribute),e.schema!==Ps.SYSTEM_SCHEMA_NAME&&(s.includes(Ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await lD(e.hdb_auth_header,r,s),i=SD.join(hD(),e.schema.toString()),a=await dD.openEnvironment(i,e.table),_=await ED(a,r.hash_attribute,s,e.records,e[Ps.CLUSTERING_FLAG]!==!0);try{await fD(e,_)}catch(c){TD.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(mD,"lmdbUpsertRecords")});var Sh=d((Cx,dh)=>{"use strict";var gD=mt(),ch=I(),uh=O(),pD=Ms(),lh=T(),ND=W_().deleteRecords,OD=$(),ID=require("path"),{getBaseSchemaPath:CD}=Z(),{promisify:bD}=require("util"),LD=bD(setTimeout),Eh=1e4,yD=10;dh.exports=wD;async function wD(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(ch.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 gD(e.schema,e.table,lh.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await pD(n,lh.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw uh.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return ch.isEmptyOrZeroLength(s)?(uh.trace("No records found to delete"),{message:"No records found to delete"}):await DD(e,s,t)}o(wD,"lmdbDeleteRecordsBefore");async function DD(e,t,r){let s=ID.join(CD(),e.schema.toString()),n=await OD.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let a=0,_=t.length;a<_;a+=Eh){let c=t.slice(a,a+Eh),u=[];for(let l=0,E=c.length;l<E;l++)u.push(c[l][r]);try{let l=await ND(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 LD(yD)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}o(DD,"chunkDeletes")});var fh=d((bx,hh)=>{"use strict";var Io=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};o(Io,"DeleteBeforeObject");hh.exports=Io});var Rh=d((Lx,Th)=>{"use strict";var Co=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};o(Co,"DeleteAuditLogsBeforeResults");Th.exports=Co});var gh=d((wx,mh)=>{"use strict";var lc=$(),{getTransactionAuditStorePath:MD}=Z(),yx=fh(),UD=require("path"),Mn=Te(),PD=I(),Ah=Rh(),BD=require("util").promisify,HD=BD(setTimeout),vD=1e4,GD=100;mh.exports=qD;async function qD(e){let t=UD.join(MD(),e.schema),r=await lc.openEnvironment(t,e.table,!0),s=lc.listDBIs(r);lc.initializeDBIs(r,Mn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new Ah;do n=await FD(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 HD(GD);while(n.transactions_deleted>0);return i}o(qD,"deleteAuditLogsBefore");async function FD(e,t){let r=new Ah;try{let s=e.dbis[Mn.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[Mn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];PD.isEmpty(_)||(n=e.dbis[Mn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(_,i));for(let c=0;c<a.hash_values.length;c++)n=e.dbis[Mn.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[c],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>vD)break}return await n,r}catch(s){throw s}}o(FD,"deleteTransactions")});var Lh=d((Dx,bh)=>{"use strict";var Ec=$(),Bs=Te(),ph=Sr(),dc=T(),Nh=I(),{getTransactionAuditStorePath:VD}=Z(),xD=require("path"),kD=ys(),bo=Is(),$D=O();bh.exports=YD;async function YD(e){let t=xD.join(VD(),e.schema),r=await Ec.openEnvironment(t,e.table,!0),s=Ec.listDBIs(r);Ec.initializeDBIs(r,Bs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case dc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Oh(r,e.search_values);case dc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,WD(r,e.search_values,n);case dc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return KD(r,e.search_values);default:return Oh(r)}}o(YD,"readAuditLog");function Oh(e,t=[0,ph.getMicroTime()]){Nh.isEmpty(t[0])&&(t[0]=0),Nh.isEmpty(t[1])&&(t[1]=ph.getMicroTime());let r=[];try{let s=e.dbis[Bs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let i of s.getKeys({start:t[1]}))if(i!==t[1]){n=i;break}for(let{value:i}of s.getRange({start:t[0],end:n})){let a=Object.assign(new bo,i);r.push(a)}return r}catch(s){throw s}}o(Oh,"searchTransactionsByTimestamp");function KD(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[Bs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(a);r.set(n,Ch(e,i))}return Object.fromEntries(r)}o(KD,"searchTransactionsByUsername");function WD(e,t,r){let s=new Map;for(let _=0,c=t.length;_<c;_++){let u=t[_],l=kD.equals(e,Bs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Bs.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let E=0,h=l[0].length;E<h;E++){let S=l[0][E],A=Number(S);s.has(A)?s.get(A).push(u.toString()):s.set(A,[u.toString()])}}let n=Array.from(s.keys()),i=Ch(e,n),a=new Map;for(let _=0;_<i.length;_++){let c=i[_],u=c.timestamp,l=s.get(u);Ih(c,"records",r,l,a),Ih(c,"original_records",r,l,a)}return Object.fromEntries(a)}o(WD,"searchTransactionsByHashValues");function Ih(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 bo(e.operation,e.user_name,i,void 0);E[t]=[_],u.push(E)}}else{let u=new bo(e.operation,e.user_name,i,void 0);u[t]=[_],n.set(c,[u])}}}o(Ih,"loopRecords");function Ch(e,t){let r=[];try{let s=e.dbis[Bs.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 bo,i);r.push(a)}}catch(i){$D.warn(i)}return r}catch(s){throw s}}o(Ch,"batchSearchTransactions")});var wh=d((Mx,yh)=>{"use strict";var QD=require("path"),{getBaseSchemaPath:jD}=Z(),JD=$();yh.exports={writeTransaction:ZD};async function ZD(e,t,r){let s=QD.join(jD(),e);return(await JD.openEnvironment(s,t)).transaction(r)}o(ZD,"writeTransaction")});var Mh=d((Ux,Dh)=>{"use strict";var XD=require("path"),{getBaseSchemaPath:zD}=Z(),eM=$();Dh.exports={flush:tM};async function tM(e,t){let r=XD.join(zD(),e.toString());return(await eM.openEnvironment(r,t.toString())).flushed}o(tM,"flush")});var Ph=d((Px,Uh)=>{"use strict";var ce=O(),{handleHDBError:rM}=J(),sM=O_(),nM=Wi(),iM=$_(),oM=Wd(),aM=bn(),_M=X_(),cM=fS(),uM=OS(),lM=Ms(),EM=US(),dM=ZS(),SM=uc(),hM=nh(),fM=_h(),TM=Sh(),RM=gh(),AM=sc(),mM=rc(),gM=Lh(),pM=wh(),NM=Mh(),Lo=class extends sM{async searchByConditions(t){try{return EM(t)}catch(r){throw ce.error(r),r}}async getDataByHash(t){try{return await _M(t)}catch(r){throw ce.error(r),r}}async searchByHash(t){try{return await cM(t)}catch(r){throw ce.error(r),r}}async getDataByValue(t,r){try{return await uM(t,r)}catch(s){throw ce.error(s),s}}async searchByValue(t){try{return await lM(t)}catch(r){throw ce.error(r),r}}async createSchema(t){try{return await oM(t)}catch(r){throw ce.error(r),r}}async dropSchema(t){try{return await dM(t)}catch(r){throw ce.error(r),r}}async createTable(t,r){try{return await SM(t,r)}catch(s){throw ce.error(s),s}}async dropTable(t){try{return await AM(t)}catch(r){throw ce.error(r),r}}async createAttribute(t){try{return await nM(t)}catch(r){throw ce.error(r),r}}async createRecords(t){try{return await iM(t)}catch(r){throw ce.error(r),r}}async updateRecords(t){try{return await hM(t)}catch(r){throw ce.error(r),r}}async upsertRecords(t){try{return await fM(t)}catch(r){throw rM(r,null,null,ce.ERR,r)}}async deleteRecords(t){try{return await aM(t)}catch(r){throw ce.error(r),r}}async deleteRecordsBefore(t){try{return await TM(t)}catch(r){throw ce.error(r),r}}async dropAttribute(t){try{return await mM(t)}catch(r){throw ce.error(r),r}}async deleteAuditLogsBefore(t){try{return await RM(t)}catch(r){throw ce.error(r),r}}async readAuditLog(t){try{return await gM(t)}catch(r){throw ce.error(r),r}}writeTransaction(t,r,s){return pM.writeTransaction(t,r,s)}flush(t,r){return NM.flush(t,r)}};o(Lo,"LMDBBridge");Uh.exports=Lo});var Hs=d((Bx,Hh)=>{"use strict";var OM=Ph(),IM=O_(),CM=Y();CM.initSync();var Bh;function bM(){return Bh instanceof IM?Bh:new OM}o(bM,"getBridge");Hh.exports=bM()});var jh=d((vx,Qh)=>{"use strict";var Sc=require("recursive-iterator"),LM=require("alasql"),hc=require("clone"),vh=I(),{handleHDBError:Gh,hdb_errors:yM}=J(),{HDB_ERROR_MSGS:qh,HTTP_STATUS_CODES:Fh}=yM,wM=["DISTINCT_ARRAY"],Vh=Symbol("validateTables"),fc=Symbol("validateTable"),Hx=Symbol("getAllColumns"),xh=Symbol("validateAllColumns"),yo=Symbol("findColumn"),kh=Symbol("validateOrderBy"),Un=Symbol("validateSegment"),Tc=Symbol("validateColumn"),$h=Symbol("setColumnsForTable"),Yh=Symbol("checkColumnsForAsterisk"),Kh=Symbol("validateGroupBy"),Wh=Symbol("hasColumns"),wo=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Vh](),this[Yh](),this[xh]()}[Vh](){if(this[Wh]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[fc](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[fc](t.table)})}}[Wh](){let t=!1,r=new Sc(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[fc](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw Gh(new Error,qh.SCHEMA_NOT_FOUND(t.databaseid),Fh.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw Gh(new Error,qh.TABLE_NOT_FOUND(t.databaseid,t.tableid),Fh.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=hc(s);n.table=hc(t),this.attributes.push(n)})}[yo](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)}[Yh](){let t=new Sc(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[$h](r.tableid)}[$h](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new LM.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[xh](){this[Un](this.statement.columns,!1),this[Un](this.statement.joins,!1),this[Un](this.statement.where,!1),this[Kh](this.statement.group,!1),this[Un](this.statement.order,!0)}[Un](t,r){if(!t)return;let s=new Sc(t),n=[];for(let{node:i,path:a}of s)!vh.isEmpty(i)&&!vh.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[kh](i):n.push(this[Tc](i)));return n}[Kh](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&wM.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=hc(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[yo](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[yo](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`}[kh](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[Tc](t)}[Tc](t){let r=this[yo](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(wo,"SelectValidator");Qh.exports=wo});var zh=d((Gx,Xh)=>{"use strict";var Jh=require("lodash"),Pn=require("mathjs"),DM=require("jsonata"),Zh=I();Xh.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Jh.uniqWith(e,Jh.isEqual):e,searchJSON:MM,mad:Bn.bind(null,Pn.mad),mean:Bn.bind(null,Pn.mean),mode:Bn.bind(null,Pn.mode),prod:Bn.bind(null,Pn.prod),median:Bn.bind(null,Pn.median)};function Bn(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(Bn,"aggregateFunction");function MM(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(Zh.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Zh.isEmpty(this.__ala__.res[r])){let s=DM(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}o(MM,"searchJSON")});var tf=d((qx,ef)=>{"use strict";var ie=require("moment"),Rc="YYYY-MM-DDTHH:mm:ss.SSSZZ";ie.suppressDeprecationWarnings=!0;ef.exports={current_date:()=>ie().utc().format("YYYY-MM-DD"),current_time:()=>ie().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return ie(e).utc().format("YYYY");case"month":return ie(e).utc().format("MM");case"day":return ie(e).utc().format("DD");case"hour":return ie(e).utc().format("HH");case"minute":return ie(e).utc().format("mm");case"second":return ie(e).utc().format("ss");case"millisecond":return ie(e).utc().format("SSS");default:break}},date:e=>ie(e).utc().format(Rc),date_format:(e,t)=>ie(e).utc().format(t),date_add:(e,t,r)=>ie(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>ie(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=ie(e).utc(),n=ie(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>ie().utc().valueOf(),get_server_time:()=>ie().format(Rc),offset_utc:(e,t)=>ie(e).utc().utcOffset(t).format(Rc)}});var of=d((Fx,nf)=>{"use strict";var UM=require("@turf/area"),PM=require("@turf/length"),BM=require("@turf/circle"),HM=require("@turf/difference"),vM=require("@turf/distance"),GM=require("@turf/boolean-contains"),qM=require("@turf/boolean-equal"),FM=require("@turf/boolean-disjoint"),VM=require("@turf/helpers"),rf=T(),v=I();nf.exports={geoArea:xM,geoLength:kM,geoCircle:$M,geoDifference:YM,geoDistance:sf,geoNear:KM,geoContains:WM,geoEqual:QM,geoCrosses:jM,geoConvert:JM};var Ac="geo1 is required",mc="geo2 is required";function xM(e){if(v.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=v.autoCast(e)),UM.default(e)}o(xM,"geoArea");function kM(e,t){if(v.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=v.autoCast(e)),PM.default(e,{units:t||"kilometers"})}o(kM,"geoLength");function $M(e,t,r){if(v.isEmpty(e))throw new Error("point is required");if(v.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=v.autoCast(e)),BM.default(e,t,{units:r||"kilometers"})}o($M,"geoCircle");function YM(e,t){if(v.isEmpty(e))throw new Error("poly1 is required");if(v.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=v.autoCast(e)),typeof t=="string"&&(t=v.autoCast(t)),HM(e,t)}o(YM,"geoDifference");function sf(e,t,r){if(v.isEmpty(e))throw new Error("point1 is required");if(v.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=v.autoCast(e)),typeof t=="string"&&(t=v.autoCast(t)),vM.default(e,t,{units:r||"kilometers"})}o(sf,"geoDistance");function KM(e,t,r,s){if(v.isEmpty(e))throw new Error("point1 is required");if(v.isEmpty(t))throw new Error("point2 is required");if(v.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=v.autoCast(e)),typeof t=="string"&&(t=v.autoCast(t)),isNaN(r))throw new Error("distance must be a number");return sf(e,t,s)<=r}o(KM,"geoNear");function WM(e,t){if(v.isEmpty(e))throw new Error(Ac);if(v.isEmpty(e))throw new Error(mc);return typeof e=="string"&&(e=v.autoCast(e)),typeof t=="string"&&(t=v.autoCast(t)),GM.default(e,t)}o(WM,"geoContains");function QM(e,t){if(v.isEmpty(e))throw new Error(Ac);if(v.isEmpty(e))throw new Error(mc);return typeof e=="string"&&(e=v.autoCast(e)),typeof t=="string"&&(t=v.autoCast(t)),qM.default(e,t)}o(QM,"geoEqual");function jM(e,t){if(v.isEmpty(e))throw new Error(Ac);if(v.isEmpty(e))throw new Error(mc);return typeof e=="string"&&(e=v.autoCast(e)),typeof t=="string"&&(t=v.autoCast(t)),!FM.default(e,t)}o(jM,"geoCrosses");function JM(e,t,r){if(v.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(v.isEmpty(t))throw new Error("geo_type is required");if(v.isEmpty(rf.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(rf.GEO_CONVERSION_ENUM).join(",")}`);return VM[t](e,r)}o(JM,"geoConvert")});var _f=d((Vx,af)=>{var jr=zh(),je=tf(),yt=of();af.exports=e=>{e.aggr.mad=e.aggr.MAD=jr.mad,e.aggr.mean=e.aggr.MEAN=jr.mean,e.aggr.mode=e.aggr.MODE=jr.mode,e.aggr.prod=e.aggr.PROD=jr.prod,e.aggr.median=e.aggr.MEDIAN=jr.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=jr.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=jr.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=je.current_date,e.fn.current_time=e.fn.CURRENT_TIME=je.current_time,e.fn.extract=e.fn.EXTRACT=je.extract,e.fn.date=e.fn.DATE=je.date,e.fn.date_format=e.fn.DATE_FORMAT=je.date_format,e.fn.date_add=e.fn.DATE_ADD=je.date_add,e.fn.date_sub=e.fn.DATE_SUB=je.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=je.date_diff,e.fn.now=e.fn.NOW=je.now,e.fn.offset_utc=e.fn.OFFSET_UTC=je.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=je.get_server_time,e.fn.getdate=e.fn.GETDATE=je.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=je.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=yt.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=yt.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=yt.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=yt.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=yt.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=yt.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=yt.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=yt.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=yt.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=yt.geoNear}});var lf=d((xx,uf)=>{"use strict";var Hn=require("lodash"),ge=require("alasql");ge.options.cache=!1;var ZM=_f(),cf=require("clone"),Do=require("recursive-iterator"),M=O(),P=I(),vs=Hs(),XM=T(),{hdb_errors:zM}=J(),eU="IS NULL",vn="There was a problem performing this search. Please check the logs and try again.";ZM(ge);var Mo=class{constructor(t,r){if(P.isEmpty(t))throw M.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(),P.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!P.isEmptyOrZeroLength(s))return M.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw M.error("Error thrown from checkEmptySQL in SQLSearch class method search."),M.error(s),new Error(vn)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw M.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),M.error(s),new Error(vn)}if(Object.keys(this.data).length===0)return M.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw M.error("Error thrown from processJoins in SQLSearch class method search."),M.error(s),new Error(vn)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw M.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),M.error(s),new Error(vn)}try{return t=await this._finalSQL(),t}catch(s){throw M.error("Error thrown from finalSQL in SQLSearch class method search."),M.error(s),new Error(vn)}}_getColumns(){let t=new Do(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(cf(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Hn.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(P.isEmpty(this.statement.where)){M.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Do(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!P.isEmpty(r)&&r.right)if(P.isNotEmptyAndHasValue(r.right.value)){let s=P.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new ge.yy.LogicValue({value:s}):r.right instanceof ge.yy.StringValue&&!P.isEmpty(s)&&P.autoCasterIsNumberCheck(s.toString())&&(r.right=new ge.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=P.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new ge.yy.LogicValue({value:i}):s instanceof ge.yy.StringValue&&P.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new ge.yy.NumValue({value:i}))});if(t){M.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Do(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(!P.isEmpty(XM.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(P.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(P.isEmptyOrZeroLength(r.left.columnid)||P.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(P.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"=":!P.isEmpty(r.right.value)||!P.isEmpty(r.left.value)?s.add(P.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(P.isEmptyOrZeroLength(this.all_table_attributes)&&P.isEmptyOrZeroLength(this.statement.from)&&P.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&&Hn.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(P.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);P.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(P.isEmptyOrZeroLength(this.all_table_attributes)&&!P.isEmptyOrZeroLength(this.columns.columns))return t;if(P.isEmptyOrZeroLength(this.all_table_attributes)&&P.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await ge.promise(r)}catch(r){throw M.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),M.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(cf(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(P.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(eU)>-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=Hn.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),!P.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!P.isEmptyOrZeroLength(this.exact_search_values[u].values))if(c)try{_.hash_values=Array.from(this.exact_search_values[u].values);let l=await vs.getDataByHash(_);for(let E of _.hash_values)E in l&&!this.data[i].__merged_data[E]&&(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,E))}catch(l){M.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),M.error(l)}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 h=await vs.getDataByValue(E);for(let S in h)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,h[S][n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,h[S][n.attribute]),this._setMergedHashAttribute(i,P.autoCast(S)))}))}catch(l){M.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),M.error(l)}else if(!P.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!P.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let l=this.comparator_search_values[u].comparators;for(let E=0,h=l.length;E<h;E++){let S=l[E];_.search_attribute=S.attribute,_.search_value=S.search_value;let A=await vs.getDataByValue(_,S.operation);if(c)for(let R in A)this.data[i].__merged_data[R]||(this.data[i].__merged_data[R]=[...s[i]],this._setMergedHashAttribute(i,P.autoCast(R)));else for(let R in A)this.data[i].__merged_data[R]?this._updateMergedAttribute(i,R,n.attribute,A[R][n.attribute]):(this.data[i].__merged_data[R]=[...s[i]],this._updateMergedAttribute(i,R,n.attribute,A[R][n.attribute]),this._setMergedHashAttribute(i,P.autoCast(R)))}}catch(l){M.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),M.error(l)}else try{_.search_attribute=n.attribute,_.search_value="*";let l=await vs.getDataByValue(_);if(c)for(let E in l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,P.autoCast(E)));else for(let E in l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,l[E][n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,l[E][n.attribute]),this._setMergedHashAttribute(i,P.autoCast(E)))}catch(l){M.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),M.error(l)}}}_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 ge.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 ge.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new ge.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 ge.yy.FuncValue:new ge.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(S=>{S.joinmode&&S.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(S.table);let A=S.joinmode+" JOIN ? AS "+(S.as?S.as:S.table.tableid);S.on&&(A+=" ON "+S.on.toString()),i.push(A),t.push(Object.values(this.data[`${S.table.databaseid_orig}_${S.table.as?S.table.as_orig:S.table.tableid_orig}`].__merged_data))});let a=[],_={};n.forEach(S=>{let A=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__hash_name,R=S.as?S.as_orig:S.tableid_orig;a.push({key:`'${R}.${A}'`,schema:S.databaseid_orig,table:S.as?S.as_orig:S.tableid_orig,keys:new Set}),r.push(`${S.as?S.as:S.tableid}.\`${A}\` AS "${R}.${A}"`),_[S.as?S.as_orig:S.tableid_orig]=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__merged_attributes});let c=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(S=>{S.is_func?r.push(S.initial_select_column.toString()):S.initial_select_column.tableid?r.push(`${S.initial_select_column.tableid}.${S.initial_select_column.columnid} AS ${S.expression.columnid}`):r.push(`${S.initial_select_column.columnid} AS ${S.expression.columnid}`)}));let 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 h=[];try{let S=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${c} ${u} ${l} ${E}`,A=this._convertColumnsToIndexes(S,n);h=await ge.promise(A,t),t=null}catch(S){throw M.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),M.error(S),new Error("There was a problem processing the data.")}if(h&&h.length>0){for(let S=0,A=h.length;S<A;S++){let R=h[S];a.forEach(L=>{R[L.key]!==null&&R[L.key]!==void 0&&L.keys.add(R[L.key])})}a.forEach(S=>{let A=Object.keys(this.data[`${S.schema}_${S.table}`].__merged_data),R=Hn.difference(A,[...S.keys].map(L=>L.toString()));for(let L=0,de=R.length;L<de;L++){let p=R[L];delete this.data[`${S.schema}_${S.table}`].__merged_data[p]}})}return{existing_attributes:_,joined_length:h?h.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Do(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=Hn.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){M.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),M.error(i)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,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 vs.getDataByHash(_),u=n.columns.length;for(let l=0,E=a.length;l<E;l++){let h=a[l],S=c[h];for(let A=0;A<u;A++){let R=n.columns[A],L=S[R]===void 0?null:S[R];this.data[s].__merged_data[h].push(L)}}}}catch(r){throw M.error("Error thrown from getDataByHash function in SQLSearch class method getData."),M.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();M.trace(`Final SQL: ${n}`),s=await ge.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),M.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw M.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),M.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 M.error(zM.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),M.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 vs.getDataByValue(i);for(let _ in a)this.data[n].__merged_data[_]||(this.data[n].__merged_data[_]=Object.assign({},r[n])),this.data[n].__merged_data[_][t[s.attribute]]=a[_][s.attribute]}catch(a){M.error("There was an error when processing this SQL operation. Check your logs"),M.error(a)}}return Object.values(Object.values(this.data)[0].__merged_data)}};o(Mo,"SQLSearch");uf.exports=Mo});var mr=d((kx,df)=>{"use strict";var tU=jh();df.exports={searchByConditions:iU,searchByHash:oU,searchByValue:aU,search:_U};var gc=Hs(),Ef=require("util"),rU=Ef.callbackify(gc.searchByHash),sU=Ef.callbackify(gc.searchByValue),nU=lf();async function iU(e){return gc.searchByConditions(e)}o(iU,"searchByConditions");function oU(e,t){try{rU(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}o(oU,"searchByHash");function aU(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),sU(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}o(aU,"searchByValue");function _U(e,t){try{let r=new tU(e);r.validate(),new nU(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}o(_U,"search")});var qn=d(($x,Tf)=>{"use strict";var Gn=require("crypto"),hf="aes-256-cbc",cU=32,uU=16,pc=64,ff=32,lU=pc+ff,Sf=new Map;Tf.exports={encrypt:EU,decrypt:dU,createNatsTableStreamName:SU};function EU(e){let t=Gn.randomBytes(cU),r=Gn.randomBytes(uU),s=Gn.createCipheriv(hf,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(EU,"encrypt");function dU(e){let t=e.substr(0,pc),r=e.substr(pc,ff),s=e.substr(lU,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),a=Gn.createDecipheriv(hf,Buffer.from(t,"hex"),n),_=a.update(i);return _=Buffer.concat([_,a.final()]),_.toString()}o(dU,"decrypt");function SU(e,t){let r=`${e}.${t}`,s=Sf.get(r);return s||(s=Gn.createHash("md5").update(`${e}.${t}`).digest("hex"),Sf.set(r,s)),s}o(SU,"createNatsTableStreamName")});var Ho=d((Yx,Of)=>{"use strict";var Af=mr(),gr=O(),mf=G_(),hU=require("lodash"),fU=require("path"),TU=qn(),Nc=I(),{promisify:gf}=require("util"),Q=T(),{handleHDBError:Uo,hdb_errors:RU}=J(),{HDB_ERROR_MSGS:Po,HTTP_STATUS_CODES:pf}=RU,AU=Y();AU.initSync();var Rf=$(),mU=Z(),Fn=gf(Af.searchByValue),gU=gf(Af.searchByHash),Gs="name",Nf="hash_attribute",Oc="schema",pU="schema_table",NU="attribute";Of.exports={describeAll:OU,describeTable:Bo,describeSchema:CU};async function OU(e){try{let t=Nc.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:Gs,search_value:Q.WILDCARD_SEARCH_VALUE,get_attributes:[Gs]},i=await Fn(n);if(Nc.isEmptyOrZeroLength(i))return{};let a={},_={};for(let h in i)a[i[h].name]=!0,!t&&!s&&(_[i[h].name]=r[i[h].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:[Nf,Q.ID_ATTRIBUTE_STRING,Gs,Oc]},u=await Fn(c),l=[];for(let h of u)try{let S;if(t||s)S=await Bo({schema:h.schema,table:h.name});else if(r&&r[h.schema].describe&&r[h.schema].tables[h.name].describe){let A=r[h.schema].tables[h.name].attribute_permissions;S=await Bo({schema:h.schema,table:h.name},A)}S&&l.push(S)}catch(S){gr.error(S)}let E={};for(let h in l)t||s?(E[l[h].schema]==null&&(E[l[h].schema]={}),E[l[h].schema][l[h].name]=l[h],a[l[h].schema]&&delete a[l[h].schema]):_[l[h].schema]&&(E[l[h].schema]==null&&(E[l[h].schema]={}),E[l[h].schema][l[h].name]=l[h],a[l[h].schema]&&delete a[l[h].schema]);for(let h in a)t||s?E[h]={}:_[h]&&(E[h]={});return E}catch(t){return gr.error("Got an error in describeAll"),gr.error(t),Uo(new Error,Po.DESCRIBE_ALL_ERR)}}o(OU,"describeAll");async function Bo(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=mf.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:Gs,search_value:s,hash_values:[],get_attributes:[Q.WILDCARD_SEARCH_VALUE]},c=await Fn(_);if(!c||c.length===0)throw Uo(new Error,Po.TABLE_NOT_FOUND(e.schema,e.table),pf.NOT_FOUND);for await(let u of c)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw Uo(new Error,Po.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:pU,search_value:r+"."+s,get_attributes:[NU]},E=await Fn(l);E=hU.uniqBy(E,h=>h.attribute),n&&n.length>0&&(E=IU(n)),i.attributes=E,i.clustering_stream_name=TU.createNatsTableStreamName(u.schema,u.name);try{let h=fU.join(mU.getBaseSchemaPath(),i.schema.toString()),S=await Rf.openEnvironment(h,i.name),A=Rf.statDBI(S,i.hash_attribute);i.record_count=A.entryCount}catch(h){gr.warn(`unable to stat table dbi due to ${h}`)}}catch(l){gr.error(`There was an error getting attributes for table '${u.name}'`),gr.error(l)}return i}o(Bo,"descTable");function IU(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}o(IU,"getAttrsByPerms");async function CU(e){let t=mf.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:Oc,search_value:s,hash_values:[],get_attributes:[Nf,Q.ID_ATTRIBUTE_STRING,Gs,Oc]},i=await Fn(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:[Gs]},_=await gU(a);if(_&&_.length<1)throw Uo(new Error,Po.SCHEMA_NOT_FOUND(e.schema),pf.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]),Nc.isEmpty(c)||c.describe){let u=await Bo({schema:e.schema,table:_.name},c?c.attribute_permissions:null);u&&(a[u.name]=u)}}catch(c){gr.error(`Error describing schema table '${e.schema}.${_}'`),gr.error(c)}})),a}}o(CU,"describeSchema")});var Fs=d((Qx,yf)=>{var Kx=require("async"),qs=Wt(),Wx=O(),{callbackify:bf,promisify:bU}=require("util");yf.exports={setSchemaDataToGlobal:If,getTableSchema:wU,getSystemSchema:MU,setSchemaDataToGlobalAsync:bU(If)};var Lf=Ho(),LU=bf(Lf.describeAll),yU=bf(Lf.describeTable);function If(e){LU(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=qs),global.hdb_schema=r,e(null,null)})}o(If,"setSchemaDataToGlobal");function Cf(e,t){return e==="system"?qs[t]:global.hdb_schema[e][t]}o(Cf,"returnSchema");function wU(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?DU(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,Cf(e,t))}):r(null,Cf(e,t))}o(wU,"getTableSchema");function DU(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=qs:global.hdb_schema={system:qs},r();return}yU(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:qs}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}o(DU,"setTableDataToGlobal");function MU(){return qs}o(MU,"getSystemSchema")});var Zr=d((jx,Mf)=>{"use strict";var Go=N_(),at=I(),UU=require("util"),qo=Hs(),PU=Fs(),Ic=O(),{handleHDBError:pr,hdb_errors:BU}=J(),{HTTP_STATUS_CODES:Jr}=BU,HU=UU.promisify(PU.getTableSchema),vU="updated",wf="inserted",Df="upserted";Mf.exports={insert:qU,update:FU,upsert:VU,validation:GU,flush:xU};async function GU(e){if(at.isEmpty(e))throw new Error("invalid update parameters defined.");if(at.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(at.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await HU(e.schema,e.table),r=Go(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&&at.isEmptyOrZeroLength(_[s]))throw Ic.error("a valid hash attribute must be provided with update record:",_),new Error("a valid hash attribute must be provided with update record");if(!at.isEmptyOrZeroLength(_[s])&&(_[s]==="null"||_[s]==="undefined"))throw Ic.error(`a valid hash value must be provided with ${e.operation} record:`,_),new Error(`"${_[s]}" is not a valid hash attribute value`);!at.isEmpty(_[s])&&_[s]!==""&&n.has(at.autoCast(_[s]))&&(_.skip=!0),n.add(at.autoCast(_[s]));for(let c in _)i[c]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}o(GU,"validation");async function qU(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Go(e);if(t)throw pr(new Error,t.message,Jr.BAD_REQUEST);let r=at.checkSchemaTableExist(e.schema,e.table);if(r)throw pr(new Error,r,Jr.BAD_REQUEST);try{let s=await qo.createRecords(e);return vo(wf,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}o(qU,"insertData");async function FU(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Go(e);if(t)throw pr(new Error,t.message,Jr.BAD_REQUEST);let r=at.checkSchemaTableExist(e.schema,e.table);if(r)throw pr(new Error,r,Jr.BAD_REQUEST);try{let s=await qo.updateRecords(e);return at.isEmpty(s.existing_rows)?vo(vU,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):vo(s.update_action,[],e,s.hashes,void 0,s.txn_time)}catch(s){throw s}}o(FU,"updateData");async function VU(e){if(e.operation!=="upsert")throw pr(new Error,"invalid operation, must be upsert",Jr.INTERNAL_SERVER_ERROR);let t=Go(e);if(t)throw pr(new Error,t.message,Jr.BAD_REQUEST);let r=at.checkSchemaTableExist(e.schema,e.table);if(r)throw pr(new Error,r,Jr.BAD_REQUEST);try{let s=await qo.upsertRecords(e);return vo(Df,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw pr(s,null,null,Ic.ERR,n)}}o(VU,"upsertData");function vo(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===wf?(a.inserted_hashes=t,a.skipped_hashes=s,a):e===Df?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=s,a)}o(vo,"returnObject");function xU(e){return qo.flush(e.schema,e.table)}o(xU,"flush")});var Pf=d((Jx,Uf)=>{"use strict";var Fo=class{constructor(t,r,s){this.info_id=t,this.data_version_num=r,this.hdb_version_num=s}};o(Fo,"HdbInfoInsertObject");Uf.exports={HdbInfoInsertObject:Fo}});var Cc=d((Zx,Bf)=>{"use strict";var Vo=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};o(Vo,"InsertObject");var xo=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(xo,"NoSQLSeachObject");var ko=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};o(ko,"DeleteResponseObject");Bf.exports={InsertObject:Vo,NoSQLSeachObject:xo,DeleteResponseObject:ko}});var Gf=d((Xx,vf)=>{"use strict";var Hf=T(),$o=class{constructor(t,r){this[Hf.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[Hf.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};o($o,"UpgradeObject");vf.exports={UpgradeObject:$o}});var bc=d((zx,xf)=>{"use strict";var Nr=require("prompt"),Yo=require("chalk"),qf=O(),Zt=require("os"),Ff=ds(),Vf=["yes","y"];async function kU(e){let t=`${Zt.EOL}`+Yo.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Zt.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Zt.EOL}${Zt.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Zt.EOL}`;Nr.override=Ff(["CONFIRM_UPGRADE"]),Nr.start(),Nr.message=t;let r={properties:{CONFIRM_UPGRADE:{description:Yo.magenta(`${Zt.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 Nr.get([r])}catch(n){return qf.error("There was an error when prompting user about an upgrade."),qf.error(n),!1}return Vf.includes(s.CONFIRM_UPGRADE)}o(kU,"forceUpdatePrompt");async function $U(e){let t=`${Zt.EOL}`+Yo.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.${Zt.EOL}`);Nr.override=Ff(["CONFIRM_DOWNGRADE"]),Nr.start(),Nr.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:Yo.magenta(`${Zt.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 Nr.get([r]);return Vf.includes(s.CONFIRM_DOWNGRADE)}o($U,"forceDowngradePrompt");xf.exports={forceUpdatePrompt:kU,forceDowngradePrompt:$U}});var Lc=d((ek,kf)=>{"use strict";var Ko=class{constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};o(Ko,"UpgradeDirective");kf.exports=Ko});var Yf=d((ik,$f)=>{"use strict";var YU=I(),KU=st(),tk=O(),rk=require("path"),sk=require("fs"),nk=T();$f.exports={getOldPropsValue:WU};function WU(e,t,r=!1){let s=t.getRaw(e);return YU.isNotEmptyAndHasValue(s)?s:r?KU.getDefaultConfig(e):""}o(WU,"getOldPropsValue")});var jf=d((ok,Qf)=>{"use strict";var Or=require("path"),Ir=require("fs-extra"),QU=require("properties-reader"),jU=Lc(),oe=O(),{getOldPropsValue:W}=Yf(),{HDB_SETTINGS_NAMES:N,CONFIG_PARAMS:Xr}=T(),zr=st(),Wo=Y(),Kf=I(),wt=T(),yc=new jU("3.1.0"),Wf=[];function JU(){let e=QU(Wo.get(N.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),oe.info(t);let r=` ;Settings for the HarperDB process.
7
7
 
@@ -78,4 +78,4 @@ Reindexing upgrade started for transaction logs`),Xt.notify("Reindexing upgrade
78
78
  install_user = ${c}`;try{xs.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{qc.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{xs.removeSync(r),console.log(l),ts.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(XP,"updateSettingsFile_4_0_0");kn.async_functions.push(JP);kn.async_functions.push(XP);kn.async_functions.push(QP);kn.async_functions.push(ZP);fT.push(kn);TT.exports=fT});var Fc=d((fk,pT)=>{"use strict";var rs=I(),zP=T(),AT=O(),{DATA_VERSION:eB,UPGRADE_VERSION:tB}=zP.UPGRADE_JSON_FIELD_NAMES_ENUM,mT=jf(),ea=RT(),ss=new Map;mT&&mT.forEach(e=>{ss.set(e.version,e)});ea&&ea.forEach(e=>{ss.set(e.version,e)});ea&&ea.forEach(e=>{ss.set(e.version,e)});function rB(){return[...ss.keys()].sort(rs.compareVersions)}o(rB,"getSortedVersions");function gT(e){let t=e[eB],r=e[tB];return rs.isEmptyOrZeroLength(t)||rs.isEmptyOrZeroLength(r)?(AT.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),AT.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."),[]):[...ss.keys()].sort(rs.compareVersions).filter(function(s){return rs.compareVersions(s,t)>0&&rs.compareVersions(s,r)<=0})}o(gT,"getVersionsForUpgrade");function sB(e){return gT(e).length>0}o(sB,"hasUpgradesRequired");function nB(e){return rs.isEmptyOrZeroLength(e)?null:ss.has(e)?ss.get(e):null}o(nB,"getDirectiveByVersion");pT.exports={getSortedVersions:rB,getDirectiveByVersion:nB,getVersionsForUpgrade:gT,hasUpgradesRequired:sB}});var ra=d((Tk,yT)=>{"use strict";var OT=require("util"),Vc=require("chalk"),iB=require("os"),IT=Zr(),oB=mr(),Ze=T(),CT=Pf(),xc=Cc(),{UpgradeObject:NT}=Gf(),{forceDowngradePrompt:aB}=bc(),_B=kr(),ta=O(),$n=I(),cB=Fs(),uB=Fc(),lB=OT.promisify(oB.searchByValue),kc=OT.promisify(cB.setSchemaDataToGlobal),EB="info_id",dB="2.9.9",SB="3.0.0";async function hB(e){let t=new CT.HdbInfoInsertObject(1,e,e),r=new xc.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 kc(),IT.insert(r)}o(hB,"insertHdbInstallInfo");async function bT(e){let t,r=await LT(),s=new Map([[0,{}]]);for(let _ of r)s.set(_.info_id,_);let i=Math.max.apply(null,[...s.keys()])+1;t=new CT.HdbInfoInsertObject(i,e,e);let a=new xc.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 kc(),IT.insert(a)}o(bT,"insertHdbUpgradeInfo");async function LT(){let e=new xc.NoSQLSeachObject(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,EB,Ze.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=await lB(e)}catch(r){ta.info(r)}return t}o(LT,"getAllHdbInfoRecords");async function fB(){let e=await LT();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(fB,"getLatestHdbInfoRecord");async function TB(){ta.info("Checking if HDB software has been updated");try{let e=_B.version(),t=await fB(),r;if($n.isEmpty(t))r=dB;else if(r=t.data_version_num,$n.compareVersions(r.toString(),e.toString())>0){if(!$n.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(Vc.yellow(`This instance's data was last run on version ${r}`)),console.error(Vc.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.${iB.EOL}${Ze.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");$n.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(Vc.yellow(`This instance's data was last run on version ${r}`)),await aB(new NT(r,e))?await bT(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(await kc(),RB(r),e.toString()===r.toString())return;let s=new NT(r,e);return uB.hasUpgradesRequired(s)?s:void 0}catch(e){throw ta.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),ta.fatal(e),e}}o(TB,"getVersionUpdateInfo");function RB(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(!$n.isEmpty(e)&&e<SB)throw console.log(t),new Error(t)}o(RB,"checkIfInstallIsSupported");yT.exports={insertHdbInstallInfo:hB,insertHdbUpgradeInfo:bT,getVersionUpdateInfo:TB}});var PT=d((Rk,UT)=>{"use strict";var $c=require("joi"),{boolean:AB,string:wT,number:mB}=$c.types(),DT=require("fs-extra"),Yn=T(),MT=require("path"),gB=tt();UT.exports=pB;function pB(e){let t=wT.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=$c.object({[Yn.INSTALL_PROMPTS.ROOTPATH]:$c.custom(NB),[Yn.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:mB.min(0),[Yn.INSTALL_PROMPTS.TC_AGREEMENT]:wT.valid("yes","YES","Yes"),[Yn.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Yn.INSTALL_PROMPTS.CLUSTERING_ENABLED]:AB});return gB.validateBySchema(e,r)}o(pB,"installValidator");function NB(e,t){if(DT.existsSync(MT.join(e,"system/hdb_user/data.mdb"))||DT.existsSync(MT.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}o(NB,"validateRootAvailable")});var HT=d((Ak,BT)=>{"use strict";var OB=require("fs"),Fe=require("path"),tr=T(),na=O(),sa=$(),Yc=Wt();BT.exports=IB;async function IB(e){na.trace("Mounting HarperDB");let t=Fe.join(e,tr.SCHEMA_DIR_NAME,tr.SYSTEM_SCHEMA_NAME);_t(e),_t(Fe.join(e,"backup")),_t(Fe.join(e,"trash")),_t(Fe.join(e,"keys")),_t(Fe.join(e,"keys",tr.LICENSE_FILE_NAME)),_t(Fe.join(e,"log")),_t(Fe.join(e,"doc")),_t(Fe.join(e,"schema")),_t(t),_t(Fe.join(e,tr.TRANSACTIONS_DIR_NAME)),_t(Fe.join(e,"clustering")),_t(Fe.join(e,"custom_functions")),await CB(t)}o(IB,"mountHdb");async function CB(e){let t=uc(),r=po(),s=Object.keys(Yc);for(let n=0;n<s.length;n++){let i=s[n],a,_=Yc[i].hash_attribute;try{let u=new r(tr.SYSTEM_SCHEMA_NAME,i,_);await t(void 0,u),a=await sa.openEnvironment(e,i)}catch(u){throw na.error(`issue creating environment for ${tr.SYSTEM_SCHEMA_NAME}.${i}: ${u}`),u}let c=Yc[i].attributes;for(let u=0;u<c.length;u++){let l=c[u].attribute;try{tr.TIME_STAMP_NAMES.indexOf(l)>=0?await sa.createDBI(a,l,!0):l===_?await sa.createDBI(a,l,!1,!0):await sa.createDBI(a,l,!0,!1)}catch(E){throw na.error(`issue creating dbi for ${tr.SYSTEM_SCHEMA_NAME}.${i}.${l}: ${E}`),E}}}}o(CB,"createLMDBTables");function _t(e,{isRelativeToScript:t=!1}={}){let r=Fe.sep,s=Fe.isAbsolute(e)?r:"",n=t?__dirname:".";e.split("/").reduce((i,a)=>{let _=Fe.resolve(n,i,a);try{_&&_!=="/"&&(OB.mkdirSync(_,{mode:tr.HDB_FILE_PERMISSIONS}),na.info(`Directory ${_} created`))}catch(c){if(c.code!=="EEXIST")throw c}return _},s)}o(_t,"makeDirectory")});var FT=d((mk,qT)=>{var bB=tt(),Kc=require("joi"),{hdb_schema_table:vT}=ps(),GT={schema:vT,table:vT},LB={date:Kc.date().iso().required()},yB={timestamp:Kc.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};qT.exports=function(e,t){let r=t==="timestamp"?{...GT,...yB}:{...GT,...LB},s=Kc.object(r);return bB.validateBySchema(e,s)}});var $T=d((gk,kT)=>{var wB=tt(),VT=require("joi"),{hdb_schema_table:xT}=ps(),DB=VT.object({schema:xT,table:xT,hash_values:VT.array().required()});kT.exports=function(e){return wB.validateBySchema(e,DB)}});var jc=d((pk,jT)=>{"use strict";var KT=FT(),MB=$T(),ia=I(),YT=require("moment"),WT=O(),{promisify:UB,callbackify:PB}=require("util"),ns=T(),BB=Fs(),Wc=UB(BB.getTableSchema),Qc=Hs(),{DeleteResponseObject:HB}=Cc(),{handleHDBError:br,hdb_errors:vB}=J(),{HDB_ERROR_MSGS:oa,HTTP_STATUS_CODES:Lr}=vB,GB="records successfully deleted",qB=PB(QT);jT.exports={delete:qB,deleteRecord:QT,deleteFilesBefore:FB,deleteAuditLogsBefore:VB};async function FB(e){let t=KT(e,"date");if(t)throw br(t,t.message,Lr.BAD_REQUEST,void 0,void 0,!0);if(!YT(e.date,YT.ISO_8601).isValid())throw br(new Error,oa.INVALID_DATE,Lr.BAD_REQUEST,ns.LOG_LEVELS.ERROR,oa.INVALID_DATE,!0);let s=ia.checkSchemaTableExist(e.schema,e.table);if(s)throw br(new Error,s,Lr.NOT_FOUND,ns.LOG_LEVELS.ERROR,s,!0);try{let n=await Qc.deleteRecordsBefore(e);if(await Wc(e.schema,e.table),WT.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}o(FB,"deleteFilesBefore");async function VB(e){let t=KT(e,"timestamp");if(t)throw br(t,t.message,Lr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw br(new Error,oa.INVALID_VALUE("Timestamp"),Lr.BAD_REQUEST,ns.LOG_LEVELS.ERROR,oa.INVALID_VALUE("Timestamp"),!0);let r=ia.checkSchemaTableExist(e.schema,e.table);if(r)throw br(new Error,r,Lr.NOT_FOUND,ns.LOG_LEVELS.ERROR,r,!0);try{let s=await Qc.deleteAuditLogsBefore(e);return await Wc(e.schema,e.table),WT.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}o(VB,"deleteAuditLogsBefore");async function QT(e){let t=MB(e);if(t)throw br(t,t.message,Lr.BAD_REQUEST,void 0,void 0,!0);let r=ia.checkSchemaTableExist(e.schema,e.table);if(r)throw br(new Error,r,Lr.NOT_FOUND,ns.LOG_LEVELS.ERROR,r,!0);try{await Wc(e.schema,e.table);let s=await Qc.deleteRecords(e);return ia.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${GB}`),s}catch(s){if(s.message===ns.SEARCH_NOT_FOUND_MESSAGE){let n=new HB;return n.message=ns.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}o(QT,"deleteRecord")});var aa=d((Nk,XT)=>{var xB=require("crypto"),JT=9;function kB(e){let t=YB(JT),r=ZT(e+t);return t+r}o(kB,"createHash");function $B(e,t){let r=e.substr(0,JT),s=r+ZT(t+r);return e===s}o($B,"validateHash");function YB(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(YB,"generateSalt");function ZT(e){return xB.createHash("md5").update(e).digest("hex")}o(ZT,"md5");XT.exports={hash:kB,validate:$B}});var eR=d((Ok,zT)=>{var Jc=tt(),De={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 De.password.presence=!0,De.username.presence=!0,De.role.presence=!0,De.active.presence=!0,Jc.validateObject(e,De)}o(KB,"addUserValidation");function WB(e){return De.password.presence=!1,De.username.presence=!0,De.role.presence=!1,De.active.presence=!1,Jc.validateObject(e,De)}o(WB,"alterUserValidation");function QB(e){return De.password.presence=!1,De.username.presence=!0,De.role.presence=!1,De.active.presence=!1,Jc.validateObject(e,De)}o(QB,"dropUserValidation");zT.exports={addUserValidation:KB,alterUserValidation:WB,dropUserValidation:QB}});var rR=d((Ik,tR)=>{"use strict";var yr=T(),Kn=class{constructor(t=0,r=yr.STORAGE_TYPES_ENUM.LMDB,s=yr.LICENSE_VALUES.API_CALL_DEFAULT,n=yr.RAM_ALLOCATION_ENUM.DEFAULT,i=yr.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(Kn,"BaseLicense");var _a=class extends Kn{constructor(t=0,r=yr.STORAGE_TYPES_ENUM.LMDB,s=yr.LICENSE_VALUES.API_CALL_DEFAULT,n=yr.RAM_ALLOCATION_ENUM.DEFAULT,i=yr.LICENSE_VALUES.VERSION_DEFAULT,a,_=!1){super(t,r,s,n,i,a),this.enterprise=_}};o(_a,"ExtendedLicense");tR.exports={BaseLicense:Kn,ExtendedLicense:_a}});var Wn=d((Ck,_R)=>{"use strict";var $s=require("fs-extra"),sR=aa(),nR=require("crypto"),jB=require("moment"),JB=require("uuid").v4,Me=O(),Xc=require("path"),ZB=I(),Xe=T(),XB=rR().ExtendedLicense,ks="invalid license key format",zB="061183",eH="mofi25",tH="aes-256-cbc",rH=16,sH=32,iR=Y();iR.initSync();var Zc;_R.exports={validateLicense:oR,generateFingerPrint:iH,licenseSearch:aR,getLicense:_H};function zc(){return Xc.join(iR.getHdbBasePath(),Xe.LICENSE_KEY_DIR_NAME,Xe.LICENSE_FILE_NAME)}o(zc,"getLicenseDirPath");function nH(){let e=zc();return Xc.join(e,Xe.LICENSE_FILE_NAME)}o(nH,"getLicenseFilePath");function eu(){let e=zc();return Xc.join(e,Xe.REG_KEY_FILE_NAME)}o(eu,"getFingerPrintFilePath");async function iH(){let e=eu();try{return await $s.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await oH();throw Me.error(`Error writing fingerprint file to ${e}`),Me.error(t),new Error("There was an error generating the fingerprint")}}o(iH,"generateFingerPrint");async function oH(){let e=JB(),t=sR.hash(e),r=eu();try{await $s.mkdirp(zc()),await $s.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(oH,"writeFingerprint");function oR(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=eu(),n=!1;try{n=$s.statSync(s)}catch(i){Me.error(i)}if(n){let i;try{i=$s.readFileSync(s,"utf8")}catch{Me.error("error validating this machine in the license"),r.valid_machine=!1;return}let a=e.split(eH),_=a[1];_=Buffer.concat([Buffer.from(_)],rH);let c=Buffer.concat([Buffer.from(i)],sH),u=nR.createDecipheriv(tH,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=aH(a[0],i);if(S)l=S;else throw r.valid_license=!1,r.valid_machine=!1,console.error(ks),Me.error(ks),new Error(ks)}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(ks),Me.error(ks),new Error(ks)}else r.exp_date=l;r.exp_date<jB().valueOf()&&(r.valid_date=!1),sR.validate(a[1],`${zB}${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(oR,"validateLicense");function aH(e,t){try{let r=nR.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(aH,"checkOldLicense");function aR(){let e=new XB;e.api_call=0;let t=[];try{t=$s.readFileSync(nH(),"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(ZB.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=oR(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),Zc=e,e}o(aR,"licenseSearch");async function _H(){return Zc||await aR(),Zc}o(_H,"getLicense")});var Ks=d((bk,pR)=>{"use strict";var ER="username is required",dR="nothing to update, must supply active, role or password to update",SR="password cannot be an empty string",hR="If role is specified, it cannot be empty.",fR="active must be true or false";pR.exports={addUser:fH,alterUser:TH,dropUser:AH,userInfo:mH,listUsers:ua,listUsersExternal:gH,setUsersToGlobal:Qn,findAndValidateUser:OH,getClusterUser:IH,USERNAME_REQUIRED:ER,ALTERUSER_NOTHING_TO_UPDATE:dR,EMPTY_PASSWORD:SR,EMPTY_ROLE:hR,ACTIVE_BOOLEAN:fR};var TR=Zr(),cH=jc(),ru=aa(),RR=eR(),AR=mr(),su=In(),he=I(),mR=require("validate.js"),U=O(),{promisify:nu}=require("util"),iu=qn(),is=T(),cR=gt(),uH=st(),ou=Y(),lH=Wn(),EH=Wt(),{handleHDBError:Mt,hdb_errors:dH}=J(),{HTTP_STATUS_CODES:Ut,AUTHENTICATION_ERROR_MSGS:tu,HDB_ERROR_MSGS:Ys}=dH,{UserEventMsg:au}=Os(),uR=require("lodash"),gR={username:!0,active:!0,role:!0,password:!0},lR=new Map,ca=nu(AR.searchByValue),SH=nu(AR.searchByHash),hH=nu(cH.delete);async function fH(e){let t=mR.cleanAttributes(e,gR),r=RR.addUserValidation(t);if(r)throw Mt(new Error,r.message,Ut.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await ca(s)}catch(u){throw U.error("There was an error searching for a role in add user"),U.error(u),u}if(!n||n.length<1)throw Mt(new Error,Ys.ROLE_NAME_NOT_FOUND(t.role),Ut.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Mt(new Error,Ys.DUP_ROLES_FOUND(t.role),Ut.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=iu.encrypt(t.password)),t.password=ru.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},a;try{a=await TR.insert(i)}catch(u){throw U.error("There was an error searching for a user."),U.error(u),u}U.debug(a);try{await Qn()}catch(u){throw U.error("Got an error setting users to global"),U.error(u),u}if(a.skipped_hashes.length===1)throw Mt(new Error,Ys.USER_ALREADY_EXISTS(t.username),Ut.CONFLICT,void 0,void 0,!0);let _=Object.assign({},t);_.role=n[0];let c={user:null};return c.user=_,he.sendTransactionToSocketCluster(is.INTERNAL_SC_CHANNELS.ADD_USER,c,ou.get(is.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),su.signalUserChange(new au(process.pid)),`${_.username} successfully added`}o(fH,"addUser");async function TH(e){let t=mR.cleanAttributes(e,gR);if(he.isEmptyOrZeroLength(t.username))throw new Error(ER);if(he.isEmptyOrZeroLength(t.password)&&he.isEmptyOrZeroLength(t.role)&&he.isEmptyOrZeroLength(t.active))throw new Error(dR);if(!he.isEmpty(t.password)&&he.isEmptyOrZeroLength(t.password.trim()))throw new Error(SR);if(!he.isEmpty(t.active)&&!he.isBoolean(t.active))throw new Error(fR);let r=RH(t.username);if(!he.isEmpty(t.password)&&!he.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=iu.encrypt(t.password)),t.password=ru.hash(t.password)),t.role==="")throw new Error(hR);if(t.role){let a={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},_;try{_=await ca(a)}catch(c){throw U.error("Got an error searching for a role."),U.error(c),c}if(!_||_.length===0){let c=Ys.ALTER_USER_ROLE_NOT_FOUND(t.role);throw U.error(c),Mt(new Error,c,Ut.NOT_FOUND,void 0,void 0,!0)}if(_.length>1){let c=Ys.ALTER_USER_DUP_ROLES(t.role);throw U.error(c),Mt(new Error,c,Ut.CONFLICT,void 0,void 0,!0)}t.role=_[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await TR.update(s)}catch(a){throw U.error("Error during update."),U.error(a),a}try{await Qn()}catch(a){throw U.error("Got an error setting users to global"),U.error(a),a}let i={user:null};return i.user=t,he.sendTransactionToSocketCluster(is.INTERNAL_SC_CHANNELS.ALTER_USER,i,ou.get(is.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),su.signalUserChange(new au(process.pid)),n}o(TH,"alterUser");function RH(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(RH,"isClusterUser");async function AH(e){try{let t=RR.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(he.isEmpty(global.hdb_users.get(e.username)))throw Mt(new Error,Ys.USER_NOT_EXIST(e.username),Ut.NOT_FOUND,void 0,void 0,!0);let s;try{s=await hH(r)}catch(i){throw U.error("Got an error deleting a user."),U.error(i),i}U.debug(s);try{await Qn()}catch(i){throw U.error("Got an error setting users to global."),U.error(i),i}let n={user:null};return n.user=e,he.sendTransactionToSocketCluster(is.INTERNAL_SC_CHANNELS.DROP_USER,n,ou.get(is.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),su.signalUserChange(new au(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}o(AH,"dropUser");async function mH(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 SH(r)}catch(n){throw U.error("Got an error searching for a role."),U.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw U.error(r),r}return t}o(mH,"userInfo");async function gH(){let e;try{e=await ua()}catch(t){throw U.error("Got an error listing users."),U.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(gH,"listUsersExternal");async function ua(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=uR.cloneDeep(await ca(e))}catch(r){throw U.error("Got an error searching for roles."),U.error(r),r}if(!he.isEmptyOrZeroLength(t)){let r={};for(let a in t)r[t[a].id]=t[a];let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=uR.cloneDeep(await ca(s))}catch(a){throw U.error("Got an error searching for users."),U.error(a),a}let i=new Map;for(let a in n){let _=n[a];_.role=r[n[a].role],pH(_.role),i.set(_.username,_)}return(await lH.getLicense()).enterprise?i:NH(i)}}catch(e){throw U.error("got an error listing users"),U.error(e),he.errorizeMessage(e)}return null}o(ua,"listUsers");function pH(e){try{if(!e){U.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(EH)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){U.error("Got an error trying to set system permissions."),U.error(t)}}o(pH,"appendSystemTablesToRole");function NH(e){try{if(U.info("No enterprise license found. System is limited to 1 clustering role and 1 user role"),!e)return new Map;let t=Object.create(null),r=new Map;e.forEach((n,i)=>{n.role.permission.cluster_user===void 0||n.role.permission.cluster_user===!1?n.role.permission.super_user===!0&&(t[n.role.id]||(t[n.role.id]=new Map),t[n.role.id].set(i,n)):r.set(i,n)});let s={role:void 0,count:0};return Object.keys(t).forEach(n=>{let i=t[n];i.size>=s.count&&(s.role=n,s.count=i.size)}),s.role===void 0?(U.error("No roles found with active users. This is bad."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return U.error("error filtering users."),U.error(t),new Map}}o(NH,"nonEnterpriseFilter");async function Qn(){try{let e=await ua();global.hdb_users=e}catch(e){throw U.error(e),e}}o(Qn,"setUsersToGlobal");async function OH(e,t,r=!0){global.hdb_users||await Qn();let s=global.hdb_users.get(e);if(!s)throw Mt(new Error,tu.GENERIC_AUTH_FAIL,Ut.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Mt(new Error,tu.USER_INACTIVE,Ut.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(lR.get(t)===s.password)return n;if(ru.validate(s.password,t))lR.set(t,s.password);else throw Mt(new Error,tu.GENERIC_AUTH_FAIL,Ut.UNAUTHORIZED,void 0,void 0,!0)}return n}o(OH,"findAndValidateUser");async function IH(){let e=await ua(),t=uH.getConfigFromFile(is.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!he.isEmpty(r))return r.decrypt_hash=iu.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+cR.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+cR.SERVER_SUFFIX.ADMIN,r}o(IH,"getClusterUser")});var LR=d((Lk,bR)=>{var wr=require("validate.js"),OR=tt(),Ws=T(),{handleHDBError:CH,hdb_errors:bH}=J(),{HDB_ERROR_MSGS:se,HTTP_STATUS_CODES:LH}=bH,_u=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),yH={STRUCTURE_USER:"structure_user"},NR=Object.values(Ws.ROLE_TYPES_ENUM),wH="attribute_permissions",DH="attribute_name",{PERMS_CRUD_ENUM:Qs}=Ws,MH=[wH,...Object.values(Qs)],IR=[Qs.READ,Qs.INSERT,Qs.UPDATE],UH=[DH,...IR];function PH(e){let t=_u();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,CR(e,t)}o(PH,"addRoleValidation");function BH(e){let t=_u();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,CR(e,t)}o(BH,"alterRoleValidation");function HH(e){let t=_u();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,OR.validateObject(e,t)}o(HH,"dropRoleValidation");var vH=["operation","role","id","permission","hdb_user","hdb_auth_header"];function CR(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let a=0,_=s.length;a<_;a++)vH.includes(s[a])||n.push(s[a]);n.length>0&&ae(se.INVALID_ROLE_JSON_KEYS(n),r);let i=OR.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{ae(a,r)}),e.permission){let a=GH(e);a&&ae(a,r),NR.forEach(_=>{e.permission[_]&&!wr.isBoolean(e.permission[_])&&ae(se.SU_CU_ROLE_BOOLEAN_ERROR(_),r)})}for(let a in e.permission)if(NR.indexOf(a)<0){if(a===yH.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]||ae(se.SCHEMA_NOT_FOUND(E),r)}continue}ae(se.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let _=e.permission[a];if(!a||!global.hdb_schema[a]){ae(se.SCHEMA_NOT_FOUND(a),r);continue}if(_.tables)for(let c in _.tables){let u=_.tables[c];if(!c||!global.hdb_schema[a][c]){ae(se.TABLE_NOT_FOUND(a,c),r);continue}if(Object.keys(u).forEach(l=>{MH.includes(l)||ae(se.INVALID_PERM_KEY(l),r,a,c)}),Object.values(Qs).forEach(l=>{wr.isDefined(u[l])?wr.isBoolean(u[l])||ae(se.TABLE_PERM_NOT_BOOLEAN(l),r,a,c):ae(se.TABLE_PERM_MISSING(l),r,a,c)}),wr.isDefined(u.attribute_permissions)){if(!wr.isArray(u.attribute_permissions)){ae(se.ATTR_PERMS_NOT_ARRAY,r,a,c);continue}}else{ae(se.ATTR_PERMS_ARRAY_MISSING,r,a,c);continue}if(u.attribute_permissions){let l=global.hdb_schema[a][c].attributes.map(({attribute:h})=>h),E={read:!1,insert:!1,update:!1};for(let h in u.attribute_permissions){let S=u.attribute_permissions[h];if(Object.keys(S).forEach(R=>{!UH.includes(R)&&R!==Qs.DELETE&&ae(se.INVALID_ATTR_PERM_KEY(R),r,a,c)}),!wr.isDefined(S.attribute_name)){ae(se.ATTR_PERM_MISSING_NAME,r,a,c);continue}let A=S.attribute_name;if(!l.includes(A)){ae(se.INVALID_ATTRIBUTE_IN_PERMS(A),r,a,c);continue}IR.forEach(R=>{wr.isDefined(S[R])?wr.isBoolean(S[R])||ae(se.ATTR_PERM_NOT_BOOLEAN(R,A),r,a,c):ae(se.ATTR_PERM_MISSING(R,A),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 h=`${a}.${c}`;ae(se.MISMATCHED_TABLE_ATTR_PERMS(h),r,a,c)}}}}return qH(r)}o(CR,"customValidate");bR.exports={addRoleValidation:PH,alterRoleValidation:BH,dropRoleValidation:HH};function GH(e){let{operation:t,permission:r}=e;if(t===Ws.OPERATIONS_ENUM.ADD_ROLE||t===Ws.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 se.SU_CU_ROLE_COMBINED_ERROR;{let a=r.super_user?Ws.ROLE_TYPES_ENUM.SUPER_USER:Ws.ROLE_TYPES_ENUM.CLUSTER_USER;return se.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(GH,"validateNoSUPerms");function qH(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:se.ROLE_PERMS_ERROR,...e};return CH(new Error,s,LH.BAD_REQUEST)}else return null}o(qH,"generateRolePermResponse");function ae(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(ae,"addPermError")});var BR=d((yk,PR)=>{"use strict";var yR=Zr(),wR=mr(),FH=jc(),lu=LR(),Eu=In(),VH=require("uuid").v4,du=require("util"),xH=Wn(),rr=T(),DR=I(),Su=du.promisify(wR.searchByValue),kH=du.promisify(wR.searchByHash),$H=du.promisify(FH.delete),YH=mt(),KH=ws(),{hdb_errors:WH,handleHDBError:jn}=J(),{HDB_ERROR_MSGS:MR,HTTP_STATUS_CODES:cu}=WH,{UserEventMsg:hu}=Os();PR.exports={addRole:QH,alterRole:JH,dropRole:ZH,listRoles:UR};function uu(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(uu,"scrubRoleDetails");async function QH(e){let t=lu.addRoleValidation(e);if(t)throw t;if(!(await xH.getLicense()).enterprise){let a=await UR();if(jH(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=uu(e);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=await Su(s)}catch(a){throw jn(a)}if(n&&n.length>0)throw jn(new Error,MR.ROLE_ALREADY_EXISTS(e.role),cu.CONFLICT,void 0,void 0,!0);e.id||(e.id=VH());let i={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await yR.insert(i),Eu.signalUserChange(new hu(process.pid)),e=uu(e),e}o(QH,"addRole");function jH(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(!DR.isEmpty(i)&&i.cluster_user===!0)return!0}return r}o(jH,"checkClusterUserRole");async function JH(e){let t=lu.alterRoleValidation(e);if(t)throw t;e=uu(e);let r={operation:"update",schema:"system",table:"hdb_role",hash_attribute:"rolename",records:[e]};try{await yR.update(r)}catch(s){throw jn(s)}return Eu.signalUserChange(new hu(process.pid)),e}o(JH,"alterRole");async function ZH(e){let t=lu.dropRoleValidation(e);if(t)throw jn(new Error,t,cu.BAD_REQUEST,void 0,void 0,!0);let r=new KH(rr.SYSTEM_SCHEMA_NAME,rr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=await kH(r);if(s.length===0)throw jn(new Error,MR.ROLE_NOT_FOUND,cu.NOT_FOUND,void 0,void 0,!0);let n=new YH(rr.SYSTEM_SCHEMA_NAME,rr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=await Su(n),a=!1;if(DR.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 $H(_),Eu.signalUserChange(new hu(process.pid)),`${s[0].role} successfully deleted`}o(ZH,"dropRole");async function UR(){return Su({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}o(UR,"listRoles")});var Tu=d((wk,$R)=>{"use strict";var Jn=require("os"),FR=require("inquirer"),vr=require("fs-extra"),XH=require("properties-reader"),os=require("chalk"),Pr=require("path"),zH=require("human-readable-ids").hri,ev=require("ora"),ue=O(),Br=Y(),Zn=I(),fu=ds(),VR=ra(),xR=kr(),y=T(),tv=PT(),rv=HT(),sv=st(),nv=Ks(),iv=BR(),ov=m_(),av=Fs(),_v=require("util").promisify,cv=_v(av.setSchemaDataToGlobal),uv=Gc(),js=o(e=>e,"PROMPT_ANSWER_TRANSFORMER"),Ue=o(e=>os.magenta.bold(e),"HDB_PROMPT_MSG"),lv="https://harperdb.io/legal/end-user-license-agreement",Hr=Jn.EOL,Dr="",Ev="yes",HR="Starting HarperDB install...",vR="HarperDB installation was successful.",GR="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",dv="An out of date version of HarperDB is already installed.",qR="It appears HarperDB is already installed. Exiting install...",Sv="Aborting install",hv=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])$/),fv=new RegExp(/^[^\s.,*>]+$/),Tv=Jn.homedir(),Rv=Pr.join(Tv,y.HDB_ROOT_DIR_NAME),Av=9925,mv="HDB_ADMIN",gv="CLUSTER_USER",Ve={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:"},Ur;$R.exports=pv;async function pv(){if(console.log(Ue(Hr+HR+Hr)),ue.notify(HR),Zn.isEmptyOrZeroLength(Jn.userInfo().uid))throw`Installing user: ${Jn.userInfo().username} has no pid. Please install with a properly created user. Cancelling install.`;let e=Ov(),t=tv(e);if(t)throw t.message;await Iv(),await Cv(e);let r=await Nv(e),s=ev({prefixText:Ue("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),Ur=r[y.INSTALL_PROMPTS.ROOTPATH],Zn.isEmpty(Ur))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Br.setHdbBasePath(Ur),process.env.PM2_LOG_FILE_PATH=Pr.join(Ur,"log","pm2.log"),await rv(Ur),await bv(),await Lv(r),await wv(r),await Dv(r),await uv(),await Mv(),ov(),s.stop(),console.log(Ue(Hr+vR+Hr)),ue.notify(vR)}o(pv,"install");async function Nv(e){ue.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:js,when:Mr(e[y.INSTALL_PROMPTS.ROOTPATH],Ve.DESTINATION),name:y.INSTALL_PROMPTS.ROOTPATH,prefix:Dr,default:Rv,validate:async n=>Pt(n)?Pt(n):await vr.pathExists(Pr.join(n,"system","hdb_user.mdb"))?`'${n}' is already in use. Please enter a different path.`:!0,message:Ue(Ve.DESTINATION)},{type:"input",transformer:js,when:Mr(e[y.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT],Ve.HDB_PORT),name:y.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:Dr,default:Av,validate:n=>hv.test(n)?!0:"Invalid port.",message:Ue(Ve.HDB_PORT)},{type:"input",transformer:js,when:Mr(e[y.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Ve.HDB_USERNAME),name:y.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Dr,default:mv,validate:n=>Pt(n)?Pt(n):(t=n,!0),message:Ue(Ve.HDB_USERNAME)},{type:"password",when:Mr(e[y.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Ve.HDB_PASS),name:y.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Dr,validate:n=>Pt(n)?Pt(n):!0,message:Ue(Ve.HDB_PASS)}];if(Zn.autoCastBoolean(e[y.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let n=[{type:"input",transformer:js,when:Mr(e[y.INSTALL_PROMPTS.CLUSTERING_NODENAME],Ve.NODE_NAME),name:y.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Dr,default:zH.random(),validate:i=>fv.test(i)?!0:"Invalid node name, must not contain ., * or >",message:Ue(Ve.NODE_NAME)},{type:"input",transformer:js,when:Mr(e[y.INSTALL_PROMPTS.CLUSTERING_USER],Ve.CLUSTER_USERNAME),name:y.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Dr,default:gv,validate:i=>Pt(i)?Pt(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:Ue(Ve.CLUSTER_USERNAME)},{type:"password",when:Mr(e[y.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Ve.CLUSTER_PASS),name:y.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Dr,validate:i=>Pt(i)?Pt(i):!0,message:Ue(Ve.CLUSTER_PASS)}];r.push(...n)}let s=await FR.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(Nv,"installPrompts");function Mr(e,t){return e!==void 0?(t.includes("password")?(console.log(`${Ue(t)} ${os.gray("[hidden]")}`),ue.trace(`${Ue(t)} [hidden]`)):(console.log(`${Ue(t)} ${e}`),ue.trace(`${Ue(t)} ${e}`)),!1):!0}o(Mr,"displayCmdEnvVar");function Pt(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}o(Pt,"checkForEmptyValue");function Ov(){let e=Object.keys(y.INSTALL_PROMPTS),t=fu(e),r=fu(Object.keys(y.CONFIG_PARAM_MAP),!0),s={};for(let n of e){let i=y.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(Ov,"checkForPromptOverride");async function Iv(){ue.trace("Checking for existing install.");let e=Zn.getPropsFilePath(),t=await vr.pathExists(e),r;if(t){ue.trace(`Install found an existing boot prop file at:${e}`);let n=XH(e).get(y.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await vr.pathExists(n)}if(r){if(ue.trace(`Install found existing HDB config at:${e}`),await VR.getVersionUpdateInfo()){let n=`Please use \`harperdb upgrade\` to update to ${xR.version()}. Exiting install...`;console.log(Hr+os.magenta.bold(dv)),console.log(os.magenta.bold(n)),ue.error(n)}else console.log(Hr+os.magenta.bold(qR)),ue.error(qR);process.exit(0)}}o(Iv,"checkForExistingInstall");async function Cv(e){ue.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${lv}${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:js,when:Mr(e[y.INSTALL_PROMPTS.TC_AGREEMENT],t),name:y.INSTALL_PROMPTS.TC_AGREEMENT,message:Ue(t),validate:n=>n.toLowerCase()==="yes"||n.toLowerCase()==="no"?!0:os.yellow("Please enter 'yes' or 'no'")},s=await FR.prompt([r]);s[y.INSTALL_PROMPTS.TC_AGREEMENT]&&s[y.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Ev&&(console.log(os.yellow(GR)),ue.error(GR),process.exit(0))}o(Cv,"termsAgreement");async function bv(){let e=Pr.join(Ur,y.HDB_CONFIG_FILE),t;try{t=Jn.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}
79
79
  install_user = ${t}`,s=Zn.getHomeDir(),n=Pr.join(s,y.HDB_HOME_DIR_NAME),i=Pr.join(n,y.LICENSE_KEY_DIR_NAME);try{vr.mkdirpSync(n,{mode:y.HDB_FILE_PERMISSIONS}),vr.mkdirpSync(i,{mode:y.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${y.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let a=Pr.join(n,y.BOOT_PROPS_FILE_NAME);try{await vr.writeFile(a,r)}catch(_){throw ue.error(`There was an error creating the boot file at path: ${a}`),_}Br.setProperty(y.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Br.setProperty(y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Br.setProperty(Br.BOOT_PROPS_FILE_PATH,a)}o(bv,"createBootPropertiesFile");async function Lv(e){ue.trace("Creating HarperDB config file");let t=fu(Object.keys(y.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{sv.createConfigFile(t),Br.initSync()}catch(r){yv(r)}}o(Lv,"createConfigFile");function yv(e){ue.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(Sv);let t=Pr.resolve(Br.get(Br.BOOT_PROPS_FILE_PATH),"../");t&&vr.removeSync(t),Ur&&vr.removeSync(Ur),process.exit(1)}o(yv,"rollbackInstall");async function kR(e,t){ue.trace("Creating admin user"),await cv();let r;try{r=await iv.addRole(e)}catch(s){throw new Error(`Error creating role - ${s}`)}if(t)try{t.role=r.role,await nv.addUser(t)}catch(s){throw new Error(`Error creating user - ${s}`)}}o(kR,"createAdminUser");async function wv(e){ue.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[y.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[y.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await kR(t,r),delete e[y.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[y.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}o(wv,"createSuperUser");async function Dv(e){ue.trace("Creating Cluster user.");let t;e[y.INSTALL_PROMPTS.CLUSTERING_USER]&&e[y.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[y.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[y.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await kR({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[y.INSTALL_PROMPTS.CLUSTERING_USER],delete e[y.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}o(Dv,"createClusterUser");async function Mv(){let e=xR.version();if(e)await VR.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}o(Mv,"insertHdbVersionInfo")});var Ru=d((Dk,KR)=>{var Uv=require("os"),YR=Y();KR.exports={checkPermission:Pv};function Pv(){if(Uv.userInfo().username!==YR.get("install_user"))throw new Error(`Error: Must execute as ${YR.get("install_user")}`)}o(Pv,"checkPermission")});var QR=d((Mk,WR)=>{"use strict";var Bv=gt(),la=class{constructor(t,r,s,n,i,a,_,c,u,l,E,h,S){this.port=t,this.server_name=r+Bv.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:_},this.leafnodes={port:c,tls:{cert_file:n,key_file:i,ca_file:a,insecure:_}},this.cluster={name:u,port:l,routes:E,tls:{cert_file:n,key_file:i,ca_file:a,insecure:_}},this.accounts={SYS:{users:h},HDB:{users:S}},this.system_account="SYS"}};o(la,"HubConfigObject");WR.exports=la});var ZR=d((Uk,JR)=>{"use strict";var jR=gt(),Ea=class{constructor(t,r,s,n,i,a,_,c,u,l,E,h){this.port=t,this.server_name=r+jR.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+jR.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:l,ca_file:E,insecure:h},this.leafnodes={remotes:[{tls:{ca_file:E,insecure:h},urls:i,account:"SYS"},{tls:{ca_file:E,insecure:h},urls:a,account:"HDB"}]},this.accounts={SYS:{users:_},HDB:{users:c,jetstream:"enabled"}},this.system_account="SYS"}};o(Ea,"LeafConfigObject");JR.exports=Ea});var zR=d((Pk,XR)=>{"use strict";var da=class{constructor(t,r){this.user=t,this.password=r}};o(da,"HdbUserObject");XR.exports=da});var tA=d((Bk,eA)=>{"use strict";var Hv=gt(),Sa=class{constructor(t,r){this.user=t+Hv.SERVER_SUFFIX.ADMIN,this.password=r}};o(Sa,"SysUserObject");eA.exports=Sa});var sA=d((Hk,rA)=>{"use strict";var vv=Hs();rA.exports={writeTransaction:Gv};function Gv(e,t,r){return vv.writeTransaction(e,t,r)}o(Gv,"writeTransaction")});var Ra=d((Wk,NA)=>{"use strict";var Bt=Y();Bt.initSync();var qv=require("fs-extra"),Fv=require("semver"),ri=require("path"),{monotonicFactory:Vv}=require("ulidx"),xv=Vv(),iA=require("util"),oA=require("child_process"),kv=iA.promisify(oA.exec),$v=oA.spawn,j=gt(),z=T(),Ou=I(),sr=O(),ha=qn(),Yv=sA(),Xn=st(),{encode:gu,decode:aA}=require("msgpackr"),{isEmpty:as}=Ou,_A=Ks(),vk=ws(),Kv=mr(),Gk=iA.promisify(Kv.searchByHash),{connect:Wv,StorageType:cA,RetentionPolicy:uA,AckPolicy:lA,DeliverPolicy:pu,NatsConnection:qk,JetStreamManager:Fk,JetStreamClient:Vk,StringCodec:xk,JSONCodec:Qv,createInbox:Iu,StreamSource:kk,headers:jv,toJsMsg:Jv,nuid:$k,JetStreamOptions:Yk,ErrorCode:nA,nanos:Kk}=require("nats"),{PACKAGE_ROOT:Zv}=T(),Xv=cn(),EA=Qv(),zv="clustering",eG=Xv.engines[j.NATS_SERVER_NAME],tG=ri.join(Zv,"dependencies"),Nu=ri.join(tG,`${process.platform}-${process.arch}`,j.NATS_BINARY_NAME),Au,mu,zn,ei,ti,pt;NA.exports={runCommand:dA,checkNATSServerInstalled:rG,createConnection:Cu,getConnection:fa,getJetStreamManager:Js,getJetStream:SA,getNATSReferences:ct,getServerList:nG,createLocalStream:bu,listStreams:hA,deleteLocalStream:iG,getServerConfig:si,listRemoteStreams:oG,viewStream:aG,publishToStream:_G,createWorkQueueStream:cG,addSourceToWorkStream:fA,request:uG,removeSourceFromWorkStream:RA,reloadNATS:Lu,reloadNATSHub:lG,reloadNATSLeaf:EG,extractServerName:TA,requestErrorHandler:dG,updateWorkStream:SG,createLocalTableStream:mA,createTableStreams:hG,purgeTableStream:gA,purgeSchemaTableStreams:fG,getStreamInfo:TG,updateNodeNameLocalStreams:RG,closeConnection:sG};async function dA(e,t=void 0){let{stdout:r,stderr:s}=await kv(e,{cwd:t});if(s)throw new Error(s.replace(`
80
80
  `,""));return r.replace(`
81
- `,"")}o(dA,"runCommand");async function rG(){try{await qv.access(Nu)}catch{return!1}let e=await dA(`${Nu} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Fv.eq(t,eG)}o(rG,"checkNATSServerInstalled");async function Cu(e,t,r,s=!0,n="127.0.0.1"){return Wv({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:Bt.get(z.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Bt.get(z.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Bt.get(z.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),insecure:Bt.get(z.CONFIG_PARAMS.CLUSTERING_TLS_INSECURE)}})}o(Cu,"createConnection");async function sG(){pt&&(await pt.close(),pt=void 0)}o(sG,"closeConnection");async function fa(){if(!pt){let e=await _A.getClusterUser();if(as(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=Bt.get(z.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);pt=await Cu(t,e.username,e.decrypt_hash)}return pt}o(fa,"getConnection");async function Js(){if(ei)return ei;as(pt)&&await fa();let{domain:e}=si(z.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(as(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ei=await pt.jetstreamManager({domain:e}),ei}o(Js,"getJetStreamManager");async function SA(){if(ti)return ti;as(pt)&&await fa();let{domain:e}=si(z.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(as(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ti=pt.jetstream({domain:e}),ti}o(SA,"getJetStream");async function ct(){let e=pt||await fa(),t=ei||await Js(),r=ti||await SA();return{connection:e,jsm:t,js:r}}o(ct,"getNATSReferences");async function nG(){let e=Bt.get(z.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),{sys_name:t,decrypt_hash:r}=await _A.getClusterUser(),s=await Cu(e,t,r),n=Iu(),i=s.subscribe(n),a=[],_=(async()=>{for await(let c of i)a.push(EA.decode(c.data))})();return await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:n}),await s.flush(),await Ou.async_set_timeout(50),await i.drain(),await s.close(),await _,a}o(nG,"getServerList");async function bu(e,t){let{jsm:r}=await ct();await r.streams.add({name:e,storage:cA.File,retention:uA.Limits,subjects:t})}o(bu,"createLocalStream");async function hA(){let{jsm:e}=await ct(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}o(hA,"listStreams");async function iG(e){let{jsm:t}=await ct();await t.streams.delete(e)}o(iG,"deleteLocalStream");async function oG(e){let{connection:t}=await ct(),r=[],s=Iu(),n=t.subscribe(s),i=(async()=>{for await(let a of n)r.push(EA.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(oG,"listRemoteStreams");async function aG(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await ct(),i=xv(),a=[],_={ack_policy:lA.None,durable_name:i,deliver_subject:i,deliver_policy:pu.All};t&&(_.deliver_policy=pu.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=Jv(l),h=aA(E.data),S={nats_timestamp:E.info.timestampNanos,nats_sequence:E.info.streamSequence,entry:h,originators:[]},A=[];if(E.headers){let R=E.headers.get("originators");R&&(A=R.split(","),S.originators=A)}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(aG,"viewStream");async function _G(e,t,r=[],s=[]){sr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,r,"originators:",s);let{connection:n,js:i}=await ct(),a=await Ta(),_=`${e}.${a}`,c=jv();s.push(a),c.append("originators",s.join());for(let u=0,l=r.length;u<l;u++)try{sr.trace(`publishToStream publishing to subject: ${_}, data:`,r[u]),await i.publish(_,gu(r[u]),{headers:c})}catch(E){if(E.code&&E.code.toString()==="503")sr.trace(`publishToStream creating stream: ${t}`),await bu(t,[_]),await i.publish(_,gu(r[u]),{headers:c});else throw E}}o(_G,"publishToStream");function si(e){e=e.toLowerCase();let t=ri.join(Bt.get(z.CONFIG_PARAMS.ROOTPATH),zv);if(e===z.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return as(mu)&&(mu={port:Xn.getConfigFromFile(z.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Xn.getConfigFromFile(z.CONFIG_PARAMS.CLUSTERING_NODENAME)+j.SERVER_SUFFIX.HUB,config_file:j.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:ri.join(t,j.PID_FILES.HUB),hdb_nats_path:t}),mu;if(e===z.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return as(Au)&&(Au={port:Xn.getConfigFromFile(z.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Xn.getConfigFromFile(z.CONFIG_PARAMS.CLUSTERING_NODENAME)+j.SERVER_SUFFIX.LEAF,config_file:j.NATS_CONFIG_FILES.LEAF_SERVER,domain:Xn.getConfigFromFile(z.CONFIG_PARAMS.CLUSTERING_NODENAME)+j.SERVER_SUFFIX.LEAF,pid_file_path:ri.join(t,j.PID_FILES.LEAF),hdb_nats_path:t}),Au;sr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(si,"getServerConfig");async function cG(e){let{jsm:t}=await ct(),r=await Ta();try{await t.streams.add({name:e.stream_name,storage:cA.File,retention:uA.Workqueue,subjects:[`${j.SUBJECT_PREFIXES.MSGID}.${r}`,`${j.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:lA.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:pu.All,max_ack_pending:1e4,deliver_group:e.deliver_group,filter_subject:`${j.SUBJECT_PREFIXES.TXN}.>`});else throw s}}o(cG,"createWorkQueueStream");async function fA(e,t,r){let{jsm:s}=await ct(),n=await s.streams.info(t),i=TA(s.prefix),a=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:_,table:c}=r,u=ha.createNatsTableStreamName(_,c),l=i===e,E,h,S=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let R=0,L=n.config.sources.length;R<L;R++)if(E=n.config.sources[R],h=R,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;await AA(_,c,E,t),n.config.sources.splice(h,1),await s.streams.update(t,n.config)}let A={name:u,opt_start_time:a,filter_subject:`${j.SUBJECT_PREFIXES.TXN}.>`};l||(A.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(A),await s.streams.update(t,n.config)}o(fA,"addSourceToWorkStream");function TA(e){return e.split(".")[1]}o(TA,"extractServerName");async function RA(e,t,r){let{schema:s,table:n}=r,i=ha.createNatsTableStreamName(s,n),{jsm:a}=await ct(),_=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),await AA(s,n,u,t)}o(RA,"removeSourceFromWorkStream");async function AA(e,t,r,s){let n=await Js(),i;try{i=pA(e,t,r.external.api.split(".")[1]),await n.streams.purge(s,{filter:i})}catch{sr.error("Error purging source subject",i,"from work stream",s)}}o(AA,"purgeSourceFromWorkStream");async function uG(e,t,r=2e3,s=Iu()){if(!Ou.isObject(t))throw new Error("data param must be an object");let n=gu(t),{connection:i}=await ct(),a={timeout:r};s&&(a.reply=s,a.noMux=!0);let _=await i.request(e,n,a);return aA(_.data)}o(uG,"request");function Lu(e){return new Promise(async(t,r)=>{let s=$v(Nu,["--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(Lu,"reloadNATS");async function lG(){let{pid_file_path:e}=si(z.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Lu(e)}o(lG,"reloadNATSHub");async function EG(){let{pid_file_path:e}=si(z.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Lu(e)}o(EG,"reloadNATSLeaf");function dG(e,t,r){let s;switch(e.code){case nA.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case nA.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}o(dG,"requestErrorHandler");async function SG(e,t){let r=t+j.SERVER_SUFFIX.LEAF;await Yv.writeTransaction(z.SYSTEM_SCHEMA_NAME,z.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await fA(r,j.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await RA(r,j.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}o(SG,"updateWorkStream");async function mA(e,t){let r=ha.createNatsTableStreamName(e,t),s=await Ta(),n=pA(e,t,s);await bu(r,[n])}o(mA,"createLocalTableStream");async function hG(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await mA(s,n)}}o(hG,"createTableStreams");async function gA(e,t){if(Bt.get(z.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=ha.createNatsTableStreamName(e,t),{jsm:s}=await ct();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")sr.warn(r);else throw r}}o(gA,"purgeTableStream");async function fG(e,t){if(Bt.get(z.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await gA(e,t[r])}o(fG,"purgeSchemaTableStreams");async function TG(e){return(await Js()).streams.info(e)}o(TG,"getStreamInfo");function pA(e,t,r){return`${j.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}o(pA,"createSubjectName");async function Ta(){if(zn)return zn;if(zn=(await Js())?.nc?.info?.server_name,zn===void 0)throw new Error("Unable to get jetstream manager server name");return zn}o(Ta,"getJsmServerName");async function RG(){let e=await Js(),t=await Ta(),r=await hA();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let a=i.split(".");if(a[a.length-1]!==t){if(n.name===j.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let c=`${j.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;sr.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c}else if(n.name===j.WORK_QUEUE_CONSUMER_NAMES.stream_name){let c=`${j.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;sr.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c,await e.consumers.update(j.WORK_QUEUE_CONSUMER_NAMES.stream_name,j.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${j.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let c=i.split(".");c[c.length-1]=t;let u=c.join(".");sr.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}await e.streams.update(n.name,n)}}}o(RG,"updateNodeNameLocalStreams")});var Ca=d((Qk,CA)=>{"use strict";var Zs=require("path"),pa=require("fs-extra"),AG=QR(),mG=ZR(),gG=zR(),pG=tA(),yu=Ks(),zs=I(),ut=st(),ga=T(),Aa=gt(),{CONFIG_PARAMS:fe}=ga,Na=O(),Oa=Y(),OA=qn(),wu=Ra(),Xs="clustering",NG=1e4,IA=5;CA.exports={generateNatsConfig:OG,removeNatsConfig:IG};async function OG(e=!1,t=void 0){Oa.initSync();let r=Oa.get(fe.ROOTPATH),s=Zs.join(r,Xs,Aa.PID_FILES.HUB),n=Zs.join(r,Xs,Aa.PID_FILES.LEAF),i=Zs.join(r,Xs,"leaf"),a=Zs.join(r,Xs,Aa.NATS_CONFIG_FILES.HUB_SERVER),_=Zs.join(r,Xs,Aa.NATS_CONFIG_FILES.LEAF_SERVER),c=ut.getConfigFromFile(fe.CLUSTERING_TLS_CERTIFICATE),u=ut.getConfigFromFile(fe.CLUSTERING_TLS_PRIVATEKEY),l=ut.getConfigFromFile(fe.CLUSTERING_TLS_CERT_AUTH),E=ut.getConfigFromFile(fe.CLUSTERING_TLS_INSECURE),h=ut.getConfigFromFile(fe.CLUSTERING_NODENAME),S=ut.getConfigFromFile(fe.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await wu.checkNATSServerInstalled()||Ia("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let A=await yu.listUsers(),R=ut.getConfigFromFile(fe.CLUSTERING_USER),L=await yu.getClusterUser();(zs.isEmpty(L)||L.active!==!0)&&Ia(`invalid cluster user '${R}'`),e||(await ma(fe.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await ma(fe.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await ma(fe.CLUSTERING_HUBSERVER_NETWORK_PORT),await ma(fe.CLUSTERING_LEAFSERVER_NETWORK_PORT));let de=[],p=[];for(let[_r,cr]of A.entries())cr.role.role===ga.ROLE_TYPES_ENUM.CLUSTER_USER&&cr.active&&(de.push(new pG(cr.username,OA.decrypt(cr.hash))),p.push(new gG(cr.username,OA.decrypt(cr.hash))));let k=[],{hub_routes:Ie}=ut.getClusteringRoutes();if(!zs.isEmptyOrZeroLength(Ie))for(let _r of Ie)k.push(`tls://${L.sys_name_encoded}:${L.uri_encoded_d_hash}@${_r.host}:${_r.port}`);let Ce=new AG(ut.getConfigFromFile(fe.CLUSTERING_HUBSERVER_NETWORK_PORT),h,s,c,u,l,E,S,ut.getConfigFromFile(fe.CLUSTERING_HUBSERVER_CLUSTER_NAME),ut.getConfigFromFile(fe.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),k,de,p);t=zs.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===ga.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await pa.writeJson(a,Ce),Na.trace(`Hub server config written to ${a}`));let ui=`tls://${L.sys_name_encoded}:${L.uri_encoded_d_hash}@0.0.0.0:${S}`,an=`tls://${L.uri_encoded_name}:${L.uri_encoded_d_hash}@0.0.0.0:${S}`,li=new mG(ut.getConfigFromFile(fe.CLUSTERING_LEAFSERVER_NETWORK_PORT),h,n,i,[ui],[an],de,p,c,u,l,E);(t===void 0||t===ga.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await pa.writeJson(_,li),Na.trace(`Leaf server config written to ${_}`))}o(OG,"generateNatsConfig");async function ma(e){let t=Oa.get(e);zs.isEmpty(t)&&Ia(`port undefined for '${e}'`),await zs.isPortTaken(t)&&Ia(`'${e}' port '${t}' is unavailable`)}o(ma,"isPortAvailable");function Ia(e){let t=`Error generating clustering config: ${e}`;Na.error(t),console.error(t),process.exit(1)}o(Ia,"generateNatsConfigError");async function IG(e){let{port:t,config_file:r}=wu.getServerConfig(e),{username:s,decrypt_hash:n}=await yu.getClusterUser(),i=0,a=500;for(;i<IA;){try{let u=await wu.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){Na.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=IA)throw new Error(`removeNatsConfig timed out waiting to connect to ${e}`);await zs.async_set_timeout(a*i)}let _="0".repeat(NG),c=Zs.join(Oa.get(fe.ROOTPATH),Xs,r);await pa.writeFile(c,_),await pa.remove(c)}o(IG,"removeNatsConfig")});var Mu=d((jk,UA)=>{"use strict";var ee=Y(),bA=Wn(),g=T(),Du=gt(),le=require("path"),{PACKAGE_ROOT:ba}=T(),ne="/dev/null",en=le.join(ba,"launchServiceScripts"),LA=le.join(ba,"utility/scripts"),CG=le.join(LA,g.HDB_RESTART_SCRIPT),yA=le.resolve(ba,"dependencies",`${process.platform}-${process.arch}`,Du.NATS_BINARY_NAME),pe,Ne;function Ht(){(pe===void 0||Ne===void 0)&&(ee.initSync(),pe=ee.get(g.HDB_SETTINGS_NAMES.LOG_TO_FILE),Ne=ee.get(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY))}o(Ht,"initLogConfig");function wA(){Ht();let e=le.join(Ne,g.PROCESS_LOG_NAMES.IPC),t={name:g.PROCESS_DESCRIPTORS.IPC,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.IPC},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:g.SERVICE_SERVERS_CWD.IPC};return pe||(t.out_file=ne,t.error_file=ne),{...t,script:g.SERVICE_SERVERS.IPC}}o(wA,"generateIPCServerConfig");function DA(){Ht(),ee.initSync(),pe=ee.get(g.HDB_SETTINGS_NAMES.LOG_TO_FILE),Ne=ee.get(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=le.join(Ne,g.PROCESS_LOG_NAMES.HDB),t=bA.licenseSearch(),r=t.ram_allocation?g.MEM_SETTING_KEY+t.ram_allocation:g.MEM_SETTING_KEY+g.RAM_ALLOCATION_ENUM.DEFAULT,s={name:g.PROCESS_DESCRIPTORS.HDB,script:g.LAUNCH_SERVICE_SCRIPTS.HDB,exec_mode:"cluster",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.HDB},merge_logs:!0,out_file:e,error_file:e,instances:ee.get(g.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:en};return pe||(s.out_file=ne,s.error_file=ne),s}o(DA,"generateHDBServerConfig");function MA(){Ht(),ee.initSync(),pe=ee.get(g.HDB_SETTINGS_NAMES.LOG_TO_FILE),Ne=ee.get(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=le.join(Ne,g.PROCESS_LOG_NAMES.CUSTOM_FUNCTIONS),t=bA.licenseSearch(),r=t.ram_allocation?g.MEM_SETTING_KEY+t.ram_allocation:g.MEM_SETTING_KEY+g.RAM_ALLOCATION_ENUM.DEFAULT,s={name:g.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS,script:g.LAUNCH_SERVICE_SCRIPTS.CUSTOM_FUNCTIONS,exec_mode:"cluster",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS},merge_logs:!0,out_file:e,error_file:e,instances:ee.get(g.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:en};return pe||(s.out_file=ne,s.error_file=ne),s}o(MA,"generateCFServerConfig");function bG(){Ht(),ee.initSync(),pe=ee.get(g.HDB_SETTINGS_NAMES.LOG_TO_FILE),Ne=ee.get(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=ee.get(g.CONFIG_PARAMS.ROOTPATH),t=le.join(e,"clustering",Du.NATS_CONFIG_FILES.HUB_SERVER),r=le.join(Ne,g.PROCESS_LOG_NAMES.CLUSTERING_HUB),s={name:g.PROCESS_DESCRIPTORS.CLUSTERING_HUB,script:yA,args:`-c ${t}`,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return pe||(s.out_file=ne,s.error_file=ne),s}o(bG,"generateNatsHubServerConfig");function LG(){Ht(),ee.initSync(),pe=ee.get(g.HDB_SETTINGS_NAMES.LOG_TO_FILE),Ne=ee.get(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=ee.get(g.CONFIG_PARAMS.ROOTPATH),t=le.join(e,"clustering",Du.NATS_CONFIG_FILES.LEAF_SERVER),r=le.join(Ne,g.PROCESS_LOG_NAMES.CLUSTERING_LEAF),s={name:g.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,script:yA,args:`-c ${t}`,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return pe||(s.out_file=ne,s.error_file=ne),s}o(LG,"generateNatsLeafServerConfig");function yG(){Ht(),ee.initSync();let e=le.join(Ne,g.PROCESS_LOG_NAMES.CLUSTERING_INGEST_SERVICE),t={name:g.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,script:g.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,exec_mode:"cluster",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:en};return pe||(t.out_file=ne,t.error_file=ne),t}o(yG,"generateNatsIngestServiceConfig");function wG(){Ht(),ee.initSync();let e=le.join(Ne,g.PROCESS_LOG_NAMES.CLUSTERING_REPLY_SERVICE),t={name:g.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE,script:g.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,exec_mode:"cluster",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:en};return pe||(t.out_file=ne,t.error_file=ne),t}o(wG,"generateNatsReplyServiceConfig");function DG(){Ht(),ee.initSync();let e=le.join(Ne,g.PROCESS_LOG_NAMES.CLUSTERING_UPGRADE),t={name:g.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:g.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:en,autorestart:!1};return pe||(t.out_file=ne,t.error_file=ne),t}o(DG,"generateClusteringUpgradeV4ServiceConfig");function MG(){Ht();let e=le.join(Ne,g.PROCESS_LOG_NAMES.PM2),t={name:g.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.RESTART_HDB},merge_logs:!0,out_file:e,error_file:e,instances:1,autorestart:!1,cwd:LA};return pe||(t.out_file=ne,t.error_file=ne),{...t,script:CG}}o(MG,"generateRestart");function UG(e){Ht();let t=le.join(Ne,g.PROCESS_LOG_NAMES.JOBS),r=le.join(ba,"server/jobs"),s={name:`JOB-${e}`,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:`JOB-${e}`},merge_logs:!0,out_file:t,error_file:t,instances:1,cwd:en,autorestart:!1};return pe||(s.out_file=ne,s.error_file=ne),{...s,script:le.join(r,"jobProcess.js")}}o(UG,"generateJobConfig");function PG(){return{apps:[wA(),DA(),MA()]}}o(PG,"generateAllServiceConfigs");UA.exports={generateAllServiceConfigs:PG,generateIPCServerConfig:wA,generateHDBServerConfig:DA,generateCFServerConfig:MA,generateRestart:MG,generateNatsHubServerConfig:bG,generateNatsLeafServerConfig:LG,generateNatsIngestServiceConfig:yG,generateNatsReplyServiceConfig:wG,generateClusteringUpgradeV4ServiceConfig:DG,generateJobConfig:UG}});var BA=d((Jk,PA)=>{var BG=tt(),HG={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};PA.exports=function(e){return BG.validateObject(e,HG)}});var vA=d((Zk,HA)=>{"use strict";var vG={OPERATION:"operation",REFRESH:"refresh"},La=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};o(La,"JWTTokens");var ya=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};o(ya,"JWTRSAKeys");HA.exports={JWTTokens:La,TOKEN_TYPE_ENUM:vG,JWTRSAKeys:ya}});var xA=d((Xk,VA)=>{"use strict";var ii=require("jsonwebtoken"),Uu=require("fs-extra"),Pu=I(),lt=T(),{handleHDBError:xe,hdb_errors:GG}=J(),{HTTP_STATUS_CODES:ke,AUTHENTICATION_ERROR_MSGS:$e}=GG,ni=O(),GA=aa(),vu=Ks(),qG=Zr().update,FG=wc(),VG=In(),{UserEventMsg:xG}=Os(),Gr=Y();Gr.initSync();var Bu=require("path"),{JWTTokens:kG,JWTRSAKeys:$G,TOKEN_TYPE_ENUM:wa}=vA(),YG=Gr.get(lt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Gr.get(lt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",KG=Gr.get(lt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Gr.get(lt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Da="RS256",Hu;VA.exports={createTokens:WG,validateOperationToken:jG,refreshOperationToken:QG,validateRefreshToken:FA};async function WG(e){if(Pu.isEmpty(e)||typeof e!="object")throw xe(new Error,$e.INVALID_AUTH_OBJECT,ke.BAD_REQUEST,void 0,void 0,!0);if(Pu.isEmpty(e.username))throw xe(new Error,$e.USERNAME_REQUIRED,ke.BAD_REQUEST,void 0,void 0,!0);if(Pu.isEmpty(e.password))throw xe(new Error,$e.PASSWORD_REQUIRED,ke.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await vu.findAndValidateUser(e.username,e.password),!t)throw xe(new Error,$e.INVALID_CREDENTIALS,ke.UNAUTHORIZED,void 0,void 0,!0)}catch(h){throw ni.error(h),xe(new Error,$e.INVALID_CREDENTIALS,ke.UNAUTHORIZED,void 0,void 0,!0)}let r=await Ma(),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 qA(i,r.private_key,r.passphrase),_=await ii.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:KG,algorithm:Da,subject:wa.REFRESH}),c=GA.hash(_),u=new FG(lt.SYSTEM_SCHEMA_NAME,lt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:c}]),l,E;try{l=await qG(u)}catch(h){ni.error(h),E=h}if(E!==void 0||l.skipped_hashes.length>0)throw xe(new Error,$e.REFRESH_TOKEN_SAVE_FAILED,ke.INTERNAL_SERVER_ERROR);return VG.signalUserChange(new xG(process.pid)),new kG(a,_)}o(WG,"createTokens");async function qA(e,t,r){return await ii.sign(e,{key:t,passphrase:r},{expiresIn:YG,algorithm:Da,subject:wa.OPERATION})}o(qA,"signOperationToken");async function Ma(){if(Hu===void 0)try{let e=Bu.join(Gr.getHdbBasePath(),lt.LICENSE_KEY_DIR_NAME,lt.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Bu.join(Gr.getHdbBasePath(),lt.LICENSE_KEY_DIR_NAME,lt.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Bu.join(Gr.getHdbBasePath(),lt.LICENSE_KEY_DIR_NAME,lt.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Uu.readFile(e)).toString(),n=(await Uu.readFile(t)).toString(),i=(await Uu.readFile(r)).toString();Hu=new $G(i,n,s)}catch(e){throw ni.error(e),xe(new Error,$e.NO_ENCRYPTION_KEYS,ke.INTERNAL_SERVER_ERROR)}return Hu}o(Ma,"getJWTRSAKeys");async function QG(e){if(!e)throw xe(new Error,$e.INVALID_BODY,ke.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw xe(new Error,$e.REFRESH_TOKEN_REQUIRED,ke.BAD_REQUEST,void 0,void 0,!0);await FA(e.refresh_token);let t=await Ma(),r=await ii.decode(e.refresh_token);return{operation_token:await qA({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}o(QG,"refreshOperationToken");async function jG(e){try{let t=await Ma(),r=await ii.verify(e,t.public_key,{algorithms:Da,subject:wa.OPERATION});return await vu.findAndValidateUser(r.username,void 0,!1)}catch(t){throw ni.warn(t),t.name&&t.name==="TokenExpiredError"?xe(new Error,$e.TOKEN_EXPIRED,ke.FORBIDDEN):xe(new Error,$e.INVALID_TOKEN,ke.UNAUTHORIZED)}}o(jG,"validateOperationToken");async function FA(e){let t;try{let r=await Ma(),s=await ii.verify(e,r.public_key,{algorithms:Da,subject:wa.REFRESH});t=await vu.findAndValidateUser(s.username,void 0,!1)}catch(r){throw ni.warn(r),r.name&&r.name==="TokenExpiredError"?xe(new Error,$e.TOKEN_EXPIRED,ke.FORBIDDEN):xe(new Error,$e.INVALID_TOKEN,ke.UNAUTHORIZED)}if(!GA.validate(t.refresh_token,e))throw xe(new Error,$e.INVALID_TOKEN,ke.UNAUTHORIZED);return t}o(FA,"validateRefreshToken")});var KA=d((e$,YA)=>{"use strict";var JG=BA(),tn=require("passport"),ZG=require("passport-local").Strategy,XG=require("passport-http").BasicStrategy,zG=require("util"),eq=Ks(),$A=zG.callbackify(eq.findAndValidateUser),zk=et(),tq=T(),kA=xA();tn.use(new ZG(function(e,t,r){$A(e,t,r)}));tn.use(new XG(function(e,t,r){$A(e,t,r)}));tn.serializeUser(function(e,t){t(null,e)});tn.deserializeUser(function(e,t){t(null,e)});function rq(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":tn.authenticate("basic",{session:!1},(a,_)=>{i(a,_)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===tq.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?kA.validateRefreshToken(n).then(a=>{e.body.refresh_token=n,r(null,a)}).catch(a=>{r(a)}):kA.validateOperationToken(n).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:tn.authenticate("local",{session:!1},function(a,_){i(a,_)})(e,t,r);break}}o(rq,"authorize");function sq(e,t){let r=JG(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(sq,"checkPermissions");YA.exports={authorize:rq,checkPermissions:sq}});var QA=d((t$,WA)=>{"use strict";var Ua=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};o(Ua,"Node");var Pa=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};o(Pa,"NodeSubscription");WA.exports={Node:Ua,NodeSubscription:Pa}});var JA=d((r$,jA)=>{"use strict";var nq=T().OPERATIONS_ENUM,Ba=class{constructor(t,r,s,n=void 0){this.operation=nq.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};o(Ba,"UpsertObject");jA.exports=Ba});var XA=d((s$,ZA)=>{"use strict";var Ha=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};o(Ha,"RemotePayloadObject");var va=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(va,"RemotePayloadSubscription");ZA.exports={RemotePayloadObject:Ha,RemotePayloadSubscription:va}});var em=d((n$,zA)=>{"use strict";var Ga=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(Ga,"TableSizeObject");zA.exports=Ga});var nm=d((i$,sm)=>{"use strict";var iq=em(),tm=require("path"),rm=Z(),oq=Te(),rn=$(),aq=O();sm.exports=_q;async function _q(e){let t=new iq;try{let r=tm.join(rm.getBaseSchemaPath(),e.schema.toString()),s=await rn.openEnvironment(r,e.name),n=rn.statDBI(s,e.hash_attribute),i=tm.join(rm.getTransactionAuditStorePath(),e.schema.toString()),a=await rn.openEnvironment(i,e.name,!0),_=rn.statDBI(a,oq.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),c=await rn.environmentDataSize(r,e.name),u=await rn.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){aq.warn(`unable to stat table dbi due to ${r}`)}return t}o(_q,"lmdbGetTableSize")});var om=d((o$,im)=>{"use strict";var cq=T(),qa=class{constructor(t){this.operator=cq.OPERATIONS_ENUM.SYSTEM_INFORMATION,this.attributes=t}};o(qa,"SystemInformationOperation");im.exports=qa});var _m=d((a$,am)=>{"use strict";var Fa=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(Fa,"SystemInformationObject");am.exports=Fa});var um=d((c$,cm)=>{"use strict";var Oe=require("systeminformation"),sn=O(),uq=T(),lq=nm(),Eq=Ho(),dq=Y();dq.initSync();var _$=om(),Sq=_m(),Va;cm.exports={getHDBProcessInfo:Vu,getNetworkInfo:ku,getDiskInfo:xu,getMemoryInfo:Fu,getCPUInfo:qu,getTimeInfo:Gu,getSystemInformation:$u,systemInformation:hq,getTableSize:Yu};function Gu(){return Oe.time()}o(Gu,"getTimeInfo");async function qu(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:a,governor:_,socket:c,cache:u,...l}=await Oe.cpu();l.cpu_speed=await Oe.cpuCurrentSpeed();let{raw_currentload:E,raw_currentload_idle:h,raw_currentload_irq:S,raw_currentload_nice:A,raw_currentload_system:R,raw_currentload_user:L,cpus:de,...p}=await Oe.currentLoad();return p.cpus=[],de.forEach(k=>{let{raw_load:Ie,raw_load_idle:Ce,raw_load_irq:ui,raw_load_nice:an,raw_load_system:li,raw_load_user:_r,...cr}=k;p.cpus.push(cr)}),l.current_load=p,l}catch(e){return sn.error(`error in getCPUInfo: ${e}`),{}}}o(qu,"getCPUInfo");async function Fu(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Oe.mem();return n}catch(e){return sn.error(`error in getMemoryInfo: ${e}`),{}}}o(Fu,"getMemoryInfo");async function Vu(){let e={core:[],clustering:[]};try{return(await Oe.processes()).list.forEach(r=>{r.params.includes(uq.HDB_PROC_NAME)?e.core.push(r):r.params.includes("socketcluster")&&e.clustering.push(r)}),e}catch(t){return sn.error(`error in getHDBProcessInfo: ${t}`),e}}o(Vu,"getHDBProcessInfo");async function xu(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Oe.disksIO();e.io=i;let{rx_sec:a,tx_sec:_,wx_sec:c,...u}=await Oe.fsStats();return e.read_write=u,e.size=await Oe.fsSize(),e}catch(t){return sn.error(`error in getDiskInfo: ${t}`),e}}o(xu,"getDiskInfo");async function ku(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Oe.networkInterfaceDefault(),e.latency=await Oe.inetChecksite("google.com"),(await Oe.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:a,dhcp:_,dnsSuffix:c,ieee8021xAuth:u,ieee8021xState:l,carrier_changes:E,...h}=s;e.interfaces.push(h)}),(await Oe.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:a,..._}=s;e.stats.push(_)}),e.connections=await Oe.networkConnections(),e}catch(t){return sn.error(`error in getNetworkInfo: ${t}`),e}}o(ku,"getNetworkInfo");async function $u(){if(Va!==void 0)return Va;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:a,..._}=await Oe.osInfo();e=_;let c=await Oe.versions("node, npm");return e.node_version=c.node,e.npm_version=c.npm,Va=e,Va}catch(t){return sn.error(`error in getSystemInformation: ${t}`),e}}o($u,"getSystemInformation");async function Yu(){let e=[],t=await Eq.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await lq(s));return e}o(Yu,"getTableSize");async function hq(e){let t=new Sq;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await $u(),t.time=Gu(),t.cpu=await qu(),t.memory=await Fu(),t.disk=await xu(),t.network=await ku(),t.harperdb_processes=await Vu(),t.table_size=await Yu(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await $u();break;case"time":t.time=Gu();break;case"cpu":t.cpu=await qu();break;case"memory":t.memory=await Fu();break;case"disk":t.disk=await xu();break;case"network":t.network=await ku();break;case"harperdb_processes":t.harperdb_processes=await Vu();break;case"table_size":t.table_size=await Yu();break;default:break}return t}o(hq,"systemInformation")});var hm=d((E$,Sm)=>{"use strict";var fq=Zr(),Ku=I(),Wu=require("util"),_s=T(),lm=Y();lm.initSync();var Tq=KA(),Em=mr(),{Node:u$,NodeSubscription:l$}=QA(),Rq=ws(),Aq=JA(),{RemotePayloadObject:mq,RemotePayloadSubscription:gq}=XA(),{handleHDBError:pq,hdb_errors:Nq}=J(),{HTTP_STATUS_CODES:Oq,HDB_ERROR_MSGS:Iq}=Nq,Cq=mt(),bq=um(),Lq=kr(),yq=Wu.promisify(Tq.authorize),wq=Wu.promisify(Em.searchByHash),Dq=Wu.promisify(Em.searchByValue);Sm.exports={authHeaderToUser:Mq,isEmpty:Uq,getNodeRecord:Pq,upsertNodeRecord:Bq,buildNodePayloads:Hq,checkClusteringEnabled:vq,getAllNodeRecords:Gq,getSystemInfo:qq,reverseSubscription:dm};async function Mq(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await yq(t,null),e}o(Mq,"authHeaderToUser");function Uq(e){return e==null}o(Uq,"isEmpty");async function Pq(e){let t=new Rq(_s.SYSTEM_SCHEMA_NAME,_s.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return wq(t)}o(Pq,"getNodeRecord");async function Bq(e){let t=new Aq(_s.SYSTEM_SCHEMA_NAME,_s.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return fq.upsert(t)}o(Bq,"upsertNodeRecord");function dm(e){if(Ku.isEmpty(e.subscribe)||Ku.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(dm,"reverseSubscription");function Hq(e,t,r,s){let n=[];for(let i=0,a=e.length;i<a;i++){let _=e[i],{schema:c,table:u}=_,l=Ku.getTableHashAttribute(c,u),{subscribe:E,publish:h}=dm(_),S=new gq(c,u,l,h,E,_.start_time);n.push(S)}return new mq(r,t,n,s)}o(Hq,"buildNodePayloads");function vq(){if(!lm.get(_s.CONFIG_PARAMS.CLUSTERING_ENABLED))throw pq(new Error,Iq.CLUSTERING_NOT_ENABLED,Oq.BAD_REQUEST,void 0,void 0,!0)}o(vq,"checkClusteringEnabled");async function Gq(){let e=new Cq(_s.SYSTEM_SCHEMA_NAME,_s.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Dq(e)}o(Gq,"getAllNodeRecords");async function qq(){let e=await bq.getSystemInformation();return{hdb_version:Lq.version(),node_version:e.node_version,platform:e.platform}}o(qq,"getSystemInfo")});var nn=d((d$,Cm)=>{"use strict";var D=T(),xa=I(),oi=Ca(),ka=Ra(),Fq=gt(),G=require("pm2"),Vq=require("fs-extra"),nr=Mu(),Ye=Y(),ir=O(),xq=Mu(),kq=hm(),$q=require("util"),Tm=$q.promisify(require("child_process").exec),Rm=require("path");Cm.exports={start:cs,stop:Ya,reload:mm,restart:gm,list:ju,describe:Ka,connect:vt,kill:Nm,startAllServices:eF,startService:$a,getUniqueServicesList:Ju,restartAllServices:tF,stopAllServices:rF,isServiceRegistered:Om,reloadStopStart:Qu,restartHdb:pm,deleteProcess:Xq,configureLogRotate:iF,startClustering:Im,isHdbRestartRunning:zq,isClusteringRunning:aF,stopClustering:oF,reloadClustering:_F};var{PACKAGE_ROOT:Yq}=T(),Kq="2.7.0",Am=Rm.join(Yq,"node_modules/pm2/bin/pm2"),Wq="Log rotate installed.",Qq="Error installing log rotate.",jq="Log rotate updated.",Jq="Error updating log rotate.",Zq="The number of HarperDB processes running is different from the settings value. To restart and update the number HarperDB processes running you must stop and then start HarperDB";function vt(){return new Promise((e,t)=>{G.connect((r,s)=>{r&&t(r),e(s)})})}o(vt,"connect");function cs(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.start(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.disconnect(),t(n)})})}o(cs,"start");function Ya(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.stop(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.delete(e,(i,a)=>{i&&(G.disconnect(),r(s)),G.disconnect(),t(a)})})})}o(Ya,"stop");function mm(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.reload(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.disconnect(),t(n)})})}o(mm,"reload");function gm(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.restart(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.disconnect(),t(n)})})}o(gm,"restart");function Xq(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.delete(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.disconnect(),t(n)})})}o(Xq,"deleteProcess");async function pm(){await cs(xq.generateRestart())}o(pm,"restartHdb");async function zq(){let e=await ju();for(let t in e)if(e[t].name===D.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(zq,"isHdbRestartRunning");function ju(){return new Promise(async(e,t)=>{try{await vt()}catch(r){t(r)}G.list((r,s)=>{r&&(G.disconnect(),t(r)),G.disconnect(),e(s)})})}o(ju,"list");function Ka(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.describe(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.disconnect(),t(n)})})}o(Ka,"describe");function Nm(){return new Promise(async(e,t)=>{try{await vt()}catch(r){t(r)}G.killDaemon((r,s)=>{r&&(G.disconnect(),t(r)),G.disconnect(),e(s)})})}o(Nm,"kill");async function eF(){try{await Im(),await cs(nr.generateAllServiceConfigs())}catch(e){throw G.disconnect(),e}}o(eF,"startAllServices");async function $a(e){try{let t;switch(e=e.toLowerCase(),e){case D.PROCESS_DESCRIPTORS.IPC.toLowerCase():t=nr.generateIPCServerConfig();break;case D.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=nr.generateHDBServerConfig();break;case D.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase():t=nr.generateCFServerConfig();break;case D.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=nr.generateNatsIngestServiceConfig();break;case D.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=nr.generateNatsReplyServiceConfig();break;case D.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=nr.generateNatsHubServerConfig(),await cs(t),await oi.removeNatsConfig(e);return;case D.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=nr.generateNatsLeafServerConfig(),await cs(t),await oi.removeNatsConfig(e);return;case D.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=nr.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await cs(t)}catch(t){throw G.disconnect(),t}}o($a,"startService");async function Ju(){try{let e=await ju(),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 G.disconnect(),e}}o(Ju,"getUniqueServicesList");async function tF(e=[]){try{let t=!1,r=await Ju();for(let s=0,n=Object.values(r).length;s<n;s++){let i=Object.values(r)[s],a=i.name;e.includes(a)||(i.exec_mode==="cluster_mode"?a===D.PROCESS_DESCRIPTORS.HDB?t=!0:await Qu(a):await gm(a))}t&&await Qu(D.PROCESS_DESCRIPTORS.HDB)}catch(t){throw G.disconnect(),t}}o(tF,"restartAllServices");async function rF(){try{let e=await Ju();for(let t=0,r=Object.values(e).length;t<r;t++){let s=Object.values(e)[t];await Ya(s.name)}if(await Nm(),Ye.get(D.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND)===!0){let t=(await Vq.readFile(Rm.join(Ye.get(D.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),D.FOREGROUND_PID_FILE))).toString();try{process.kill(t,"SIGTERM")}catch(r){ir.warn(`Error terminating foreground process: ${r}`)}}}catch(e){throw G.disconnect(),e}}o(rF,"stopAllServices");async function Om(e){return!xa.isEmptyOrZeroLength(await Ka(e))}o(Om,"isServiceRegistered");async function Qu(e){let t=e===D.PROCESS_DESCRIPTORS.HDB?Ye.get(D.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):Ye.get(D.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await Ka(e),s=xa.isEmptyOrZeroLength(r)?0:r.length;t!==s?e===D.PROCESS_DESCRIPTORS.HDB?ir.error(Zq):(await Ya(e),await $a(e)):e===D.PROCESS_DESCRIPTORS.HDB?await pm():await mm(e)}o(Qu,"reloadStopStart");function sF(){return new Promise(async(e,t)=>{try{await vt()}catch(r){t(r)}G.stop(D.PROCESS_DESCRIPTORS.PM2_LOGROTATE,(r,s)=>{r&&(G.disconnect(),t(r)),G.disconnect(),e(s)})})}o(sF,"stopLogrotate");async function nF(){let{stdout:e,stderr:t}=await Tm(`${process.platform==="win32"?"node":""} ${Am} install pm2-logrotate@${Kq}`);if(ir.debug(`loadLogRotate stdout: ${e}`),t)throw ir.error(Qq),t;ir.info(Wq)}o(nF,"installLogRotate");async function fm(){let e={max_size:Ye.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_MAX_SIZE),retain:Ye.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_RETAIN),compress:Ye.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_COMPRESS),dateFormat:Ye.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_DATE_FORMAT),rotateModule:Ye.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_MODULE),workerInterval:Ye.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_WORKER_INTERVAL),rotateInterval:Ye.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_INTERVAL),TZ:Ye.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_TIMEZONE)},t="";for(let n in e)t+=`${process.platform==="win32"?"node":""} ${Am} set pm2-logrotate:${n} ${e[n]}`,n!=="TZ"&&(t+=" && ");let{stdout:r,stderr:s}=await Tm(t);if(ir.debug(`updateLogRotateConfig stdout: ${r}`),s)throw ir.error(Jq),s;ir.info(jq)}o(fm,"updateLogRotateConfig");async function iF(){Ye.initSync();let e=xa.autoCastBoolean(Ye.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE)),t=await Ka(D.PROCESS_DESCRIPTORS.PM2_LOGROTATE),r,s=!1;if(xa.isEmptyOrZeroLength(t)||(s=!0,r=t[0].pm2_env.status),e&&!s){await nF(),await fm();return}if(e&&s){await cs(D.PROCESS_DESCRIPTORS.PM2_LOGROTATE),await fm();return}!e&&r===D.PM2_PROCESS_STATUSES.ONLINE&&await sF()}o(iF,"configureLogRotate");async function Im(){for(let t in D.CLUSTERING_PROCESSES){let r=D.CLUSTERING_PROCESSES[t];await $a(r)}await ka.createWorkQueueStream(Fq.WORK_QUEUE_CONSUMER_NAMES),await ka.updateNodeNameLocalStreams();let e=await kq.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===D.PRE_4_0_0_VERSION){ir.info("Starting clustering upgrade 4.0.0 process"),await $a(D.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0);break}}o(Im,"startClustering");async function oF(){for(let e in D.CLUSTERING_PROCESSES){let t=D.CLUSTERING_PROCESSES[e];await Ya(t)}}o(oF,"stopClustering");async function aF(){for(let e in D.CLUSTERING_PROCESSES){let t=D.CLUSTERING_PROCESSES[e];if(await Om(t)===!1)return!1}return!0}o(aF,"isClusteringRunning");async function _F(){await oi.generateNatsConfig(!0),await ka.reloadNATSHub(),await ka.reloadNATSLeaf(),await oi.removeNatsConfig(D.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await oi.removeNatsConfig(D.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(_F,"reloadClustering")});var Qa=d((S$,Dm)=>{"use strict";var b=T(),F=O(),Wa=I(),cF=ds(),Zu=Ca(),el=Ra(),uF=gt(),Lm=require("minimist"),{handleHDBError:Xu,hdb_errors:lF}=J(),ai=st(),{HTTP_STATUS_CODES:zu}=lF,B,bm=`Restarting HarperDB. This may take up to ${b.RESTART_TIMEOUT_MS/1e3} seconds.`,us="HarperDB is currently restarting and must complete before another HarperDB restart can be initialized.",EF="Invalid service",dF="'service' is required",SF="Restarting all services",hF="Clustering is not enabled so cannot be restarted";Dm.exports={stop:TF,restartProcesses:fF,restartService:ym};async function fF(){F.createLogFile(b.PROCESS_LOG_NAMES.CLI,b.PROCESS_DESCRIPTORS.STOP);try{B===void 0&&(B=nn());let e=cF(Object.keys(b.CONFIG_PARAM_MAP),!0);Wa.isEmptyOrZeroLength(Object.keys(e))||ai.updateConfigValue(void 0,void 0,e,!0,!0);let t=ai.getConfigFromFile(b.CONFIG_PARAMS.CLUSTERING_ENABLED),r=ai.getConfigFromFile(b.CONFIG_PARAMS.CUSTOMFUNCTIONS_ENABLED),s=Lm(process.argv);if(!Wa.isEmpty(s.service)){if(typeof s.service!="string"){let _=`Restart service argument expected a string but received: ${s.service}`;return F.error(_),_}let a=s.service.split(",");for(let _ of a){let c=_.toLowerCase();if(c===b.HDB_PROC_DESCRIPTOR.toLowerCase()&&await B.isHdbRestartRunning()===!0){F.notify(us),console.error(us);continue}if(b.PROCESS_DESCRIPTORS_VALIDATE[c]===void 0){console.error(`Restart received unrecognized service command argument: ${c}`),F.error(`Restart received unrecognized service command argument: ${c}`);continue}let u=b.PROCESS_DESCRIPTORS_VALIDATE[c];if(console.log(`Restarting ${u}`),F.trace(`Restarting ${u}`),u===b.PROCESS_DESCRIPTORS.PM2_LOGROTATE)await B.configureLogRotate();else if(c.toLowerCase().includes("clustering"))await on(c);else if(await B.isServiceRegistered(u))u===b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS&&!r?(await B.stop(b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),F.trace(`Stopping ${b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`)):await ym({service:u});else if(u===b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS)if(r)await B.startService(u),F.trace(`Starting ${u}`);else{let l=`${u} is not enabled in harperdb-config.yaml and cannot be restarted.`;F.error(l),console.log(l)}else await B.startService(u);F.notify(`${u} successfully restarted.`)}return}if(await B.isHdbRestartRunning()===!0)return F.notify(us),console.error(us),us;console.log(bm),t&&await wm();let n=await B.isServiceRegistered(b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS);r&&!n&&(await B.startService(b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),F.trace(`Starting ${b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`));let i=[b.PROCESS_DESCRIPTORS.CLUSTERING_HUB,b.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE];return!r&&n&&(i.push(b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),await B.stop(b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),F.trace(`Stopping ${b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`)),await B.configureLogRotate(),F.notify(SF),await B.restartAllServices(i),bm}catch(e){let t=`There was an error restarting HarperDB. ${e}`;return F.error(t),t}}o(fF,"restartProcesses");async function ym(e){if(F.createLogFile(b.PROCESS_LOG_NAMES.CLI,b.PROCESS_DESCRIPTORS.STOP),B===void 0&&(B=nn()),Wa.isEmpty(e.service))throw Xu(new Error,dF,zu.BAD_REQUEST,void 0,void 0,!0);let t=e.service.toLowerCase();if(b.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw Xu(new Error,EF,zu.BAD_REQUEST,void 0,void 0,!0);let r=ai.getConfigFromFile(b.CONFIG_PARAMS.CUSTOMFUNCTIONS_ENABLED),s=b.PROCESS_DESCRIPTORS_VALIDATE[t];if(s===b.PROCESS_DESCRIPTORS.HDB){if(await B.isHdbRestartRunning()===!0)return F.notify(us),us;await B.reloadStopStart(s)}else if(s===b.PROCESS_DESCRIPTORS.PM2_LOGROTATE)await B.configureLogRotate();else if(s.toLowerCase().includes("clustering"))await on(s);else if(s===b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS||s===b.SERVICES.CUSTOM_FUNCTIONS){let i=await B.isServiceRegistered(s);if(r)i?(await B.reloadStopStart(s),F.trace(`Reloading ${s}`)):(await B.startService(s),F.trace(`Starting ${s}`));else if(!r&&i)await B.stop(s),F.trace(`Stopping ${s}`);else{let a=`${s} is not enabled in harperdb-config.yaml and cannot be restarted.`;throw F.error(a),Xu(new Error,a,zu.BAD_REQUEST,void 0,void 0,!0)}}else await B.restart(s);let n=`Restarting ${s}`;return F.notify(n),n}o(ym,"restartService");async function TF(){F.createLogFile(b.PROCESS_LOG_NAMES.CLI,b.PROCESS_DESCRIPTORS.STOP);try{B===void 0&&(B=nn());let e=Lm(process.argv);if(Wa.isEmpty(e.service))console.log("Stopping HarperDB."),await B.stopAllServices(),F.notify("HarperDB has stopped");else{if(typeof e.service!="string"){let r=`Stop service argument expected a string but received: ${e.service}`;F.error(r),console.log(r)}let t=e.service.split(",");for(let r of t){let s=r.toLowerCase();if(b.PROCESS_DESCRIPTORS_VALIDATE[s]===void 0){F.error(`Stop received unrecognized service command argument: ${s}`);continue}s==="clustering"?await B.stopClustering():await B.stop(b.PROCESS_DESCRIPTORS_VALIDATE[s]);let n=`${b.PROCESS_DESCRIPTORS_VALIDATE[s]} successfully stopped.`;F.notify(n),console.log(n)}}}catch(e){throw console.error(e),e}}o(TF,"stop");async function wm(){await on(b.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await on(b.PROCESS_DESCRIPTORS.CLUSTERING_LEAF),await on(b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE),await on(b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE),await el.updateNodeNameLocalStreams(),await el.closeConnection()}o(wm,"restartAllClusteringServices");async function on(e){e=b.PROCESS_DESCRIPTORS_VALIDATE[e.toLowerCase()];let t=ai.getConfigFromFile(b.CONFIG_PARAMS.CLUSTERING_ENABLED),r=e==="clustering",s=e==="clustering config",n=r?void 0:await B.isServiceRegistered(e),i=r||s?await B.isClusteringRunning():void 0;switch(!0){case s:if(!i){F.error(hF);break}await B.reloadClustering();break;case(r&&i&&!t):await B.stopClustering();break;case(r&&!i&&t):await B.startClustering();break;case(r&&i&&t):await wm();break;case(r&&!i&&!t):F.error(`${e} is not enabled in harperdb-config.yaml and cannot be restarted.`);break;case(n&&!t):await B.stop(e),F.trace(`Stopping ${e}`);break;case(!n&&t):e!==b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE&&e!==b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE&&await Zu.generateNatsConfig(!0,e),await B.startService(e),F.trace(`Starting ${e}`),e===b.PROCESS_DESCRIPTORS.CLUSTERING_LEAF&&await el.createWorkQueueStream(uF.WORK_QUEUE_CONSUMER_NAMES);break;case(!n&&!t):F.error(`${e} is not enabled in harperdb-config.yaml and cannot be restarted.`);break;case(n&&t):e===b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE||e===b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE?await B.reload(e):(await Zu.generateNatsConfig(!0,e),await B.restart(e),await Zu.removeNatsConfig(e));break;default:F.error(`Error restarting ${e}`)}}o(on,"restartClustering")});var Pm=d((h$,Um)=>{"use strict";var tl=I(),ze=O(),Mm=Fc();Um.exports={processDirectives:RF};async function RF(e){console.log("Starting upgrade process...");let t=Mm.getVersionsForUpgrade(e),r=gF(t),s=[],n=r.length;for(let i=0;i<n;i++){let a=r[i],_=`Running upgrade for version ${a.version}`;ze.notify(_),console.log(_);let c=[],u=[];try{c=AF(a.sync_functions)}catch(l){throw ze.error(`Error while running an upgrade script for ${a.version}`),l}try{u=await mF(a.async_functions)}catch(l){throw ze.error(`Error while running an upgrade script for ${a.version}`),l}s.push(...c,...u)}return s}o(RF,"processDirectives");function AF(e){if(tl.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(AF,"runSyncFunctions");async function mF(e){if(tl.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(mF,"runAsyncFunctions");function gF(e){if(tl.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let s=Mm.getDirectiveByVersion(r);s&&t.push(s)}return t}o(gF,"getUpgradeDirectivesToInstall")});var nl=d((f$,Fm)=>{"use strict";var ja=Y();ja.initSync();var Gm=require("chalk"),Bm=require("fs-extra"),Gt=O(),Nt=T(),Hm=kr(),pF=Pm(),rl=I(),qm=ra(),NF=bc(),vm=c_(),OF=Fs(),IF=require("util").promisify,CF=IF(OF.setSchemaDataToGlobal),sl,{UPGRADE_VERSION:Ja}=Nt.UPGRADE_JSON_FIELD_NAMES_ENUM;Fm.exports={upgrade:bF};async function bF(e){Gt.createLogFile(Nt.PROCESS_LOG_NAMES.CLI,Nt.PROCESS_DESCRIPTORS.UPGRADE),await CF(),sl===void 0&&(sl=nn()),Bm.existsSync(ja.get(ja.BOOT_PROPS_FILE_PATH))||(_i("The hdb_boot_properties file was not found. Please install HDB.",Nt.LOG_LEVELS.ERROR),process.exit(1)),Bm.existsSync(ja.get(Nt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(_i("The hdb settings file was not found. Please make sure HDB is installed.",Nt.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await qm.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),_i(`This version of HarperDB is ${Hm.version()}`,Nt.LOG_LEVELS.INFO);let r=t[Ja]?t[Ja]:Hm.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Nt.HDB_SUPPORT_ADDRESS}`),Gt.notify("Missing new version field from upgrade info object"),process.exit(1)),await LF();let s,n=0;try{s=await NF.forceUpdatePrompt(t)}catch(i){Gt.error("There was an error when prompting user about upgrade."),Gt.error(i),s=!1,n=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(n)),Gt.info(`Starting upgrade to version ${r}`),await yF(t),_i(`HarperDB was successfully upgraded to version ${t[Ja]}`,Nt.LOG_LEVELS.INFO)}o(bF,"upgrade");async function LF(){let e=!1,t=await vm.findPs(Nt.HDB_PROC_NAME);if(rl.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await vm.findPs("hdb_express");rl.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await sl.list();rl.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(Gm.red(r)),Gt.error(r),process.exit(1)}}o(LF,"checkIfRunning");async function yF(e){try{await pF.processDirectives(e)}catch(t){throw _i("There was an error during the data upgrade. Please check the logs.",Nt.LOG_LEVELS.ERROR),t}try{await qm.insertHdbUpgradeInfo(e[Ja])}catch(t){Gt.error("Error updating the 'hdb_info' system table."),Gt.error(t)}}o(yF,"runUpgrade");function _i(e,t=void 0){t||(t=Gt.info),Gt[t](e),console.log(Gm.magenta(e))}o(_i,"printToLogAndConsole")});var Za=d((R$,Ym)=>{"use strict";var ar=Y();ar.initSync();var te=T(),Ee=O(),ls=require("fs-extra"),Es=require("path"),wF=m_(),DF=Tu(),il=require("chalk"),MF=cn(),UF=Ru(),or=I(),PF=st(),km=ds(),BF=Ca(),{promisify:T$}=require("util"),HF=Qa(),vF=nl(),GF=require("minimist"),qF=require("child_process").spawn,{PACKAGE_ROOT:$m}=T(),FF=ra(),VF=Wt(),xF=Ho(),kF=ic(),qt,$F=po(),YF="Upgrade complete. Starting HarperDB.",KF="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",WF="HarperDB not found, starting install process.",QF="There was an error during install, check install_log.log for more details. Exiting.",jF="HarperDB successfully started.";async function JF(e=!1){try{if(console.log(il.magenta("Starting HarperDB...")),await e0()===!1){console.log(WF);try{await DF()}catch(i){console.error(QF),Ee.error(i),process.exit(1)}}if(process.env.PM2_LOG_FILE_PATH=Es.join(ar.getHdbBasePath(),"log","pm2.log"),qt===void 0&&(qt=nn()),Ee.createLogFile(te.PROCESS_LOG_NAMES.CLI,te.PROCESS_DESCRIPTORS.RUN),!e){let i=km(Object.keys(te.CONFIG_PARAM_MAP),!0);!or.isEmpty(i)&&!or.isEmptyOrZeroLength(Object.keys(i))&&PF.updateConfigValue(void 0,void 0,i,!0,!0)}let t;try{let i=await FF.getVersionUpdateInfo();i!==void 0&&(t=i[te.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await vF.upgrade(i),console.log(YF))}catch(i){t?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${t}. Exiting HarperDB.`),Ee.error(i)):(console.error(KF),Ee.error(i)),process.exit(1)}wF(),await XF(),ZF();try{UF.checkPermission()}catch(i){Ee.error(i),console.error(i.message),process.exit(1)}let r=or.autoCastBoolean(ar.get(te.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY));r&&await BF.generateNatsConfig();let s=or.autoCastBoolean(ar.get(te.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY));await qt.configureLogRotate();let n=GF(process.argv);if(or.isEmpty(n.service))r&&s?await qt.startAllServices():r?(await ol(),await qt.startClustering()):s?(await ol(),await qt.startService(te.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS)):await ol();else{if(typeof n.service!="string"){let a=`Run service argument expected a string but received: ${n.service}`;Ee.error(a),console.log(a),process.exit(1)}let i=n.service.split(",");for(let a of i){let _=a.toLowerCase();if(te.PROCESS_DESCRIPTORS_VALIDATE[_]===void 0){Ee.error(`Run received unrecognized service command argument: ${_}`);continue}if(_===te.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase()&&!s){Ee.error(`${_} is not enabled in settings`);continue}if(_.includes("clustering")&&!r){Ee.error(`${_} is not enabled in settings`);continue}_==="clustering"?await qt.startClustering():await qt.startService(te.PROCESS_DESCRIPTORS_VALIDATE[_]);let c=`${te.PROCESS_DESCRIPTORS_VALIDATE[_]} successfully started.`;Ee.notify(c),console.log(c)}xm()}console.log(il.magenta(""+ls.readFileSync(Es.join($m,"utility/install/ascii_logo.txt")))),console.log(il.magenta(`|------------- HarperDB ${MF.version} successfully started ------------|`)),Ee.notify(jF),xm()}catch(t){console.error(t),Ee.error(t),process.exit(1)}}o(JF,"run");async function ol(){await qt.startService(te.PROCESS_DESCRIPTORS.IPC),await qt.startService(te.PROCESS_DESCRIPTORS.HDB)}o(ol,"startHdbIpc");function ZF(){let e=Es.join(ar.getHdbBasePath(),te.LICENSE_KEY_DIR_NAME,te.LICENSE_FILE_NAME),t=Es.join(e,te.LICENSE_FILE_NAME),r=Es.join(e,te.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:s,HARPERDB_LICENSE:n}=km(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(or.isEmpty(s)||or.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),Ee.error(n)}}o(ZF,"writeLicenseFromVars");async function XF(){if(ar.getHdbBasePath()!==void 0){Ee.info("Checking Transaction Audit Environments exist");for(let t of Object.keys(VF))await Vm(te.SYSTEM_SCHEMA_NAME,t);let e=await xF.describeAll();for(let t of Object.keys(e))for(let r of Object.keys(e[t]))await Vm(t,r);Ee.info("Finished checking Transaction Audit Environments exist")}}o(XF,"checkAuditLogEnvironmentsExist");async function Vm(e,t){try{let r=new $F(e,t);await kF(r)}catch(r){let s=`Unable to create the transaction audit environment for ${e}.${t}, due to: ${r.message}`;console.error(s),Ee.error(s)}}o(Vm,"openCreateAuditEnvironment");function xm(){t0()||process.exit(0),Ee.trace("Running in foreground"),process.on("exit",ci),process.on("SIGINT",ci),process.on("SIGUSR1",ci),process.on("SIGUSR2",ci),process.on("SIGTERM",ci),zF()}o(xm,"foregroundHandler");function zF(){let e=qF("node",[Es.join($m,"node_modules/pm2/bin/pm2"),"logs"]);ls.writeFileSync(Es.join(ar.get(te.CONFIG_PARAMS.ROOTPATH),te.FOREGROUND_PID_FILE),e.pid.toString()),e.on("error",t=>{console.log(t),console.error("Failed to start subprocess.")}),e.stdout.on("data",t=>{console.log(t.toString())}),e.stderr.on("data",t=>{console.error(t.toString())})}o(zF,"spawnLogProcess");async function ci(){try{await HF.stop()}catch(e){console.error(e)}process.exit(143)}o(ci,"processExitHandler");Ym.exports={run:JF};async function e0(){try{await ls.stat(or.getPropsFilePath()),await ls.stat(ar.get(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(e.code==="ENOENT")return!1;throw Ee.error(`Error checking for HDB install - ${e}`),e}return!0}o(e0,"isHdbInstalled");function t0(){return or.autoCastBoolean(ar.get(te.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND))}o(t0,"getRunInForeground")});var jm=d((A$,Qm)=>{var r0=Tu(),Km=O(),Wm=T();Qm.exports=s0;async function s0(){try{Km.createLogFile(Wm.PROCESS_LOG_NAMES.INSTALL,Wm.PROCESS_DESCRIPTORS.INSTALL),await r0()}catch(e){console.error("There was an error during the install."),console.error(e),Km.error(e),process.exit(1)}}o(s0,"install")});var tg=d((m$,eg)=>{var za=Wn(),Jm=require("chalk"),Ft=O(),Zm=Ru(),Xm=require("prompt"),{promisify:n0}=require("util"),Xa=T(),i0=require("fs-extra"),o0=require("path"),a0=I(),_0=kr(),zm=Y();zm.initSync();var c0=require("moment"),u0=n0(Xm.get),l0=o0.join(zm.getHdbBasePath(),Xa.LICENSE_KEY_DIR_NAME,Xa.LICENSE_FILE_NAME,Xa.LICENSE_FILE_NAME);eg.exports={getFingerprint:d0,setLicense:E0,parseLicense:al,register:S0,getRegistrationInfo:f0};async function E0(e){if(e&&e.key&&e.company){try{Ft.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await al(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Ft.error(r),Ft.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}o(E0,"setLicense");async function d0(){try{Zm.checkPermission()}catch(t){throw Ft.error(t),new Error("You do not have permission to generate a fingerprint.")}let e={};try{e=await za.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Ft.error(r),Ft.error(t),new Error(r)}return e}o(d0,"getFingerprint");async function al(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");console.log("Validating license input...");let r=za.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{Ft.info("writing license to disk"),await i0.writeFile(l0,JSON.stringify({license_key:e,company:t}))}catch(s){throw Ft.error("Failed to write License"),s}return"Registration successful."}o(al,"parseLicense");async function S0(){let e=await h0();return al(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}o(S0,"register");async function h0(){try{Zm.checkPermission()}catch(s){return console.error(s.message)}let e=await za.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:Jm.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:Jm.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{Xm.start()}catch(s){Ft.error(s)}let r;try{r=await u0(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}o(h0,"promptForRegistration");async function f0(){let e={registered:!1,version:null,storage_type:null,ram_allocation:null,license_expiration_date:null},t;try{t=await za.getLicense()}catch(r){throw Ft.error(`There was an error when searching licenses due to: ${r.message}`),r}if(a0.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=_0.version(),e.storage_type=Xa.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=c0.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}o(f0,"getRegistrationInfo")});var og=d((g$,ig)=>{"use strict";var T0=tg(),rg=O(),sg=T(),ng="Registration failed.";async function R0(){rg.createLogFile(sg.PROCESS_LOG_NAMES.CLI,sg.PROCESS_DESCRIPTORS.REGISTER);let e;try{e=await T0.register()}catch(t){return rg.error(`Registration error ${t}`),ng}return e||ng}o(R0,"register");ig.exports={register:R0}});var qr=O(),A0=kr(),Vt=T(),ag=require("fs"),_g=require("path"),m0=require("os"),{PACKAGE_ROOT:cg}=T(),g0=Bl();N0();function p0(){let e=_g.join(cg,"bin",`harperdb.${Vt.CODE_EXTENSION}`),t;try{t=ag.statSync(e)}catch{qr.info("Couldn't find the harperdb executable process.");return}let r=m0.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 qr.error(s),console.log(s),new Error(s)}}o(p0,"checkCallingUserSync");function N0(){let e=g0();if(e)if(e.error){console.error(e.error),qr.error(e.error);return}else e.warn&&(console.warn(e.warn),qr.warn(e.warn));let t;ag.readdir(_g.join(cg,"bin"),r=>{if(r)return qr.error(r);if(process.argv&&process.argv[2]&&(t=process.argv[2].toLowerCase()),t!==Vt.SERVICE_ACTIONS_ENUM.INSTALL)try{p0()}catch(n){throw console.log(n.message),n}let s;switch(t){case Vt.SERVICE_ACTIONS_ENUM.RUN:s=Za().run();break;case Vt.SERVICE_ACTIONS_ENUM.INSTALL:jm()().then(()=>{Za().run(!0)}).catch(E=>{console.error(E)});break;case Vt.SERVICE_ACTIONS_ENUM.REGISTER:og().register().then(E=>{console.log(E)}).catch(E=>{console.error(E)});break;case Vt.SERVICE_ACTIONS_ENUM.STOP:Qa().stop().then(()=>{process.exit(0)}).catch(E=>{console.error(E)});break;case Vt.SERVICE_ACTIONS_ENUM.RESTART:Qa().restartProcesses().then().catch(E=>{qr.error(E),console.error("There was an error restarting harperdb. Please stop manually with harperdb stop and start again."),process.exit(1)});break;case Vt.SERVICE_ACTIONS_ENUM.VERSION:A0.printVersion();break;case Vt.SERVICE_ACTIONS_ENUM.UPGRADE:qr.setLogLevel(Vt.LOG_LEVELS.INFO),nl().upgrade(null).then(()=>{console.log("Your instance of HDB is up to date!")}).catch(E=>{qr.error(`Got an error during upgrade ${E}`)});break;default:Za().run();break}})}o(N0,"harperDBService");
81
+ `,"")}o(dA,"runCommand");async function rG(){try{await qv.access(Nu)}catch{return!1}let e=await dA(`${Nu} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Fv.eq(t,eG)}o(rG,"checkNATSServerInstalled");async function Cu(e,t,r,s=!0,n="127.0.0.1"){return Wv({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:Bt.get(z.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Bt.get(z.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Bt.get(z.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),insecure:Bt.get(z.CONFIG_PARAMS.CLUSTERING_TLS_INSECURE)}})}o(Cu,"createConnection");async function sG(){pt&&(await pt.close(),pt=void 0)}o(sG,"closeConnection");async function fa(){if(!pt){let e=await _A.getClusterUser();if(as(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=Bt.get(z.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);pt=await Cu(t,e.username,e.decrypt_hash)}return pt}o(fa,"getConnection");async function Js(){if(ei)return ei;as(pt)&&await fa();let{domain:e}=si(z.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(as(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ei=await pt.jetstreamManager({domain:e}),ei}o(Js,"getJetStreamManager");async function SA(){if(ti)return ti;as(pt)&&await fa();let{domain:e}=si(z.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(as(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ti=pt.jetstream({domain:e}),ti}o(SA,"getJetStream");async function ct(){let e=pt||await fa(),t=ei||await Js(),r=ti||await SA();return{connection:e,jsm:t,js:r}}o(ct,"getNATSReferences");async function nG(){let e=Bt.get(z.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),{sys_name:t,decrypt_hash:r}=await _A.getClusterUser(),s=await Cu(e,t,r),n=Iu(),i=s.subscribe(n),a=[],_=(async()=>{for await(let c of i)a.push(EA.decode(c.data))})();return await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:n}),await s.flush(),await Ou.async_set_timeout(50),await i.drain(),await s.close(),await _,a}o(nG,"getServerList");async function bu(e,t){let{jsm:r}=await ct();await r.streams.add({name:e,storage:cA.File,retention:uA.Limits,subjects:t})}o(bu,"createLocalStream");async function hA(){let{jsm:e}=await ct(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}o(hA,"listStreams");async function iG(e){let{jsm:t}=await ct();await t.streams.delete(e)}o(iG,"deleteLocalStream");async function oG(e){let{connection:t}=await ct(),r=[],s=Iu(),n=t.subscribe(s),i=(async()=>{for await(let a of n)r.push(EA.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(oG,"listRemoteStreams");async function aG(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await ct(),i=xv(),a=[],_={ack_policy:lA.None,durable_name:i,deliver_subject:i,deliver_policy:pu.All};t&&(_.deliver_policy=pu.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=Jv(l),h=aA(E.data),S={nats_timestamp:E.info.timestampNanos,nats_sequence:E.info.streamSequence,entry:h,originators:[]},A=[];if(E.headers){let R=E.headers.get("originators");R&&(A=R.split(","),S.originators=A)}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(aG,"viewStream");async function _G(e,t,r=[],s=[]){sr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,r,"originators:",s);let{connection:n,js:i}=await ct(),a=await Ta(),_=`${e}.${a}`,c=jv();s.push(a),c.append("originators",s.join());for(let u=0,l=r.length;u<l;u++)try{sr.trace(`publishToStream publishing to subject: ${_}, data:`,r[u]),await i.publish(_,gu(r[u]),{headers:c})}catch(E){if(E.code&&E.code.toString()==="503")sr.trace(`publishToStream creating stream: ${t}`),await bu(t,[_]),await i.publish(_,gu(r[u]),{headers:c});else throw E}}o(_G,"publishToStream");function si(e){e=e.toLowerCase();let t=ri.join(Bt.get(z.CONFIG_PARAMS.ROOTPATH),zv);if(e===z.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return as(mu)&&(mu={port:Xn.getConfigFromFile(z.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Xn.getConfigFromFile(z.CONFIG_PARAMS.CLUSTERING_NODENAME)+j.SERVER_SUFFIX.HUB,config_file:j.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:ri.join(t,j.PID_FILES.HUB),hdb_nats_path:t}),mu;if(e===z.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return as(Au)&&(Au={port:Xn.getConfigFromFile(z.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Xn.getConfigFromFile(z.CONFIG_PARAMS.CLUSTERING_NODENAME)+j.SERVER_SUFFIX.LEAF,config_file:j.NATS_CONFIG_FILES.LEAF_SERVER,domain:Xn.getConfigFromFile(z.CONFIG_PARAMS.CLUSTERING_NODENAME)+j.SERVER_SUFFIX.LEAF,pid_file_path:ri.join(t,j.PID_FILES.LEAF),hdb_nats_path:t}),Au;sr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(si,"getServerConfig");async function cG(e){let{jsm:t}=await ct(),r=await Ta();try{await t.streams.add({name:e.stream_name,storage:cA.File,retention:uA.Workqueue,subjects:[`${j.SUBJECT_PREFIXES.MSGID}.${r}`,`${j.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:lA.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:pu.All,max_ack_pending:1e4,deliver_group:e.deliver_group,filter_subject:`${j.SUBJECT_PREFIXES.TXN}.>`});else throw s}}o(cG,"createWorkQueueStream");async function fA(e,t,r){let{jsm:s}=await ct(),n=await s.streams.info(t),i=TA(s.prefix),a=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:_,table:c}=r,u=ha.createNatsTableStreamName(_,c),l=i===e,E,h,S=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let R=0,L=n.config.sources.length;R<L;R++)if(E=n.config.sources[R],h=R,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;await AA(_,c,E,t),n.config.sources.splice(h,1),await s.streams.update(t,n.config)}let A={name:u,opt_start_time:a,filter_subject:`${j.SUBJECT_PREFIXES.TXN}.>`};l||(A.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(A),await s.streams.update(t,n.config)}o(fA,"addSourceToWorkStream");function TA(e){return e.split(".")[1]}o(TA,"extractServerName");async function RA(e,t,r){let{schema:s,table:n}=r,i=ha.createNatsTableStreamName(s,n),{jsm:a}=await ct(),_=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),await AA(s,n,u,t)}o(RA,"removeSourceFromWorkStream");async function AA(e,t,r,s){let n=await Js(),i;try{i=pA(e,t,r.external.api.split(".")[1]),await n.streams.purge(s,{filter:i})}catch{sr.error("Error purging source subject",i,"from work stream",s)}}o(AA,"purgeSourceFromWorkStream");async function uG(e,t,r=2e3,s=Iu()){if(!Ou.isObject(t))throw new Error("data param must be an object");let n=gu(t),{connection:i}=await ct(),a={timeout:r};s&&(a.reply=s,a.noMux=!0);let _=await i.request(e,n,a);return aA(_.data)}o(uG,"request");function Lu(e){return new Promise(async(t,r)=>{let s=$v(Nu,["--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(Lu,"reloadNATS");async function lG(){let{pid_file_path:e}=si(z.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Lu(e)}o(lG,"reloadNATSHub");async function EG(){let{pid_file_path:e}=si(z.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Lu(e)}o(EG,"reloadNATSLeaf");function dG(e,t,r){let s;switch(e.code){case nA.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case nA.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}o(dG,"requestErrorHandler");async function SG(e,t){let r=t+j.SERVER_SUFFIX.LEAF;await Yv.writeTransaction(z.SYSTEM_SCHEMA_NAME,z.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await fA(r,j.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await RA(r,j.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}o(SG,"updateWorkStream");async function mA(e,t){let r=ha.createNatsTableStreamName(e,t),s=await Ta(),n=pA(e,t,s);await bu(r,[n])}o(mA,"createLocalTableStream");async function hG(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await mA(s,n)}}o(hG,"createTableStreams");async function gA(e,t){if(Bt.get(z.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=ha.createNatsTableStreamName(e,t),{jsm:s}=await ct();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")sr.warn(r);else throw r}}o(gA,"purgeTableStream");async function fG(e,t){if(Bt.get(z.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await gA(e,t[r])}o(fG,"purgeSchemaTableStreams");async function TG(e){return(await Js()).streams.info(e)}o(TG,"getStreamInfo");function pA(e,t,r){return`${j.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}o(pA,"createSubjectName");async function Ta(){if(zn)return zn;if(zn=(await Js())?.nc?.info?.server_name,zn===void 0)throw new Error("Unable to get jetstream manager server name");return zn}o(Ta,"getJsmServerName");async function RG(){let e=await Js(),t=await Ta(),r=await hA();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let a=i.split(".");if(a[a.length-1]!==t){if(n.name===j.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let c=`${j.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;sr.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c}else if(n.name===j.WORK_QUEUE_CONSUMER_NAMES.stream_name){let c=`${j.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;sr.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c,await e.consumers.update(j.WORK_QUEUE_CONSUMER_NAMES.stream_name,j.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${j.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let c=i.split(".");c[c.length-1]=t;let u=c.join(".");sr.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}await e.streams.update(n.name,n)}}}o(RG,"updateNodeNameLocalStreams")});var Ca=d((Qk,CA)=>{"use strict";var Zs=require("path"),pa=require("fs-extra"),AG=QR(),mG=ZR(),gG=zR(),pG=tA(),yu=Ks(),zs=I(),ut=st(),ga=T(),Aa=gt(),{CONFIG_PARAMS:fe}=ga,Na=O(),Oa=Y(),OA=qn(),wu=Ra(),Xs="clustering",NG=1e4,IA=5;CA.exports={generateNatsConfig:OG,removeNatsConfig:IG};async function OG(e=!1,t=void 0){Oa.initSync();let r=Oa.get(fe.ROOTPATH),s=Zs.join(r,Xs,Aa.PID_FILES.HUB),n=Zs.join(r,Xs,Aa.PID_FILES.LEAF),i=Zs.join(r,Xs,"leaf"),a=Zs.join(r,Xs,Aa.NATS_CONFIG_FILES.HUB_SERVER),_=Zs.join(r,Xs,Aa.NATS_CONFIG_FILES.LEAF_SERVER),c=ut.getConfigFromFile(fe.CLUSTERING_TLS_CERTIFICATE),u=ut.getConfigFromFile(fe.CLUSTERING_TLS_PRIVATEKEY),l=ut.getConfigFromFile(fe.CLUSTERING_TLS_CERT_AUTH),E=ut.getConfigFromFile(fe.CLUSTERING_TLS_INSECURE),h=ut.getConfigFromFile(fe.CLUSTERING_NODENAME),S=ut.getConfigFromFile(fe.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await wu.checkNATSServerInstalled()||Ia("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let A=await yu.listUsers(),R=ut.getConfigFromFile(fe.CLUSTERING_USER),L=await yu.getClusterUser();(zs.isEmpty(L)||L.active!==!0)&&Ia(`invalid cluster user '${R}'`),e||(await ma(fe.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await ma(fe.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await ma(fe.CLUSTERING_HUBSERVER_NETWORK_PORT),await ma(fe.CLUSTERING_LEAFSERVER_NETWORK_PORT));let de=[],p=[];for(let[_r,cr]of A.entries())cr.role.role===ga.ROLE_TYPES_ENUM.CLUSTER_USER&&cr.active&&(de.push(new pG(cr.username,OA.decrypt(cr.hash))),p.push(new gG(cr.username,OA.decrypt(cr.hash))));let k=[],{hub_routes:Ie}=ut.getClusteringRoutes();if(!zs.isEmptyOrZeroLength(Ie))for(let _r of Ie)k.push(`tls://${L.sys_name_encoded}:${L.uri_encoded_d_hash}@${_r.host}:${_r.port}`);let Ce=new AG(ut.getConfigFromFile(fe.CLUSTERING_HUBSERVER_NETWORK_PORT),h,s,c,u,l,E,S,ut.getConfigFromFile(fe.CLUSTERING_HUBSERVER_CLUSTER_NAME),ut.getConfigFromFile(fe.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),k,de,p);t=zs.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===ga.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await pa.writeJson(a,Ce),Na.trace(`Hub server config written to ${a}`));let ui=`tls://${L.sys_name_encoded}:${L.uri_encoded_d_hash}@0.0.0.0:${S}`,an=`tls://${L.uri_encoded_name}:${L.uri_encoded_d_hash}@0.0.0.0:${S}`,li=new mG(ut.getConfigFromFile(fe.CLUSTERING_LEAFSERVER_NETWORK_PORT),h,n,i,[ui],[an],de,p,c,u,l,E);(t===void 0||t===ga.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await pa.writeJson(_,li),Na.trace(`Leaf server config written to ${_}`))}o(OG,"generateNatsConfig");async function ma(e){let t=Oa.get(e);zs.isEmpty(t)&&Ia(`port undefined for '${e}'`),await zs.isPortTaken(t)&&Ia(`'${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.`)}o(ma,"isPortAvailable");function Ia(e){let t=`Error generating clustering config: ${e}`;Na.error(t),console.error(t),process.exit(1)}o(Ia,"generateNatsConfigError");async function IG(e){let{port:t,config_file:r}=wu.getServerConfig(e),{username:s,decrypt_hash:n}=await yu.getClusterUser(),i=0,a=500;for(;i<IA;){try{let u=await wu.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){Na.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=IA)throw new Error(`removeNatsConfig timed out waiting to connect to ${e}`);await zs.async_set_timeout(a*i)}let _="0".repeat(NG),c=Zs.join(Oa.get(fe.ROOTPATH),Xs,r);await pa.writeFile(c,_),await pa.remove(c)}o(IG,"removeNatsConfig")});var Mu=d((jk,UA)=>{"use strict";var ee=Y(),bA=Wn(),g=T(),Du=gt(),le=require("path"),{PACKAGE_ROOT:ba}=T(),ne="/dev/null",en=le.join(ba,"launchServiceScripts"),LA=le.join(ba,"utility/scripts"),CG=le.join(LA,g.HDB_RESTART_SCRIPT),yA=le.resolve(ba,"dependencies",`${process.platform}-${process.arch}`,Du.NATS_BINARY_NAME),pe,Ne;function Ht(){(pe===void 0||Ne===void 0)&&(ee.initSync(),pe=ee.get(g.HDB_SETTINGS_NAMES.LOG_TO_FILE),Ne=ee.get(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY))}o(Ht,"initLogConfig");function wA(){Ht();let e=le.join(Ne,g.PROCESS_LOG_NAMES.IPC),t={name:g.PROCESS_DESCRIPTORS.IPC,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.IPC},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:g.SERVICE_SERVERS_CWD.IPC};return pe||(t.out_file=ne,t.error_file=ne),{...t,script:g.SERVICE_SERVERS.IPC}}o(wA,"generateIPCServerConfig");function DA(){Ht(),ee.initSync(),pe=ee.get(g.HDB_SETTINGS_NAMES.LOG_TO_FILE),Ne=ee.get(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=le.join(Ne,g.PROCESS_LOG_NAMES.HDB),t=bA.licenseSearch(),r=t.ram_allocation?g.MEM_SETTING_KEY+t.ram_allocation:g.MEM_SETTING_KEY+g.RAM_ALLOCATION_ENUM.DEFAULT,s={name:g.PROCESS_DESCRIPTORS.HDB,script:g.LAUNCH_SERVICE_SCRIPTS.HDB,exec_mode:"cluster",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.HDB},merge_logs:!0,out_file:e,error_file:e,instances:ee.get(g.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:en};return pe||(s.out_file=ne,s.error_file=ne),s}o(DA,"generateHDBServerConfig");function MA(){Ht(),ee.initSync(),pe=ee.get(g.HDB_SETTINGS_NAMES.LOG_TO_FILE),Ne=ee.get(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=le.join(Ne,g.PROCESS_LOG_NAMES.CUSTOM_FUNCTIONS),t=bA.licenseSearch(),r=t.ram_allocation?g.MEM_SETTING_KEY+t.ram_allocation:g.MEM_SETTING_KEY+g.RAM_ALLOCATION_ENUM.DEFAULT,s={name:g.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS,script:g.LAUNCH_SERVICE_SCRIPTS.CUSTOM_FUNCTIONS,exec_mode:"cluster",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS},merge_logs:!0,out_file:e,error_file:e,instances:ee.get(g.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:en};return pe||(s.out_file=ne,s.error_file=ne),s}o(MA,"generateCFServerConfig");function bG(){Ht(),ee.initSync(),pe=ee.get(g.HDB_SETTINGS_NAMES.LOG_TO_FILE),Ne=ee.get(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=ee.get(g.CONFIG_PARAMS.ROOTPATH),t=le.join(e,"clustering",Du.NATS_CONFIG_FILES.HUB_SERVER),r=le.join(Ne,g.PROCESS_LOG_NAMES.CLUSTERING_HUB),s={name:g.PROCESS_DESCRIPTORS.CLUSTERING_HUB,script:yA,args:`-c ${t}`,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return pe||(s.out_file=ne,s.error_file=ne),s}o(bG,"generateNatsHubServerConfig");function LG(){Ht(),ee.initSync(),pe=ee.get(g.HDB_SETTINGS_NAMES.LOG_TO_FILE),Ne=ee.get(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=ee.get(g.CONFIG_PARAMS.ROOTPATH),t=le.join(e,"clustering",Du.NATS_CONFIG_FILES.LEAF_SERVER),r=le.join(Ne,g.PROCESS_LOG_NAMES.CLUSTERING_LEAF),s={name:g.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,script:yA,args:`-c ${t}`,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return pe||(s.out_file=ne,s.error_file=ne),s}o(LG,"generateNatsLeafServerConfig");function yG(){Ht(),ee.initSync();let e=le.join(Ne,g.PROCESS_LOG_NAMES.CLUSTERING_INGEST_SERVICE),t={name:g.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,script:g.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,exec_mode:"cluster",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:en};return pe||(t.out_file=ne,t.error_file=ne),t}o(yG,"generateNatsIngestServiceConfig");function wG(){Ht(),ee.initSync();let e=le.join(Ne,g.PROCESS_LOG_NAMES.CLUSTERING_REPLY_SERVICE),t={name:g.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE,script:g.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,exec_mode:"cluster",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:en};return pe||(t.out_file=ne,t.error_file=ne),t}o(wG,"generateNatsReplyServiceConfig");function DG(){Ht(),ee.initSync();let e=le.join(Ne,g.PROCESS_LOG_NAMES.CLUSTERING_UPGRADE),t={name:g.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:g.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:en,autorestart:!1};return pe||(t.out_file=ne,t.error_file=ne),t}o(DG,"generateClusteringUpgradeV4ServiceConfig");function MG(){Ht();let e=le.join(Ne,g.PROCESS_LOG_NAMES.PM2),t={name:g.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.RESTART_HDB},merge_logs:!0,out_file:e,error_file:e,instances:1,autorestart:!1,cwd:LA};return pe||(t.out_file=ne,t.error_file=ne),{...t,script:CG}}o(MG,"generateRestart");function UG(e){Ht();let t=le.join(Ne,g.PROCESS_LOG_NAMES.JOBS),r=le.join(ba,"server/jobs"),s={name:`JOB-${e}`,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:`JOB-${e}`},merge_logs:!0,out_file:t,error_file:t,instances:1,cwd:en,autorestart:!1};return pe||(s.out_file=ne,s.error_file=ne),{...s,script:le.join(r,"jobProcess.js")}}o(UG,"generateJobConfig");function PG(){return{apps:[wA(),DA(),MA()]}}o(PG,"generateAllServiceConfigs");UA.exports={generateAllServiceConfigs:PG,generateIPCServerConfig:wA,generateHDBServerConfig:DA,generateCFServerConfig:MA,generateRestart:MG,generateNatsHubServerConfig:bG,generateNatsLeafServerConfig:LG,generateNatsIngestServiceConfig:yG,generateNatsReplyServiceConfig:wG,generateClusteringUpgradeV4ServiceConfig:DG,generateJobConfig:UG}});var BA=d((Jk,PA)=>{var BG=tt(),HG={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};PA.exports=function(e){return BG.validateObject(e,HG)}});var vA=d((Zk,HA)=>{"use strict";var vG={OPERATION:"operation",REFRESH:"refresh"},La=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};o(La,"JWTTokens");var ya=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};o(ya,"JWTRSAKeys");HA.exports={JWTTokens:La,TOKEN_TYPE_ENUM:vG,JWTRSAKeys:ya}});var xA=d((Xk,VA)=>{"use strict";var ii=require("jsonwebtoken"),Uu=require("fs-extra"),Pu=I(),lt=T(),{handleHDBError:xe,hdb_errors:GG}=J(),{HTTP_STATUS_CODES:ke,AUTHENTICATION_ERROR_MSGS:$e}=GG,ni=O(),GA=aa(),vu=Ks(),qG=Zr().update,FG=wc(),VG=In(),{UserEventMsg:xG}=Os(),Gr=Y();Gr.initSync();var Bu=require("path"),{JWTTokens:kG,JWTRSAKeys:$G,TOKEN_TYPE_ENUM:wa}=vA(),YG=Gr.get(lt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Gr.get(lt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",KG=Gr.get(lt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Gr.get(lt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Da="RS256",Hu;VA.exports={createTokens:WG,validateOperationToken:jG,refreshOperationToken:QG,validateRefreshToken:FA};async function WG(e){if(Pu.isEmpty(e)||typeof e!="object")throw xe(new Error,$e.INVALID_AUTH_OBJECT,ke.BAD_REQUEST,void 0,void 0,!0);if(Pu.isEmpty(e.username))throw xe(new Error,$e.USERNAME_REQUIRED,ke.BAD_REQUEST,void 0,void 0,!0);if(Pu.isEmpty(e.password))throw xe(new Error,$e.PASSWORD_REQUIRED,ke.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await vu.findAndValidateUser(e.username,e.password),!t)throw xe(new Error,$e.INVALID_CREDENTIALS,ke.UNAUTHORIZED,void 0,void 0,!0)}catch(h){throw ni.error(h),xe(new Error,$e.INVALID_CREDENTIALS,ke.UNAUTHORIZED,void 0,void 0,!0)}let r=await Ma(),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 qA(i,r.private_key,r.passphrase),_=await ii.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:KG,algorithm:Da,subject:wa.REFRESH}),c=GA.hash(_),u=new FG(lt.SYSTEM_SCHEMA_NAME,lt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:c}]),l,E;try{l=await qG(u)}catch(h){ni.error(h),E=h}if(E!==void 0||l.skipped_hashes.length>0)throw xe(new Error,$e.REFRESH_TOKEN_SAVE_FAILED,ke.INTERNAL_SERVER_ERROR);return VG.signalUserChange(new xG(process.pid)),new kG(a,_)}o(WG,"createTokens");async function qA(e,t,r){return await ii.sign(e,{key:t,passphrase:r},{expiresIn:YG,algorithm:Da,subject:wa.OPERATION})}o(qA,"signOperationToken");async function Ma(){if(Hu===void 0)try{let e=Bu.join(Gr.getHdbBasePath(),lt.LICENSE_KEY_DIR_NAME,lt.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Bu.join(Gr.getHdbBasePath(),lt.LICENSE_KEY_DIR_NAME,lt.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Bu.join(Gr.getHdbBasePath(),lt.LICENSE_KEY_DIR_NAME,lt.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Uu.readFile(e)).toString(),n=(await Uu.readFile(t)).toString(),i=(await Uu.readFile(r)).toString();Hu=new $G(i,n,s)}catch(e){throw ni.error(e),xe(new Error,$e.NO_ENCRYPTION_KEYS,ke.INTERNAL_SERVER_ERROR)}return Hu}o(Ma,"getJWTRSAKeys");async function QG(e){if(!e)throw xe(new Error,$e.INVALID_BODY,ke.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw xe(new Error,$e.REFRESH_TOKEN_REQUIRED,ke.BAD_REQUEST,void 0,void 0,!0);await FA(e.refresh_token);let t=await Ma(),r=await ii.decode(e.refresh_token);return{operation_token:await qA({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}o(QG,"refreshOperationToken");async function jG(e){try{let t=await Ma(),r=await ii.verify(e,t.public_key,{algorithms:Da,subject:wa.OPERATION});return await vu.findAndValidateUser(r.username,void 0,!1)}catch(t){throw ni.warn(t),t.name&&t.name==="TokenExpiredError"?xe(new Error,$e.TOKEN_EXPIRED,ke.FORBIDDEN):xe(new Error,$e.INVALID_TOKEN,ke.UNAUTHORIZED)}}o(jG,"validateOperationToken");async function FA(e){let t;try{let r=await Ma(),s=await ii.verify(e,r.public_key,{algorithms:Da,subject:wa.REFRESH});t=await vu.findAndValidateUser(s.username,void 0,!1)}catch(r){throw ni.warn(r),r.name&&r.name==="TokenExpiredError"?xe(new Error,$e.TOKEN_EXPIRED,ke.FORBIDDEN):xe(new Error,$e.INVALID_TOKEN,ke.UNAUTHORIZED)}if(!GA.validate(t.refresh_token,e))throw xe(new Error,$e.INVALID_TOKEN,ke.UNAUTHORIZED);return t}o(FA,"validateRefreshToken")});var KA=d((e$,YA)=>{"use strict";var JG=BA(),tn=require("passport"),ZG=require("passport-local").Strategy,XG=require("passport-http").BasicStrategy,zG=require("util"),eq=Ks(),$A=zG.callbackify(eq.findAndValidateUser),zk=et(),tq=T(),kA=xA();tn.use(new ZG(function(e,t,r){$A(e,t,r)}));tn.use(new XG(function(e,t,r){$A(e,t,r)}));tn.serializeUser(function(e,t){t(null,e)});tn.deserializeUser(function(e,t){t(null,e)});function rq(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":tn.authenticate("basic",{session:!1},(a,_)=>{i(a,_)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===tq.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?kA.validateRefreshToken(n).then(a=>{e.body.refresh_token=n,r(null,a)}).catch(a=>{r(a)}):kA.validateOperationToken(n).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:tn.authenticate("local",{session:!1},function(a,_){i(a,_)})(e,t,r);break}}o(rq,"authorize");function sq(e,t){let r=JG(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(sq,"checkPermissions");YA.exports={authorize:rq,checkPermissions:sq}});var QA=d((t$,WA)=>{"use strict";var Ua=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};o(Ua,"Node");var Pa=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};o(Pa,"NodeSubscription");WA.exports={Node:Ua,NodeSubscription:Pa}});var JA=d((r$,jA)=>{"use strict";var nq=T().OPERATIONS_ENUM,Ba=class{constructor(t,r,s,n=void 0){this.operation=nq.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};o(Ba,"UpsertObject");jA.exports=Ba});var XA=d((s$,ZA)=>{"use strict";var Ha=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};o(Ha,"RemotePayloadObject");var va=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(va,"RemotePayloadSubscription");ZA.exports={RemotePayloadObject:Ha,RemotePayloadSubscription:va}});var em=d((n$,zA)=>{"use strict";var Ga=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(Ga,"TableSizeObject");zA.exports=Ga});var nm=d((i$,sm)=>{"use strict";var iq=em(),tm=require("path"),rm=Z(),oq=Te(),rn=$(),aq=O();sm.exports=_q;async function _q(e){let t=new iq;try{let r=tm.join(rm.getBaseSchemaPath(),e.schema.toString()),s=await rn.openEnvironment(r,e.name),n=rn.statDBI(s,e.hash_attribute),i=tm.join(rm.getTransactionAuditStorePath(),e.schema.toString()),a=await rn.openEnvironment(i,e.name,!0),_=rn.statDBI(a,oq.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),c=await rn.environmentDataSize(r,e.name),u=await rn.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){aq.warn(`unable to stat table dbi due to ${r}`)}return t}o(_q,"lmdbGetTableSize")});var om=d((o$,im)=>{"use strict";var cq=T(),qa=class{constructor(t){this.operator=cq.OPERATIONS_ENUM.SYSTEM_INFORMATION,this.attributes=t}};o(qa,"SystemInformationOperation");im.exports=qa});var _m=d((a$,am)=>{"use strict";var Fa=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(Fa,"SystemInformationObject");am.exports=Fa});var um=d((c$,cm)=>{"use strict";var Oe=require("systeminformation"),sn=O(),uq=T(),lq=nm(),Eq=Ho(),dq=Y();dq.initSync();var _$=om(),Sq=_m(),Va;cm.exports={getHDBProcessInfo:Vu,getNetworkInfo:ku,getDiskInfo:xu,getMemoryInfo:Fu,getCPUInfo:qu,getTimeInfo:Gu,getSystemInformation:$u,systemInformation:hq,getTableSize:Yu};function Gu(){return Oe.time()}o(Gu,"getTimeInfo");async function qu(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:a,governor:_,socket:c,cache:u,...l}=await Oe.cpu();l.cpu_speed=await Oe.cpuCurrentSpeed();let{raw_currentload:E,raw_currentload_idle:h,raw_currentload_irq:S,raw_currentload_nice:A,raw_currentload_system:R,raw_currentload_user:L,cpus:de,...p}=await Oe.currentLoad();return p.cpus=[],de.forEach(k=>{let{raw_load:Ie,raw_load_idle:Ce,raw_load_irq:ui,raw_load_nice:an,raw_load_system:li,raw_load_user:_r,...cr}=k;p.cpus.push(cr)}),l.current_load=p,l}catch(e){return sn.error(`error in getCPUInfo: ${e}`),{}}}o(qu,"getCPUInfo");async function Fu(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Oe.mem();return n}catch(e){return sn.error(`error in getMemoryInfo: ${e}`),{}}}o(Fu,"getMemoryInfo");async function Vu(){let e={core:[],clustering:[]};try{return(await Oe.processes()).list.forEach(r=>{r.params.includes(uq.HDB_PROC_NAME)?e.core.push(r):r.params.includes("socketcluster")&&e.clustering.push(r)}),e}catch(t){return sn.error(`error in getHDBProcessInfo: ${t}`),e}}o(Vu,"getHDBProcessInfo");async function xu(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Oe.disksIO();e.io=i;let{rx_sec:a,tx_sec:_,wx_sec:c,...u}=await Oe.fsStats();return e.read_write=u,e.size=await Oe.fsSize(),e}catch(t){return sn.error(`error in getDiskInfo: ${t}`),e}}o(xu,"getDiskInfo");async function ku(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Oe.networkInterfaceDefault(),e.latency=await Oe.inetChecksite("google.com"),(await Oe.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:a,dhcp:_,dnsSuffix:c,ieee8021xAuth:u,ieee8021xState:l,carrier_changes:E,...h}=s;e.interfaces.push(h)}),(await Oe.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:a,..._}=s;e.stats.push(_)}),e.connections=await Oe.networkConnections(),e}catch(t){return sn.error(`error in getNetworkInfo: ${t}`),e}}o(ku,"getNetworkInfo");async function $u(){if(Va!==void 0)return Va;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:a,..._}=await Oe.osInfo();e=_;let c=await Oe.versions("node, npm");return e.node_version=c.node,e.npm_version=c.npm,Va=e,Va}catch(t){return sn.error(`error in getSystemInformation: ${t}`),e}}o($u,"getSystemInformation");async function Yu(){let e=[],t=await Eq.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await lq(s));return e}o(Yu,"getTableSize");async function hq(e){let t=new Sq;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await $u(),t.time=Gu(),t.cpu=await qu(),t.memory=await Fu(),t.disk=await xu(),t.network=await ku(),t.harperdb_processes=await Vu(),t.table_size=await Yu(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await $u();break;case"time":t.time=Gu();break;case"cpu":t.cpu=await qu();break;case"memory":t.memory=await Fu();break;case"disk":t.disk=await xu();break;case"network":t.network=await ku();break;case"harperdb_processes":t.harperdb_processes=await Vu();break;case"table_size":t.table_size=await Yu();break;default:break}return t}o(hq,"systemInformation")});var hm=d((E$,Sm)=>{"use strict";var fq=Zr(),Ku=I(),Wu=require("util"),_s=T(),lm=Y();lm.initSync();var Tq=KA(),Em=mr(),{Node:u$,NodeSubscription:l$}=QA(),Rq=ws(),Aq=JA(),{RemotePayloadObject:mq,RemotePayloadSubscription:gq}=XA(),{handleHDBError:pq,hdb_errors:Nq}=J(),{HTTP_STATUS_CODES:Oq,HDB_ERROR_MSGS:Iq}=Nq,Cq=mt(),bq=um(),Lq=kr(),yq=Wu.promisify(Tq.authorize),wq=Wu.promisify(Em.searchByHash),Dq=Wu.promisify(Em.searchByValue);Sm.exports={authHeaderToUser:Mq,isEmpty:Uq,getNodeRecord:Pq,upsertNodeRecord:Bq,buildNodePayloads:Hq,checkClusteringEnabled:vq,getAllNodeRecords:Gq,getSystemInfo:qq,reverseSubscription:dm};async function Mq(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await yq(t,null),e}o(Mq,"authHeaderToUser");function Uq(e){return e==null}o(Uq,"isEmpty");async function Pq(e){let t=new Rq(_s.SYSTEM_SCHEMA_NAME,_s.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return wq(t)}o(Pq,"getNodeRecord");async function Bq(e){let t=new Aq(_s.SYSTEM_SCHEMA_NAME,_s.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return fq.upsert(t)}o(Bq,"upsertNodeRecord");function dm(e){if(Ku.isEmpty(e.subscribe)||Ku.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(dm,"reverseSubscription");function Hq(e,t,r,s){let n=[];for(let i=0,a=e.length;i<a;i++){let _=e[i],{schema:c,table:u}=_,l=Ku.getTableHashAttribute(c,u),{subscribe:E,publish:h}=dm(_),S=new gq(c,u,l,h,E,_.start_time);n.push(S)}return new mq(r,t,n,s)}o(Hq,"buildNodePayloads");function vq(){if(!lm.get(_s.CONFIG_PARAMS.CLUSTERING_ENABLED))throw pq(new Error,Iq.CLUSTERING_NOT_ENABLED,Oq.BAD_REQUEST,void 0,void 0,!0)}o(vq,"checkClusteringEnabled");async function Gq(){let e=new Cq(_s.SYSTEM_SCHEMA_NAME,_s.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Dq(e)}o(Gq,"getAllNodeRecords");async function qq(){let e=await bq.getSystemInformation();return{hdb_version:Lq.version(),node_version:e.node_version,platform:e.platform}}o(qq,"getSystemInfo")});var nn=d((d$,Cm)=>{"use strict";var D=T(),xa=I(),oi=Ca(),ka=Ra(),Fq=gt(),G=require("pm2"),Vq=require("fs-extra"),nr=Mu(),Ye=Y(),ir=O(),xq=Mu(),kq=hm(),$q=require("util"),Tm=$q.promisify(require("child_process").exec),Rm=require("path");Cm.exports={start:cs,stop:Ya,reload:mm,restart:gm,list:ju,describe:Ka,connect:vt,kill:Nm,startAllServices:eF,startService:$a,getUniqueServicesList:Ju,restartAllServices:tF,stopAllServices:rF,isServiceRegistered:Om,reloadStopStart:Qu,restartHdb:pm,deleteProcess:Xq,configureLogRotate:iF,startClustering:Im,isHdbRestartRunning:zq,isClusteringRunning:aF,stopClustering:oF,reloadClustering:_F};var{PACKAGE_ROOT:Yq}=T(),Kq="2.7.0",Am=Rm.join(Yq,"node_modules/pm2/bin/pm2"),Wq="Log rotate installed.",Qq="Error installing log rotate.",jq="Log rotate updated.",Jq="Error updating log rotate.",Zq="The number of HarperDB processes running is different from the settings value. To restart and update the number HarperDB processes running you must stop and then start HarperDB";function vt(){return new Promise((e,t)=>{G.connect((r,s)=>{r&&t(r),e(s)})})}o(vt,"connect");function cs(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.start(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.disconnect(),t(n)})})}o(cs,"start");function Ya(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.stop(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.delete(e,(i,a)=>{i&&(G.disconnect(),r(s)),G.disconnect(),t(a)})})})}o(Ya,"stop");function mm(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.reload(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.disconnect(),t(n)})})}o(mm,"reload");function gm(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.restart(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.disconnect(),t(n)})})}o(gm,"restart");function Xq(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.delete(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.disconnect(),t(n)})})}o(Xq,"deleteProcess");async function pm(){await cs(xq.generateRestart())}o(pm,"restartHdb");async function zq(){let e=await ju();for(let t in e)if(e[t].name===D.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(zq,"isHdbRestartRunning");function ju(){return new Promise(async(e,t)=>{try{await vt()}catch(r){t(r)}G.list((r,s)=>{r&&(G.disconnect(),t(r)),G.disconnect(),e(s)})})}o(ju,"list");function Ka(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.describe(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.disconnect(),t(n)})})}o(Ka,"describe");function Nm(){return new Promise(async(e,t)=>{try{await vt()}catch(r){t(r)}G.killDaemon((r,s)=>{r&&(G.disconnect(),t(r)),G.disconnect(),e(s)})})}o(Nm,"kill");async function eF(){try{await Im(),await cs(nr.generateAllServiceConfigs())}catch(e){throw G.disconnect(),e}}o(eF,"startAllServices");async function $a(e){try{let t;switch(e=e.toLowerCase(),e){case D.PROCESS_DESCRIPTORS.IPC.toLowerCase():t=nr.generateIPCServerConfig();break;case D.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=nr.generateHDBServerConfig();break;case D.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase():t=nr.generateCFServerConfig();break;case D.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=nr.generateNatsIngestServiceConfig();break;case D.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=nr.generateNatsReplyServiceConfig();break;case D.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=nr.generateNatsHubServerConfig(),await cs(t),await oi.removeNatsConfig(e);return;case D.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=nr.generateNatsLeafServerConfig(),await cs(t),await oi.removeNatsConfig(e);return;case D.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=nr.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await cs(t)}catch(t){throw G.disconnect(),t}}o($a,"startService");async function Ju(){try{let e=await ju(),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 G.disconnect(),e}}o(Ju,"getUniqueServicesList");async function tF(e=[]){try{let t=!1,r=await Ju();for(let s=0,n=Object.values(r).length;s<n;s++){let i=Object.values(r)[s],a=i.name;e.includes(a)||(i.exec_mode==="cluster_mode"?a===D.PROCESS_DESCRIPTORS.HDB?t=!0:await Qu(a):await gm(a))}t&&await Qu(D.PROCESS_DESCRIPTORS.HDB)}catch(t){throw G.disconnect(),t}}o(tF,"restartAllServices");async function rF(){try{let e=await Ju();for(let t=0,r=Object.values(e).length;t<r;t++){let s=Object.values(e)[t];await Ya(s.name)}if(await Nm(),Ye.get(D.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND)===!0){let t=(await Vq.readFile(Rm.join(Ye.get(D.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),D.FOREGROUND_PID_FILE))).toString();try{process.kill(t,"SIGTERM")}catch(r){ir.warn(`Error terminating foreground process: ${r}`)}}}catch(e){throw G.disconnect(),e}}o(rF,"stopAllServices");async function Om(e){return!xa.isEmptyOrZeroLength(await Ka(e))}o(Om,"isServiceRegistered");async function Qu(e){let t=e===D.PROCESS_DESCRIPTORS.HDB?Ye.get(D.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):Ye.get(D.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await Ka(e),s=xa.isEmptyOrZeroLength(r)?0:r.length;t!==s?e===D.PROCESS_DESCRIPTORS.HDB?ir.error(Zq):(await Ya(e),await $a(e)):e===D.PROCESS_DESCRIPTORS.HDB?await pm():await mm(e)}o(Qu,"reloadStopStart");function sF(){return new Promise(async(e,t)=>{try{await vt()}catch(r){t(r)}G.stop(D.PROCESS_DESCRIPTORS.PM2_LOGROTATE,(r,s)=>{r&&(G.disconnect(),t(r)),G.disconnect(),e(s)})})}o(sF,"stopLogrotate");async function nF(){let{stdout:e,stderr:t}=await Tm(`${process.platform==="win32"?"node":""} ${Am} install pm2-logrotate@${Kq}`);if(ir.debug(`loadLogRotate stdout: ${e}`),t)throw ir.error(Qq),t;ir.info(Wq)}o(nF,"installLogRotate");async function fm(){let e={max_size:Ye.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_MAX_SIZE),retain:Ye.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_RETAIN),compress:Ye.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_COMPRESS),dateFormat:Ye.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_DATE_FORMAT),rotateModule:Ye.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_MODULE),workerInterval:Ye.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_WORKER_INTERVAL),rotateInterval:Ye.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_INTERVAL),TZ:Ye.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_TIMEZONE)},t="";for(let n in e)t+=`${process.platform==="win32"?"node":""} ${Am} set pm2-logrotate:${n} ${e[n]}`,n!=="TZ"&&(t+=" && ");let{stdout:r,stderr:s}=await Tm(t);if(ir.debug(`updateLogRotateConfig stdout: ${r}`),s)throw ir.error(Jq),s;ir.info(jq)}o(fm,"updateLogRotateConfig");async function iF(){Ye.initSync();let e=xa.autoCastBoolean(Ye.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE)),t=await Ka(D.PROCESS_DESCRIPTORS.PM2_LOGROTATE),r,s=!1;if(xa.isEmptyOrZeroLength(t)||(s=!0,r=t[0].pm2_env.status),e&&!s){await nF(),await fm();return}if(e&&s){await cs(D.PROCESS_DESCRIPTORS.PM2_LOGROTATE),await fm();return}!e&&r===D.PM2_PROCESS_STATUSES.ONLINE&&await sF()}o(iF,"configureLogRotate");async function Im(){for(let t in D.CLUSTERING_PROCESSES){let r=D.CLUSTERING_PROCESSES[t];await $a(r)}await ka.createWorkQueueStream(Fq.WORK_QUEUE_CONSUMER_NAMES),await ka.updateNodeNameLocalStreams();let e=await kq.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===D.PRE_4_0_0_VERSION){ir.info("Starting clustering upgrade 4.0.0 process"),await $a(D.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0);break}}o(Im,"startClustering");async function oF(){for(let e in D.CLUSTERING_PROCESSES){let t=D.CLUSTERING_PROCESSES[e];await Ya(t)}}o(oF,"stopClustering");async function aF(){for(let e in D.CLUSTERING_PROCESSES){let t=D.CLUSTERING_PROCESSES[e];if(await Om(t)===!1)return!1}return!0}o(aF,"isClusteringRunning");async function _F(){await oi.generateNatsConfig(!0),await ka.reloadNATSHub(),await ka.reloadNATSLeaf(),await oi.removeNatsConfig(D.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await oi.removeNatsConfig(D.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(_F,"reloadClustering")});var Qa=d((S$,Dm)=>{"use strict";var b=T(),F=O(),Wa=I(),cF=ds(),Zu=Ca(),el=Ra(),uF=gt(),Lm=require("minimist"),{handleHDBError:Xu,hdb_errors:lF}=J(),ai=st(),{HTTP_STATUS_CODES:zu}=lF,B,bm=`Restarting HarperDB. This may take up to ${b.RESTART_TIMEOUT_MS/1e3} seconds.`,us="HarperDB is currently restarting and must complete before another HarperDB restart can be initialized.",EF="Invalid service",dF="'service' is required",SF="Restarting all services",hF="Clustering is not enabled so cannot be restarted";Dm.exports={stop:TF,restartProcesses:fF,restartService:ym};async function fF(){F.createLogFile(b.PROCESS_LOG_NAMES.CLI,b.PROCESS_DESCRIPTORS.STOP);try{B===void 0&&(B=nn());let e=cF(Object.keys(b.CONFIG_PARAM_MAP),!0);Wa.isEmptyOrZeroLength(Object.keys(e))||ai.updateConfigValue(void 0,void 0,e,!0,!0);let t=ai.getConfigFromFile(b.CONFIG_PARAMS.CLUSTERING_ENABLED),r=ai.getConfigFromFile(b.CONFIG_PARAMS.CUSTOMFUNCTIONS_ENABLED),s=Lm(process.argv);if(!Wa.isEmpty(s.service)){if(typeof s.service!="string"){let _=`Restart service argument expected a string but received: ${s.service}`;return F.error(_),_}let a=s.service.split(",");for(let _ of a){let c=_.toLowerCase();if(c===b.HDB_PROC_DESCRIPTOR.toLowerCase()&&await B.isHdbRestartRunning()===!0){F.notify(us),console.error(us);continue}if(b.PROCESS_DESCRIPTORS_VALIDATE[c]===void 0){console.error(`Restart received unrecognized service command argument: ${c}`),F.error(`Restart received unrecognized service command argument: ${c}`);continue}let u=b.PROCESS_DESCRIPTORS_VALIDATE[c];if(console.log(`Restarting ${u}`),F.trace(`Restarting ${u}`),u===b.PROCESS_DESCRIPTORS.PM2_LOGROTATE)await B.configureLogRotate();else if(c.toLowerCase().includes("clustering"))await on(c);else if(await B.isServiceRegistered(u))u===b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS&&!r?(await B.stop(b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),F.trace(`Stopping ${b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`)):await ym({service:u});else if(u===b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS)if(r)await B.startService(u),F.trace(`Starting ${u}`);else{let l=`${u} is not enabled in harperdb-config.yaml and cannot be restarted.`;F.error(l),console.log(l)}else await B.startService(u);F.notify(`${u} successfully restarted.`)}return}if(await B.isHdbRestartRunning()===!0)return F.notify(us),console.error(us),us;console.log(bm),t&&await wm();let n=await B.isServiceRegistered(b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS);r&&!n&&(await B.startService(b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),F.trace(`Starting ${b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`));let i=[b.PROCESS_DESCRIPTORS.CLUSTERING_HUB,b.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE];return!r&&n&&(i.push(b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),await B.stop(b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),F.trace(`Stopping ${b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`)),await B.configureLogRotate(),F.notify(SF),await B.restartAllServices(i),bm}catch(e){let t=`There was an error restarting HarperDB. ${e}`;return F.error(t),t}}o(fF,"restartProcesses");async function ym(e){if(F.createLogFile(b.PROCESS_LOG_NAMES.CLI,b.PROCESS_DESCRIPTORS.STOP),B===void 0&&(B=nn()),Wa.isEmpty(e.service))throw Xu(new Error,dF,zu.BAD_REQUEST,void 0,void 0,!0);let t=e.service.toLowerCase();if(b.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw Xu(new Error,EF,zu.BAD_REQUEST,void 0,void 0,!0);let r=ai.getConfigFromFile(b.CONFIG_PARAMS.CUSTOMFUNCTIONS_ENABLED),s=b.PROCESS_DESCRIPTORS_VALIDATE[t];if(s===b.PROCESS_DESCRIPTORS.HDB){if(await B.isHdbRestartRunning()===!0)return F.notify(us),us;await B.reloadStopStart(s)}else if(s===b.PROCESS_DESCRIPTORS.PM2_LOGROTATE)await B.configureLogRotate();else if(s.toLowerCase().includes("clustering"))await on(s);else if(s===b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS||s===b.SERVICES.CUSTOM_FUNCTIONS){let i=await B.isServiceRegistered(s);if(r)i?(await B.reloadStopStart(s),F.trace(`Reloading ${s}`)):(await B.startService(s),F.trace(`Starting ${s}`));else if(!r&&i)await B.stop(s),F.trace(`Stopping ${s}`);else{let a=`${s} is not enabled in harperdb-config.yaml and cannot be restarted.`;throw F.error(a),Xu(new Error,a,zu.BAD_REQUEST,void 0,void 0,!0)}}else await B.restart(s);let n=`Restarting ${s}`;return F.notify(n),n}o(ym,"restartService");async function TF(){F.createLogFile(b.PROCESS_LOG_NAMES.CLI,b.PROCESS_DESCRIPTORS.STOP);try{B===void 0&&(B=nn());let e=Lm(process.argv);if(Wa.isEmpty(e.service))console.log("Stopping HarperDB."),await B.stopAllServices(),F.notify("HarperDB has stopped");else{if(typeof e.service!="string"){let r=`Stop service argument expected a string but received: ${e.service}`;F.error(r),console.log(r)}let t=e.service.split(",");for(let r of t){let s=r.toLowerCase();if(b.PROCESS_DESCRIPTORS_VALIDATE[s]===void 0){F.error(`Stop received unrecognized service command argument: ${s}`);continue}s==="clustering"?await B.stopClustering():await B.stop(b.PROCESS_DESCRIPTORS_VALIDATE[s]);let n=`${b.PROCESS_DESCRIPTORS_VALIDATE[s]} successfully stopped.`;F.notify(n),console.log(n)}}}catch(e){throw console.error(e),e}}o(TF,"stop");async function wm(){await on(b.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await on(b.PROCESS_DESCRIPTORS.CLUSTERING_LEAF),await on(b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE),await on(b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE),await el.updateNodeNameLocalStreams(),await el.closeConnection()}o(wm,"restartAllClusteringServices");async function on(e){e=b.PROCESS_DESCRIPTORS_VALIDATE[e.toLowerCase()];let t=ai.getConfigFromFile(b.CONFIG_PARAMS.CLUSTERING_ENABLED),r=e==="clustering",s=e==="clustering config",n=r?void 0:await B.isServiceRegistered(e),i=r||s?await B.isClusteringRunning():void 0;switch(!0){case s:if(!i){F.error(hF);break}await B.reloadClustering();break;case(r&&i&&!t):await B.stopClustering();break;case(r&&!i&&t):await B.startClustering();break;case(r&&i&&t):await wm();break;case(r&&!i&&!t):F.error(`${e} is not enabled in harperdb-config.yaml and cannot be restarted.`);break;case(n&&!t):await B.stop(e),F.trace(`Stopping ${e}`);break;case(!n&&t):e!==b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE&&e!==b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE&&await Zu.generateNatsConfig(!0,e),await B.startService(e),F.trace(`Starting ${e}`),e===b.PROCESS_DESCRIPTORS.CLUSTERING_LEAF&&await el.createWorkQueueStream(uF.WORK_QUEUE_CONSUMER_NAMES);break;case(!n&&!t):F.error(`${e} is not enabled in harperdb-config.yaml and cannot be restarted.`);break;case(n&&t):e===b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE||e===b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE?await B.reload(e):(await Zu.generateNatsConfig(!0,e),await B.restart(e),await Zu.removeNatsConfig(e));break;default:F.error(`Error restarting ${e}`)}}o(on,"restartClustering")});var Pm=d((h$,Um)=>{"use strict";var tl=I(),ze=O(),Mm=Fc();Um.exports={processDirectives:RF};async function RF(e){console.log("Starting upgrade process...");let t=Mm.getVersionsForUpgrade(e),r=gF(t),s=[],n=r.length;for(let i=0;i<n;i++){let a=r[i],_=`Running upgrade for version ${a.version}`;ze.notify(_),console.log(_);let c=[],u=[];try{c=AF(a.sync_functions)}catch(l){throw ze.error(`Error while running an upgrade script for ${a.version}`),l}try{u=await mF(a.async_functions)}catch(l){throw ze.error(`Error while running an upgrade script for ${a.version}`),l}s.push(...c,...u)}return s}o(RF,"processDirectives");function AF(e){if(tl.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(AF,"runSyncFunctions");async function mF(e){if(tl.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(mF,"runAsyncFunctions");function gF(e){if(tl.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let s=Mm.getDirectiveByVersion(r);s&&t.push(s)}return t}o(gF,"getUpgradeDirectivesToInstall")});var nl=d((f$,Fm)=>{"use strict";var ja=Y();ja.initSync();var Gm=require("chalk"),Bm=require("fs-extra"),Gt=O(),Nt=T(),Hm=kr(),pF=Pm(),rl=I(),qm=ra(),NF=bc(),vm=c_(),OF=Fs(),IF=require("util").promisify,CF=IF(OF.setSchemaDataToGlobal),sl,{UPGRADE_VERSION:Ja}=Nt.UPGRADE_JSON_FIELD_NAMES_ENUM;Fm.exports={upgrade:bF};async function bF(e){Gt.createLogFile(Nt.PROCESS_LOG_NAMES.CLI,Nt.PROCESS_DESCRIPTORS.UPGRADE),await CF(),sl===void 0&&(sl=nn()),Bm.existsSync(ja.get(ja.BOOT_PROPS_FILE_PATH))||(_i("The hdb_boot_properties file was not found. Please install HDB.",Nt.LOG_LEVELS.ERROR),process.exit(1)),Bm.existsSync(ja.get(Nt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(_i("The hdb settings file was not found. Please make sure HDB is installed.",Nt.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await qm.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),_i(`This version of HarperDB is ${Hm.version()}`,Nt.LOG_LEVELS.INFO);let r=t[Ja]?t[Ja]:Hm.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Nt.HDB_SUPPORT_ADDRESS}`),Gt.notify("Missing new version field from upgrade info object"),process.exit(1)),await LF();let s,n=0;try{s=await NF.forceUpdatePrompt(t)}catch(i){Gt.error("There was an error when prompting user about upgrade."),Gt.error(i),s=!1,n=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(n)),Gt.info(`Starting upgrade to version ${r}`),await yF(t),_i(`HarperDB was successfully upgraded to version ${t[Ja]}`,Nt.LOG_LEVELS.INFO)}o(bF,"upgrade");async function LF(){let e=!1,t=await vm.findPs(Nt.HDB_PROC_NAME);if(rl.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await vm.findPs("hdb_express");rl.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await sl.list();rl.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(Gm.red(r)),Gt.error(r),process.exit(1)}}o(LF,"checkIfRunning");async function yF(e){try{await pF.processDirectives(e)}catch(t){throw _i("There was an error during the data upgrade. Please check the logs.",Nt.LOG_LEVELS.ERROR),t}try{await qm.insertHdbUpgradeInfo(e[Ja])}catch(t){Gt.error("Error updating the 'hdb_info' system table."),Gt.error(t)}}o(yF,"runUpgrade");function _i(e,t=void 0){t||(t=Gt.info),Gt[t](e),console.log(Gm.magenta(e))}o(_i,"printToLogAndConsole")});var Za=d((R$,Ym)=>{"use strict";var ar=Y();ar.initSync();var te=T(),Ee=O(),ls=require("fs-extra"),Es=require("path"),wF=m_(),DF=Tu(),il=require("chalk"),MF=cn(),UF=Ru(),or=I(),PF=st(),km=ds(),BF=Ca(),{promisify:T$}=require("util"),HF=Qa(),vF=nl(),GF=require("minimist"),qF=require("child_process").spawn,{PACKAGE_ROOT:$m}=T(),FF=ra(),VF=Wt(),xF=Ho(),kF=ic(),qt,$F=po(),YF="Upgrade complete. Starting HarperDB.",KF="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",WF="HarperDB not found, starting install process.",QF="There was an error during install, check install_log.log for more details. Exiting.",jF="HarperDB successfully started.";async function JF(e=!1){try{if(console.log(il.magenta("Starting HarperDB...")),await e0()===!1){console.log(WF);try{await DF()}catch(i){console.error(QF),Ee.error(i),process.exit(1)}}if(process.env.PM2_LOG_FILE_PATH=Es.join(ar.getHdbBasePath(),"log","pm2.log"),qt===void 0&&(qt=nn()),Ee.createLogFile(te.PROCESS_LOG_NAMES.CLI,te.PROCESS_DESCRIPTORS.RUN),!e){let i=km(Object.keys(te.CONFIG_PARAM_MAP),!0);!or.isEmpty(i)&&!or.isEmptyOrZeroLength(Object.keys(i))&&PF.updateConfigValue(void 0,void 0,i,!0,!0)}let t;try{let i=await FF.getVersionUpdateInfo();i!==void 0&&(t=i[te.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await vF.upgrade(i),console.log(YF))}catch(i){t?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${t}. Exiting HarperDB.`),Ee.error(i)):(console.error(KF),Ee.error(i)),process.exit(1)}wF(),await XF(),ZF();try{UF.checkPermission()}catch(i){Ee.error(i),console.error(i.message),process.exit(1)}let r=or.autoCastBoolean(ar.get(te.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY));r&&await BF.generateNatsConfig();let s=or.autoCastBoolean(ar.get(te.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY));await qt.configureLogRotate();let n=GF(process.argv);if(or.isEmpty(n.service))r&&s?await qt.startAllServices():r?(await ol(),await qt.startClustering()):s?(await ol(),await qt.startService(te.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS)):await ol();else{if(typeof n.service!="string"){let a=`Run service argument expected a string but received: ${n.service}`;Ee.error(a),console.log(a),process.exit(1)}let i=n.service.split(",");for(let a of i){let _=a.toLowerCase();if(te.PROCESS_DESCRIPTORS_VALIDATE[_]===void 0){Ee.error(`Run received unrecognized service command argument: ${_}`);continue}if(_===te.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase()&&!s){Ee.error(`${_} is not enabled in settings`);continue}if(_.includes("clustering")&&!r){Ee.error(`${_} is not enabled in settings`);continue}_==="clustering"?await qt.startClustering():await qt.startService(te.PROCESS_DESCRIPTORS_VALIDATE[_]);let c=`${te.PROCESS_DESCRIPTORS_VALIDATE[_]} successfully started.`;Ee.notify(c),console.log(c)}xm()}console.log(il.magenta(""+ls.readFileSync(Es.join($m,"utility/install/ascii_logo.txt")))),console.log(il.magenta(`|------------- HarperDB ${MF.version} successfully started ------------|`)),Ee.notify(jF),xm()}catch(t){console.error(t),Ee.error(t),process.exit(1)}}o(JF,"run");async function ol(){await qt.startService(te.PROCESS_DESCRIPTORS.IPC),await qt.startService(te.PROCESS_DESCRIPTORS.HDB)}o(ol,"startHdbIpc");function ZF(){let e=Es.join(ar.getHdbBasePath(),te.LICENSE_KEY_DIR_NAME,te.LICENSE_FILE_NAME),t=Es.join(e,te.LICENSE_FILE_NAME),r=Es.join(e,te.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:s,HARPERDB_LICENSE:n}=km(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(or.isEmpty(s)||or.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),Ee.error(n)}}o(ZF,"writeLicenseFromVars");async function XF(){if(ar.getHdbBasePath()!==void 0){Ee.info("Checking Transaction Audit Environments exist");for(let t of Object.keys(VF))await Vm(te.SYSTEM_SCHEMA_NAME,t);let e=await xF.describeAll();for(let t of Object.keys(e))for(let r of Object.keys(e[t]))await Vm(t,r);Ee.info("Finished checking Transaction Audit Environments exist")}}o(XF,"checkAuditLogEnvironmentsExist");async function Vm(e,t){try{let r=new $F(e,t);await kF(r)}catch(r){let s=`Unable to create the transaction audit environment for ${e}.${t}, due to: ${r.message}`;console.error(s),Ee.error(s)}}o(Vm,"openCreateAuditEnvironment");function xm(){t0()||process.exit(0),Ee.trace("Running in foreground"),process.on("exit",ci),process.on("SIGINT",ci),process.on("SIGUSR1",ci),process.on("SIGUSR2",ci),process.on("SIGTERM",ci),zF()}o(xm,"foregroundHandler");function zF(){let e=qF("node",[Es.join($m,"node_modules/pm2/bin/pm2"),"logs"]);ls.writeFileSync(Es.join(ar.get(te.CONFIG_PARAMS.ROOTPATH),te.FOREGROUND_PID_FILE),e.pid.toString()),e.on("error",t=>{console.log(t),console.error("Failed to start subprocess.")}),e.stdout.on("data",t=>{console.log(t.toString())}),e.stderr.on("data",t=>{console.error(t.toString())})}o(zF,"spawnLogProcess");async function ci(){try{await HF.stop()}catch(e){console.error(e)}process.exit(143)}o(ci,"processExitHandler");Ym.exports={run:JF};async function e0(){try{await ls.stat(or.getPropsFilePath()),await ls.stat(ar.get(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(e.code==="ENOENT")return!1;throw Ee.error(`Error checking for HDB install - ${e}`),e}return!0}o(e0,"isHdbInstalled");function t0(){return or.autoCastBoolean(ar.get(te.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND))}o(t0,"getRunInForeground")});var jm=d((A$,Qm)=>{var r0=Tu(),Km=O(),Wm=T();Qm.exports=s0;async function s0(){try{Km.createLogFile(Wm.PROCESS_LOG_NAMES.INSTALL,Wm.PROCESS_DESCRIPTORS.INSTALL),await r0()}catch(e){console.error("There was an error during the install."),console.error(e),Km.error(e),process.exit(1)}}o(s0,"install")});var tg=d((m$,eg)=>{var za=Wn(),Jm=require("chalk"),Ft=O(),Zm=Ru(),Xm=require("prompt"),{promisify:n0}=require("util"),Xa=T(),i0=require("fs-extra"),o0=require("path"),a0=I(),_0=kr(),zm=Y();zm.initSync();var c0=require("moment"),u0=n0(Xm.get),l0=o0.join(zm.getHdbBasePath(),Xa.LICENSE_KEY_DIR_NAME,Xa.LICENSE_FILE_NAME,Xa.LICENSE_FILE_NAME);eg.exports={getFingerprint:d0,setLicense:E0,parseLicense:al,register:S0,getRegistrationInfo:f0};async function E0(e){if(e&&e.key&&e.company){try{Ft.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await al(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Ft.error(r),Ft.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}o(E0,"setLicense");async function d0(){try{Zm.checkPermission()}catch(t){throw Ft.error(t),new Error("You do not have permission to generate a fingerprint.")}let e={};try{e=await za.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Ft.error(r),Ft.error(t),new Error(r)}return e}o(d0,"getFingerprint");async function al(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");console.log("Validating license input...");let r=za.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{Ft.info("writing license to disk"),await i0.writeFile(l0,JSON.stringify({license_key:e,company:t}))}catch(s){throw Ft.error("Failed to write License"),s}return"Registration successful."}o(al,"parseLicense");async function S0(){let e=await h0();return al(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}o(S0,"register");async function h0(){try{Zm.checkPermission()}catch(s){return console.error(s.message)}let e=await za.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:Jm.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:Jm.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{Xm.start()}catch(s){Ft.error(s)}let r;try{r=await u0(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}o(h0,"promptForRegistration");async function f0(){let e={registered:!1,version:null,storage_type:null,ram_allocation:null,license_expiration_date:null},t;try{t=await za.getLicense()}catch(r){throw Ft.error(`There was an error when searching licenses due to: ${r.message}`),r}if(a0.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=_0.version(),e.storage_type=Xa.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=c0.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}o(f0,"getRegistrationInfo")});var og=d((g$,ig)=>{"use strict";var T0=tg(),rg=O(),sg=T(),ng="Registration failed.";async function R0(){rg.createLogFile(sg.PROCESS_LOG_NAMES.CLI,sg.PROCESS_DESCRIPTORS.REGISTER);let e;try{e=await T0.register()}catch(t){return rg.error(`Registration error ${t}`),ng}return e||ng}o(R0,"register");ig.exports={register:R0}});var qr=O(),A0=kr(),Vt=T(),ag=require("fs"),_g=require("path"),m0=require("os"),{PACKAGE_ROOT:cg}=T(),g0=Bl();N0();function p0(){let e=_g.join(cg,"bin",`harperdb.${Vt.CODE_EXTENSION}`),t;try{t=ag.statSync(e)}catch{qr.info("Couldn't find the harperdb executable process.");return}let r=m0.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 qr.error(s),console.log(s),new Error(s)}}o(p0,"checkCallingUserSync");function N0(){let e=g0();if(e)if(e.error){console.error(e.error),qr.error(e.error);return}else e.warn&&(console.warn(e.warn),qr.warn(e.warn));let t;ag.readdir(_g.join(cg,"bin"),r=>{if(r)return qr.error(r);if(process.argv&&process.argv[2]&&(t=process.argv[2].toLowerCase()),t!==Vt.SERVICE_ACTIONS_ENUM.INSTALL)try{p0()}catch(n){throw console.log(n.message),n}let s;switch(t){case Vt.SERVICE_ACTIONS_ENUM.RUN:s=Za().run();break;case Vt.SERVICE_ACTIONS_ENUM.INSTALL:jm()().then(()=>{Za().run(!0)}).catch(E=>{console.error(E)});break;case Vt.SERVICE_ACTIONS_ENUM.REGISTER:og().register().then(E=>{console.log(E)}).catch(E=>{console.error(E)});break;case Vt.SERVICE_ACTIONS_ENUM.STOP:Qa().stop().then(()=>{process.exit(0)}).catch(E=>{console.error(E)});break;case Vt.SERVICE_ACTIONS_ENUM.RESTART:Qa().restartProcesses().then().catch(E=>{qr.error(E),console.error("There was an error restarting harperdb. Please stop manually with harperdb stop and start again."),process.exit(1)});break;case Vt.SERVICE_ACTIONS_ENUM.VERSION:A0.printVersion();break;case Vt.SERVICE_ACTIONS_ENUM.UPGRADE:qr.setLogLevel(Vt.LOG_LEVELS.INFO),nl().upgrade(null).then(()=>{console.log("Your instance of HDB is up to date!")}).catch(E=>{qr.error(`Got an error during upgrade ${E}`)});break;default:Za().run();break}})}o(N0,"harperDBService");