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/README.md +1 -1
- package/bin/harperdb.js +2 -2
- package/launchServiceScripts/launchCustomFunctions.js +2 -2
- package/launchServiceScripts/launchHarperDB.js +2 -2
- package/launchServiceScripts/launchInstallNATSServer.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +2 -2
- package/launchServiceScripts/launchNatsReplyService.js +2 -2
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +6 -6
- package/package.json +1 -1
- package/server/jobs/jobProcess.js +11 -11
- package/utility/scripts/restartHdb.js +2 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";var vf=Object.defineProperty;var a=(e,t)=>vf(e,"name",{value:t,configurable:!0});var d=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var f=d((dB,ac)=>{"use strict";var de=require("path"),Gf=require("fs");function qf(){let e=__dirname;for(;!Gf.existsSync(de.join(e,"package.json"));){let t=de.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(qf,"getHDBPackageRoot");var Ke=qf(),Q_="js",Jr=Q_,Ff="harperdb-config.yaml",xf="defaultConfig.yaml",Vf="hdb",J_=`hdbServer.${Jr}`,X_=`customFunctionsServer.${Jr}`,Z_=`hdbIpcServer.${Jr}`,kf=`restartHdb.${Jr}`,Na="HarperDB",Js="Custom Functions",Xs="Clustering Hub",Zs="Clustering Leaf",Oa="Clustering Ingest Service",ga="Clustering Reply Service",Yf="foreground.pid",Aa={HDB:Na,IPC:"IPC",CLUSTERING_HUB:Xs,CLUSTERING_LEAF:Zs,CLUSTERING_INGEST_SERVICE:Oa,CLUSTERING_REPLY_SERVICE:ga,CUSTOM_FUNCTIONS:Js,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"},$f={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"},Kf={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},Wf={harperdb:Na,ipc:"IPC","clustering hub":Xs,"clustering leaf":Zs,"clustering ingest service":Oa,"clustering reply service":ga,"custom functions":Js,custom_functions:Js,"pm2-logrotate":Aa.PM2_LOGROTATE,logrotate:Aa.PM2_LOGROTATE,clustering:"clustering","clustering config":"clustering config"},Qf={CLUSTERING_HUB_PROC_DESCRIPTOR:Xs,CLUSTERING_LEAF_PROC_DESCRIPTOR:Zs,CLUSTERING_INGEST_PROC_DESCRIPTOR:Oa,CLUSTERING_REPLY_SERVICE_DESCRIPTOR:ga},Qs={HDB:de.join(Ke,"server/harperdb"),IPC:de.join(Ke,"server/ipc"),CUSTOM_FUNCTIONS:de.join(Ke,"server/customFunctions"),CLUSTERING_HUB:de.join(Ke,"server/nats"),CLUSTERING_LEAF:de.join(Ke,"server/nats")},Jf={HDB:de.join(Qs.HDB,J_),IPC:de.join(Qs.IPC,Z_),CUSTOM_FUNCTIONS:de.join(Qs.CUSTOM_FUNCTIONS,X_)},Xf={HDB:de.join(Ke,"launchServiceScripts/launchHarperDB.js"),CUSTOM_FUNCTIONS:de.join(Ke,"launchServiceScripts/launchCustomFunctions.js"),NATS_INGEST_SERVICE:de.join(Ke,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:de.join(Ke,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:de.resolve(Ke,"launchServiceScripts/launchUpdateNodes4-0-0.js")},Zf={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},z_="support@harperdb.io",zf="customer-success@harperdb.io",j_=1,jf=4141,ec="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",eR="https://www.harperdb.io/product",tR=`For support, please submit a request at ${ec} or contact ${z_}`,tc=`For license support, please contact ${zf}`,rR="None of the specified records were found.",sR="hash attribute not found",nR=`Your current license only supports ${j_} role. ${tc}`,iR="Your current license only supports 3 connections to a node.",aR="127.0.0.1",oR=1,_R=/^\.$/,cR=/^\.\.$/,uR="U+002E",ER=/\//g,lR="U+002F",dR=/U\+002F/g,SR=/^U\+002E$/,hR=/^U\+002EU\+002E$/,TR="d",fR=999999,RR="*",mR="--max-old-space-size=",AR="system",NR="__hdb_hash",OR=".harperdb",gR=".hdb",pR="keys",IR="hdb_boot_properties.file",CR=".updateConfig.json",bR="SIGTSTP",LR=24,wR=6e4,yR=448,UR="blob",DR="trash",MR="schema",PR="transactions",BR=".count",HR="id",vR="install_log.log",GR="run_log.log",qR="PROCESS_NAME",FR={SETTINGS_PATH_KEY:"settings_path"},rc=require("lodash"),xR={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"},VR={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},kR={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},YR={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"},$R={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"},Ue="hdb_internal:",KR={CREATE_SCHEMA:Ue+"create_schema",CREATE_TABLE:Ue+"create_table",CREATE_ATTRIBUTE:Ue+"create_attribute",ADD_USER:Ue+"add_user",ALTER_USER:Ue+"alter_user",DROP_USER:Ue+"drop_user",HDB_NODES:Ue+"hdb_nodes",HDB_USERS:Ue+"hdb_users",HDB_WORKERS:Ue+"hdb_workers",CATCHUP:Ue+"catchup",SCHEMA_CATCHUP:Ue+"schema_catchup",WORKER_ROOM:Ue+"cluster_workers"},WR={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"},QR="060493.ks",JR=".license",XR={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},R={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"},ZR={CSV:".csv",JSON:".json"},zR={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key"},jR={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},bt={};bt[R.CREATE_SCHEMA]=R.CREATE_SCHEMA;bt[R.CREATE_TABLE]=R.CREATE_TABLE;bt[R.CREATE_ATTRIBUTE]=R.CREATE_ATTRIBUTE;bt[R.INSERT]=R.INSERT;bt[R.UPDATE]=R.UPDATE;bt[R.UPSERT]=R.UPSERT;bt[R.DELETE]=R.DELETE;var H=Object.create(null);H[R.DESCRIBE_ALL]=R.DESCRIBE_ALL;H[R.DESCRIBE_TABLE]=R.DESCRIBE_TABLE;H[R.DESCRIBE_SCHEMA]=R.DESCRIBE_SCHEMA;H[R.READ_LOG]=R.READ_LOG;H[R.ADD_NODE]=R.ADD_NODE;H[R.LIST_USERS]=R.LIST_USERS;H[R.LIST_ROLES]=R.LIST_ROLES;H[R.USER_INFO]=R.USER_INFO;H[R.SQL]=R.SQL;H[R.GET_JOB]=R.GET_JOB;H[R.SEARCH_JOBS_BY_START_DATE]=R.SEARCH_JOBS_BY_START_DATE;H[R.DELETE_FILES_BEFORE]=R.DELETE_FILES_BEFORE;H[R.EXPORT_LOCAL]=R.EXPORT_LOCAL;H[R.EXPORT_TO_S3]=R.EXPORT_TO_S3;H[R.CLUSTER_STATUS]=R.CLUSTER_STATUS;H[R.REMOVE_NODE]=R.REMOVE_NODE;H[R.RESTART]=R.RESTART;H[R.CUSTOM_FUNCTIONS_STATUS]=R.CUSTOM_FUNCTIONS_STATUS;H[R.GET_CUSTOM_FUNCTIONS]=R.GET_CUSTOM_FUNCTIONS;H[R.GET_CUSTOM_FUNCTION]=R.GET_CUSTOM_FUNCTION;H[R.SET_CUSTOM_FUNCTION]=R.SET_CUSTOM_FUNCTION;H[R.DROP_CUSTOM_FUNCTION]=R.DROP_CUSTOM_FUNCTION;H[R.ADD_CUSTOM_FUNCTION_PROJECT]=R.ADD_CUSTOM_FUNCTION_PROJECT;H[R.DROP_CUSTOM_FUNCTION_PROJECT]=R.DROP_CUSTOM_FUNCTION_PROJECT;H[R.PACKAGE_CUSTOM_FUNCTION_PROJECT]=R.PACKAGE_CUSTOM_FUNCTION_PROJECT;H[R.DEPLOY_CUSTOM_FUNCTION_PROJECT]=R.DEPLOY_CUSTOM_FUNCTION_PROJECT;var em={RUN:"run",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade"},tm={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},sc={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"},rm=rc.invert(sc),T={CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_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"},sm={hdb_root_key:T.ROOTPATH,hdb_root:T.ROOTPATH,server_port_key:T.OPERATIONSAPI_NETWORK_PORT,server_port:T.OPERATIONSAPI_NETWORK_PORT,cert_key:T.OPERATIONSAPI_TLS_CERTIFICATE,certificate:T.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:T.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:T.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:T.OPERATIONSAPI_NETWORK_HTTPS,https_on:T.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:T.OPERATIONSAPI_NETWORK_CORS,cors_on:T.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:T.LOGGING_LEVEL,log_level:T.LOGGING_LEVEL,log_path_key:T.LOGGING_ROOT,log_path:T.LOGGING_ROOT,log_daily_rotate:T.LOGGING_ROTATION_ROTATE,log_rotate:T.LOGGING_ROTATION_ROTATE,log_rotate_max_size:T.LOGGING_ROTATION_MAXSIZE,log_rotate_retain:T.LOGGING_ROTATION_RETAIN,log_rotate_compress:T.LOGGING_ROTATION_COMPRESS,log_rotate_date_format:T.LOGGING_ROTATION_DATEFORMAT,log_rotate_rotate_module:T.LOGGING_ROTATION_ROTATEMODULE,log_rotate_worker_interval:T.LOGGING_ROTATION_WORKERINTERVAL,log_rotate_rotate_interval:T.LOGGING_ROTATION_ROTATEINTERVAL,log_rotate_timezone:T.LOGGING_ROTATION_TIMEZONE,props_env_key:T.OPERATIONSAPI_NODEENV,node_env:T.OPERATIONSAPI_NODEENV,clustering_node_name_key:T.CLUSTERING_NODENAME,node_name:T.CLUSTERING_NODENAME,clustering_enabled_key:T.CLUSTERING_ENABLED,clustering:T.CLUSTERING_ENABLED,max_http_threads:T.HTTP_THREADS,max_hdb_processes:T.HTTP_THREADS,server_timeout_key:T.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:T.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:T.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:T.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:T.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:T.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:T.LOGGING_AUDITLOG,disable_transaction_log:T.LOGGING_AUDITLOG,operation_token_timeout_key:T.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:T.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:T.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:T.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,ipc_server_port:T.IPC_NETWORK_PORT,custom_functions_enabled_key:T.CUSTOMFUNCTIONS_ENABLED,custom_functions:T.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:T.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:T.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:T.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:T.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:T.HTTP_THREADS,log_to_file:T.LOGGING_FILE,log_to_stdstreams:T.LOGGING_STDSTREAMS,run_in_foreground:T.OPERATIONSAPI_FOREGROUND,local_studio_on:T.LOCALSTUDIO_ENABLED,clustering_port:T.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:T.CLUSTERING_USER,clustering_enabled:T.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:T.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:T.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:T.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:T.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:T.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:T.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:T.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_nodename:T.CLUSTERING_NODENAME,clustering_tls_certificate:T.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:T.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:T.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:T.CLUSTERING_TLS_INSECURE,customfunctions_enabled:T.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:T.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:T.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:T.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:T.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:T.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:T.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:T.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:T.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:T.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:T.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:T.CUSTOMFUNCTIONS_NODEENV,http_threads:T.HTTP_THREADS,customfunctions_processes:T.HTTP_THREADS,customfunctions_root:T.CUSTOMFUNCTIONS_ROOT,ipc_network_port:T.IPC_NETWORK_PORT,localstudio_enabled:T.LOCALSTUDIO_ENABLED,logging_file:T.LOGGING_FILE,logging_level:T.LOGGING_LEVEL,logging_root:T.LOGGING_ROOT,logging_rotation_compress:T.LOGGING_ROTATION_COMPRESS,logging_rotation_dateformat:T.LOGGING_ROTATION_DATEFORMAT,logging_rotation_maxsize:T.LOGGING_ROTATION_MAXSIZE,logging_rotation_retain:T.LOGGING_ROTATION_RETAIN,logging_rotation_rotate:T.LOGGING_ROTATION_ROTATE,logging_rotation_rotateinterval:T.LOGGING_ROTATION_ROTATEINTERVAL,logging_rotation_rotatemodule:T.LOGGING_ROTATION_ROTATEMODULE,logging_rotation_timezone:T.LOGGING_ROTATION_TIMEZONE,logging_rotation_workerinterval:T.LOGGING_ROTATION_WORKERINTERVAL,logging_stdstreams:T.LOGGING_STDSTREAMS,logging_auditlog:T.LOGGING_AUDITLOG,operationsapi_authentication_operationtokentimeout:T.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:T.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:T.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:T.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:T.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:T.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:T.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:T.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:T.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:T.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_network_timeout:T.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:T.OPERATIONSAPI_NODEENV,operationsapi_root:T.ROOTPATH,rootpath:T.ROOTPATH,storage_writeasync:T.STORAGE_WRITEASYNC,storage_overlappingsync:T.STORAGE_OVERLAPPINGSYNC},nm={csv_file_load:"csv_file_load",csv_data_load:R.CSV_DATA_LOAD,csv_url_load:R.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"},im={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"},am={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},om={FILE_SYSTEM:"fs",LMDB:"lmdb"},_m={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},cm={DEVELOPMENT:8192,DEFAULT:512},um={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"},Em={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"},lm={ENOENT:"ENOENT",EACCES:"EACCES"},nc={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},dm="__clustering__",Sm=Object.values(nc),hm=15984864e5,ic={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Tm=rc.invert(ic),fm={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"},Rm=111,mm=`\r
|
|
2
|
-
`,Am={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Nm=["*","%"],Om="unauthorized_access",gm="func_val",pm={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Im={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},Cm="hdb_ipc_server",bm="hdb_ipc_client_",Lm={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"},wm={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},ym={STOPPED:"stopped",ONLINE:"online"},Um="3.x.x";ac.exports={LOCAL_HARPERDB_OPERATIONS:H,HDB_SUPPORT_ADDRESS:z_,HDB_SUPPORT_URL:ec,HDB_PRICING_URL:eR,SUPPORT_HELP_MSG:tR,LICENSE_HELP_MSG:tc,HDB_PROC_NAME:J_,HDB_PROC_DESCRIPTOR:Na,CLUSTERING_LEAF_PROC_DESCRIPTOR:Zs,CLUSTERING_HUB_PROC_DESCRIPTOR:Xs,SYSTEM_SCHEMA_NAME:AR,HASH_FOLDER_NAME:NR,HDB_HOME_DIR_NAME:OR,UPDATE_FILE_NAME:CR,LICENSE_KEY_DIR_NAME:pR,BOOT_PROPS_FILE_NAME:IR,JOB_TYPE_ENUM:nm,JOB_STATUS_ENUM:XR,SYSTEM_TABLE_NAMES:YR,SYSTEM_TABLE_HASH_ATTRIBUTES:$R,OPERATIONS_ENUM:R,VALID_S3_FILE_TYPES:ZR,S3_BUCKET_AUTH_KEYS:zR,VALID_SQL_OPS_ENUM:jR,GEO_CONVERSION_ENUM:tm,HDB_SETTINGS_NAMES:sc,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:rm,SERVICE_ACTIONS_ENUM:em,CLUSTER_MESSAGE_TYPE_ENUM:im,CLUSTER_CONNECTION_DIRECTION_ENUM:am,CLUSTER_EVENTS_DEFS_ENUM:um,PERIOD_REGEX:_R,DOUBLE_PERIOD_REGEX:cR,UNICODE_PERIOD:uR,FORWARD_SLASH_REGEX:ER,UNICODE_FORWARD_SLASH:lR,ESCAPED_FORWARD_SLASH_REGEX:dR,ESCAPED_PERIOD_REGEX:SR,ESCAPED_DOUBLE_PERIOD_REGEX:hR,REG_KEY_FILE_NAME:QR,RESTART_TIMEOUT_MS:wR,HDB_FILE_PERMISSIONS:yR,SCHEMA_DIR_NAME:MR,TRANSACTIONS_DIR_NAME:PR,LIMIT_COUNT_NAME:BR,ID_ATTRIBUTE_STRING:HR,INSERT_MODULE_ENUM:VR,UPGRADE_JSON_FIELD_NAMES_ENUM:kR,RESTART_CODE:bR,RESTART_CODE_NUM:LR,CLUSTER_OPERATIONS:bt,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:WR,HDB_INTERNAL_SC_CHANNEL_PREFIX:Ue,INTERNAL_SC_CHANNELS:KR,CLUSTERING_MESSAGE_TYPES:fm,HDB_FILE_SUFFIX:gR,BLOB_FOLDER_NAME:UR,HDB_TRASH_DIR:DR,ORIGINATOR_SET_VALUE:Rm,LICENSE_VALUES:_m,RAM_ALLOCATION_ENUM:cm,STORAGE_TYPES_ENUM:om,TIME_STAMP_NAMES_ENUM:nc,TIME_STAMP_NAMES:Sm,PERMS_UPDATE_RELEASE_TIMESTAMP:hm,SEARCH_NOT_FOUND_MESSAGE:rR,SEARCH_ATTRIBUTE_NOT_FOUND:sR,LICENSE_ROLE_DENIED_RESPONSE:nR,LICENSE_MAX_CONNS_REACHED:iR,BASIC_LICENSE_MAX_NON_CU_ROLES:j_,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:jf,VALUE_SEARCH_COMPARATORS:ic,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:Tm,LICENSE_FILE_NAME:JR,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:Em,NEW_LINE:mm,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:oR,MOMENT_DAYS_TAG:TR,API_TURNOVER_SEC:fR,LOOPBACK:aR,CODE_EXTENSION:Jr,WILDCARD_SEARCH_VALUE:RR,NODE_ERROR_CODES:lm,JAVASCRIPT_EXTENSION:Q_,PERMS_CRUD_ENUM:Am,UNAUTHORIZED_PERMISSION_NAME:Om,SEARCH_WILDCARDS:Nm,FUNC_VAL:gm,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:pm,JWT_ENUM:Im,CLUSTERING_FLAG:dm,RUN_LOG:GR,INSTALL_LOG:vR,IPC_SERVER_MODULE:Z_,HDB_IPC_SERVER:Cm,IPC_EVENT_TYPES:Lm,HDB_IPC_CLIENT_PREFIX:bm,CUSTOM_FUNCTION_PROC_NAME:X_,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Js,SERVICES:wm,MEM_SETTING_KEY:mR,HDB_RESTART_SCRIPT:kf,PROCESS_DESCRIPTORS:Aa,SERVICE_SERVERS:Jf,SERVICE_SERVERS_CWD:Qs,PROCESS_DESCRIPTORS_VALIDATE:Wf,LAUNCH_SERVICE_SCRIPTS:Xf,LOG_LEVELS:Kf,PROCESS_NAME_ENV_PROP:qR,PROCESS_LOG_NAMES:$f,PM2_PROCESS_STATUSES:ym,CONFIG_PARAM_MAP:sm,CONFIG_PARAMS:T,HDB_CONFIG_FILE:Ff,HDB_DEFAULT_CONFIG_FILE:xf,ROLE_TYPES_ENUM:Zf,BOOT_PROP_PARAMS:FR,INSTALL_PROMPTS:xR,HDB_ROOT_DIR_NAME:Vf,CLUSTERING_PROCESSES:Qf,FOREGROUND_PID_FILE:Yf,PACKAGE_ROOT:Ke,PRE_4_0_0_VERSION:Um}});var uc=d((
|
|
3
|
-
`}a($t,"createLogRecord");function hc(e){Er===void 0&&(ba=z.PROCESS_DESCRIPTORS.INSTALL,kt.ensureDirSync(zs),Er=Yt.join(zs,z.PROCESS_LOG_NAMES.INSTALL),kt.ensureFileSync(Er)),kt.appendFileSync(Er,e)}a(hc,"writeToLogFile");function js(e){st&&hc(e),St&&process.stdout.write(e)}a(js,"nonPm2LogStdOut");function La(e){st&&hc(e),St&&process.stderr.write(e)}a(La,"nonPm2LogStdErr");function vm(...e){if(Oe[Ne]<=Oe.info){let t=$t("info",e);if(Lt){js(t);return}process.stdout.write(t)}}a(vm,"info");function Tc(...e){if(Oe[Ne]<=Oe.trace){let t=$t("trace",e);if(Lt){js(t);return}process.stdout.write(t)}}a(Tc,"trace");function Ia(...e){if(Oe[Ne]<=Oe.error){let t=$t("error",e);if(Lt){La(t);return}process.stderr.write(t)}}a(Ia,"error");function Gm(...e){if(Oe[Ne]<=Oe.debug){let t=$t("debug",e);if(Lt){js(t);return}process.stdout.write(t)}}a(Gm,"debug");function qm(...e){if(Oe[Ne]<=Oe.notify){let t=$t("notify",e);if(Lt){js(t);return}process.stdout.write(t)}}a(qm,"notify");function Fm(...e){if(Oe[Ne]<=Oe.fatal){let t=$t("fatal",e);if(Lt){La(t);return}process.stderr.write(t)}}a(Fm,"fatal");function xm(...e){if(Oe[Ne]<=Oe.warn){let t=$t("warn",e);if(Lt){La(t);return}process.stderr.write(t)}}a(xm,"warn");function Vm(){let e;try{e=Pm.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Yt.join(e,z.HDB_HOME_DIR_NAME,z.BOOT_PROPS_FILE_NAME);return kt.existsSync(t)||(t=Yt.join(Ca,"utility/hdb_boot_properties.file")),t}a(Vm,"getPropsFilePath");function km(e){Ne=e}a(km,"setLogLevel");function Ec(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Ec,"autoCastBoolean");function Ym(e){try{if(e.includes("config/settings.js")){let o=dc(e);return{level:o.get(z.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Yt.dirname(o.get(z.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(z.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(z.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=lc.parseDocument(kt.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===z.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(Ym,"getLogConfig");function $m(){try{let e=lc.parseDocument(kt.readFileSync(Bm,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),s=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:s}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a($m,"getDefaultConfig")});var mc=d((
|
|
4
|
-
`).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:Wm.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(Zm,"findPs")});var Se=d((fB,Nc)=>{"use strict";var zm="__dbis__",jm="__environment_name__",eA="__dbi_defintion__",tA={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"},rA=["__createdtime__","__updatedtime__"],sA="\uFFFF",Ac={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},nA=Object.values(Ac);Nc.exports={INTERNAL_DBIS_NAME:zm,DBI_DEFINITION_NAME:eA,SEARCH_TYPES:tA,TIMESTAMP_NAMES:rA,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:jm,TRANSACTIONS_DBI_NAMES_ENUM:Ac,TRANSACTIONS_DBIS:nA,OVERFLOW_MARKER:sA}});var He=d((RB,yc)=>{"use strict";var Oc=f(),gc=Se(),pc={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},Ic=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Cc={500:Ic("There was an error processing your request."),400:"Invalid request"},iA=Cc[pc.INTERNAL_SERVER_ERROR],aA={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.`},oA={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},_A={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"},cA={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 ${gc.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${gc.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"},uA={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Oc.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes.`,ATTR_NAME_NULLISH_ERR:"transaction aborted due to record(s) with an attribute name that is null, undefined or empty string",HASH_VAL_LENGTH_ERR:`transaction aborted due to record(s) with a hash value that exceeds ${Oc.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes, check log for more info`,INVALID_FORWARD_SLASH_IN_HASH_ERR:"transaction aborted due to record(s) with a hash value that contains a forward slash, check log for more info",RECORD_MISSING_HASH_ERR:"transaction aborted due to record(s) with no hash value, check log for more info"},bc={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"},EA={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."},lA={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`},dA={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"},SA={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},hA={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`},Lc={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`},wc={INVALID_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}`},TA={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."},fA={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},RA={...bc,..._A,...aA,...EA,...lA,...dA,...SA,...hA,...uA,...Lc,...wc,...TA,...fA,...oA};yc.exports={CHECK_LOGS_WRAPPER:Ic,HDB_ERROR_MSGS:RA,DEFAULT_ERROR_MSGS:Cc,DEFAULT_ERROR_RESP:iA,HTTP_STATUS_CODES:pc,LMDB_ERRORS_ENUM:cA,AUTHENTICATION_ERROR_MSGS:bc,VALIDATION_ERROR_MSGS:Lc,IPC_ERRORS:wc}});var q=d((mB,Mc)=>{"use strict";var dr=He(),mA=p(),AA=f(),Xr=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Uc),this.http_resp_code=s||dr.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(dr.DEFAULT_ERROR_MSGS[s]?dr.DEFAULT_ERROR_MSGS[s]:dr.DEFAULT_ERROR_MSGS[dr.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&&mA[n](i)}};a(Xr,"HdbError");function Uc(e,t,r,s=AA.LOG_LEVELS.ERROR,n=null,i=!1){if(Dc(e))return e;let o=new Xr(e,t,r,s,n);return i&&delete o.stack,o}a(Uc,"handleHDBError");function Dc(e){return e.__proto__.constructor.name===Xr.name}a(Dc,"isHDBError");Mc.exports={isHDBError:Dc,handleHDBError:Uc,hdb_errors:dr}});var g=d((NB,Qc)=>{"use strict";var wa=require("path"),NA=require("fs-extra"),te=p(),Pc=require("fs-extra"),OA=require("truncate-utf8-bytes"),Zr=require("os"),gA=require("net"),pA=require("recursive-iterator"),ne=f(),qc=mc(),Bc=require("papaparse"),en=require("moment"),{inspect:IA}=require("util"),Hc=require("is-number"),AB=require("lodash"),{hdb_errors:tn}=q(),Fc=require("util").promisify(setTimeout),CA=100,bA=5,LA="",wA=4,vc=255,Gc={true:!0,false:!1,undefined:null,null:null,NaN:NaN};Qc.exports={isEmpty:De,isEmptyOrZeroLength:nt,arrayHasEmptyValues:DA,arrayHasEmptyOrZeroLengthValues:MA,buildFolderPath:PA,isBoolean:xc,errorizeMessage:yA,stripFileExtension:HA,autoCast:vA,autoCastJSONDeep:ya,removeDir:qA,compareVersions:FA,isCompatibleDataVersion:xA,escapeRawValue:kc,unescapeValue:VA,stringifyProps:kA,valueConverter:YA,timeoutPromise:KA,isClusterOperation:QA,getClusterUser:ZA,sendTransactionToSocketCluster:JA,checkGlobalSchemaTable:XA,getHomeDir:Yc,getPropsFilePath:$A,promisifyPapaParse:zA,removeBOM:$c,createEventPromise:jA,checkProcessRunning:eN,checkSchemaTableExist:tN,checkSchemaExists:Kc,checkTableExists:Wc,getStartOfTomorrowInSeconds:rN,getLimitKey:sN,isObject:BA,isNotEmptyAndHasValue:UA,autoCasterIsNumberCheck:Vc,backtickASTSchemaItems:nN,isPortTaken:WA,stopProcess:iN,createForkArgs:aN,autoCastBoolean:oN,async_set_timeout:Fc,getTableHashAttribute:_N,doesSchemaExist:cN,doesTableExist:uN,stringifyObj:EN,ms_to_time:lN,PACKAGE_ROOT:ne.PACKAGE_ROOT};function yA(e){return e instanceof Error?e:new Error(e)}a(yA,"errorizeMessage");function De(e){return e==null}a(De,"isEmpty");function UA(e){return!De(e)&&(e||e===0||e===""||xc(e))}a(UA,"isNotEmptyAndHasValue");function nt(e){return De(e)||e.length===0||e.size===0}a(nt,"isEmptyOrZeroLength");function DA(e){if(De(e))return!0;for(let t=0;t<e.length;t++)if(De(e[t]))return!0;return!1}a(DA,"arrayHasEmptyValues");function MA(e){if(nt(e))return!0;for(let t=0;t<e.length;t++)if(nt(e[t]))return!0;return!1}a(MA,"arrayHasEmptyOrZeroLengthValues");function PA(...e){try{return e.join(wa.sep)}catch{console.error(e)}}a(PA,"buildFolderPath");function xc(e){return De(e)?!1:e===!0||e===!1}a(xc,"isBoolean");function BA(e){return De(e)?!1:typeof e=="object"}a(BA,"isObject");function HA(e){return nt(e)?LA:e.slice(0,-wA)}a(HA,"stripFileExtension");function vA(e){return De(e)||e===""||typeof e!="string"?e:Gc[e]!==void 0?Gc[e]:Vc(e)===!0?Number(e):e}a(vA,"autoCast");function GA(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(GA,"autoCastJSON");function ya(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=ya(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=ya(r);s!==r&&(e[t]=s)}return e}else return GA(e)}a(ya,"autoCastJSONDeep");function Vc(e){if(e.startsWith("0.")&&Hc(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Hc(e))}a(Vc,"autoCasterIsNumberCheck");async function qA(e){if(nt(e))throw new Error(`Directory path: ${e} does not exist`);try{await Pc.emptyDir(e),await Pc.remove(e)}catch(t){throw te.error(`Error removing files in ${e} -- ${t}`),t}}a(qA,"removeDir");function FA(e,t){if(nt(e)){te.info("Invalid current version sent as parameter.");return}if(nt(t)){te.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),_=i.replace(s,"").split("."),c=Math.min(o.length,_.length);for(let u=0;u<c;u++)if(r=parseInt(o[u],10)-parseInt(_[u],10),r)return r;return o.length-_.length}a(FA,"compareVersions");function xA(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(xA,"isCompatibleDataVersion");function kc(e){if(De(e))return e;let t=String(e);return t==="."?ne.UNICODE_PERIOD:t===".."?ne.UNICODE_PERIOD+ne.UNICODE_PERIOD:t.replace(ne.FORWARD_SLASH_REGEX,ne.UNICODE_FORWARD_SLASH)}a(kc,"escapeRawValue");function VA(e){if(De(e))return e;let t=String(e);return t===ne.UNICODE_PERIOD?".":t===ne.UNICODE_PERIOD+ne.UNICODE_PERIOD?"..":String(e).replace(ne.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(VA,"unescapeValue");function kA(e,t){if(De(e))return te.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+Zr.EOL}!nt(s)&&s[0]===";"?r+=" "+s+n+Zr.EOL:nt(s)||(r+=s+"="+n+Zr.EOL)}catch{te.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(kA,"stringifyProps");function YA(e){let t;try{t=typeof e=="object"?JSON.stringify(e):e}catch(n){te.error(n),t=e}let r=String(kc(t)),s=Buffer.byteLength(r)>vc?OA(r,vc)+"/blob":r;return{value:t,value_stripped:r,value_path:s}}a(YA,"valueConverter");function Yc(){let e;try{e=Zr.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Yc,"getHomeDir");function $A(){let e=wa.join(Yc(),ne.HDB_HOME_DIR_NAME,ne.BOOT_PROPS_FILE_NAME);return NA.existsSync(e)||(e=wa.join(__dirname,"../","hdb_boot_properties.file")),e}a($A,"getPropsFilePath");function KA(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(KA,"timeoutPromise");async function WA(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=gA.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(WA,"isPortTaken");function QA(e){try{return ne.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){te.error(`Error checking operation against cluster ops ${t}`)}return!1}a(QA,"isClusterOperation");function JA(e,t,r){if(global.hdb_socket_client!==void 0){te.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]=ne.ORIGINATOR_SET_VALUE),global.hdb_socket_client.publish(e,i)}}a(JA,"sendTransactionToSocketCluster");function XA(e,t){if(!global.hdb_schema[e])return tn.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return tn.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(XA,"checkGlobalSchemaTable");function ZA(e,t){if(De(t)){te.warn("No CLUSTERING_USER defined, clustering disabled");return}if(De(e)||nt(e)){te.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){te.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){te.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(ZA,"getClusterUser");function zA(){Bc.parsePromise=function(e,t){return new Promise(function(r,s){Bc.parse(e,{header:!0,transformHeader:$c,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(zA,"promisifyPapaParse");function $c(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a($c,"removeBOM");function jA(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;te.info(`Got cluster status event response: ${IA(n)}`);try{i.cancel()}catch{te.error("Error trying to cancel timeout.")}s(n)})})}a(jA,"createEventPromise");async function eN(e){let t=!0,r=0;do await Fc(CA*r++),(await qc.findPs(e)).length>0&&(t=!1);while(t&&r<bA);if(t)throw new Error(`process ${e} was not started`)}a(eN,"checkProcessRunning");function tN(e,t){let r=Kc(e);if(r)return r;let s=Wc(e,t);if(s)return s}a(tN,"checkSchemaTableExist");function Kc(e){if(!global.hdb_schema[e])return tn.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Kc,"checkSchemaExists");function Wc(e,t){if(!global.hdb_schema[e][t])return tn.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Wc,"checkTableExists");function rN(){let e=en().utc().add(1,ne.MOMENT_DAYS_TAG).startOf(ne.MOMENT_DAYS_TAG).unix(),t=en().utc().unix();return e-t}a(rN,"getStartOfTomorrowInSeconds");function sN(){return en().utc().format("DD-MM-YYYY")}a(sN,"getLimitKey");function nN(e){try{let t=new pA(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){te.error("Got an error back ticking items."),te.error(t)}}a(nN,"backtickASTSchemaItems");async function iN(e){let t=Zr.userInfo();(await qc.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),te.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(iN,"stopProcess");function aN(e){return[e]}a(aN,"createForkArgs");function oN(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(oN,"autoCastBoolean");function _N(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(_N,"getTableHashAttribute");function cN(e){return global?.hdb_schema?.[e]!==void 0}a(cN,"doesSchemaExist");function uN(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(uN,"doesTableExist");function EN(e){try{return JSON.stringify(e)}catch{return e}}a(EN,"stringifyObj");function lN(e){let t=en.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(lN,"ms_to_time")});var Kt=d((OB,Zc)=>{"use strict";var Xc=g(),Jc=f(),sn=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ua=require("joi"),rn={schema_format:{pattern:sn,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},dN=Ua.alternatives(Ua.string().min(1).max(rn.schema_length.maximum).pattern(sn).messages({"string.pattern.base":"{:#label} "+rn.schema_format.message}),Ua.number()).required();function SN(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>rn.schema_length.maximum?`'${e}' maximum of 250 characters`:sn.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(SN,"checkValidTable");function hN(e,t){return Xc.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(hN,"validateSchemaExists");function TN(e,t){let r=t.state.ancestors[0].schema;return Xc.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(TN,"validateTableExists");function fN(e,t){return e.toLowerCase()===Jc.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${Jc.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(fN,"validateSchemaName");Zc.exports={common_validators:rn,schema_regex:sn,hdb_schema_table:dN,validateSchemaExists:hN,validateTableExists:TN,validateSchemaName:fN,checkValidTable:SN}});var We=d((gB,zc)=>{"use strict";var ge=require("validate.js");ge.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||ge.validators.type.checks[t](e)?null:` must be a '${t}' value`};ge.validators.type.checks={Object:function(e){return ge.isObject(e)&&!ge.isArray(e)},Array:ge.isArray,Integer:ge.isInteger,Number:ge.isNumber,String:ge.isString,Date:ge.isDate,Boolean:function(e){return typeof e=="boolean"}};ge.validators.hasValidFileExt=function(e,t){return!ge.isString(e)||e===""||t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`};zc.exports={validateObject:RN,validateObjectAsync:mN,validateBySchema:AN};function RN(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=ge(e,t,{format:"flat"});return r?new Error(r):null}a(RN,"validateObject");async function mN(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await ge.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(mN,"validateObjectAsync");function AN(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(AN,"validateBySchema")});var Ma=d((pB,eu)=>{var{hdb_schema_table:jc}=Kt(),NN=We(),Da=require("joi"),ON={undefined:"undefined",null:"null"},gN=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||ON[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),pN=Da.object({schema:jc,table:jc,records:Da.array().items(Da.object().custom(gN)).required()});eu.exports=function(e){return NN.validateBySchema(e,pN)}});var Pa=d((IB,tu)=>{"use strict";var nn=class{createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};a(nn,"BridgeMethods");tu.exports=nn});var Wt=d((LB,iu)=>{"use strict";var ru=He().LMDB_ERRORS_ENUM,CB=require("lmdb"),IN=Se(),bB=require("buffer").Buffer,CN=require("microtime"),{OVERFLOW_MARKER:su,MAX_SEARCH_KEY_LENGTH:an}=IN,nu=["number","string","symbol","boolean","bigint"];function bN(e){if(!e)throw new Error(ru.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(ru.INVALID_ENVIRONMENT)}a(bN,"validateEnv");function LN(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(LN,"stringifyData");function wN(e){return e instanceof Date?e.valueOf():e}a(wN,"convertKeyValueToWrite");function yN(e){if(e==null)return;if(nu.includes(typeof e))return e.length>an?[e.slice(0,an)+su]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];nu.includes(typeof n)&&(n.length>an?t.push(n.slice(0,an)+su):t.push(n))}}return t}a(yN,"getIndexedValues");function UN(){let e=CN.now().toString(),t=e.length-3;return Number(e.slice(0,t)+"."+e.slice(t))}a(UN,"getMicroTime");iu.exports={validateEnv:bN,stringifyData:LN,convertKeyValueToWrite:wN,getMicroTime:UN,getIndexedValues:yN}});var ou=d((wB,au)=>{"use strict";var on=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(on,"DBIDefinition");au.exports=on});var cu=d((yB,_u)=>{"use strict";var _n=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)}};a(_n,"OpenDBIObject");_u.exports=_n});var Eu=d((UB,uu)=>{"use strict";var cn=class{constructor(t,r,s,n,i=!1,o=!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=o,_!==void 0&&(this.overlappingSync=_)}};a(cn,"OpenEnvironmentObject");uu.exports=cn});var du=d((DB,lu)=>{"use strict";var DN={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))},MN="certificate.pem",PN="privateKey.pem",BN="ca.pem";lu.exports={CERTIFICATE_VALUES:DN,CERTIFICATE_PEM_NAME:MN,PRIVATEKEY_PEM_NAME:PN,CA_PEM_NAME:BN}});var Tu=d((MB,hu)=>{"use strict";var HN=require("fs-extra"),U=require("joi"),vN=require("os"),{boolean:ie,string:Tt,number:it,array:Ba}=U.types(),Qe=require("path"),GN=p(),un=g(),ft=du(),qN=We(),ht="keys",FN=ft.CERTIFICATE_PEM_NAME,xN=ft.PRIVATEKEY_PEM_NAME,VN=ft.CA_PEM_NAME,kN=ft.CERTIFICATE_PEM_NAME,YN=ft.PRIVATEKEY_PEM_NAME,$N=ft.CA_PEM_NAME,KN=ft.CERTIFICATE_PEM_NAME,WN=ft.PRIVATEKEY_PEM_NAME,QN=ft.CA_PEM_NAME,JN="log",XN="custom_functions",ZN="Invalid logging.rotation.maxSize unit. Available units are G, M or K",zN="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",jN="rootPath config parameter is undefined",eO="clustering.enabled config parameter is undefined",wt=it.min(0).required(),En=Ba.items({host:Tt.required(),port:wt}).empty(null),pe;hu.exports={configValidator:tO,routesValidator:aO,route_constraints:En};function tO(e){if(pe=e.rootPath,un.isEmpty(pe))throw jN;let t=ie.required(),r=U.valid("production","development").required(),s=it.min(1).max(1e3).empty(null).default(iO),n=Tt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Su),i=U.custom(sO).messages({"any.custom":"{:#label} {:#error}"}).empty(null).default(Su),o=Tt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),_=e.clustering?.enabled;if(un.isEmpty(_))throw eO;let c;return _===!0?c=U.object({enabled:t,hubServer:U.object({cluster:U.object({name:U.required().empty(null),network:U.object({port:wt,routes:En}).required()}).required(),leafNodes:U.object({network:U.object({port:wt}).required()}).required(),network:U.object({port:wt}).required()}).required(),leafServer:U.object({network:U.object({port:wt,routes:En}).required()}).required(),nodeName:o,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ie.required()}),user:U.string().required()}).required():c=U.object({enabled:t,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ie.required()})}).required(),U.object({clustering:c,customFunctions:U.object({enabled:t,network:U.object({cors:ie.required(),corsAccessList:Ba.required(),headersTimeout:it.min(1).required(),https:ie.required(),keepAliveTimeout:it.min(1).required(),port:wt,timeout:it.min(1).required()}),nodeEnv:r,root:n,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),ipc:U.object({network:U.object({port:wt})}).required(),localStudio:U.object({enabled:t}).required(),logging:U.object({file:ie.required(),level:U.valid("notify","fatal","error","warn","info","debug","trace"),rotation:U.object({compress:ie.required(),dateFormat:Tt.required(),maxSize:Tt.custom(nO).required(),retain:it.min(0).required(),rotate:ie.required(),rotateInterval:Tt.required(),rotateModule:ie.required(),timezone:Tt.required(),workerInterval:it.min(1).required()}).required(),root:n,stdStreams:ie.required(),auditLog:ie.required()}).required(),operationsApi:U.object({authentication:U.object({operationTokenTimeout:U.required(),refreshTokenTimeout:U.required()}).required(),foreground:ie.required(),network:U.object({cors:ie.required(),corsAccessList:Ba.required(),headersTimeout:it.min(1).required(),https:ie.required(),keepAliveTimeout:it.min(1).required(),port:wt,timeout:it.min(1).required()}).required(),nodeEnv:r,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:Tt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:U.object({threads:s}).required(),storage:U.object({writeAsync:ie.required(),overlappingSync:ie.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(tO,"configValidator");function rO(e){return HN.existsSync(e)?null:`Specified path ${e} does not exist.`}a(rO,"doesPathExist");function sO(e,t){U.assert(e,Tt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+\.pem+$/).messages({"string.pattern.base":"must be a valid directory path and specify a .pem file"}));let r=rO(e);if(r)return t.message(r)}a(sO,"validatePemFile");function nO(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(ZN);let s=e.slice(0,-1);if(isNaN(parseInt(s)))return t.message(zN)}a(nO,"validateRotationMaxSize");function iO(e,t){let r=t.state.path.join("."),s=vN.cpus().length,n=s-1;return n<=2&&(n=2),GN.info(`Detected ${s} cores on this machine, defaulting ${r} to ${n}`),n}a(iO,"setDefaultThreads");function Su(e,t){if(!un.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(un.isEmpty(pe))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Qe.join(pe,XN);case"logging.root":return Qe.join(pe,JN);case"operationsApi.tls.certificate":return Qe.join(pe,ht,FN);case"operationsApi.tls.privateKey":return Qe.join(pe,ht,xN);case"operationsApi.tls.certificateAuthority":return Qe.join(pe,ht,VN);case"customFunctions.tls.certificate":return Qe.join(pe,ht,kN);case"customFunctions.tls.privateKey":return Qe.join(pe,ht,YN);case"customFunctions.tls.certificateAuthority":return Qe.join(pe,ht,$N);case"clustering.tls.certificate":return Qe.join(pe,ht,KN);case"clustering.tls.privateKey":return Qe.join(pe,ht,WN);case"clustering.tls.certificateAuthority":return Qe.join(pe,ht,QN);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Su,"setDefaultRoot");function aO(e){let t=U.object({routes:En});return qN.validateBySchema({routes:e},t)}a(aO,"routesValidator")});var zr=d((PB,gu)=>{"use strict";var Y=f(),ve=g(),he=p(),{configValidator:oO,routesValidator:fu}=Tu(),Je=require("fs-extra"),_O=require("yaml"),Sr=require("path"),cO=require("is-number"),Sn=require("properties-reader"),uO=require("lodash"),{handleHDBError:EO}=q(),{HTTP_STATUS_CODES:lO,HDB_ERROR_MSGS:ln}=He(),{PACKAGE_ROOT:dO}=f(),SO="Unable to get config value because config is uninitialized",hO="Config successfully initialized",TO="Error backing up config file",fO="Empty parameter sent to getConfigValue",Ru=Sr.join(dO,"config","yaml",Y.HDB_DEFAULT_CONFIG_FILE),RO="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",dn,Ie;gu.exports={createConfigFile:mO,getDefaultConfig:AO,getConfigValue:mu,initConfig:Au,flattenConfig:Qt,updateConfigValue:Nu,updateConfigObject:NO,getConfiguration:OO,setConfiguration:gO,readConfigFile:Ga,getClusteringRoutes:pO,initOldConfig:Ou,getConfigFromFile:IO};function mO(e){let t=hr(Ru);dn=Qt(t.toJSON());for(let i in e){let o=Y.CONFIG_PARAM_MAP[i.toLowerCase()];if(o!==void 0){let _=o.split("_"),c=Ha(o,e[i]);try{t.setIn([..._],c)}catch(u){he.error(u)}}}va(t);let r=t.toJSON();Ie=Qt(r);let s=t.getIn(["rootPath"]),n=Sr.join(s,Y.HDB_CONFIG_FILE);Je.createFileSync(n),Je.writeFileSync(n,String(t)),he.trace(`Config file written to ${n}`)}a(mO,"createConfigFile");function AO(e){if(dn===void 0){let r=hr(Ru);dn=Qt(r.toJSON())}let t=Y.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return dn[t.toLowerCase()]}a(AO,"getDefaultConfig");function mu(e){if(ve.isEmpty(e)){he.error(fO);return}if(Ie===void 0){he.trace(SO);return}let t=Y.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return Ie[t.toLowerCase()]}a(mu,"getConfigValue");function Au(e=!1){if(Ie===void 0||e){let t=ve.getPropsFilePath();try{Je.accessSync(t,Je.constants.F_OK|Je.constants.R_OK)}catch(o){throw he.error(o),new Error(`HarperDB properties file at path ${t} does not exist`)}let s=Sn(t).get(Y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),n;if(s.includes("config/settings.js"))try{Ou(s);return}catch(o){if(o.code!==Y.NODE_ERROR_CODES.ENOENT)throw o}try{n=hr(s)}catch(o){if(o.code===Y.NODE_ERROR_CODES.ENOENT){he.trace(`HarperDB config file not found at ${s}.
|
|
5
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw he.error(o),new Error(`Error reading HarperDB config file at ${s}`)}va(n);let i=n.toJSON();Ie=Qt(i),he.trace(hO)}}a(Au,"initConfig");function va(e){let t=e.toJSON(),r=oO(t);if(r.error)throw ln.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)}a(va,"validateConfig");function NO(e,t){Ie===void 0&&(Ie={});let r=Y.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){he.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ie[r.toLowerCase()]=t}a(NO,"updateConfigObject");function Nu(e,t,r=void 0,s=!1,n=!1){Ie===void 0&&Au();let i=mu(Y.CONFIG_PARAM_MAP.hdb_root),o=Sr.join(i,Y.HDB_CONFIG_FILE),_=hr(o);if(r===void 0){let E=Y.CONFIG_PARAM_MAP[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let l=E.split("_"),h=Ha(E,t);_.setIn([...l],h)}else for(let E in r){let l=Y.CONFIG_PARAM_MAP[E.toLowerCase()];if(l!==void 0){let h=l.split("_"),S=Ha(l,r[E]);try{_.setIn([...h],S)}catch(A){he.error(A)}}}va(_);let c=_.getIn(["rootPath"]),u=Sr.join(c,Y.HDB_CONFIG_FILE);if(s===!0)try{let E=Sr.join(c,"backup",`${Y.HDB_CONFIG_FILE}.bak`);Je.copySync(o,E),he.trace(`Config file: ${o} backed up to: ${E}`)}catch(E){he.error(TO),he.error(E)}Je.writeFileSync(u,String(_)),n&&(Ie=Qt(_.toJSON())),he.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Nu,"updateConfigValue");function Qt(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=Qt(e[r]);for(let n in s)!s.hasOwnProperty(n)||(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}a(Qt,"flattenConfig");function Ha(e,t){if(e===Y.CONFIG_PARAMS.CLUSTERING_NODENAME||e===Y.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(cO(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||ve.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 ve.autoCast(t)}a(Ha,"castConfigValue");function OO(){let e=ve.getPropsFilePath(),r=Sn(e).get(Y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return hr(r).toJSON()}a(OO,"getConfiguration");async function gO(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Nu(void 0,void 0,n,!0),RO}catch(i){throw typeof i=="string"||i instanceof String?EO(i,i,lO.BAD_REQUEST,void 0,void 0,!0):i}}a(gO,"setConfiguration");function Ga(){let e=ve.getPropsFilePath();try{Je.accessSync(e,Je.constants.F_OK|Je.constants.R_OK)}catch(n){throw he.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=Sn(e).get(Y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return hr(r).toJSON()}a(Ga,"readConfigFile");function hr(e){return _O.parseDocument(Je.readFileSync(e,"utf8"),{simpleKeys:!0})}a(hr,"parseYamlDoc");function pO(){let e=Ga(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=ve.isEmptyOrZeroLength(t)?[]:t;let r=fu(t);if(r)throw ln.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=ve.isEmptyOrZeroLength(s)?[]:s;let n=fu(s);if(n)throw ln.CONFIG_VALIDATION(n.message);if(!ve.isEmptyOrZeroLength(s)&&!ve.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(_=>_.host===o.host&&_.port===o.port));if(!ve.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw ln.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(pO,"getClusteringRoutes");function Ou(e){let t=Sn(e);Ie={};for(let r in Y.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(ve.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Y.CONFIG_PARAM_MAP[r].toLowerCase();n===Y.CONFIG_PARAMS.LOGGING_ROOT?Ie[n]=Sr.dirname(s):Ie[n]=s}return Ie}a(Ou,"initOldConfig");function IO(e){let t=Ga();return uO.get(t,e.replaceAll("_","."))}a(IO,"getConfigFromFile")});var Q=d((BB,Iu)=>{"use strict";var qa=require("fs-extra"),at=require("path"),CO=require("os"),bO=require("properties-reader"),jr=p(),Tr=g(),I=f(),hn=zr(),LO="Error initializing environment manager",Tn="BOOT_PROPS_FILE_PATH",pu=!1,wO={[I.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[I.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Rt={};Iu.exports={BOOT_PROPS_FILE_PATH:Tn,getHdbBasePath:yO,setHdbBasePath:UO,get:DO,initSync:PO,setProperty:P,initTestEnvironment:BO};function yO(){return Rt[I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(yO,"getHdbBasePath");function UO(e){Rt[I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(UO,"setHdbBasePath");function DO(e){let t=hn.getConfigValue(e);return t===void 0?Rt[e]:t}a(DO,"get");function P(e,t){wO[e]&&(Rt[e]=t),hn.updateConfigObject(e,t)}a(P,"setProperty");function MO(){let e;try{e=Tr.getPropsFilePath(),qa.accessSync(e,qa.constants.F_OK|qa.constants.R_OK),pu=!0;let t=bO(e);return Rt[I.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(I.HDB_SETTINGS_NAMES.INSTALL_USER),Rt[I.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(I.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Rt[Tn]=e,!0}catch{return jr.trace(`Environment manager found no properties file at ${e}`),!1}}a(MO,"doesPropFileExist");function PO(e=!1){try{(pu||MO())&&(hn.initConfig(e),Rt[I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=hn.getConfigValue(I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){jr.error(LO),jr.error(t),console.error(t),process.exit(1)}}a(PO,"initSync");function BO(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:_}=e,c=at.join(__dirname,"../../","unitTests");Rt[Tn]=at.join(c,"hdb_boot_properties.file"),P(I.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,at.join(c,"settings.test")),P(I.HDB_SETTINGS_NAMES.INSTALL_USER,CO.userInfo().username),P(I.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,at.join(c,"envDir","utility","keys","privateKey.pem")),P(I.HDB_SETTINGS_NAMES.CERT_KEY,at.join(c,"envDir","utility","keys","certificate.pem")),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,at.join(c,"envDir","utility","keys","privateKey.pem")),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,at.join(c,"envDir","utility","keys","certificate.pem")),P(I.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),P(I.HDB_SETTINGS_NAMES.LOG_PATH_KEY,at.join(c,"envDir","log")),P(I.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),P(I.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),P(I.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),P(I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,at.join(c,"envDir")),P(I.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Tr.isEmpty(n)?!0:n),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Tr.isEmpty(n)?!0:n),P(I.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),P(I.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Tr.isEmpty(i)?!1:i),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Tr.isEmpty(i)?!1:i),P(I.HDB_SETTINGS_NAMES.IPC_SERVER_PORT,9383),P(I.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),P(I.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),P(I.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),P(I.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),P(I.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,at.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),P(I.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Tr.isEmpty(_)?!1:_),o&&(P("CORS_ACCESSLIST",o),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(P(I.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(P(I.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(P(I.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Tn}. Please check your boot props and settings files`;jr.fatal(r),jr.error(t)}}a(BO,"initTestEnvironment")});var F=d((vB,vu)=>{"use strict";var Fa=require("lmdb"),Ge=require("fs-extra"),Xe=require("path"),Rn=Wt(),Cu=p(),ae=He().LMDB_ERRORS_ENUM,mn=ou(),xa=cu(),bu=Eu(),yt=Se(),HB=f(),es=Q();es.initSync();var Lu=es.get("STORAGE_WRITEASYNC")===!0||es.get("STORAGE_WRITEASYNC")==="true"||es.get("STORAGE_WRITEASYNC")==="TRUE",wu=es.get("STORAGE_OVERLAPPINGSYNC"),yu=1024*1024*1024,Uu=1e4,Du=1e3,Ze=yt.INTERNAL_DBIS_NAME,Mu=yt.DBI_DEFINITION_NAME,HO="data.mdb",vO="lock.mdb",ts=".mdb",GO="-lock",fn=class{constructor(t,r,s=!1){this.dbi=qe(t,r),this.key_type=this.dbi[yt.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[yt.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Fa.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(fn,"TransactionCursor");function Va(e,t){if(e===void 0)throw new Error(ae.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(ae.ENV_NAME_REQUIRED)}a(Va,"pathEnvNameValidation");async function ka(e,t,r=!0){try{await Ge.access(e)}catch(s){throw s.code==="ENOENT"?new Error(ae.INVALID_BASE_PATH):s}try{let s=Xe.join(e,t+ts);return await Ge.access(s,Ge.constants.R_OK|Ge.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Ge.access(Xe.join(e,t,HO),Ge.constants.R_OK|Ge.constants.F_OK),Xe.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(ae.INVALID_ENVIRONMENT)}else throw new Error(ae.INVALID_ENVIRONMENT);throw s}}a(ka,"validateEnvironmentPath");function An(e,t){if(Rn.validateEnv(e),t===void 0)throw new Error(ae.DBI_NAME_REQUIRED)}a(An,"validateEnvDBIName");async function qO(e,t,r=!1,s=!1){Va(e,t),t=t.toString();try{return await ka(e,t,s),Ya(e,t,r)}catch(n){if(n.message===ae.INVALID_ENVIRONMENT){let i=Xe.join(e,t);await Ge.mkdirp(s?i:e);let o=new bu(s?i:i+ts,yu,Uu,Du,!1,Lu,wu),_=Fa.open(o);_.dbis=Object.create(null);let c=new xa(!1);_.openDB(Ze,c),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=$a(e,t,r);return _[yt.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=_,_}throw n}}a(qO,"createEnvironment");async function FO(e,t,r,s=!0){let n=await Ya(e,t);if(r===void 0)throw new Error(ae.DESTINATION_PATH_REQUIRED);try{await Ge.access(Xe.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(ae.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(FO,"copyEnvironment");async function Ya(e,t,r=!1){Va(e,t),t=t.toString();let s=$a(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 ka(e,t),i=Xe.join(e,t+ts),o=n!=i,_=new bu(n,yu,Uu,Du,o,Lu,wu),c=Fa.open(_);c.dbis=Object.create(null);let u=Bu(c);for(let E=0;E<u.length;E++)qe(c,u[E]);return c[yt.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=c,c}a(Ya,"openEnvironment");async function xO(e,t,r=!1){Va(e,t),t=t.toString();let s=Xe.join(e,t+ts),n=await ka(e,t);if(global.lmdb_map!==void 0){let i=$a(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Pu(o),delete global.lmdb_map[i]}}await Ge.remove(n),await Ge.remove(n===s?n+GO:Xe.join(Xe.dirname(n),vO))}a(xO,"deleteEnvironment");async function Pu(e){Rn.validateEnv(e);let t=e[yt.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Pu,"closeEnvironment");function $a(e,t,r=!1){let n=`${Xe.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a($a,"getCachedEnvironmentName");function VO(e){Rn.validateEnv(e);let t=Object.create(null),r=qe(e,Ze);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Ze)try{t[s]=Object.assign(new mn,n)}catch{Cu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(VO,"listDBIDefinitions");function Bu(e){Rn.validateEnv(e);let t=[],r=qe(e,Ze);for(let{key:s}of r.getRange({start:!1}))s!==Ze&&t.push(s);return t}a(Bu,"listDBIs");function kO(e,t){let s=qe(e,Ze).getEntry(t),n=new mn;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{Cu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(kO,"getDBIDefinition");function Hu(e,t,r,s=!1){if(An(e,t),t=t.toString(),t===Ze)throw new Error(ae.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return qe(e,t)}catch(n){if(n.message===ae.DBI_DOES_NOT_EXIST){let i=new xa(r,s===!0),o=e.openDB(t,i),_=new mn(r===!0,s);return o[Mu]=_,qe(e,Ze).putSync(t,_),e.dbis[t]=o,o}throw n}}a(Hu,"createDBI");function qe(e,t){if(An(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Ze?r=kO(e,t):r=new mn,r===void 0)throw new Error(ae.DBI_DOES_NOT_EXIST);let s;try{let n=new xa(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(ae.DBI_DOES_NOT_EXIST):n}return s[Mu]=r,e.dbis[t]=s,s}a(qe,"openDBI");function YO(e,t){An(e,t),t=t.toString();let r=qe(e,t),s=r.getStats();return r[yt.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(YO,"statDBI");async function $O(e,t){try{let r=Xe.join(e,t+ts);return(await Ge.stat(r)).size}catch{throw new Error(ae.INVALID_ENVIRONMENT)}}a($O,"environmentDataSize");function KO(e,t){if(An(e,t),t=t.toString(),t===Ze)throw new Error(ae.CANNOT_DROP_INTERNAL_DBIS_NAME);qe(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],qe(e,Ze).removeSync(t)}a(KO,"dropDBI");function WO(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{qe(e,n)}catch(i){if(i.message===ae.DBI_DOES_NOT_EXIST)Hu(e,n,n!==t,n===t);else throw i}}}a(WO,"initializeDBIs");vu.exports={openDBI:qe,openEnvironment:Ya,createEnvironment:qO,listDBIs:Bu,listDBIDefinitions:VO,createDBI:Hu,dropDBI:KO,statDBI:YO,deleteEnvironment:xO,initializeDBIs:WO,TransactionCursor:fn,environmentDataSize:$O,copyEnvironment:FO,closeEnvironment:Pu}});var qu=d((GB,Gu)=>{"use strict";var Nn=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(Nn,"InsertRecordsResponseObject");Gu.exports=Nn});var xu=d((qB,Fu)=>{"use strict";var On=class{constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};a(On,"UpdateRecordsResponseObject");Fu.exports=On});var ku=d((FB,Vu)=>{"use strict";var gn=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(gn,"UpsertRecordsResponseObject");Vu.exports=gn});var fr=d((YB,$u)=>{"use strict";var QO=F(),JO=qu(),XO=xu(),ZO=ku(),ss=Wt(),rs=He().LMDB_ERRORS_ENUM,zO=Se(),Ut=f(),jO=g(),eg=require("uuid"),xB=require("lmdb"),{handleHDBError:tg,hdb_errors:rg}=q(),{OVERFLOW_MARKER:VB,MAX_SEARCH_KEY_LENGTH:kB}=zO,Ka=Ut.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Jt=Ut.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function sg(e,t,r,s,n=!0){Xa(e,t,r,s),Wa(e,t,r);let i=new JO,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c];Yu(u,!0,n);let E=ng(e,t,r,u),l=u[t];o.push(E),_.push(l)}return Qa(o,_,s,i)}a(sg,"insertRecords");function ng(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let _=s[o];if(typeof _=="function"){let u=_([[{}]]);Array.isArray(u)&&(_=u[0][Ut.FUNC_VAL],s[o]=_)}let c=ss.getIndexedValues(_);if(c)for(let u=0,E=c.length;u<E;u++)e.dbis[o].put(c[u],n)}e.dbis[t].put(n,s,s[Jt])})}a(ng,"insertRecord");function ig(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(ig,"removeSkippedRecords");function Yu(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[Jt]))&&(e[Jt]=s),t===!0?(r===!0||!Number.isInteger(e[Ka]))&&(e[Ka]=s):delete e[Ka]}a(Yu,"setTimestamps");function Wa(e,t,r){r.indexOf(Ut.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Ut.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Ut.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Ut.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),QO.initializeDBIs(e,t,r)}a(Wa,"initializeTransaction");async function ag(e,t,r,s,n=!0){Xa(e,t,r,s),Wa(e,t,r);let i=new XO,o=[],_=[],c=[];for(let u=0;u<s.length;u++){let E=s[u],l=E[t],h;try{h=Ja(e,t,E,l,i,!0,n)}catch{i.skipped_hashes.push(l),o.push(u);continue}_.push(h),c.push(l)}return Qa(_,c,s,i,o)}a(ag,"updateRecords");async function og(e,t,r,s,n=!0){try{Xa(e,t,r,s)}catch(c){throw tg(c,c.message,rg.HTTP_STATUS_CODES.BAD_REQUEST)}Wa(e,t,r);let i=new ZO,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c],E;jO.isEmpty(u[t])?(E=eg.v4(),u[t]=E):E=u[t];let l=Ja(e,t,u,E,i,!1,n);o.push(l),_.push(E)}return Qa(o,_,s,i)}a(og,"upsertRecords");async function Qa(e,t,r,s,n=[]){let i=await Promise.all(e);for(let o=0,_=i.length;o<_;o++)i[o]===!0?s.written_hashes.push(t[o]):(s.skipped_hashes.push(t[o]),n.push(o));return s.txn_time=ss.getMicroTime(),ig(r,n),s}a(Qa,"finalizeWrite");function Ja(e,t,r,s,n,i=!1,o=!0){let _=e.dbis[t],c=_.getEntry(s),u=c?.value,E=u;if(!u){if(i)return!1;u={}}if(Yu(r,!E,o),Number.isInteger(r[Jt])&&u[Jt]>r[Jt])return!1;E&&n.original_records.push(u);let l,h=a(()=>{for(let A in r){if(!r.hasOwnProperty(A)||A===t)continue;let N=r[A],b=e.dbis[A];if(b===void 0)continue;let Ae=u[A];if(typeof N=="function"){let W=N([[u]]);Array.isArray(W)&&(N=W[0][Ut.FUNC_VAL],r[A]=N)}if(N===Ae)continue;let v=ss.getIndexedValues(Ae);if(v)for(let W=0,$e=v.length;W<$e;W++)b.remove(v[W],s);if(v=ss.getIndexedValues(N),v)for(let W=0,$e=v.length;W<$e;W++)b.put(v[W],s)}let S=Object.assign({},u,r);_.put(s,S,S[Jt])},"do_put");return c?l=_.ifVersion(s,c.version,h):l=_.ifNoExists(s,h),l.then(S=>S?!0:Ja(e,t,r,s,n,i,o))}a(Ja,"updateUpsertRecord");function _g(e,t,r){if(ss.validateEnv(e),t===void 0)throw new Error(rs.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(rs.WRITE_ATTRIBUTES_REQUIRED):new Error(rs.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(_g,"validateBasic");function Xa(e,t,r,s){if(_g(e,t,r),!Array.isArray(s))throw s===void 0?new Error(rs.RECORDS_REQUIRED):new Error(rs.RECORDS_MUST_BE_ARRAY)}a(Xa,"validateWrite");$u.exports={insertRecords:sg,updateRecords:ag,upsertRecords:og}});var k=d(($B,Wu)=>{"use strict";var Za=f(),Rr=Q(),za=require("path");Rr.initSync();var pn,In,Cn;function Ku(){if(pn!==void 0)return pn;if(Rr.getHdbBasePath()!==void 0)return pn=za.join(Rr.getHdbBasePath(),Za.SCHEMA_DIR_NAME),pn}a(Ku,"getBaseSchemaPath");function cg(){if(In!==void 0)return In;if(Rr.getHdbBasePath()!==void 0)return In=za.join(Ku(),Za.SYSTEM_SCHEMA_NAME),In}a(cg,"getSystemSchemaPath");function ug(){if(Cn!==void 0)return Cn;if(Rr.getHdbBasePath()!==void 0)return Cn=za.join(Rr.getHdbBasePath(),Za.TRANSACTIONS_DIR_NAME),Cn}a(ug,"getTransactionAuditStorePath");Wu.exports={getBaseSchemaPath:Ku,getSystemSchemaPath:cg,getTransactionAuditStorePath:ug}});var Xt=d((KB,Eg)=>{Eg.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 bn=d((WB,Qu)=>{var{common_validators:Dt}=Kt(),ns=We(),ze="is required",G={schema:{presence:!0,format:Dt.schema_format,length:Dt.schema_length},table:{presence:!0,format:Dt.schema_format,length:Dt.schema_length},attribute:{presence:!0,format:Dt.schema_format,length:Dt.schema_length},hash_attribute:{presence:!0,format:Dt.schema_format,length:Dt.schema_length}};function is(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(is,"makeAttributesStrings");function lg(e){return e=is(e),G.schema.presence={message:ze},G.table.presence=!1,G.attribute.presence=!1,G.hash_attribute.presence=!1,ns.validateObject(e,G)}a(lg,"schema_object");function dg(e){return e=is(e),G.schema.presence={message:ze},G.table.presence={message:ze},G.attribute.presence=!1,G.hash_attribute.presence=!1,ns.validateObject(e,G)}a(dg,"table_object");function Sg(e){return e=is(e),G.schema.presence={message:ze},G.table.presence={message:ze},G.attribute.presence=!1,G.hash_attribute.presence={message:ze},ns.validateObject(e,G)}a(Sg,"create_table_object");function hg(e){return e=is(e),G.schema.presence={message:ze},G.table.presence={message:ze},G.attribute.presence={message:ze},G.hash_attribute.presence=!1,ns.validateObject(e,G)}a(hg,"attribute_object");function Tg(e){return e=is(e),G.schema.presence={message:ze},G.table.presence={message:ze},G.attribute.presence=!1,G.hash_attribute.presence=!1,ns.validateObject(e,G)}a(Tg,"describe_table");function fg(e){if(!!e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a(fg,"validateTableResidence");Qu.exports={schema_object:lg,create_table_object:Sg,table_object:dg,attribute_object:hg,describe_table:Tg,validateTableResidence:fg}});var Xu=d((QB,Ju)=>{"use strict";var Rg=require("uuid"),Ln=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Rg.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(Ln,"CreateAttributeObject");Ju.exports=Ln});var yn=d((JB,Zu)=>{"use strict";var mg=Xu(),wn=class extends mg{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(wn,"LMDBCreateAttributeObject");Zu.exports=wn});var ju=d((XB,zu)=>{"use strict";zu.exports=Ng;var Ag="inserted";function Ng(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Ag?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Ng,"returnObject")});var Un=d((ZB,tE)=>{"use strict";var Og=f(),ja=F(),gg=fr(),{getSystemSchemaPath:pg,getBaseSchemaPath:Ig}=k(),Cg=require("path"),bg=Xt(),Lg=bn(),wg=yn(),yg=ju(),{handleHDBError:Ug,hdb_errors:Dg}=q(),Mg=g(),eo=bg.hdb_attribute,eE=[];for(let e=0;e<eo.attributes.length;e++)eE.push(eo.attributes[e].attribute);var Pg="inserted";tE.exports=Bg;async function Bg(e){let t=Lg.attribute_object(e);if(t)throw Ug(new Error,t.message,Dg.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Mg.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 wg(e.schema,e.table,e.attribute,e.id);try{let n=await ja.openEnvironment(Cg.join(Ig(),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}`);ja.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await ja.openEnvironment(pg(),Og.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:o,skipped_hashes:_}=await gg.insertRecords(i,eo.hash_attribute,eE,[s]);return yg(Pg,o,{records:[s]},_)}catch(n){throw n}}a(Bg,"lmdbCreateAttribute")});var Dn=d((jB,sE)=>{"use strict";var mt=g(),rE=p(),zB=Ma();sE.exports=Hg;function Hg(e){if(mt.isEmpty(e))throw new Error("invalid update parameters defined.");if(mt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(mt.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(mt.isEmpty(t))throw new Error(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.hash_attribute,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&mt.isEmptyOrZeroLength(o[r]))throw rE.error("a valid hash attribute must be provided with update record:",o),new Error("a valid hash attribute must be provided with update record, check log for more info");if(!mt.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw rE.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Error(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!mt.isEmpty(o[r])&&o[r]!==""&&s.has(mt.autoCast(o[r]))&&(o.skip=!0),s.add(mt.autoCast(o[r]));for(let _ in o)n[_]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(Hg,"insertUpdateValidate")});var Pn=d((eH,nE)=>{"use strict";var vg=f().OPERATIONS_ENUM,Mn=class{constructor(t,r,s,n,i=void 0){this.operation=vg.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(Mn,"InsertObject");nE.exports=Mn});var Hn=d((rH,iE)=>{"use strict";var tH=Pn(),Bn=f(),ro=g(),to=p(),Gg=require("uuid"),{handleHDBError:as,hdb_errors:qg}=q(),{HDB_ERROR_MSGS:os,HTTP_STATUS_CODES:_s}=qg;iE.exports=Fg;function Fg(e,t,r){for(let n=0;n<t.length;n++)xg(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Vg(i,r,e.operation)}}a(Fg,"processRows");function xg(e){if(Buffer.byteLength(String(e))>Bn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw as(new Error,os.ATTR_NAME_LENGTH_ERR(e),_s.BAD_REQUEST,void 0,void 0,!0);if(ro.isEmptyOrZeroLength(e)||ro.isEmpty(e.trim()))throw as(new Error,os.ATTR_NAME_NULLISH_ERR,_s.BAD_REQUEST,void 0,void 0,!0)}a(xg,"validateAttribute");function Vg(e,t,r){if(!e.hasOwnProperty(t)||ro.isEmptyOrZeroLength(e[t])){if(r===Bn.OPERATIONS_ENUM.INSERT||r===Bn.OPERATIONS_ENUM.UPSERT){e[t]=Gg.v4();return}throw to.error("Update transaction aborted due to record with no hash value:",e),as(new Error,os.RECORD_MISSING_HASH_ERR,_s.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Bn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw to.error(e),as(new Error,os.HASH_VAL_LENGTH_ERR,_s.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw to.error(e),as(new Error,os.INVALID_FORWARD_SLASH_IN_HASH_ERR,_s.BAD_REQUEST,void 0,void 0,!0)}a(Vg,"validateHash")});var oE=d((sH,aE)=>{"use strict";var vn=class{constructor(t,r){this.type=t,this.message=r}};a(vn,"IPCEventObject");aE.exports=vn});var mr=d((nH,_E)=>{"use strict";var kg=p(),so=g(),Yg=f(),{IPC_ERRORS:cs}=He();_E.exports={sendIpcEvent:$g,validateEvent:Kg,SchemaEventMsg:Wg,UserEventMsg:Qg};function $g(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):kg.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}a($g,"sendIpcEvent");function Kg(e){if(typeof e!="object")return cs.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||so.isEmpty(e.type))return cs.MISSING_TYPE;if(!e.hasOwnProperty("message")||so.isEmpty(e.message))return cs.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||so.isEmpty(e.message.originator))return cs.MISSING_ORIGIN;if(Yg.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return cs.INVALID_EVENT(e.type)}a(Kg,"validateEvent");function Wg(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(Wg,"SchemaEventMsg");function Qg(e){this.originator=e}a(Qg,"UserEventMsg")});var us=d((aH,lE)=>{"use strict";var cE=f(),iH=g(),Gn=p(),uE=oE(),{sendIpcEvent:EE}=mr();function Jg(e){try{Gn.trace("signalSchemaChange called with message:",e);let t=new uE(cE.IPC_EVENT_TYPES.SCHEMA,e);EE(t)}catch(t){Gn.error(t)}}a(Jg,"signalSchemaChange");function Xg(e){try{Gn.trace("signalUserChange called with message:",e);let t=new uE(cE.IPC_EVENT_TYPES.USER,e);EE(t)}catch(t){Gn.error(t)}}a(Xg,"signalUserChange");lE.exports={signalSchemaChange:Jg,signalUserChange:Xg}});var qn=d((oH,SE)=>{"use strict";var dE=g(),Zg=f(),zg=p(),jg=Un(),ep=yn(),tp=us(),{SchemaEventMsg:rp}=mr(),sp="already exists in";SE.exports=np;async function np(e,t,r){try{if(dE.isEmptyOrZeroLength(r))return r;let s=[];dE.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 ip(e,t.schema,t.name,i)})),n}catch(s){throw s}}a(np,"lmdbCheckForNewAttributes");async function ip(e,t,r,s){let n=new ep(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await ap(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(sp))zg.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(ip,"createNewAttribute");async function ap(e){let t;try{return t=await jg(e),tp.signalSchemaChange(new rp(process.pid,Zg.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}a(ap,"createAttribute")});var Ar=d((_H,hE)=>{"use strict";var Fn=class{constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};a(Fn,"LMDBTransactionObject");hE.exports=Fn});var fE=d((cH,TE)=>{"use strict";var op=Ar(),_p=f().OPERATIONS_ENUM,xn=class extends op{constructor(t,r,s,n,i=void 0){super(_p.INSERT,r,s,n,i),this.records=t}};a(xn,"LMDBInsertTransactionObject");TE.exports=xn});var mE=d((uH,RE)=>{"use strict";var cp=Ar(),up=f().OPERATIONS_ENUM,Vn=class extends cp{constructor(t,r,s,n,i,o=void 0){super(up.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(Vn,"LMDBUpdateTransactionObject");RE.exports=Vn});var NE=d((EH,AE)=>{"use strict";var Ep=Ar(),lp=f().OPERATIONS_ENUM,kn=class extends Ep{constructor(t,r,s,n,i,o=void 0){super(lp.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(kn,"LMDBUpsertTransactionObject");AE.exports=kn});var gE=d((lH,OE)=>{"use strict";var dp=Ar(),Sp=f().OPERATIONS_ENUM,Yn=class extends dp{constructor(t,r,s,n,i=void 0){super(Sp.DELETE,s,n,t,i),this.original_records=r}};a(Yn,"LMDBDeleteTransactionObject");OE.exports=Yn});var Es=d((dH,bE)=>{"use strict";var hp=require("path"),pE=F(),Tp=fE(),fp=mE(),Rp=NE(),mp=gE(),Nr=Se(),IE=g(),{CONFIG_PARAMS:Ap}=f(),CE=Q();CE.initSync();var $n=f().OPERATIONS_ENUM,{getTransactionAuditStorePath:Np}=k();bE.exports=Op;async function Op(e,t){if(CE.get(Ap.LOGGING_AUDITLOG)===!1)return;let r=hp.join(Np(),e.schema.toString()),s=await pE.openEnvironment(r,e.table,!0),n=gp(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){pE.initializeDBIs(s,Nr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Nr.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[Nr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Nr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),IE.isEmpty(n.user_name)||s.dbis[Nr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Nr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}catch(i){throw i}}}a(Op,"writeTransaction");function gp(e,t){let r=IE.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===$n.INSERT)return new Tp(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===$n.UPDATE)return new fp(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===$n.UPSERT)return new Rp(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===$n.DELETE)return new mp(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(gp,"createTransactionObject")});var no=d((hH,LE)=>{"use strict";var pp=Dn(),SH=Pn(),Or=f(),Ip=Hn(),Cp=fr().insertRecords,bp=F(),Lp=require("path"),wp=p(),yp=qn(),{getBaseSchemaPath:Up}=k(),Dp=Es();LE.exports=Mp;async function Mp(e){try{let{schema_table:t,attributes:r}=pp(e);Ip(e,r,t.hash_attribute),e.schema!==Or.SYSTEM_SCHEMA_NAME&&(r.includes(Or.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Or.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Or.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Or.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await yp(e.hdb_auth_header,t,r),n=Lp.join(Up(),e.schema.toString()),i=await bp.openEnvironment(n,e.table),o=await Cp(i,t.hash_attribute,r,e.records,e[Or.CLUSTERING_FLAG]!==!0);try{await Dp(e,o)}catch(_){wp.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(Mp,"lmdbCreateRecords")});var UE=d((TH,yE)=>{"use strict";var wE=f(),Pp=no(),Bp=Pn(),Hp=require("fs-extra"),vp=require("path"),{getBaseSchemaPath:Gp}=k();yE.exports=qp;async function qp(e){let t=[{name:e.schema,createddate:Date.now()}],r=new Bp(wE.SYSTEM_SCHEMA_NAME,wE.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Pp(r),await Hp.mkdirp(vp.join(Gp(),e.schema.toString()))}a(qp,"lmdbCreateSchema")});var ME=d((fH,DE)=>{"use strict";var Kn=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(Kn,"DeleteRecordsResponseObject");DE.exports=Kn});var oo=d((NH,HE)=>{"use strict";var PE=F(),io=Wt(),ao=He().LMDB_ERRORS_ENUM,Fp=Se(),BE=p(),RH=g(),xp=require("lmdb"),Vp=ME(),{OVERFLOW_MARKER:mH,MAX_SEARCH_KEY_LENGTH:AH}=Fp;async function kp(e,t,r){if(io.validateEnv(e),t===void 0)throw new Error(ao.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ao.IDS_REQUIRED):new Error(ao.IDS_MUST_BE_ARRAY);try{let s=PE.listDBIs(e);PE.initializeDBIs(e,t,s);let n=new Vp,i,o=[],_=[];for(let l=0,h=r.length;l<h;l++)try{i=r[l];let S=e.dbis[t].get(i);if(!S){n.skipped.push(i);continue}let A=e.dbis[t].ifVersion(i,xp.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let N=0;N<s.length;N++){let b=s[N];if(!S.hasOwnProperty(b)||b===t)continue;let Ae=e.dbis[b],v=S[b];if(v!=null)try{let W=io.getIndexedValues(v);if(W)for(let $e=0,Ks=W.length;$e<Ks;$e++)Ae.remove(W[$e],i)}catch{BE.warn(`cannot delete from attribute: ${b}, ${v}:${i}`)}}});o.push(A),_.push(i),n.original_records.push(S)}catch(S){BE.warn(S),n.skipped.push(i)}let c=[],u=await Promise.all(o);for(let l=0,h=u.length;l<h;l++)u[l]===!0?n.deleted.push(_[l]):(n.skipped.push(_[l]),c.push(l));let E=0;for(let l=0;l<c.length;l++){let h=c[l];n.original_records.splice(h-E,1),E++}return n.txn_time=io.getMicroTime(),n}catch(s){throw s}}a(kp,"deleteRecords");HE.exports={deleteRecords:kp}});var ls=d((OH,GE)=>{"use strict";var gr=g(),Yp=oo(),$p=F(),Kp=require("path"),{getBaseSchemaPath:Wp}=k(),Qp=Es(),Jp=p();GE.exports=Xp;async function Xp(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(gr.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(gr.isEmptyOrZeroLength(e.hash_values)&&!gr.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let _=0;_<e.records.length;_++){let c=e.records[_][s];gr.isEmpty(c)||e.hash_values.push(c)}}if(gr.isEmptyOrZeroLength(e.hash_values))return vE([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(gr.isEmptyOrZeroLength(e.records)){e.records=[];for(let _=0;_<e.hash_values.length;_++)e.records[_]={[s]:e.hash_values[_]}}let n=Kp.join(Wp(),e.schema.toString()),i=await $p.openEnvironment(n,e.table),o=await Yp.deleteRecords(i,s,e.hash_values);try{t===!0&&await Qp(e,o)}catch(_){Jp.error(`unable to write transaction due to ${_.message}`)}return vE(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(Xp,"lmdbDeleteRecords");function vE(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(vE,"createDeleteResponse")});var co=d((pH,qE)=>{"use strict";var Zp=f(),gH=Wt();function _o(e,t){let r=Object.create(null);if(t.length===1&&Zp.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(_o,"parseRow");function zp(e,t,r,s){let n=_o(r,e);s.push(n)}a(zp,"searchAll");function jp(e,t,r,s){let n=_o(r,e);s[t]=n}a(jp,"searchAllToMap");function eI(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(eI,"iterateDBI");function Zt(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(Zt,"pushResults");function tI(e,t,r,s,n,i){t.toString().endsWith(e)&&Zt(t,r,s,n,i)}a(tI,"endsWith");function rI(e,t,r,s,n,i){t.toString().includes(e)&&Zt(t,r,s,n,i)}a(rI,"contains");function sI(e,t,r,s,n,i){t>e&&Zt(t,r,s,n,i)}a(sI,"greaterThanCompare");function nI(e,t,r,s,n,i){t>=e&&Zt(t,r,s,n,i)}a(nI,"greaterThanEqualCompare");function iI(e,t,r,s,n,i){t<e&&Zt(t,r,s,n,i)}a(iI,"lessThanCompare");function aI(e,t,r,s,n,i){t<=e&&Zt(t,r,s,n,i)}a(aI,"lessThanEqualCompare");qE.exports={parseRow:_o,searchAll:zp,searchAllToMap:jp,iterateDBI:eI,endsWith:tI,contains:rI,greaterThanCompare:sI,greaterThanEqualCompare:nI,lessThanCompare:iI,lessThanEqualCompare:aI,pushResults:Zt}});var pr=d((bH,$E)=>{"use strict";var Fe=F(),oI=p(),Me=Wt(),Mt=Se(),J=He().LMDB_ERRORS_ENUM,IH=g(),_I=f(),je=co(),CH=require("lmdb"),{OVERFLOW_MARKER:FE,MAX_SEARCH_KEY_LENGTH:cI}=Mt,ds={lazy:!0};function xE(e,t,r,s,n=!1,i=void 0,o=void 0){let _=Object.create(null),c=Fe.openDBI(e,r);c[Mt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let u=uo(e,t,r);for(let{key:E,value:l}of c.getRange({start:n?void 0:!1,end:n?!1:void 0,limit:i,offset:o,reverse:n}))s(u(E,l),l,_,t,r);return _}a(xE,"iterateFullIndex");function Ss(e,t,r,s,n,i=!1,o=void 0,_=void 0,c=!1,u=!1){let E=[[],[]],l=Fe.openDBI(e,r),h=uo(e,t,r);l[Mt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let S=i===!0?s:n,A=i===!0?n:s,N=i===!0?!c:!u,b=i===!0?u:c;for(let{key:Ae,value:v}of l.getRange({start:A,end:S,reverse:i,limit:o,offset:_,inclusiveEnd:N,exclusiveStart:b}))je.pushResults(h(Ae,v),v,E,t,r);return E}a(Ss,"iterateRangeBetween");function uo(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith(FE)){if(!s)if(t)s=Fe.openDBI(e,t);else{let _=Fe.listDBIs(e);for(let c=0,u=_.length;c<u&&(s=Fe.openDBI(e,_[c]),!s[Mt.DBI_DEFINITION_NAME].is_hash_attribute);c++);}n=s.get(i,ds)[r]}return n}}a(uo,"getOverflowCheck");function uI(e,t,r,s=!1,n=void 0,i=void 0){if(Me.validateEnv(e),t===void 0)throw new Error(J.HASH_ATTRIBUTE_REQUIRED);Wn(r),r=hs(e,r);let o=[],_=Fe.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}))je.searchAll(r,c,u,o);return o}a(uI,"searchAll");function EI(e,t,r,s=!1,n=void 0,i=void 0){if(Me.validateEnv(e),t===void 0)throw new Error(J.HASH_ATTRIBUTE_REQUIRED);return Wn(r),r=hs(e,r),xE(e,t,t,je.searchAllToMap.bind(null,r),s,n,i)}a(EI,"searchAllToMap");function lI(e,t,r=!1,s=void 0,n=void 0){if(Me.validateEnv(e),t===void 0)throw new Error(J.ATTRIBUTE_REQUIRED);return xE(e,void 0,t,je.iterateDBI,r,s,n)}a(lI,"iterateDBI");function dI(e,t){if(Me.validateEnv(e),t===void 0)throw new Error(J.HASH_ATTRIBUTE_REQUIRED);return Fe.statDBI(e,t).entryCount}a(dI,"countAll");function SI(e,t,r,s,n=!1,i=void 0,o=void 0){Pt(e,r,s);let _=Fe.openDBI(e,r);s=Me.convertKeyValueToWrite(s);let c=[[],[]];if(_[Mt.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=_.get(s,ds);u!==void 0&&je.pushResults(s,u,c,t,r)}else for(let u of _.getValues(s,{reverse:n,limit:i,offset:o}))je.pushResults(s,u,c,t,r);return c}a(SI,"equals");function hI(e,t,r){return Pt(e,t,r),Fe.openDBI(e,t).getValuesCount(r)}a(hI,"count");function TI(e,t,r,s,n=!1,i=void 0,o=void 0){Pt(e,r,s);let _=[[],[]],c=Fe.openDBI(e,r);c[Mt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r),s=Me.convertKeyValueToWrite(s);let u=!0;if(typeof s=="number"&&(u=!1),n===!0){let E;for(let l of c.getKeys({start:s}))if(!l.startsWith(s)){E=l;break}E!==void 0&&(Number.isInteger(o)?o++:i++);for(let{key:l,value:h}of c.getRange({start:E,end:void 0,reverse:n,limit:i,offset:o}))if(l!==E){if(l.toString().startsWith(s))je.pushResults(l,h,_,t,r);else if(u===!0)break}}else for(let{key:E,value:l}of c.getRange({start:s,reverse:n,limit:i,offset:o}))if(E.toString().startsWith(s))je.pushResults(E,l,_,t,r);else if(u===!0)break;return _}a(TI,"startsWith");function fI(e,t,r,s,n=!1,i=void 0,o=void 0){return VE(e,t,r,s,n,i,o,!0)}a(fI,"endsWith");function VE(e,t,r,s,n=!1,i=void 0,o=void 0,_=!1){Pt(e,r,s);let c=[[],[]],u=Fe.openDBI(e,r);u[Mt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let E=uo(e,t,r);o=Number.isInteger(o)?o: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(FE))for(let A of u.getValues(h)){let N=E(h,A);(_?N.endsWith(s):N.includes(s))&&l(N,A)}else if(_?S.endsWith(s):S.includes(s))if(u[Mt.DBI_DEFINITION_NAME].is_hash_attribute)l(h,h);else for(let A of u.getValues(h))l(h,A)}function l(h,S){if(o>0){o--;return}i!==0&&(je.pushResults(h,S,c,t,r),i--)}return a(l,"found_match"),c}a(VE,"contains");function RI(e,t,r,s,n=!1,i=void 0,o=void 0){Pt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),Ss(e,t,r,s,c,n,i,o,!0,!1)}a(RI,"greaterThan");function mI(e,t,r,s,n=!1,i=void 0,o=void 0){Pt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),Ss(e,t,r,s,c,n,i,o,!1,!1)}a(mI,"greaterThanEqual");function AI(e,t,r,s,n=!1,i=void 0,o=void 0){Pt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),Ss(e,t,r,c,s,n,i,o,!1,!0)}a(AI,"lessThan");function NI(e,t,r,s,n=!1,i=void 0,o=void 0){Pt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),Ss(e,t,r,c,s,n,i,o,!1,!1)}a(NI,"lessThanEqual");function OI(e,t,r,s,n,i=!1,o=void 0,_=void 0){if(Me.validateEnv(e),r===void 0)throw new Error(J.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(J.START_VALUE_REQUIRED);if(n===void 0)throw new Error(J.END_VALUE_REQUIRED);if(s=Me.convertKeyValueToWrite(s),n=Me.convertKeyValueToWrite(n),s>n)throw new Error(J.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ss(e,t,r,s,n,i,o,_)}a(OI,"between");function gI(e,t,r,s){if(Me.validateEnv(e),t===void 0)throw new Error(J.HASH_ATTRIBUTE_REQUIRED);if(Wn(r),r=hs(e,r),s===void 0)throw new Error(J.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?ds:void 0);return i&&(n=je.parseRow(i,r)),n}a(gI,"searchByHash");function pI(e,t,r){if(Me.validateEnv(e),t===void 0)throw new Error(J.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(J.ID_REQUIRED);let s=!0;return e.dbis[t].get(r,ds)===void 0&&(s=!1),s}a(pI,"checkHashExists");function II(e,t,r,s,n=[]){YE(e,t,r,s,n);let i=kE(e,t,r,s,n);return Object.values(i)}a(II,"batchSearchByHash");function CI(e,t,r,s,n=[]){return YE(e,t,r,s,n),kE(e,t,r,s,n)}a(CI,"batchSearchByHashToMap");function kE(e,t,r,s,n=[]){r=hs(e,r);let i=Object.create(null),o=r.length<3?ds:void 0;for(let _=0;_<s.length;_++){let c=s[_];try{let u=e.dbis[t].get(c,o);if(u){let E=je.parseRow(u,r);i[c]=E}else n.push(c)}catch(u){throw oI.warn(u),u}}return i}a(kE,"batchHashSearch");function YE(e,t,r,s,n){if(Me.validateEnv(e),t===void 0)throw new Error(J.HASH_ATTRIBUTE_REQUIRED);if(Wn(r),!Array.isArray(s))throw s===void 0?new Error(J.IDS_REQUIRED):new Error(J.IDS_MUST_BE_ARRAY);Array.isArray(n)||(n=[])}a(YE,"initializeBatchSearchByHash");function Wn(e){if(!Array.isArray(e))throw e===void 0?new Error(J.FETCH_ATTRIBUTES_REQUIRED):new Error(J.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Wn,"validateFetchAttributes");function Pt(e,t,r){if(Me.validateEnv(e),t===void 0)throw new Error(J.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(J.SEARCH_VALUE_REQUIRED);if(r?.length>cI)throw new Error(J.SEARCH_VALUE_TOO_LARGE)}a(Pt,"validateComparisonFunctions");function hs(e,t){return t.length===1&&_I.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Fe.listDBIs(e)),t}a(hs,"setGetWholeRowAttributes");$E.exports={searchAll:uI,searchAllToMap:EI,count:hI,countAll:dI,equals:SI,startsWith:TI,endsWith:fI,contains:VE,searchByHash:gI,setGetWholeRowAttributes:hs,batchSearchByHash:II,batchSearchByHashToMap:CI,checkHashExists:pI,iterateDBI:lI,greaterThan:RI,greaterThanEqual:mI,lessThan:AI,lessThanEqual:NI,between:OI}});var Ts=d((wH,JE)=>{var KE=require("lodash"),WE=We(),B=require("joi"),bI=g(),{hdb_schema_table:et,checkValidTable:QE}=Kt(),{handleHDBError:LI,hdb_errors:wI}=q(),{HTTP_STATUS_CODES:yI}=wI,LH=B.object({schema:et,table:et,hash_values:B.array().min(1).items(B.alternatives(B.string(),B.number())).required(),get_attributes:B.array().min(1).items(et).required()}),UI=B.object({schema:et,table:et,search_attribute:et,search_value:B.any().required(),get_attributes:B.array().min(1).items(et).required(),desc:B.bool(),limit:B.number().integer().min(1),offset:B.number().integer().min(0)}),DI=B.object({schema:et,table:et,operator:B.string().valid("and","or").default("and").lowercase(),offset:B.number().integer().min(0),limit:B.number().integer().min(1),get_attributes:B.array().min(1).items(et).required(),conditions:B.array().min(1).items(B.object({search_attribute:et,search_type:B.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:B.when("search_type",{switch:[{is:"equals",then:B.any()},{is:"between",then:B.array().items(B.alternatives([B.string(),B.number()])).length(2)}],otherwise:B.alternatives(B.string(),B.number())}).required()})).required()});JE.exports=function(e,t){let r=null;switch(t){case"value":r=WE.validateBySchema(e,UI);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(QE("schema",e.schema)),i(QE("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=WE.validateBySchema(e,DI);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=bI.checkGlobalSchemaTable(e.schema,e.table);if(n)return LI(new Error,n,yI.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,_=[...e.get_attributes];if(t==="value"&&_.push(e.search_attribute),t==="conditions")for(let u=0,E=e.conditions.length;u<E;u++){let l=e.conditions[u];_.push(l.search_attribute)}let c=KE.filter(_,u=>u!=="*"&&u.attribute!=="*"&&!KE.some(o,E=>E===u||E.attribute===u||E.attribute===u.attribute));if(c&&c.length>0){let u=c.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var Eo=d((yH,XE)=>{"use strict";var MI=F(),PI=Ts(),BI=require("path"),{getBaseSchemaPath:HI}=k();XE.exports=vI;function vI(e){let t=PI(e,"hashes");if(t)throw t;let r=BI.join(HI(),e.schema.toString());return MI.openEnvironment(r,e.table)}a(vI,"initialize")});var lo=d((UH,ZE)=>{"use strict";var GI=pr(),qI=Eo();ZE.exports=FI;async function FI(e){try{let t=await qI(e),r=global.hdb_schema[e.schema][e.table];return GI.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(FI,"lmdbGetDataByHash")});var fs=d((DH,zE)=>{"use strict";var Qn=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(Qn,"SearchByHashObject");zE.exports=Qn});var el=d((PH,jE)=>{"use strict";var MH=fs(),xI=pr(),VI=Eo();jE.exports=kI;async function kI(e){try{let t=await VI(e),r=global.hdb_schema[e.schema][e.table];return xI.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(kI,"lmdbSearchByHash")});var At=d((BH,tl)=>{"use strict";var Jn=class{constructor(t,r,s,n,i,o,_,c=!1,u=void 0,E=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=_,this.reverse=c,this.limit=u,this.offset=E}};a(Jn,"SearchObject");tl.exports=Jn});var Xn=d((HH,al)=>{"use strict";var Te=pr(),YI=F(),$I=require("path"),KI=g(),O=Se(),zt=f(),{getBaseSchemaPath:WI}=k(),QI=Xt(),rl=He().LMDB_ERRORS_ENUM,{compareKeys:Ir}=require("ordered-binary"),Nt=zt.SEARCH_WILDCARDS;async function JI(e,t,r){let s;e.schema===zt.SYSTEM_SCHEMA_NAME?s=QI[e.table]:s=global.hdb_schema[e.schema][e.table];let n=il(e,s.hash_attribute,r,t);return sl(e,n,s.hash_attribute,r)}a(JI,"prepSearch");async function sl(e,t,r,s){let n=$I.join(WI(),e.schema.toString()),i=await YI.openEnvironment(n,e.table),o=nl(i,e,t,r);if([O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,O.SEARCH_TYPES.SEARCH_ALL,O.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(zI(e,r)===!1)return s===!0?ZI(o):o[1];let c=o[0];return s===!0?Te.batchSearchByHashToMap(i,r,e.get_attributes,c):Te.batchSearchByHash(i,r,e.get_attributes,c)}a(sl,"executeSearch");function nl(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:_,offset:c}=t;switch(o=typeof o=="boolean"?o:!1,_=Number.isInteger(_)?_:void 0,c=Number.isInteger(c)?c:void 0,r){case O.SEARCH_TYPES.EQUALS:n=Te.equals(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.CONTAINS:n=Te.contains(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.ENDS_WITH:case O.SEARCH_TYPES._ENDS_WITH:n=Te.endsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.STARTS_WITH:case O.SEARCH_TYPES._STARTS_WITH:n=Te.startsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Te.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Te.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case O.SEARCH_TYPES.SEARCH_ALL:return Te.searchAll(e,s,t.get_attributes,o,_,c);case O.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Te.searchAllToMap(e,s,t.get_attributes,o,_,c);case O.SEARCH_TYPES.BETWEEN:n=Te.between(e,i,t.search_attribute,t.search_value,t.end_value,o,_,c);break;case O.SEARCH_TYPES.GREATER_THAN:case O.SEARCH_TYPES._GREATER_THAN:n=Te.greaterThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.GREATER_THAN_EQUAL:case O.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Te.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.LESS_THAN:case O.SEARCH_TYPES._LESS_THAN:n=Te.lessThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.LESS_THAN_EQUAL:case O.SEARCH_TYPES._LESS_THAN_EQUAL:n=Te.lessThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;default:return Object.create(null)}return n}a(nl,"searchByType");function XI(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case O.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case O.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case O.SEARCH_TYPES.ENDS_WITH:case O.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case O.SEARCH_TYPES.STARTS_WITH:case O.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case O.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return Ir(i,s[0])>=0&&Ir(i,s[1])<=0};case O.SEARCH_TYPES.GREATER_THAN:case O.SEARCH_TYPES._GREATER_THAN:return n=>Ir(n[r],s)>0;case O.SEARCH_TYPES.GREATER_THAN_EQUAL:case O.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>Ir(n[r],s)>=0;case O.SEARCH_TYPES.LESS_THAN:case O.SEARCH_TYPES._LESS_THAN:return n=>Ir(n[r],s)<0;case O.SEARCH_TYPES.LESS_THAN_EQUAL:case O.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>Ir(n[r],s)<=0;default:return Object.create(null)}}a(XI,"filterByType");function ZI(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}a(ZI,"createMapFromArrays");function zI(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(zI,"checkToFetchMore");function il(e,t,r,s){if(KI.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),_=!1;if(e.search_attribute===t&&(_=!0),Nt.indexOf(n)>-1)return r===!0?O.SEARCH_TYPES.SEARCH_ALL_TO_MAP:O.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Nt[0])<0&&n.indexOf(Nt[1])<0)return _===!0?r===!0?O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:O.SEARCH_TYPES.EQUALS;if(Nt.indexOf(i)>=0&&Nt.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),O.SEARCH_TYPES.CONTAINS;if(Nt.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),O.SEARCH_TYPES.ENDS_WITH;if(Nt.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),O.SEARCH_TYPES.STARTS_WITH;if(n.includes(Nt[0])||n.includes(Nt[1]))return O.SEARCH_TYPES.EQUALS;throw new Error(rl.UNKNOWN_SEARCH_TYPE)}else switch(s){case zt.VALUE_SEARCH_COMPARATORS.BETWEEN:return O.SEARCH_TYPES.BETWEEN;case zt.VALUE_SEARCH_COMPARATORS.GREATER:return O.SEARCH_TYPES.GREATER_THAN;case zt.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return O.SEARCH_TYPES.GREATER_THAN_EQUAL;case zt.VALUE_SEARCH_COMPARATORS.LESS:return O.SEARCH_TYPES.LESS_THAN;case zt.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return O.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(rl.UNKNOWN_SEARCH_TYPE)}}a(il,"createSearchTypeFromSearchObject");al.exports={executeSearch:sl,createSearchTypeFromSearchObject:il,prepSearch:JI,searchByType:nl,filterByType:XI}});var _l=d((GH,ol)=>{"use strict";var vH=At(),jI=Ts(),eC=g(),tC=f(),rC=Xn();ol.exports=sC;async function sC(e,t){if(!eC.isEmpty(t)&&tC.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=jI(e,"value");if(s)throw s;let n=!0;try{return await rC.prepSearch(e,t,n)}catch(i){throw i}}a(sC,"lmdbGetDataByValue")});var Cr=d((FH,cl)=>{"use strict";var qH=At(),nC=Ts(),iC=g(),aC=f(),oC=Xn();cl.exports=_C;async function _C(e,t){if(!iC.isEmpty(t)&&aC.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=nC(e,"value");if(s)throw s;let n=!1;try{return await oC.prepSearch(e,t,n)}catch(i){throw i}}a(_C,"lmdbSearchByValue")});var El=d((VH,ul)=>{"use strict";var xH=Se(),Zn=class{constructor(t,r,s,n,i=void 0,o=void 0,_="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=_}};a(Zn,"SearchByConditionsObject");var zn=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(zn,"SearchCondition");var jn=class{constructor(t,r){this.attribute=t,this.desc=r}};a(jn,"SortAttribute");ul.exports={SearchByConditionsObject:Zn,SearchCondition:zn,SortAttribute:jn}});var fl=d((YH,Tl)=>{"use strict";var kH=El().SearchByConditionsObject,cC=At(),uC=Ts(),So=pr(),ei=Se(),hl=Xn(),EC=co(),ll=require("lodash"),{getBaseSchemaPath:lC}=k(),dC=require("path"),SC=F(),{handleHDBError:dl,hdb_errors:hC}=q(),{HTTP_STATUS_CODES:TC}=hC,fC=1e8,RC={lazy:!0};Tl.exports=mC;async function mC(e){try{let t=uC(e,"conditions");if(t)throw dl(t,t.message,TC.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=dC.join(lC(),e.schema.toString()),s=await SC.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=ll.sortBy(e.conditions,o=>{if(o.estimated_count===void 0){let _=o.search_type;_===ei.SEARCH_TYPES.EQUALS?o.estimated_count=So.count(s,o.search_attribute,o.search_value):_===ei.SEARCH_TYPES.CONTAINS||_===ei.SEARCH_TYPES.ENDS_WITH?o.estimated_count=1/0:o.estimated_count=fC}return o.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[o]=await Sl(s,e,i[0],n.hash_attribute),_=s.dbis[n.hash_attribute],c=i.slice(1).map(hl.filterByType),u=c.length,E=[],l=So.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 o){let N=_.get(A,RC);for(let b=0;b<u;b++)if(!c[b](N))continue e;if(h>0){h--;continue}if(S<=0)break;S--,E.push(EC.parseRow(N,l))}return E}else{let o=[],_=[];for(let c of i){let[u]=await Sl(s,e,c,n.hash_attribute);_.push(u)}if(o=ll.union(..._),e.limit>0||e.offset>0){let c=Number.isInteger(e.limit)?e.limit:o.length;o=o.splice(e.offset,c)}return So.batchSearchByHash(s,n.hash_attribute,e.get_attributes,o)}}catch(t){throw dl(t)}}a(mC,"lmdbSearchByConditions");async function Sl(e,t,r,s){let n=new cC(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===ei.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,hl.searchByType(e,n,i,s)}a(Sl,"executeConditionSearch")});var Rs=d(($H,Rl)=>{"use strict";var AC=f().OPERATIONS_ENUM,ti=class{constructor(t,r,s,n=void 0){this.operation=AC.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(ti,"DeleteObject");Rl.exports=ti});var ho=d((KH,ml)=>{"use strict";var ri=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(ri,"DropAttributeObject");ml.exports=ri});var fo=d((QH,Al)=>{"use strict";var NC=At(),OC=Rs(),WH=ho(),ot=f(),gC=g(),To=F(),pC=Xt(),IC=Cr(),CC=ls(),{getBaseSchemaPath:bC}=k(),LC=require("path");Al.exports=wC;async function wC(e,t=!0){let r;e.schema===ot.SYSTEM_SCHEMA_NAME?r=pC[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await UC(e),n=LC.join(bC(),e.schema.toString()),i=await To.openEnvironment(n,e.table);return t===!0&&await yC(e,i,r.hash_attribute),To.dropDBI(i,e.attribute),s}a(wC,"lmdbDropAttribute");async function yC(e,t,r){let s=To.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:_,version:c}of s.getRange({start:!1,versions:!0})){let u={};for(let E in _)E!==i&&(u[E]=_[E]);n=t.dbis[r].put(o,u,c)}await n}a(yC,"removeAttributeFromAllObjects");async function UC(e){let t=new NC(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ot.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ot.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ot.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=(await IC(t)).filter(o=>o[ot.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(gC.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[ot.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new OC(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return CC(i)}a(UC,"dropAttributeFromSystem")});var pl=d((JH,gl)=>{"use strict";var DC=fo(),MC=ho(),Nl=g(),Ol=p(),PC=He().LMDB_ERRORS_ENUM;gl.exports=BC;async function BC(e){if(Nl.isEmpty(global.hdb_schema[e.schema])||Nl.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 MC(e.schema,e.table,r);try{await DC(n,!1)}catch(i){i.message!==PC.DBI_DOES_NOT_EXIST&&Ol.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw Ol.error(`Error dropping attribute ${r}`),s}}a(BC,"lmdbDropAllAttributes")});var Ro=d((ZH,Ml)=>{"use strict";var wl=At(),yl=Rs(),Ul=Cr(),Dl=ls(),XH=pl(),Ce=f(),Il=g(),Cl=F(),{getBaseSchemaPath:HC,getTransactionAuditStorePath:vC}=k(),bl=require("path"),Ll=p();Ml.exports=GC;async function GC(e){try{if(Il.isEmpty(global.hdb_schema[e.schema])||Il.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await qC(e),await FC(e);let t=bl.join(HC(),e.schema.toString());try{await Cl.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Ll.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=bl.join(vC(),e.schema.toString());await Cl.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Ll.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(GC,"lmdbDropTable");async function qC(e){let t=new wl(Ce.SYSTEM_SCHEMA_NAME,Ce.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ce.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ce.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=await Ul(t),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new yl(Ce.SYSTEM_SCHEMA_NAME,Ce.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Dl(n)}a(qC,"deleteAttributesFromSystem");async function FC(e){let t=new wl(Ce.SYSTEM_SCHEMA_NAME,Ce.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ce.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ce.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ce.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ce.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=await Ul(t)}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new yl(Ce.SYSTEM_SCHEMA_NAME,Ce.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Dl(n)}catch(i){throw i}}a(FC,"dropTableFromSystem")});var Bl=d((jH,Pl)=>{"use strict";var xC=require("fs-extra"),VC=At(),kC=fs(),YC=Rs(),$C=Ro(),KC=ls(),WC=lo(),QC=Cr(),Ot=f(),zH=g(),JC=require("path"),{getBaseSchemaPath:XC}=k(),{handleHDBError:ZC,hdb_errors:zC}=q(),{HDB_ERROR_MSGS:jC,HTTP_STATUS_CODES:eb}=zC;Pl.exports=tb;async function tb(e){let t;try{t=await rb(e.schema);let r=new VC(Ot.SYSTEM_SCHEMA_NAME,Ot.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ot.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Ot.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=await QC(r);for(let o=0;o<s.length;o++){let _={schema:t,table:s[o].name};try{await $C(_)}catch(c){if(c.message!=="invalid environment")throw c}}let n=new YC(Ot.SYSTEM_SCHEMA_NAME,Ot.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await KC(n);let i=JC.join(XC(),t.toString());await xC.remove(i)}catch(r){throw r}}a(tb,"lmdbDropSchema");async function rb(e){let t=new kC(Ot.SYSTEM_SCHEMA_NAME,Ot.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Ot.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=await WC(t)}catch(n){throw n}for(let n in r)r[n].name===e&&(s=e);if(!s)throw ZC(new Error,jC.SCHEMA_NOT_FOUND(e),eb.NOT_FOUND,void 0,void 0,!0);return s}a(rb,"validateDropSchema")});var mo=d((ev,Hl)=>{"use strict";var si=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(si,"CreateTableObject");Hl.exports=si});var Gl=d((rv,vl)=>{"use strict";var sb=require("path"),nb=require("fs-extra"),ni=F(),{getTransactionAuditStorePath:ib}=k(),Ao=Se(),tv=mo();vl.exports=ab;async function ab(e){let t;try{let r=sb.join(ib(),e.schema.toString());await nb.mkdirp(r),t=await ni.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{ni.createDBI(t,Ao.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),ni.createDBI(t,Ao.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),ni.createDBI(t,Ao.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(ab,"createTransactionsAuditEnvironment")});var Vl=d((sv,xl)=>{"use strict";var No=f(),ql=F(),ob=fr(),_b=require("path"),{getSystemSchemaPath:cb,getBaseSchemaPath:ub}=k(),Eb=Xt(),lb=Un(),Oo=yn(),db=p(),Sb=Gl(),po=Eb.hdb_table,Fl=[];for(let e=0;e<po.attributes.length;e++)Fl.push(po.attributes[e].attribute);xl.exports=hb;async function hb(e,t){let r=_b.join(ub(),t.schema.toString()),s=new Oo(t.schema,t.table,No.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Oo(t.schema,t.table,No.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Oo(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await ql.createEnvironment(r,t.table),e!==void 0){let o=await ql.openEnvironment(cb(),No.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await ob.insertRecords(o,po.hash_attribute,Fl,[e]),await go(s),await go(n),await go(i)}await Sb(t)}catch(o){throw o}}a(hb,"lmdbCreateTable");async function go(e){try{await lb(e)}catch(t){db.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(go,"createAttribute")});var Yl=d((nv,kl)=>{"use strict";var Tb=Dn(),fb=Hn(),Rb=qn(),br=f(),mb=fr().updateRecords,Ab=F(),Nb=require("path"),{getBaseSchemaPath:Ob}=k(),gb=Es(),pb=p();kl.exports=Ib;async function Ib(e){try{let{schema_table:t,attributes:r}=Tb(e);fb(e,r,t.hash_attribute),e.schema!==br.SYSTEM_SCHEMA_NAME&&(r.includes(br.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(br.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(br.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(br.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Rb(e.hdb_auth_header,t,r),n=Nb.join(Ob(),e.schema.toString()),i=await Ab.openEnvironment(n,e.table),o=await mb(i,t.hash_attribute,r,e.records,e[br.CLUSTERING_FLAG]!==!0);try{await gb(e,o)}catch(_){pb.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(Ib,"lmdbUpdateRecords")});var Kl=d((iv,$l)=>{"use strict";var Cb=f().OPERATIONS_ENUM,ii=class{constructor(t,r,s,n=void 0){this.operation=Cb.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(ii,"UpsertObject");$l.exports=ii});var Ql=d((ov,Wl)=>{"use strict";var av=Kl(),bb=Dn(),Lb=Hn(),wb=qn(),Lr=f(),yb=fr().upsertRecords,Ub=F(),Db=require("path"),{getBaseSchemaPath:Mb}=k(),Pb=Es(),Bb=p(),{handleHDBError:Hb,hdb_errors:vb}=q();Wl.exports=Gb;async function Gb(e){let t;try{t=bb(e)}catch(c){throw Hb(c,c.message,vb.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;Lb(e,s,r.hash_attribute),e.schema!==Lr.SYSTEM_SCHEMA_NAME&&(s.includes(Lr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Lr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Lr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Lr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await wb(e.hdb_auth_header,r,s),i=Db.join(Mb(),e.schema.toString()),o=await Ub.openEnvironment(i,e.table),_=await yb(o,r.hash_attribute,s,e.records,e[Lr.CLUSTERING_FLAG]!==!0);try{await Pb(e,_)}catch(c){Bb.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:_.written_hashes,schema_table:r,new_attributes:n,txn_time:_.txn_time}}a(Gb,"lmdbUpsertRecords")});var ed=d((_v,jl)=>{"use strict";var qb=At(),Jl=g(),Xl=p(),Fb=Cr(),Zl=f(),xb=oo().deleteRecords,Vb=F(),kb=require("path"),{getBaseSchemaPath:Yb}=k(),{promisify:$b}=require("util"),Kb=$b(setTimeout),zl=1e4,Wb=10;jl.exports=Qb;async function Qb(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(Jl.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 qb(e.schema,e.table,Zl.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await Fb(n,Zl.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw Xl.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return Jl.isEmptyOrZeroLength(s)?(Xl.trace("No records found to delete"),{message:"No records found to delete"}):await Jb(e,s,t)}a(Qb,"lmdbDeleteRecordsBefore");async function Jb(e,t,r){let s=kb.join(Yb(),e.schema.toString()),n=await Vb.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,_=t.length;o<_;o+=zl){let c=t.slice(o,o+zl),u=[];for(let E=0,l=c.length;E<l;E++)u.push(c[E][r]);try{let E=await xb(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(E.deleted),i.skipped_hashes=i.skipped_hashes.concat(E.skipped)}catch(E){throw E}await Kb(Wb)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(Jb,"chunkDeletes")});var rd=d((cv,td)=>{"use strict";var ai=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(ai,"DeleteBeforeObject");td.exports=ai});var nd=d((uv,sd)=>{"use strict";var oi=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(oi,"DeleteAuditLogsBeforeResults");sd.exports=oi});var od=d((lv,ad)=>{"use strict";var Io=F(),{getTransactionAuditStorePath:Xb}=k(),Ev=rd(),Zb=require("path"),ms=Se(),zb=g(),id=nd(),jb=require("util").promisify,eL=jb(setTimeout),tL=1e4,rL=100;ad.exports=sL;async function sL(e){let t=Zb.join(Xb(),e.schema),r=await Io.openEnvironment(t,e.table,!0),s=Io.listDBIs(r);Io.initializeDBIs(r,ms.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new id;do n=await nL(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 eL(rL);while(n.transactions_deleted>0);return i}a(sL,"deleteAuditLogsBefore");async function nL(e,t){let r=new id;try{let s=e.dbis[ms.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let _=o[ms.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];zb.isEmpty(_)||(n=e.dbis[ms.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(_,i));for(let c=0;c<o.hash_values.length;c++)n=e.dbis[ms.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[c],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>tL)break}return await n,r}catch(s){throw s}}a(nL,"deleteTransactions")});var Sd=d((dv,dd)=>{"use strict";var Co=F(),wr=Se(),_d=Wt(),bo=f(),cd=g(),{getTransactionAuditStorePath:iL}=k(),aL=require("path"),oL=pr(),_i=Ar(),_L=p();dd.exports=cL;async function cL(e){let t=aL.join(iL(),e.schema),r=await Co.openEnvironment(t,e.table,!0),s=Co.listDBIs(r);Co.initializeDBIs(r,wr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case bo.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return ud(r,e.search_values);case bo.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,EL(r,e.search_values,n);case bo.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return uL(r,e.search_values);default:return ud(r)}}a(cL,"readAuditLog");function ud(e,t=[0,_d.getMicroTime()]){cd.isEmpty(t[0])&&(t[0]=0),cd.isEmpty(t[1])&&(t[1]=_d.getMicroTime());let r=[];try{let s=e.dbis[wr.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 o=Object.assign(new _i,i);r.push(o)}return r}catch(s){throw s}}a(ud,"searchTransactionsByTimestamp");function uL(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[wr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,ld(e,i))}return Object.fromEntries(r)}a(uL,"searchTransactionsByUsername");function EL(e,t,r){let s=new Map;for(let _=0,c=t.length;_<c;_++){let u=t[_],E=oL.equals(e,wr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,wr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let l=0,h=E[0].length;l<h;l++){let S=E[0][l],A=Number(S);s.has(A)?s.get(A).push(u.toString()):s.set(A,[u.toString()])}}let n=Array.from(s.keys()),i=ld(e,n),o=new Map;for(let _=0;_<i.length;_++){let c=i[_],u=c.timestamp,E=s.get(u);Ed(c,"records",r,E,o),Ed(c,"original_records",r,E,o)}return Object.fromEntries(o)}a(EL,"searchTransactionsByHashValues");function Ed(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let _=e[t][o],c=_[r].toString();if(s.indexOf(c)>=0)if(n.has(c)){let u=n.get(c),E=u[u.length-1];if(E.timestamp===i)E[t]=[_];else{let l=new _i(e.operation,e.user_name,i,void 0);l[t]=[_],u.push(l)}}else{let u=new _i(e.operation,e.user_name,i,void 0);u[t]=[_],n.set(c,[u])}}}a(Ed,"loopRecords");function ld(e,t){let r=[];try{let s=e.dbis[wr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new _i,i);r.push(o)}}catch(i){_L.warn(i)}return r}catch(s){throw s}}a(ld,"batchSearchTransactions")});var Td=d((Sv,hd)=>{"use strict";var lL=require("path"),{getBaseSchemaPath:dL}=k(),SL=F();hd.exports={writeTransaction:hL};async function hL(e,t,r){let s=lL.join(dL(),e);return(await SL.openEnvironment(s,t)).transaction(r)}a(hL,"writeTransaction")});var Rd=d((hv,fd)=>{"use strict";var TL=require("path"),{getBaseSchemaPath:fL}=k(),RL=F();fd.exports={flush:mL};async function mL(e,t){let r=TL.join(fL(),e.toString());return(await RL.openEnvironment(r,t.toString())).flushed}a(mL,"flush")});var Ad=d((Tv,md)=>{"use strict";var j=p(),{handleHDBError:AL}=q(),NL=Pa(),OL=Un(),gL=no(),pL=UE(),IL=ls(),CL=lo(),bL=el(),LL=_l(),wL=Cr(),yL=fl(),UL=Bl(),DL=Vl(),ML=Yl(),PL=Ql(),BL=ed(),HL=od(),vL=Ro(),GL=fo(),qL=Sd(),FL=Td(),xL=Rd(),ci=class extends NL{async searchByConditions(t){try{return yL(t)}catch(r){throw j.error(r),r}}async getDataByHash(t){try{return await CL(t)}catch(r){throw j.error(r),r}}async searchByHash(t){try{return await bL(t)}catch(r){throw j.error(r),r}}async getDataByValue(t,r){try{return await LL(t,r)}catch(s){throw j.error(s),s}}async searchByValue(t){try{return await wL(t)}catch(r){throw j.error(r),r}}async createSchema(t){try{return await pL(t)}catch(r){throw j.error(r),r}}async dropSchema(t){try{return await UL(t)}catch(r){throw j.error(r),r}}async createTable(t,r){try{return await DL(t,r)}catch(s){throw j.error(s),s}}async dropTable(t){try{return await vL(t)}catch(r){throw j.error(r),r}}async createAttribute(t){try{return await OL(t)}catch(r){throw j.error(r),r}}async createRecords(t){try{return await gL(t)}catch(r){throw j.error(r),r}}async updateRecords(t){try{return await ML(t)}catch(r){throw j.error(r),r}}async upsertRecords(t){try{return await PL(t)}catch(r){throw AL(r,null,null,j.ERR,r)}}async deleteRecords(t){try{return await IL(t)}catch(r){throw j.error(r),r}}async deleteRecordsBefore(t){try{return await BL(t)}catch(r){throw j.error(r),r}}async dropAttribute(t){try{return await GL(t)}catch(r){throw j.error(r),r}}async deleteAuditLogsBefore(t){try{return await HL(t)}catch(r){throw j.error(r),r}}async readAuditLog(t){try{return await qL(t)}catch(r){throw j.error(r),r}}writeTransaction(t,r,s){return FL.writeTransaction(t,r,s)}flush(t,r){return xL.flush(t,r)}};a(ci,"LMDBBridge");md.exports=ci});var jt=d((fv,Od)=>{"use strict";var VL=Ad(),kL=Pa(),YL=Q();YL.initSync();var Nd;function $L(){return Nd instanceof kL?Nd:new VL}a($L,"getBridge");Od.exports=$L()});var Bd=d((mv,Pd)=>{"use strict";var Lo=require("recursive-iterator"),KL=require("alasql"),wo=require("clone"),gd=g(),{handleHDBError:pd,hdb_errors:WL}=q(),{HDB_ERROR_MSGS:Id,HTTP_STATUS_CODES:Cd}=WL,QL=["DISTINCT_ARRAY"],bd=Symbol("validateTables"),yo=Symbol("validateTable"),Rv=Symbol("getAllColumns"),Ld=Symbol("validateAllColumns"),ui=Symbol("findColumn"),wd=Symbol("validateOrderBy"),As=Symbol("validateSegment"),Uo=Symbol("validateColumn"),yd=Symbol("setColumnsForTable"),Ud=Symbol("checkColumnsForAsterisk"),Dd=Symbol("validateGroupBy"),Md=Symbol("hasColumns"),Ei=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[bd](),this[Ud](),this[Ld]()}[bd](){if(this[Md]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[yo](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[yo](t.table)})}}[Md](){let t=!1,r=new Lo(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[yo](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw pd(new Error,Id.SCHEMA_NOT_FOUND(t.databaseid),Cd.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw pd(new Error,Id.TABLE_NOT_FOUND(t.databaseid,t.tableid),Cd.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=wo(s);n.table=wo(t),this.attributes.push(n)})}[ui](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)}[Ud](){let t=new Lo(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[yd](r.tableid)}[yd](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new KL.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Ld](){this[As](this.statement.columns,!1),this[As](this.statement.joins,!1),this[As](this.statement.where,!1),this[Dd](this.statement.group,!1),this[As](this.statement.order,!0)}[As](t,r){if(!t)return;let s=new Lo(t),n=[];for(let{node:i,path:o}of s)!gd.isEmpty(i)&&!gd.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[wd](i):n.push(this[Uo](i)));return n}[Dd](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&QL.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=wo(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[ui](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[ui](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,_)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(_,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[wd](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[Uo](t)}[Uo](t){let r=this[ui](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};a(Ei,"SelectValidator");Pd.exports=Ei});var qd=d((Av,Gd)=>{"use strict";var Hd=require("lodash"),Ns=require("mathjs"),JL=require("jsonata"),vd=g();Gd.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Hd.uniqWith(e,Hd.isEqual):e,searchJSON:XL,mad:Os.bind(null,Ns.mad),mean:Os.bind(null,Ns.mean),mode:Os.bind(null,Ns.mode),prod:Os.bind(null,Ns.prod),median:Os.bind(null,Ns.median)};function Os(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Os,"aggregateFunction");function XL(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(vd.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),vd.isEmpty(this.__ala__.res[r])){let s=JL(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(XL,"searchJSON")});var xd=d((Nv,Fd)=>{"use strict";var Z=require("moment"),Do="YYYY-MM-DDTHH:mm:ss.SSSZZ";Z.suppressDeprecationWarnings=!0;Fd.exports={current_date:()=>Z().utc().format("YYYY-MM-DD"),current_time:()=>Z().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Z(e).utc().format("YYYY");case"month":return Z(e).utc().format("MM");case"day":return Z(e).utc().format("DD");case"hour":return Z(e).utc().format("HH");case"minute":return Z(e).utc().format("mm");case"second":return Z(e).utc().format("ss");case"millisecond":return Z(e).utc().format("SSS");default:break}},date:e=>Z(e).utc().format(Do),date_format:(e,t)=>Z(e).utc().format(t),date_add:(e,t,r)=>Z(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Z(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=Z(e).utc(),n=Z(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>Z().utc().valueOf(),get_server_time:()=>Z().format(Do),offset_utc:(e,t)=>Z(e).utc().utcOffset(t).format(Do)}});var $d=d((Ov,Yd)=>{"use strict";var ZL=require("@turf/area"),zL=require("@turf/length"),jL=require("@turf/circle"),ew=require("@turf/difference"),tw=require("@turf/distance"),rw=require("@turf/boolean-contains"),sw=require("@turf/boolean-equal"),nw=require("@turf/boolean-disjoint"),iw=require("@turf/helpers"),Vd=f(),D=g();Yd.exports={geoArea:aw,geoLength:ow,geoCircle:_w,geoDifference:cw,geoDistance:kd,geoNear:uw,geoContains:Ew,geoEqual:lw,geoCrosses:dw,geoConvert:Sw};var Mo="geo1 is required",Po="geo2 is required";function aw(e){if(D.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=D.autoCast(e)),ZL.default(e)}a(aw,"geoArea");function ow(e,t){if(D.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=D.autoCast(e)),zL.default(e,{units:t||"kilometers"})}a(ow,"geoLength");function _w(e,t,r){if(D.isEmpty(e))throw new Error("point is required");if(D.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=D.autoCast(e)),jL.default(e,t,{units:r||"kilometers"})}a(_w,"geoCircle");function cw(e,t){if(D.isEmpty(e))throw new Error("poly1 is required");if(D.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),ew(e,t)}a(cw,"geoDifference");function kd(e,t,r){if(D.isEmpty(e))throw new Error("point1 is required");if(D.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),tw.default(e,t,{units:r||"kilometers"})}a(kd,"geoDistance");function uw(e,t,r,s){if(D.isEmpty(e))throw new Error("point1 is required");if(D.isEmpty(t))throw new Error("point2 is required");if(D.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),isNaN(r))throw new Error("distance must be a number");return kd(e,t,s)<=r}a(uw,"geoNear");function Ew(e,t){if(D.isEmpty(e))throw new Error(Mo);if(D.isEmpty(e))throw new Error(Po);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),rw.default(e,t)}a(Ew,"geoContains");function lw(e,t){if(D.isEmpty(e))throw new Error(Mo);if(D.isEmpty(e))throw new Error(Po);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),sw.default(e,t)}a(lw,"geoEqual");function dw(e,t){if(D.isEmpty(e))throw new Error(Mo);if(D.isEmpty(e))throw new Error(Po);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),!nw.default(e,t)}a(dw,"geoCrosses");function Sw(e,t,r){if(D.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(D.isEmpty(t))throw new Error("geo_type is required");if(D.isEmpty(Vd.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Vd.GEO_CONVERSION_ENUM).join(",")}`);return iw[t](e,r)}a(Sw,"geoConvert")});var Wd=d((gv,Kd)=>{var er=qd(),Pe=xd(),_t=$d();Kd.exports=e=>{e.aggr.mad=e.aggr.MAD=er.mad,e.aggr.mean=e.aggr.MEAN=er.mean,e.aggr.mode=e.aggr.MODE=er.mode,e.aggr.prod=e.aggr.PROD=er.prod,e.aggr.median=e.aggr.MEDIAN=er.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=er.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=er.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Pe.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Pe.current_time,e.fn.extract=e.fn.EXTRACT=Pe.extract,e.fn.date=e.fn.DATE=Pe.date,e.fn.date_format=e.fn.DATE_FORMAT=Pe.date_format,e.fn.date_add=e.fn.DATE_ADD=Pe.date_add,e.fn.date_sub=e.fn.DATE_SUB=Pe.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Pe.date_diff,e.fn.now=e.fn.NOW=Pe.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Pe.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Pe.get_server_time,e.fn.getdate=e.fn.GETDATE=Pe.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Pe.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=_t.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=_t.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=_t.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=_t.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=_t.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=_t.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=_t.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=_t.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=_t.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=_t.geoNear}});var Xd=d((pv,Jd)=>{"use strict";var gs=require("lodash"),oe=require("alasql");oe.options.cache=!1;var hw=Wd(),Qd=require("clone"),li=require("recursive-iterator"),L=p(),y=g(),yr=jt(),Tw=f(),{hdb_errors:fw}=q(),Rw="IS NULL",ps="There was a problem performing this search. Please check the logs and try again.";hw(oe);var di=class{constructor(t,r){if(y.isEmpty(t))throw L.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(),y.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!y.isEmptyOrZeroLength(s))return L.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw L.error("Error thrown from checkEmptySQL in SQLSearch class method search."),L.error(s),new Error(ps)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw L.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),L.error(s),new Error(ps)}if(Object.keys(this.data).length===0)return L.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw L.error("Error thrown from processJoins in SQLSearch class method search."),L.error(s),new Error(ps)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw L.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),L.error(s),new Error(ps)}try{return t=await this._finalSQL(),t}catch(s){throw L.error("Error thrown from finalSQL in SQLSearch class method search."),L.error(s),new Error(ps)}}_getColumns(){let t=new li(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(Qd(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=gs.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(y.isEmpty(this.statement.where)){L.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new li(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!y.isEmpty(r)&&r.right)if(y.isNotEmptyAndHasValue(r.right.value)){let s=y.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new oe.yy.LogicValue({value:s}):r.right instanceof oe.yy.StringValue&&!y.isEmpty(s)&&y.autoCasterIsNumberCheck(s.toString())&&(r.right=new oe.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=y.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new oe.yy.LogicValue({value:i}):s instanceof oe.yy.StringValue&&y.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new oe.yy.NumValue({value:i}))});if(t){L.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new li(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!y.isEmpty(Tw.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(y.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(y.isEmptyOrZeroLength(r.left.columnid)||y.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(y.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let _=!1;switch(r.op){case"=":!y.isEmpty(r.right.value)||!y.isEmpty(r.left.value)?s.add(y.isEmpty(r.right.value)?r.left.value:r.right.value):_=!0;break;case"IN":let c=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<c.length;u++)if(c[u].value)s.add(c[u].value);else{_=!0;break}break;default:_=!0;break}this.exact_search_values[o].ignore=_,_?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(y.isEmptyOrZeroLength(this.all_table_attributes)&&y.isEmptyOrZeroLength(this.statement.from)&&y.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&&gs.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(y.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);y.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(y.isEmptyOrZeroLength(this.all_table_attributes)&&!y.isEmptyOrZeroLength(this.columns.columns))return t;if(y.isEmptyOrZeroLength(this.all_table_attributes)&&y.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await oe.promise(r)}catch(r){throw L.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),L.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(Qd(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(y.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(Rw)>-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=gs.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,_=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,_)),i.attribute!==_&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,_={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},c=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(c=!0),!y.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!y.isEmptyOrZeroLength(this.exact_search_values[u].values))if(c)try{_.hash_values=Array.from(this.exact_search_values[u].values);let E=await yr.getDataByHash(_);for(let l of _.hash_values)l in E&&!this.data[i].__merged_data[l]&&(this.data[i].__merged_data[l]=[...s[i]],this._setMergedHashAttribute(i,l))}catch(E){L.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),L.error(E)}else try{_.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async E=>{let l=Object.assign({},_);l.search_value=E;let h=await yr.getDataByValue(l);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,y.autoCast(S)))}))}catch(E){L.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),L.error(E)}else if(!y.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!y.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let E=this.comparator_search_values[u].comparators;for(let l=0,h=E.length;l<h;l++){let S=E[l];_.search_attribute=S.attribute,_.search_value=S.search_value;let A=await yr.getDataByValue(_,S.operation);if(c)for(let N in A)this.data[i].__merged_data[N]||(this.data[i].__merged_data[N]=[...s[i]],this._setMergedHashAttribute(i,y.autoCast(N)));else for(let N in A)this.data[i].__merged_data[N]?this._updateMergedAttribute(i,N,n.attribute,A[N][n.attribute]):(this.data[i].__merged_data[N]=[...s[i]],this._updateMergedAttribute(i,N,n.attribute,A[N][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(N)))}}catch(E){L.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),L.error(E)}else try{_.search_attribute=n.attribute,_.search_value="*";let E=await yr.getDataByValue(_);if(c)for(let l in E)this.data[i].__merged_data[l]||(this.data[i].__merged_data[l]=[...s[i]],this._setMergedHashAttribute(i,y.autoCast(l)));else for(let l in E)this.data[i].__merged_data[l]?this._updateMergedAttribute(i,l,n.attribute,E[l][n.attribute]):(this.data[i].__merged_data[l]=[...s[i]],this._updateMergedAttribute(i,l,n.attribute,E[l][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(l)))}catch(E){L.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),L.error(E)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof oe.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new oe.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new oe.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new oe.yy.FuncValue:new oe.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(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 o=[],_={};n.forEach(S=>{let A=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__hash_name,N=S.as?S.as_orig:S.tableid_orig;o.push({key:`'${N}.${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 "${N}.${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 E="",l="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(E=this.statement.limit?"LIMIT "+this.statement.limit:"",l=this.statement.offset?"OFFSET "+this.statement.offset:"");let h=[];try{let S=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${c} ${u} ${E} ${l}`,A=this._convertColumnsToIndexes(S,n);h=await oe.promise(A,t),t=null}catch(S){throw L.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),L.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 N=h[S];o.forEach(b=>{N[b.key]!==null&&N[b.key]!==void 0&&b.keys.add(N[b.key])})}o.forEach(S=>{let A=Object.keys(this.data[`${S.schema}_${S.table}`].__merged_data),N=gs.difference(A,[...S.keys].map(b=>b.toString()));for(let b=0,Ae=N.length;b<Ae;b++){let v=N[b];delete this.data[`${S.schema}_${S.table}`].__merged_data[v]}})}return{existing_attributes:_,joined_length:h?h.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new li(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let _=o.table.as?o.table.as:o.table.tableid;(!t[_]||t[_].indexOf(o.attribute)<0)&&s.push(o)}}s=gs.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){L.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),L.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,o=[];for(let E in i)o.push(i[E][0]);this.data[s].__merged_attributes.push(...n.columns);let _={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},c=await yr.getDataByHash(_),u=n.columns.length;for(let E=0,l=o.length;E<l;E++){let h=o[E],S=c[h];for(let A=0;A<u;A++){let N=n.columns[A],b=S[N]===void 0?null:S[N];this.data[s].__merged_data[h].push(b)}}}}catch(r){throw L.error("Error thrown from getDataByHash function in SQLSearch class method getData."),L.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let _=o.aggregatorid?o.expression:o,c=o.aggregatorid?o.as_orig:_.as_orig;return n.expression.tableid?_.columnid_orig===n.expression.columnid_orig&&_.tableid_orig===n.expression.tableid_orig:_.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===c}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();L.trace(`Final SQL: ${n}`),s=await oe.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),L.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw L.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),L.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 L.error(fw.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),L.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=n[i],u=new RegExp(`${c}.\`${o}\``,"g"),E=`${c}.[${_}]`;s=s.replace(u,E)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=new RegExp(`\`${o}\``,"g"),u=`[${_}]`;s=s.replace(c,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await yr.getDataByValue(i);for(let _ in o)this.data[n].__merged_data[_]||(this.data[n].__merged_data[_]=Object.assign({},r[n])),this.data[n].__merged_data[_][t[s.attribute]]=o[_][s.attribute]}catch(o){L.error("There was an error when processing this SQL operation. Check your logs"),L.error(o)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(di,"SQLSearch");Jd.exports=di});var Is=d((Iv,zd)=>{"use strict";var mw=Bd();zd.exports={searchByConditions:gw,searchByHash:pw,searchByValue:Iw,search:Cw};var Bo=jt(),Zd=require("util"),Aw=Zd.callbackify(Bo.searchByHash),Nw=Zd.callbackify(Bo.searchByValue),Ow=Xd();async function gw(e){return Bo.searchByConditions(e)}a(gw,"searchByConditions");function pw(e,t){try{Aw(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(pw,"searchByHash");function Iw(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),Nw(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(Iw,"searchByValue");function Cw(e,t){try{let r=new mw(e);r.validate(),new Ow(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(Cw,"search")});var bs=d((Cv,rS)=>{"use strict";var Cs=require("crypto"),eS="aes-256-cbc",bw=32,Lw=16,Ho=64,tS=32,ww=Ho+tS,jd=new Map;rS.exports={encrypt:yw,decrypt:Uw,createNatsTableStreamName:Dw};function yw(e){let t=Cs.randomBytes(bw),r=Cs.randomBytes(Lw),s=Cs.createCipheriv(eS,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),_=n.toString("hex");return i+o+_}a(yw,"encrypt");function Uw(e){let t=e.substr(0,Ho),r=e.substr(Ho,tS),s=e.substr(ww,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Cs.createDecipheriv(eS,Buffer.from(t,"hex"),n),_=o.update(i);return _=Buffer.concat([_,o.final()]),_.toString()}a(Uw,"decrypt");function Dw(e,t){let r=`${e}.${t}`,s=jd.get(r);return s||(s=Cs.createHash("md5").update(`${e}.${t}`).digest("hex"),jd.set(r,s)),s}a(Dw,"createNatsTableStreamName")});var fi=d((bv,cS)=>{"use strict";var nS=Is(),Bt=p(),iS=bn(),Mw=require("lodash"),Pw=require("path"),Bw=bs(),vo=g(),{promisify:aS}=require("util"),x=f(),{handleHDBError:Si,hdb_errors:Hw}=q(),{HDB_ERROR_MSGS:hi,HTTP_STATUS_CODES:oS}=Hw,vw=Q();vw.initSync();var sS=F(),Gw=k(),Ls=aS(nS.searchByValue),qw=aS(nS.searchByHash),Ur="name",_S="hash_attribute",Go="schema",Fw="schema_table",xw="attribute";cS.exports={describeAll:Vw,describeTable:Ti,describeSchema:Yw};async function Vw(e){try{let t=vo.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:Ur,search_value:x.WILDCARD_SEARCH_VALUE,get_attributes:[Ur]},i=await Ls(n);if(vo.isEmptyOrZeroLength(i))return{};let o={},_={};for(let h in i)o[i[h].name]=!0,!t&&!s&&(_[i[h].name]=r[i[h].name].describe);let c={schema:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:x.ID_ATTRIBUTE_STRING,search_value:x.WILDCARD_SEARCH_VALUE,get_attributes:[_S,x.ID_ATTRIBUTE_STRING,Ur,Go]},u=await Ls(c),E=[];for(let h of u)try{let S;if(t||s)S=await Ti({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 Ti({schema:h.schema,table:h.name},A)}S&&E.push(S)}catch(S){Bt.error(S)}let l={};for(let h in E)t||s?(l[E[h].schema]==null&&(l[E[h].schema]={}),l[E[h].schema][E[h].name]=E[h],o[E[h].schema]&&delete o[E[h].schema]):_[E[h].schema]&&(l[E[h].schema]==null&&(l[E[h].schema]={}),l[E[h].schema][E[h].name]=E[h],o[E[h].schema]&&delete o[E[h].schema]);for(let h in o)t||s?l[h]={}:_[h]&&(l[h]={});return l}catch(t){return Bt.error("Got an error in describeAll"),Bt.error(t),Si(new Error,hi.DESCRIBE_ALL_ERR)}}a(Vw,"describeAll");async function Ti(e,t){let{schema:r,table:s}=e;r=r.toString(),s=s.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i={},o=iS.describe_table(e);if(o)throw o;if(r===x.SYSTEM_SCHEMA_NAME)return global.hdb_schema[x.SYSTEM_SCHEMA_NAME][s];let _={schema:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:x.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Ur,search_value:s,hash_values:[],get_attributes:[x.WILDCARD_SEARCH_VALUE]},c=await Ls(_);if(!c||c.length===0)throw Si(new Error,hi.TABLE_NOT_FOUND(e.schema,e.table),oS.NOT_FOUND);for await(let u of c)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw Si(new Error,hi.INVALID_TABLE_ERR(i));let E={schema:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:x.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:Fw,search_value:r+"."+s,get_attributes:[xw]},l=await Ls(E);l=Mw.uniqBy(l,h=>h.attribute),n&&n.length>0&&(l=kw(n)),i.attributes=l,i.clustering_stream_name=Bw.createNatsTableStreamName(u.schema,u.name);try{let h=Pw.join(Gw.getBaseSchemaPath(),i.schema.toString()),S=await sS.openEnvironment(h,i.name),A=sS.statDBI(S,i.hash_attribute);i.record_count=A.entryCount}catch(h){Bt.warn(`unable to stat table dbi due to ${h}`)}}catch(E){Bt.error(`There was an error getting attributes for table '${u.name}'`),Bt.error(E)}return i}a(Ti,"descTable");function kw(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(kw,"getAttrsByPerms");async function Yw(e){let t=iS.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:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:x.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Go,search_value:s,hash_values:[],get_attributes:[_S,x.ID_ATTRIBUTE_STRING,Ur,Go]},i=await Ls(n);if(i&&i.length<1){let o={schema:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:x.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[Ur]},_=await qw(o);if(_&&_.length<1)throw Si(new Error,hi.SCHEMA_NOT_FOUND(e.schema),oS.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async _=>{try{let c;if(r&&r.tables[_.name]&&(c=r.tables[_.name]),vo.isEmpty(c)||c.describe){let u=await Ti({schema:e.schema,table:_.name},c?c.attribute_permissions:null);u&&(o[u.name]=u)}}catch(c){Bt.error(`Error describing schema table '${e.schema}.${_}'`),Bt.error(c)}})),o}}a(Yw,"describeSchema")});var Ri=d((yv,SS)=>{var Lv=require("async"),Dr=Xt(),wv=p(),{callbackify:lS,promisify:$w}=require("util");SS.exports={setSchemaDataToGlobal:uS,getTableSchema:Qw,getSystemSchema:Xw,setSchemaDataToGlobalAsync:$w(uS)};var dS=fi(),Kw=lS(dS.describeAll),Ww=lS(dS.describeTable);function uS(e){Kw(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Dr),global.hdb_schema=r,e(null,null)})}a(uS,"setSchemaDataToGlobal");function ES(e,t){return e==="system"?Dr[t]:global.hdb_schema[e][t]}a(ES,"returnSchema");function Qw(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?Jw(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,ES(e,t))}):r(null,ES(e,t))}a(Qw,"getTableSchema");function Jw(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=Dr:global.hdb_schema={system:Dr},r();return}Ww(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:Dr}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(Jw,"setTableDataToGlobal");function Xw(){return Dr}a(Xw,"getSystemSchema")});var Oi=d((Uv,fS)=>{"use strict";var Ai=Ma(),xe=g(),Zw=require("util"),Ni=jt(),zw=Ri(),qo=p(),{handleHDBError:Ht,hdb_errors:jw}=q(),{HTTP_STATUS_CODES:tr}=jw,ey=Zw.promisify(zw.getTableSchema),ty="updated",hS="inserted",TS="upserted";fS.exports={insert:sy,update:ny,upsert:iy,validation:ry,flush:ay};async function ry(e){if(xe.isEmpty(e))throw new Error("invalid update parameters defined.");if(xe.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(xe.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await ey(e.schema,e.table),r=Ai(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(_=>{if(o&&xe.isEmptyOrZeroLength(_[s]))throw qo.error("a valid hash attribute must be provided with update record:",_),new Error("a valid hash attribute must be provided with update record");if(!xe.isEmptyOrZeroLength(_[s])&&(_[s]==="null"||_[s]==="undefined"))throw qo.error(`a valid hash value must be provided with ${e.operation} record:`,_),new Error(`"${_[s]}" is not a valid hash attribute value`);!xe.isEmpty(_[s])&&_[s]!==""&&n.has(xe.autoCast(_[s]))&&(_.skip=!0),n.add(xe.autoCast(_[s]));for(let c in _)i[c]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(ry,"validation");async function sy(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Ai(e);if(t)throw Ht(new Error,t.message,tr.BAD_REQUEST);let r=xe.checkSchemaTableExist(e.schema,e.table);if(r)throw Ht(new Error,r,tr.BAD_REQUEST);try{let s=await Ni.createRecords(e);return mi(hS,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}a(sy,"insertData");async function ny(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Ai(e);if(t)throw Ht(new Error,t.message,tr.BAD_REQUEST);let r=xe.checkSchemaTableExist(e.schema,e.table);if(r)throw Ht(new Error,r,tr.BAD_REQUEST);try{let s=await Ni.updateRecords(e);return xe.isEmpty(s.existing_rows)?mi(ty,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):mi(s.update_action,[],e,s.hashes,void 0,s.txn_time)}catch(s){throw s}}a(ny,"updateData");async function iy(e){if(e.operation!=="upsert")throw Ht(new Error,"invalid operation, must be upsert",tr.INTERNAL_SERVER_ERROR);let t=Ai(e);if(t)throw Ht(new Error,t.message,tr.BAD_REQUEST);let r=xe.checkSchemaTableExist(e.schema,e.table);if(r)throw Ht(new Error,r,tr.BAD_REQUEST);try{let s=await Ni.upsertRecords(e);return mi(TS,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw Ht(s,null,null,qo.ERR,n)}}a(iy,"upsertData");function mi(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===hS?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===TS?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(mi,"returnObject");function ay(e){return Ni.flush(e.schema,e.table)}a(ay,"flush")});var mS=d((Dv,RS)=>{var oy=We(),_y={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};RS.exports=function(e){return oy.validateObject(e,_y)}});var gS=d((Mv,OS)=>{var cy=We(),Fo=require("joi"),{hdb_schema_table:AS}=Kt(),NS={schema:AS,table:AS},uy={date:Fo.date().iso().required()},Ey={timestamp:Fo.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};OS.exports=function(e,t){let r=t==="timestamp"?{...NS,...Ey}:{...NS,...uy},s=Fo.object(r);return cy.validateBySchema(e,s)}});var bS=d((Pv,CS)=>{var ly=We(),pS=require("joi"),{hdb_schema_table:IS}=Kt(),dy=pS.object({schema:IS,table:IS,hash_values:pS.array().required()});CS.exports=function(e){return ly.validateBySchema(e,dy)}});var wS=d((Bv,LS)=>{"use strict";var gi=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(gi,"InsertObject");var pi=class{constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}};a(pi,"NoSQLSeachObject");var Ii=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(Ii,"DeleteResponseObject");LS.exports={InsertObject:gi,NoSQLSeachObject:pi,DeleteResponseObject:Ii}});var ko=d((Hv,PS)=>{"use strict";var US=gS(),Sy=bS(),Ci=g(),yS=require("moment"),DS=p(),{promisify:hy,callbackify:Ty}=require("util"),rr=f(),fy=Ri(),xo=hy(fy.getTableSchema),Vo=jt(),{DeleteResponseObject:Ry}=wS(),{handleHDBError:vt,hdb_errors:my}=q(),{HDB_ERROR_MSGS:bi,HTTP_STATUS_CODES:Gt}=my,Ay="records successfully deleted",Ny=Ty(MS);PS.exports={delete:Ny,deleteRecord:MS,deleteFilesBefore:Oy,deleteAuditLogsBefore:gy};async function Oy(e){let t=US(e,"date");if(t)throw vt(t,t.message,Gt.BAD_REQUEST,void 0,void 0,!0);if(!yS(e.date,yS.ISO_8601).isValid())throw vt(new Error,bi.INVALID_DATE,Gt.BAD_REQUEST,rr.LOG_LEVELS.ERROR,bi.INVALID_DATE,!0);let s=Ci.checkSchemaTableExist(e.schema,e.table);if(s)throw vt(new Error,s,Gt.NOT_FOUND,rr.LOG_LEVELS.ERROR,s,!0);try{let n=await Vo.deleteRecordsBefore(e);if(await xo(e.schema,e.table),DS.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}a(Oy,"deleteFilesBefore");async function gy(e){let t=US(e,"timestamp");if(t)throw vt(t,t.message,Gt.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw vt(new Error,bi.INVALID_VALUE("Timestamp"),Gt.BAD_REQUEST,rr.LOG_LEVELS.ERROR,bi.INVALID_VALUE("Timestamp"),!0);let r=Ci.checkSchemaTableExist(e.schema,e.table);if(r)throw vt(new Error,r,Gt.NOT_FOUND,rr.LOG_LEVELS.ERROR,r,!0);try{let s=await Vo.deleteAuditLogsBefore(e);return await xo(e.schema,e.table),DS.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}a(gy,"deleteAuditLogsBefore");async function MS(e){let t=Sy(e);if(t)throw vt(t,t.message,Gt.BAD_REQUEST,void 0,void 0,!0);let r=Ci.checkSchemaTableExist(e.schema,e.table);if(r)throw vt(new Error,r,Gt.NOT_FOUND,rr.LOG_LEVELS.ERROR,r,!0);try{await xo(e.schema,e.table);let s=await Vo.deleteRecords(e);return Ci.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${Ay}`),s}catch(s){if(s.message===rr.SEARCH_NOT_FOUND_MESSAGE){let n=new Ry;return n.message=rr.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(MS,"deleteRecord")});var Li=d((vv,vS)=>{var py=require("crypto"),BS=9;function Iy(e){let t=by(BS),r=HS(e+t);return t+r}a(Iy,"createHash");function Cy(e,t){let r=e.substr(0,BS),s=r+HS(t+r);return e===s}a(Cy,"validateHash");function by(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(by,"generateSalt");function HS(e){return py.createHash("md5").update(e).digest("hex")}a(HS,"md5");vS.exports={hash:Iy,validate:Cy}});var qS=d((Gv,GS)=>{var Yo=We(),fe={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 Ly(e){return fe.password.presence=!0,fe.username.presence=!0,fe.role.presence=!0,fe.active.presence=!0,Yo.validateObject(e,fe)}a(Ly,"addUserValidation");function wy(e){return fe.password.presence=!1,fe.username.presence=!0,fe.role.presence=!1,fe.active.presence=!1,Yo.validateObject(e,fe)}a(wy,"alterUserValidation");function yy(e){return fe.password.presence=!1,fe.username.presence=!0,fe.role.presence=!1,fe.active.presence=!1,Yo.validateObject(e,fe)}a(yy,"dropUserValidation");GS.exports={addUserValidation:Ly,alterUserValidation:wy,dropUserValidation:yy}});var Re=d((Fv,xS)=>{"use strict";var{platform:qv}=require("os"),Uy="nats-server.zip",$o="nats-server",Dy=process.platform==="win32"?`${$o}.exe`:$o,Ko="HDB",My=/^[^\s.,*>]+$/,FS="__request__",Py=a(e=>`${e}.${FS}`,"REQUEST_SUBJECT"),By={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Hy={HUB:"hub.pid",LEAF:"leaf.pid"},vy={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Gy={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Ko,deliver_subject:"__HDB__.WORKQUEUE"},qy={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Ko,deliver_subject:"HDB.SCHEMAQUEUE"},Fy={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Ko,deliver_subject:"HDB.USERQUEUE"},xy={SUCCESS:"success",ERROR:"error"},Vy={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},ky={TXN:"txn",MSGID:"msgid"};xS.exports={NATS_SERVER_ZIP:Uy,NATS_SERVER_NAME:$o,NATS_BINARY_NAME:Dy,PID_FILES:Hy,NATS_CONFIG_FILES:By,SERVER_SUFFIX:vy,WORK_QUEUE_CONSUMER_NAMES:Gy,SCHEMA_QUEUE_CONSUMER_NAMES:qy,USER_QUEUE_CONSUMER_NAMES:Fy,NATS_TERM_CONSTRAINTS_RX:My,REQUEST_SUFFIX:FS,UPDATE_REMOTE_RESPONSE_STATUSES:xy,CLUSTER_STATUS_STATUSES:Vy,REQUEST_SUBJECT:Py,SUBJECT_PREFIXES:ky}});var kS=d((xv,VS)=>{"use strict";var qt=f(),ws=class{constructor(t=0,r=qt.STORAGE_TYPES_ENUM.LMDB,s=qt.LICENSE_VALUES.API_CALL_DEFAULT,n=qt.RAM_ALLOCATION_ENUM.DEFAULT,i=qt.LICENSE_VALUES.VERSION_DEFAULT,o){this.exp_date=t,this.storage_type=r,this.api_call=s,this.ram_allocation=n,this.version=i,this.fingerprint=o}};a(ws,"BaseLicense");var wi=class extends ws{constructor(t=0,r=qt.STORAGE_TYPES_ENUM.LMDB,s=qt.LICENSE_VALUES.API_CALL_DEFAULT,n=qt.RAM_ALLOCATION_ENUM.DEFAULT,i=qt.LICENSE_VALUES.VERSION_DEFAULT,o,_=!1){super(t,r,s,n,i,o),this.enterprise=_}};a(wi,"ExtendedLicense");VS.exports={BaseLicense:ws,ExtendedLicense:wi}});var Zo=d((Vv,JS)=>{"use strict";var Pr=require("fs-extra"),YS=Li(),$S=require("crypto"),Yy=require("moment"),$y=require("uuid").v4,me=p(),Qo=require("path"),Ky=g(),Be=f(),Wy=kS().ExtendedLicense,Mr="invalid license key format",Qy="061183",Jy="mofi25",Xy="aes-256-cbc",Zy=16,zy=32,KS=Q();KS.initSync();var Wo;JS.exports={validateLicense:WS,generateFingerPrint:eU,licenseSearch:QS,getLicense:sU};function Jo(){return Qo.join(KS.getHdbBasePath(),Be.LICENSE_KEY_DIR_NAME,Be.LICENSE_FILE_NAME)}a(Jo,"getLicenseDirPath");function jy(){let e=Jo();return Qo.join(e,Be.LICENSE_FILE_NAME)}a(jy,"getLicenseFilePath");function Xo(){let e=Jo();return Qo.join(e,Be.REG_KEY_FILE_NAME)}a(Xo,"getFingerPrintFilePath");async function eU(){let e=Xo();try{return await Pr.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await tU();throw me.error(`Error writing fingerprint file to ${e}`),me.error(t),new Error("There was an error generating the fingerprint")}}a(eU,"generateFingerPrint");async function tU(){let e=$y(),t=YS.hash(e),r=Xo();try{await Pr.mkdirp(Jo()),await Pr.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}a(tU,"writeFingerprint");function WS(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Be.STORAGE_TYPES_ENUM.LMDB,api_call:Be.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Be.RAM_ALLOCATION_ENUM.DEFAULT,version:Be.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return me.error("empty license key passed to validate."),r;let s=Xo(),n=!1;try{n=Pr.statSync(s)}catch(i){me.error(i)}if(n){let i;try{i=Pr.readFileSync(s,"utf8")}catch{me.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(Jy),_=o[1];_=Buffer.concat([Buffer.from(_)],Zy);let c=Buffer.concat([Buffer.from(i)],zy),u=$S.createDecipheriv(Xy,c,_);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let E=null;try{E=u.update(o[0],"hex","utf8"),E.trim(),E+=u.final("utf8")}catch{let S=rU(o[0],i);if(S)E=S;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Mr),me.error(Mr),new Error(Mr)}let l;if(isNaN(E))try{l=JSON.parse(E),r.api_call=l.api_call,r.version=l.version,r.storage_type=l.storage_type,r.exp_date=l.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),l.ram_allocation&&(r.ram_allocation=l.ram_allocation)}catch{throw console.error(Mr),me.error(Mr),new Error(Mr)}else r.exp_date=E;r.exp_date<Yy().valueOf()&&(r.valid_date=!1),YS.validate(o[1],`${Qy}${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}a(WS,"validateLicense");function rU(e,t){try{let r=$S.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{me.warn("Check old license failed")}}a(rU,"checkOldLicense");function QS(){let e=new Wy;e.api_call=0;let t=[];try{t=Pr.readFileSync(jy(),"utf-8").split(Be.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(Ky.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=WS(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=Be.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Be.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Be.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Be.LICENSE_VALUES.API_CALL_DEFAULT),Wo=e,e}a(QS,"licenseSearch");async function sU(){return Wo||await QS(),Wo}a(sU,"getLicense")});var Us=d((kv,ch)=>{"use strict";var jS="username is required",eh="nothing to update, must supply active, role or password to update",th="password cannot be an empty string",rh="If role is specified, it cannot be empty.",sh="active must be true or false";ch.exports={addUser:EU,alterUser:lU,dropUser:SU,userInfo:hU,listUsers:Ui,listUsersExternal:TU,setUsersToGlobal:ys,findAndValidateUser:mU,getClusterUser:AU,USERNAME_REQUIRED:jS,ALTERUSER_NOTHING_TO_UPDATE:eh,EMPTY_PASSWORD:th,EMPTY_ROLE:rh,ACTIVE_BOOLEAN:sh};var nh=Oi(),nU=ko(),jo=Li(),ih=qS(),ah=Is(),e_=us(),re=g(),oh=require("validate.js"),w=p(),{promisify:t_}=require("util"),r_=bs(),sr=f(),XS=Re(),iU=zr(),s_=Q(),aU=Zo(),oU=Xt(),{handleHDBError:ct,hdb_errors:_U}=q(),{HTTP_STATUS_CODES:ut,AUTHENTICATION_ERROR_MSGS:zo,HDB_ERROR_MSGS:Br}=_U,{UserEventMsg:n_}=mr(),ZS=require("lodash"),_h={username:!0,active:!0,role:!0,password:!0},zS=new Map,yi=t_(ah.searchByValue),cU=t_(ah.searchByHash),uU=t_(nU.delete);async function EU(e){let t=oh.cleanAttributes(e,_h),r=ih.addUserValidation(t);if(r)throw ct(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 yi(s)}catch(u){throw w.error("There was an error searching for a role in add user"),w.error(u),u}if(!n||n.length<1)throw ct(new Error,Br.ROLE_NAME_NOT_FOUND(t.role),ut.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw ct(new Error,Br.DUP_ROLES_FOUND(t.role),ut.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=r_.encrypt(t.password)),t.password=jo.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await nh.insert(i)}catch(u){throw w.error("There was an error searching for a user."),w.error(u),u}w.debug(o);try{await ys()}catch(u){throw w.error("Got an error setting users to global"),w.error(u),u}if(o.skipped_hashes.length===1)throw ct(new Error,Br.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=_,re.sendTransactionToSocketCluster(sr.INTERNAL_SC_CHANNELS.ADD_USER,c,s_.get(sr.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),e_.signalUserChange(new n_(process.pid)),`${_.username} successfully added`}a(EU,"addUser");async function lU(e){let t=oh.cleanAttributes(e,_h);if(re.isEmptyOrZeroLength(t.username))throw new Error(jS);if(re.isEmptyOrZeroLength(t.password)&&re.isEmptyOrZeroLength(t.role)&&re.isEmptyOrZeroLength(t.active))throw new Error(eh);if(!re.isEmpty(t.password)&&re.isEmptyOrZeroLength(t.password.trim()))throw new Error(th);if(!re.isEmpty(t.active)&&!re.isBoolean(t.active))throw new Error(sh);let r=dU(t.username);if(!re.isEmpty(t.password)&&!re.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=r_.encrypt(t.password)),t.password=jo.hash(t.password)),t.role==="")throw new Error(rh);if(t.role){let o={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},_;try{_=await yi(o)}catch(c){throw w.error("Got an error searching for a role."),w.error(c),c}if(!_||_.length===0){let c=Br.ALTER_USER_ROLE_NOT_FOUND(t.role);throw w.error(c),ct(new Error,c,ut.NOT_FOUND,void 0,void 0,!0)}if(_.length>1){let c=Br.ALTER_USER_DUP_ROLES(t.role);throw w.error(c),ct(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 nh.update(s)}catch(o){throw w.error("Error during update."),w.error(o),o}try{await ys()}catch(o){throw w.error("Got an error setting users to global"),w.error(o),o}let i={user:null};return i.user=t,re.sendTransactionToSocketCluster(sr.INTERNAL_SC_CHANNELS.ALTER_USER,i,s_.get(sr.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),e_.signalUserChange(new n_(process.pid)),n}a(lU,"alterUser");function dU(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(dU,"isClusterUser");async function SU(e){try{let t=ih.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(re.isEmpty(global.hdb_users.get(e.username)))throw ct(new Error,Br.USER_NOT_EXIST(e.username),ut.NOT_FOUND,void 0,void 0,!0);let s;try{s=await uU(r)}catch(i){throw w.error("Got an error deleting a user."),w.error(i),i}w.debug(s);try{await ys()}catch(i){throw w.error("Got an error setting users to global."),w.error(i),i}let n={user:null};return n.user=e,re.sendTransactionToSocketCluster(sr.INTERNAL_SC_CHANNELS.DROP_USER,n,s_.get(sr.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),e_.signalUserChange(new n_(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(SU,"dropUser");async function hU(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 cU(r)}catch(n){throw w.error("Got an error searching for a role."),w.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw w.error(r),r}return t}a(hU,"userInfo");async function TU(){let e;try{e=await Ui()}catch(t){throw w.error("Got an error listing users."),w.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(TU,"listUsersExternal");async function Ui(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=ZS.cloneDeep(await yi(e))}catch(r){throw w.error("Got an error searching for roles."),w.error(r),r}if(!re.isEmptyOrZeroLength(t)){let r={};for(let o in t)r[t[o].id]=t[o];let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=ZS.cloneDeep(await yi(s))}catch(o){throw w.error("Got an error searching for users."),w.error(o),o}let i=new Map;for(let o in n){let _=n[o];_.role=r[n[o].role],fU(_.role),i.set(_.username,_)}return(await aU.getLicense()).enterprise?i:RU(i)}}catch(e){throw w.error("got an error listing users"),w.error(e),re.errorizeMessage(e)}return null}a(Ui,"listUsers");function fU(e){try{if(!e){w.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(oU)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){w.error("Got an error trying to set system permissions."),w.error(t)}}a(fU,"appendSystemTablesToRole");function RU(e){try{if(w.info("No enterprise license found. System is limited to 1 clustering role and 1 user role"),!e)return new Map;let t=Object.create(null),r=new Map;e.forEach((n,i)=>{n.role.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?(w.error("No roles found with active users. This is bad."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return w.error("error filtering users."),w.error(t),new Map}}a(RU,"nonEnterpriseFilter");async function ys(){try{let e=await Ui();global.hdb_users=e}catch(e){throw w.error(e),e}}a(ys,"setUsersToGlobal");async function mU(e,t,r=!0){global.hdb_users||await ys();let s=global.hdb_users.get(e);if(!s)throw ct(new Error,zo.GENERIC_AUTH_FAIL,ut.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw ct(new Error,zo.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(zS.get(t)===s.password)return n;if(jo.validate(s.password,t))zS.set(t,s.password);else throw ct(new Error,zo.GENERIC_AUTH_FAIL,ut.UNAUTHORIZED,void 0,void 0,!0)}return n}a(mU,"findAndValidateUser");async function AU(){let e=await Ui(),t=iU.getConfigFromFile(sr.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!re.isEmpty(r))return r.decrypt_hash=r_.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+XS.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+XS.SERVER_SUFFIX.ADMIN,r}a(AU,"getClusterUser")});var Eh=d((Yv,uh)=>{"use strict";var NU=f().OPERATIONS_ENUM,Di=class{constructor(t,r,s,n=void 0){this.operation=NU.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Di,"UpdateObject");uh.exports=Di});var dh=d(($v,lh)=>{"use strict";var OU={OPERATION:"operation",REFRESH:"refresh"},Mi=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(Mi,"JWTTokens");var Pi=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(Pi,"JWTRSAKeys");lh.exports={JWTTokens:Mi,TOKEN_TYPE_ENUM:OU,JWTRSAKeys:Pi}});var Rh=d((Kv,fh)=>{"use strict";var Ms=require("jsonwebtoken"),i_=require("fs-extra"),a_=g(),Ve=f(),{handleHDBError:be,hdb_errors:gU}=q(),{HTTP_STATUS_CODES:Le,AUTHENTICATION_ERROR_MSGS:we}=gU,Ds=p(),Sh=Li(),c_=Us(),pU=Oi().update,IU=Eh(),CU=us(),{UserEventMsg:bU}=mr(),Ft=Q();Ft.initSync();var o_=require("path"),{JWTTokens:LU,JWTRSAKeys:wU,TOKEN_TYPE_ENUM:Bi}=dh(),yU=Ft.get(Ve.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Ft.get(Ve.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",UU=Ft.get(Ve.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Ft.get(Ve.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Hi="RS256",__;fh.exports={createTokens:DU,validateOperationToken:PU,refreshOperationToken:MU,validateRefreshToken:Th};async function DU(e){if(a_.isEmpty(e)||typeof e!="object")throw be(new Error,we.INVALID_AUTH_OBJECT,Le.BAD_REQUEST,void 0,void 0,!0);if(a_.isEmpty(e.username))throw be(new Error,we.USERNAME_REQUIRED,Le.BAD_REQUEST,void 0,void 0,!0);if(a_.isEmpty(e.password))throw be(new Error,we.PASSWORD_REQUIRED,Le.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await c_.findAndValidateUser(e.username,e.password),!t)throw be(new Error,we.INVALID_CREDENTIALS,Le.UNAUTHORIZED,void 0,void 0,!0)}catch(h){throw Ds.error(h),be(new Error,we.INVALID_CREDENTIALS,Le.UNAUTHORIZED,void 0,void 0,!0)}let r=await vi(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await hh(i,r.private_key,r.passphrase),_=await Ms.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:UU,algorithm:Hi,subject:Bi.REFRESH}),c=Sh.hash(_),u=new IU(Ve.SYSTEM_SCHEMA_NAME,Ve.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:c}]),E,l;try{E=await pU(u)}catch(h){Ds.error(h),l=h}if(l!==void 0||E.skipped_hashes.length>0)throw be(new Error,we.REFRESH_TOKEN_SAVE_FAILED,Le.INTERNAL_SERVER_ERROR);return CU.signalUserChange(new bU(process.pid)),new LU(o,_)}a(DU,"createTokens");async function hh(e,t,r){return await Ms.sign(e,{key:t,passphrase:r},{expiresIn:yU,algorithm:Hi,subject:Bi.OPERATION})}a(hh,"signOperationToken");async function vi(){if(__===void 0)try{let e=o_.join(Ft.getHdbBasePath(),Ve.LICENSE_KEY_DIR_NAME,Ve.JWT_ENUM.JWT_PASSPHRASE_NAME),t=o_.join(Ft.getHdbBasePath(),Ve.LICENSE_KEY_DIR_NAME,Ve.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=o_.join(Ft.getHdbBasePath(),Ve.LICENSE_KEY_DIR_NAME,Ve.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await i_.readFile(e)).toString(),n=(await i_.readFile(t)).toString(),i=(await i_.readFile(r)).toString();__=new wU(i,n,s)}catch(e){throw Ds.error(e),be(new Error,we.NO_ENCRYPTION_KEYS,Le.INTERNAL_SERVER_ERROR)}return __}a(vi,"getJWTRSAKeys");async function MU(e){if(!e)throw be(new Error,we.INVALID_BODY,Le.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw be(new Error,we.REFRESH_TOKEN_REQUIRED,Le.BAD_REQUEST,void 0,void 0,!0);await Th(e.refresh_token);let t=await vi(),r=await Ms.decode(e.refresh_token);return{operation_token:await hh({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(MU,"refreshOperationToken");async function PU(e){try{let t=await vi(),r=await Ms.verify(e,t.public_key,{algorithms:Hi,subject:Bi.OPERATION});return await c_.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Ds.warn(t),t.name&&t.name==="TokenExpiredError"?be(new Error,we.TOKEN_EXPIRED,Le.FORBIDDEN):be(new Error,we.INVALID_TOKEN,Le.UNAUTHORIZED)}}a(PU,"validateOperationToken");async function Th(e){let t;try{let r=await vi(),s=await Ms.verify(e,r.public_key,{algorithms:Hi,subject:Bi.REFRESH});t=await c_.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Ds.warn(r),r.name&&r.name==="TokenExpiredError"?be(new Error,we.TOKEN_EXPIRED,Le.FORBIDDEN):be(new Error,we.INVALID_TOKEN,Le.UNAUTHORIZED)}if(!Sh.validate(t.refresh_token,e))throw be(new Error,we.INVALID_TOKEN,Le.UNAUTHORIZED);return t}a(Th,"validateRefreshToken")});var Oh=d((Qv,Nh)=>{"use strict";var BU=mS(),Hr=require("passport"),HU=require("passport-local").Strategy,vU=require("passport-http").BasicStrategy,GU=require("util"),qU=Us(),Ah=GU.callbackify(qU.findAndValidateUser),Wv=He(),FU=f(),mh=Rh();Hr.use(new HU(function(e,t,r){Ah(e,t,r)}));Hr.use(new vU(function(e,t,r){Ah(e,t,r)}));Hr.serializeUser(function(e,t){t(null,e)});Hr.deserializeUser(function(e,t){t(null,e)});function xU(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,_){return o?r(o):_?r(null,_):r("User not found")}switch(a(i,"handleResponse"),s){case"Basic":Hr.authenticate("basic",{session:!1},(o,_)=>{i(o,_)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===FU.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?mh.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):mh.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Hr.authenticate("local",{session:!1},function(o,_){i(o,_)})(e,t,r);break}}a(xU,"authorize");function VU(e,t){let r=BU(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n||!n.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let _ in o)e.attributes.indexOf(o[_].attribute_name)>-1&&!o[_][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[_].attribute_name} `))}return t(null,s)}a(VU,"checkPermissions");Nh.exports={authorize:xU,checkPermissions:VU}});var Ps=d((Jv,gh)=>{"use strict";var Gi=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(Gi,"Node");var qi=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(qi,"NodeSubscription");gh.exports={Node:Gi,NodeSubscription:qi}});var Ih=d((Xv,ph)=>{"use strict";var kU=f().OPERATIONS_ENUM,Fi=class{constructor(t,r,s,n=void 0){this.operation=kU.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Fi,"UpsertObject");ph.exports=Fi});var Bs=d((Zv,Ch)=>{"use strict";var xi=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(xi,"RemotePayloadObject");var Vi=class{constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o}};a(Vi,"RemotePayloadSubscription");Ch.exports={RemotePayloadObject:xi,RemotePayloadSubscription:Vi}});var Lh=d((zv,bh)=>{"use strict";var ki=class{constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};a(ki,"TableSizeObject");bh.exports=ki});var Dh=d((jv,Uh)=>{"use strict";var YU=Lh(),wh=require("path"),yh=k(),$U=Se(),vr=F(),KU=p();Uh.exports=WU;async function WU(e){let t=new YU;try{let r=wh.join(yh.getBaseSchemaPath(),e.schema.toString()),s=await vr.openEnvironment(r,e.name),n=vr.statDBI(s,e.hash_attribute),i=wh.join(yh.getTransactionAuditStorePath(),e.schema.toString()),o=await vr.openEnvironment(i,e.name,!0),_=vr.statDBI(o,$U.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),c=await vr.environmentDataSize(r,e.name),u=await vr.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){KU.warn(`unable to stat table dbi due to ${r}`)}return t}a(WU,"lmdbGetTableSize")});var Ph=d((eG,Mh)=>{"use strict";var QU=f(),Yi=class{constructor(t){this.operator=QU.OPERATIONS_ENUM.SYSTEM_INFORMATION,this.attributes=t}};a(Yi,"SystemInformationOperation");Mh.exports=Yi});var Hh=d((tG,Bh)=>{"use strict";var $i=class{constructor(t,r,s,n,i,o,_){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=_}};a($i,"SystemInformationObject");Bh.exports=$i});var Gh=d((sG,vh)=>{"use strict";var _e=require("systeminformation"),Gr=p(),JU=f(),XU=Dh(),ZU=fi(),zU=Q();zU.initSync();var rG=Ph(),jU=Hh(),Ki;vh.exports={getHDBProcessInfo:d_,getNetworkInfo:h_,getDiskInfo:S_,getMemoryInfo:l_,getCPUInfo:E_,getTimeInfo:u_,getSystemInformation:T_,systemInformation:eD,getTableSize:f_};function u_(){return _e.time()}a(u_,"getTimeInfo");async function E_(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:_,socket:c,cache:u,...E}=await _e.cpu();E.cpu_speed=await _e.cpuCurrentSpeed();let{raw_currentload:l,raw_currentload_idle:h,raw_currentload_irq:S,raw_currentload_nice:A,raw_currentload_system:N,raw_currentload_user:b,cpus:Ae,...v}=await _e.currentLoad();return v.cpus=[],Ae.forEach(W=>{let{raw_load:$e,raw_load_idle:Ks,raw_load_irq:$_,raw_load_nice:K_,raw_load_system:W_,raw_load_user:Ws,...Ct}=W;v.cpus.push(Ct)}),E.current_load=v,E}catch(e){return Gr.error(`error in getCPUInfo: ${e}`),{}}}a(E_,"getCPUInfo");async function l_(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await _e.mem();return n}catch(e){return Gr.error(`error in getMemoryInfo: ${e}`),{}}}a(l_,"getMemoryInfo");async function d_(){let e={core:[],clustering:[]};try{return(await _e.processes()).list.forEach(r=>{r.params.includes(JU.HDB_PROC_NAME)?e.core.push(r):r.params.includes("socketcluster")&&e.clustering.push(r)}),e}catch(t){return Gr.error(`error in getHDBProcessInfo: ${t}`),e}}a(d_,"getHDBProcessInfo");async function S_(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await _e.disksIO();e.io=i;let{rx_sec:o,tx_sec:_,wx_sec:c,...u}=await _e.fsStats();return e.read_write=u,e.size=await _e.fsSize(),e}catch(t){return Gr.error(`error in getDiskInfo: ${t}`),e}}a(S_,"getDiskInfo");async function h_(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await _e.networkInterfaceDefault(),e.latency=await _e.inetChecksite("google.com"),(await _e.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:_,dnsSuffix:c,ieee8021xAuth:u,ieee8021xState:E,carrier_changes:l,...h}=s;e.interfaces.push(h)}),(await _e.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,..._}=s;e.stats.push(_)}),e.connections=await _e.networkConnections(),e}catch(t){return Gr.error(`error in getNetworkInfo: ${t}`),e}}a(h_,"getNetworkInfo");async function T_(){if(Ki!==void 0)return Ki;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,..._}=await _e.osInfo();e=_;let c=await _e.versions("node, npm");return e.node_version=c.node,e.npm_version=c.npm,Ki=e,Ki}catch(t){return Gr.error(`error in getSystemInformation: ${t}`),e}}a(T_,"getSystemInformation");async function f_(){let e=[],t=await ZU.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await XU(s));return e}a(f_,"getTableSize");async function eD(e){let t=new jU;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await T_(),t.time=u_(),t.cpu=await E_(),t.memory=await l_(),t.disk=await S_(),t.network=await h_(),t.harperdb_processes=await d_(),t.table_size=await f_(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await T_();break;case"time":t.time=u_();break;case"cpu":t.cpu=await E_();break;case"memory":t.memory=await l_();break;case"disk":t.disk=await S_();break;case"network":t.network=await h_();break;case"harperdb_processes":t.harperdb_processes=await d_();break;case"table_size":t.table_size=await f_();break;default:break}return t}a(eD,"systemInformation")});var R_=d((nG,tD)=>{tD.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 Fh=d((oG,qh)=>{"use strict";var iG=require("fs-extra"),aG=p();qh.exports={version:rD,printVersion:nD,nodeVersion:sD};var xt=R_();function rD(){if(xt)return xt.version}a(rD,"version");function sD(){if(xt&&xt.engines&&xt.engines["preferred-node"])return xt.engines["preferred-node"]}a(sD,"nodeVersion");function nD(){xt&&console.log(`HarperDB Version ${xt.version}`)}a(nD,"printVersion")});var qr=d((uG,Yh)=>{"use strict";var iD=Oi(),m_=g(),A_=require("util"),nr=f(),xh=Q();xh.initSync();var aD=Oh(),Vh=Is(),{Node:_G,NodeSubscription:cG}=Ps(),oD=fs(),_D=Ih(),{RemotePayloadObject:cD,RemotePayloadSubscription:uD}=Bs(),{handleHDBError:ED,hdb_errors:lD}=q(),{HTTP_STATUS_CODES:dD,HDB_ERROR_MSGS:SD}=lD,hD=At(),TD=Gh(),fD=Fh(),RD=A_.promisify(aD.authorize),mD=A_.promisify(Vh.searchByHash),AD=A_.promisify(Vh.searchByValue);Yh.exports={authHeaderToUser:ND,isEmpty:OD,getNodeRecord:gD,upsertNodeRecord:pD,buildNodePayloads:ID,checkClusteringEnabled:CD,getAllNodeRecords:bD,getSystemInfo:LD,reverseSubscription:kh};async function ND(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await RD(t,null),e}a(ND,"authHeaderToUser");function OD(e){return e==null}a(OD,"isEmpty");async function gD(e){let t=new oD(nr.SYSTEM_SCHEMA_NAME,nr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return mD(t)}a(gD,"getNodeRecord");async function pD(e){let t=new _D(nr.SYSTEM_SCHEMA_NAME,nr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return iD.upsert(t)}a(pD,"upsertNodeRecord");function kh(e){if(m_.isEmpty(e.subscribe)||m_.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(kh,"reverseSubscription");function ID(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let _=e[i],{schema:c,table:u}=_,E=m_.getTableHashAttribute(c,u),{subscribe:l,publish:h}=kh(_),S=new uD(c,u,E,h,l,_.start_time);n.push(S)}return new cD(r,t,n,s)}a(ID,"buildNodePayloads");function CD(){if(!xh.get(nr.CONFIG_PARAMS.CLUSTERING_ENABLED))throw ED(new Error,SD.CLUSTERING_NOT_ENABLED,dD.BAD_REQUEST,void 0,void 0,!0)}a(CD,"checkClusteringEnabled");async function bD(){let e=new hD(nr.SYSTEM_SCHEMA_NAME,nr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return AD(e)}a(bD,"getAllNodeRecords");async function LD(){let e=await TD.getSystemInformation();return{hdb_version:fD.version(),node_version:e.node_version,platform:e.platform}}a(LD,"getSystemInfo")});var Kh=d((EG,$h)=>{"use strict";var wD=jt();$h.exports={writeTransaction:yD};function yD(e,t,r){return wD.writeTransaction(e,t,r)}a(yD,"writeTransaction")});var Vt=d((OG,lT)=>{"use strict";var Et=Q();Et.initSync();var UD=require("fs-extra"),DD=require("semver"),Fs=require("path"),{monotonicFactory:MD}=require("ulidx"),PD=MD(),Qh=require("util"),Jh=require("child_process"),BD=Qh.promisify(Jh.exec),HD=Jh.spawn,V=Re(),$=f(),C_=g(),gt=p(),Wi=bs(),vD=Kh(),Hs=zr(),{encode:g_,decode:Xh}=require("msgpackr"),{isEmpty:ir}=C_,Zh=Us(),lG=fs(),GD=Is(),dG=Qh.promisify(GD.searchByHash),{connect:qD,StorageType:zh,RetentionPolicy:jh,AckPolicy:eT,DeliverPolicy:p_,NatsConnection:SG,JetStreamManager:hG,JetStreamClient:TG,StringCodec:fG,JSONCodec:FD,createInbox:b_,StreamSource:RG,headers:xD,toJsMsg:VD,nuid:mG,JetStreamOptions:AG,ErrorCode:Wh,nanos:NG}=require("nats"),{PACKAGE_ROOT:kD}=f(),YD=R_(),tT=FD(),$D="clustering",KD=YD.engines[V.NATS_SERVER_NAME],WD=Fs.join(kD,"dependencies"),I_=Fs.join(WD,`${process.platform}-${process.arch}`,V.NATS_BINARY_NAME),N_,O_,vs,Gs,qs,tt;lT.exports={runCommand:rT,checkNATSServerInstalled:QD,createConnection:L_,getConnection:Qi,getJetStreamManager:Fr,getJetStream:sT,getNATSReferences:ke,getServerList:XD,createLocalStream:w_,listStreams:nT,deleteLocalStream:ZD,getServerConfig:xs,listRemoteStreams:zD,viewStream:jD,publishToStream:eM,createWorkQueueStream:tM,addSourceToWorkStream:iT,request:rM,removeSourceFromWorkStream:oT,reloadNATS:y_,reloadNATSHub:sM,reloadNATSLeaf:nM,extractServerName:aT,requestErrorHandler:iM,updateWorkStream:aM,createLocalTableStream:cT,createTableStreams:oM,purgeTableStream:uT,purgeSchemaTableStreams:_M,getStreamInfo:cM,updateNodeNameLocalStreams:uM,closeConnection:JD};async function rT(e,t=void 0){let{stdout:r,stderr:s}=await BD(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
1
|
+
"use strict";var vf=Object.defineProperty;var a=(e,t)=>vf(e,"name",{value:t,configurable:!0});var d=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var f=d((SB,ac)=>{"use strict";var de=require("path"),Gf=require("fs");function qf(){let e=__dirname;for(;!Gf.existsSync(de.join(e,"package.json"));){let t=de.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(qf,"getHDBPackageRoot");var Ke=qf(),Q_="js",Jr=Q_,Ff="harperdb-config.yaml",xf="defaultConfig.yaml",Vf="hdb",J_=`hdbServer.${Jr}`,X_=`customFunctionsServer.${Jr}`,Z_=`hdbIpcServer.${Jr}`,kf=`restartHdb.${Jr}`,Na="HarperDB",Js="Custom Functions",Xs="Clustering Hub",Zs="Clustering Leaf",Oa="Clustering Ingest Service",ga="Clustering Reply Service",Yf="foreground.pid",Aa={HDB:Na,IPC:"IPC",CLUSTERING_HUB:Xs,CLUSTERING_LEAF:Zs,CLUSTERING_INGEST_SERVICE:Oa,CLUSTERING_REPLY_SERVICE:ga,CUSTOM_FUNCTIONS:Js,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"},$f={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"},Kf={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},Wf={harperdb:Na,ipc:"IPC","clustering hub":Xs,"clustering leaf":Zs,"clustering ingest service":Oa,"clustering reply service":ga,"custom functions":Js,custom_functions:Js,"pm2-logrotate":Aa.PM2_LOGROTATE,logrotate:Aa.PM2_LOGROTATE,clustering:"clustering","clustering config":"clustering config"},Qf={CLUSTERING_HUB_PROC_DESCRIPTOR:Xs,CLUSTERING_LEAF_PROC_DESCRIPTOR:Zs,CLUSTERING_INGEST_PROC_DESCRIPTOR:Oa,CLUSTERING_REPLY_SERVICE_DESCRIPTOR:ga},Qs={HDB:de.join(Ke,"server/harperdb"),IPC:de.join(Ke,"server/ipc"),CUSTOM_FUNCTIONS:de.join(Ke,"server/customFunctions"),CLUSTERING_HUB:de.join(Ke,"server/nats"),CLUSTERING_LEAF:de.join(Ke,"server/nats")},Jf={HDB:de.join(Qs.HDB,J_),IPC:de.join(Qs.IPC,Z_),CUSTOM_FUNCTIONS:de.join(Qs.CUSTOM_FUNCTIONS,X_)},Xf={HDB:de.join(Ke,"launchServiceScripts/launchHarperDB.js"),CUSTOM_FUNCTIONS:de.join(Ke,"launchServiceScripts/launchCustomFunctions.js"),NATS_INGEST_SERVICE:de.join(Ke,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:de.join(Ke,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:de.resolve(Ke,"launchServiceScripts/launchUpdateNodes4-0-0.js")},Zf={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},z_="support@harperdb.io",zf="customer-success@harperdb.io",j_=1,jf=4141,ec="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",eR="https://www.harperdb.io/product",tR=`For support, please submit a request at ${ec} or contact ${z_}`,tc=`For license support, please contact ${zf}`,rR="None of the specified records were found.",sR="hash attribute not found",nR=`Your current license only supports ${j_} role. ${tc}`,iR="Your current license only supports 3 connections to a node.",aR="127.0.0.1",oR=1,_R=/^\.$/,cR=/^\.\.$/,uR="U+002E",ER=/\//g,lR="U+002F",dR=/U\+002F/g,SR=/^U\+002E$/,hR=/^U\+002EU\+002E$/,TR="d",fR=999999,RR="*",mR="--max-old-space-size=",AR="system",NR="__hdb_hash",OR=".harperdb",gR=".hdb",pR="keys",IR="hdb_boot_properties.file",CR=".updateConfig.json",bR="SIGTSTP",LR=24,wR=6e4,yR=448,UR="blob",DR="trash",MR="schema",PR="transactions",BR=".count",HR="id",vR="install_log.log",GR="run_log.log",qR="PROCESS_NAME",FR={SETTINGS_PATH_KEY:"settings_path"},rc=require("lodash"),xR={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"},VR={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},kR={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},YR={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"},$R={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"},Ue="hdb_internal:",KR={CREATE_SCHEMA:Ue+"create_schema",CREATE_TABLE:Ue+"create_table",CREATE_ATTRIBUTE:Ue+"create_attribute",ADD_USER:Ue+"add_user",ALTER_USER:Ue+"alter_user",DROP_USER:Ue+"drop_user",HDB_NODES:Ue+"hdb_nodes",HDB_USERS:Ue+"hdb_users",HDB_WORKERS:Ue+"hdb_workers",CATCHUP:Ue+"catchup",SCHEMA_CATCHUP:Ue+"schema_catchup",WORKER_ROOM:Ue+"cluster_workers"},WR={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"},QR="060493.ks",JR=".license",XR={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},R={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"},ZR={CSV:".csv",JSON:".json"},zR={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key"},jR={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},bt={};bt[R.CREATE_SCHEMA]=R.CREATE_SCHEMA;bt[R.CREATE_TABLE]=R.CREATE_TABLE;bt[R.CREATE_ATTRIBUTE]=R.CREATE_ATTRIBUTE;bt[R.INSERT]=R.INSERT;bt[R.UPDATE]=R.UPDATE;bt[R.UPSERT]=R.UPSERT;bt[R.DELETE]=R.DELETE;var H=Object.create(null);H[R.DESCRIBE_ALL]=R.DESCRIBE_ALL;H[R.DESCRIBE_TABLE]=R.DESCRIBE_TABLE;H[R.DESCRIBE_SCHEMA]=R.DESCRIBE_SCHEMA;H[R.READ_LOG]=R.READ_LOG;H[R.ADD_NODE]=R.ADD_NODE;H[R.LIST_USERS]=R.LIST_USERS;H[R.LIST_ROLES]=R.LIST_ROLES;H[R.USER_INFO]=R.USER_INFO;H[R.SQL]=R.SQL;H[R.GET_JOB]=R.GET_JOB;H[R.SEARCH_JOBS_BY_START_DATE]=R.SEARCH_JOBS_BY_START_DATE;H[R.DELETE_FILES_BEFORE]=R.DELETE_FILES_BEFORE;H[R.EXPORT_LOCAL]=R.EXPORT_LOCAL;H[R.EXPORT_TO_S3]=R.EXPORT_TO_S3;H[R.CLUSTER_STATUS]=R.CLUSTER_STATUS;H[R.REMOVE_NODE]=R.REMOVE_NODE;H[R.RESTART]=R.RESTART;H[R.CUSTOM_FUNCTIONS_STATUS]=R.CUSTOM_FUNCTIONS_STATUS;H[R.GET_CUSTOM_FUNCTIONS]=R.GET_CUSTOM_FUNCTIONS;H[R.GET_CUSTOM_FUNCTION]=R.GET_CUSTOM_FUNCTION;H[R.SET_CUSTOM_FUNCTION]=R.SET_CUSTOM_FUNCTION;H[R.DROP_CUSTOM_FUNCTION]=R.DROP_CUSTOM_FUNCTION;H[R.ADD_CUSTOM_FUNCTION_PROJECT]=R.ADD_CUSTOM_FUNCTION_PROJECT;H[R.DROP_CUSTOM_FUNCTION_PROJECT]=R.DROP_CUSTOM_FUNCTION_PROJECT;H[R.PACKAGE_CUSTOM_FUNCTION_PROJECT]=R.PACKAGE_CUSTOM_FUNCTION_PROJECT;H[R.DEPLOY_CUSTOM_FUNCTION_PROJECT]=R.DEPLOY_CUSTOM_FUNCTION_PROJECT;var em={RUN:"run",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade"},tm={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},sc={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"},rm=rc.invert(sc),T={CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_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"},sm={hdb_root_key:T.ROOTPATH,hdb_root:T.ROOTPATH,server_port_key:T.OPERATIONSAPI_NETWORK_PORT,server_port:T.OPERATIONSAPI_NETWORK_PORT,cert_key:T.OPERATIONSAPI_TLS_CERTIFICATE,certificate:T.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:T.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:T.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:T.OPERATIONSAPI_NETWORK_HTTPS,https_on:T.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:T.OPERATIONSAPI_NETWORK_CORS,cors_on:T.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:T.LOGGING_LEVEL,log_level:T.LOGGING_LEVEL,log_path_key:T.LOGGING_ROOT,log_path:T.LOGGING_ROOT,log_daily_rotate:T.LOGGING_ROTATION_ROTATE,log_rotate:T.LOGGING_ROTATION_ROTATE,log_rotate_max_size:T.LOGGING_ROTATION_MAXSIZE,log_rotate_retain:T.LOGGING_ROTATION_RETAIN,log_rotate_compress:T.LOGGING_ROTATION_COMPRESS,log_rotate_date_format:T.LOGGING_ROTATION_DATEFORMAT,log_rotate_rotate_module:T.LOGGING_ROTATION_ROTATEMODULE,log_rotate_worker_interval:T.LOGGING_ROTATION_WORKERINTERVAL,log_rotate_rotate_interval:T.LOGGING_ROTATION_ROTATEINTERVAL,log_rotate_timezone:T.LOGGING_ROTATION_TIMEZONE,props_env_key:T.OPERATIONSAPI_NODEENV,node_env:T.OPERATIONSAPI_NODEENV,clustering_node_name_key:T.CLUSTERING_NODENAME,node_name:T.CLUSTERING_NODENAME,clustering_enabled_key:T.CLUSTERING_ENABLED,clustering:T.CLUSTERING_ENABLED,max_http_threads:T.HTTP_THREADS,max_hdb_processes:T.HTTP_THREADS,server_timeout_key:T.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:T.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:T.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:T.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:T.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:T.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:T.LOGGING_AUDITLOG,disable_transaction_log:T.LOGGING_AUDITLOG,operation_token_timeout_key:T.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:T.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:T.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:T.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,ipc_server_port:T.IPC_NETWORK_PORT,custom_functions_enabled_key:T.CUSTOMFUNCTIONS_ENABLED,custom_functions:T.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:T.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:T.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:T.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:T.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:T.HTTP_THREADS,log_to_file:T.LOGGING_FILE,log_to_stdstreams:T.LOGGING_STDSTREAMS,run_in_foreground:T.OPERATIONSAPI_FOREGROUND,local_studio_on:T.LOCALSTUDIO_ENABLED,clustering_port:T.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:T.CLUSTERING_USER,clustering_enabled:T.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:T.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:T.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:T.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:T.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:T.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:T.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:T.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_nodename:T.CLUSTERING_NODENAME,clustering_tls_certificate:T.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:T.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:T.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:T.CLUSTERING_TLS_INSECURE,customfunctions_enabled:T.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:T.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:T.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:T.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:T.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:T.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:T.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:T.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:T.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:T.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:T.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:T.CUSTOMFUNCTIONS_NODEENV,http_threads:T.HTTP_THREADS,customfunctions_processes:T.HTTP_THREADS,customfunctions_root:T.CUSTOMFUNCTIONS_ROOT,ipc_network_port:T.IPC_NETWORK_PORT,localstudio_enabled:T.LOCALSTUDIO_ENABLED,logging_file:T.LOGGING_FILE,logging_level:T.LOGGING_LEVEL,logging_root:T.LOGGING_ROOT,logging_rotation_compress:T.LOGGING_ROTATION_COMPRESS,logging_rotation_dateformat:T.LOGGING_ROTATION_DATEFORMAT,logging_rotation_maxsize:T.LOGGING_ROTATION_MAXSIZE,logging_rotation_retain:T.LOGGING_ROTATION_RETAIN,logging_rotation_rotate:T.LOGGING_ROTATION_ROTATE,logging_rotation_rotateinterval:T.LOGGING_ROTATION_ROTATEINTERVAL,logging_rotation_rotatemodule:T.LOGGING_ROTATION_ROTATEMODULE,logging_rotation_timezone:T.LOGGING_ROTATION_TIMEZONE,logging_rotation_workerinterval:T.LOGGING_ROTATION_WORKERINTERVAL,logging_stdstreams:T.LOGGING_STDSTREAMS,logging_auditlog:T.LOGGING_AUDITLOG,operationsapi_authentication_operationtokentimeout:T.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:T.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:T.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:T.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:T.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:T.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:T.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:T.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:T.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:T.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_network_timeout:T.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:T.OPERATIONSAPI_NODEENV,operationsapi_root:T.ROOTPATH,rootpath:T.ROOTPATH,storage_writeasync:T.STORAGE_WRITEASYNC,storage_overlappingsync:T.STORAGE_OVERLAPPINGSYNC},nm={csv_file_load:"csv_file_load",csv_data_load:R.CSV_DATA_LOAD,csv_url_load:R.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"},im={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"},am={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},om={FILE_SYSTEM:"fs",LMDB:"lmdb"},_m={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},cm={DEVELOPMENT:8192,DEFAULT:512},um={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"},Em={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"},lm={ENOENT:"ENOENT",EACCES:"EACCES"},nc={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},dm="__clustering__",Sm=Object.values(nc),hm=15984864e5,ic={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Tm=rc.invert(ic),fm={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"},Rm=111,mm=`\r
|
|
2
|
+
`,Am={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Nm=["*","%"],Om="unauthorized_access",gm="func_val",pm={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Im={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},Cm="hdb_ipc_server",bm="hdb_ipc_client_",Lm={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"},wm={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},ym={STOPPED:"stopped",ONLINE:"online"},Um="3.x.x";ac.exports={LOCAL_HARPERDB_OPERATIONS:H,HDB_SUPPORT_ADDRESS:z_,HDB_SUPPORT_URL:ec,HDB_PRICING_URL:eR,SUPPORT_HELP_MSG:tR,LICENSE_HELP_MSG:tc,HDB_PROC_NAME:J_,HDB_PROC_DESCRIPTOR:Na,CLUSTERING_LEAF_PROC_DESCRIPTOR:Zs,CLUSTERING_HUB_PROC_DESCRIPTOR:Xs,SYSTEM_SCHEMA_NAME:AR,HASH_FOLDER_NAME:NR,HDB_HOME_DIR_NAME:OR,UPDATE_FILE_NAME:CR,LICENSE_KEY_DIR_NAME:pR,BOOT_PROPS_FILE_NAME:IR,JOB_TYPE_ENUM:nm,JOB_STATUS_ENUM:XR,SYSTEM_TABLE_NAMES:YR,SYSTEM_TABLE_HASH_ATTRIBUTES:$R,OPERATIONS_ENUM:R,VALID_S3_FILE_TYPES:ZR,S3_BUCKET_AUTH_KEYS:zR,VALID_SQL_OPS_ENUM:jR,GEO_CONVERSION_ENUM:tm,HDB_SETTINGS_NAMES:sc,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:rm,SERVICE_ACTIONS_ENUM:em,CLUSTER_MESSAGE_TYPE_ENUM:im,CLUSTER_CONNECTION_DIRECTION_ENUM:am,CLUSTER_EVENTS_DEFS_ENUM:um,PERIOD_REGEX:_R,DOUBLE_PERIOD_REGEX:cR,UNICODE_PERIOD:uR,FORWARD_SLASH_REGEX:ER,UNICODE_FORWARD_SLASH:lR,ESCAPED_FORWARD_SLASH_REGEX:dR,ESCAPED_PERIOD_REGEX:SR,ESCAPED_DOUBLE_PERIOD_REGEX:hR,REG_KEY_FILE_NAME:QR,RESTART_TIMEOUT_MS:wR,HDB_FILE_PERMISSIONS:yR,SCHEMA_DIR_NAME:MR,TRANSACTIONS_DIR_NAME:PR,LIMIT_COUNT_NAME:BR,ID_ATTRIBUTE_STRING:HR,INSERT_MODULE_ENUM:VR,UPGRADE_JSON_FIELD_NAMES_ENUM:kR,RESTART_CODE:bR,RESTART_CODE_NUM:LR,CLUSTER_OPERATIONS:bt,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:WR,HDB_INTERNAL_SC_CHANNEL_PREFIX:Ue,INTERNAL_SC_CHANNELS:KR,CLUSTERING_MESSAGE_TYPES:fm,HDB_FILE_SUFFIX:gR,BLOB_FOLDER_NAME:UR,HDB_TRASH_DIR:DR,ORIGINATOR_SET_VALUE:Rm,LICENSE_VALUES:_m,RAM_ALLOCATION_ENUM:cm,STORAGE_TYPES_ENUM:om,TIME_STAMP_NAMES_ENUM:nc,TIME_STAMP_NAMES:Sm,PERMS_UPDATE_RELEASE_TIMESTAMP:hm,SEARCH_NOT_FOUND_MESSAGE:rR,SEARCH_ATTRIBUTE_NOT_FOUND:sR,LICENSE_ROLE_DENIED_RESPONSE:nR,LICENSE_MAX_CONNS_REACHED:iR,BASIC_LICENSE_MAX_NON_CU_ROLES:j_,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:jf,VALUE_SEARCH_COMPARATORS:ic,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:Tm,LICENSE_FILE_NAME:JR,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:Em,NEW_LINE:mm,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:oR,MOMENT_DAYS_TAG:TR,API_TURNOVER_SEC:fR,LOOPBACK:aR,CODE_EXTENSION:Jr,WILDCARD_SEARCH_VALUE:RR,NODE_ERROR_CODES:lm,JAVASCRIPT_EXTENSION:Q_,PERMS_CRUD_ENUM:Am,UNAUTHORIZED_PERMISSION_NAME:Om,SEARCH_WILDCARDS:Nm,FUNC_VAL:gm,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:pm,JWT_ENUM:Im,CLUSTERING_FLAG:dm,RUN_LOG:GR,INSTALL_LOG:vR,IPC_SERVER_MODULE:Z_,HDB_IPC_SERVER:Cm,IPC_EVENT_TYPES:Lm,HDB_IPC_CLIENT_PREFIX:bm,CUSTOM_FUNCTION_PROC_NAME:X_,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Js,SERVICES:wm,MEM_SETTING_KEY:mR,HDB_RESTART_SCRIPT:kf,PROCESS_DESCRIPTORS:Aa,SERVICE_SERVERS:Jf,SERVICE_SERVERS_CWD:Qs,PROCESS_DESCRIPTORS_VALIDATE:Wf,LAUNCH_SERVICE_SCRIPTS:Xf,LOG_LEVELS:Kf,PROCESS_NAME_ENV_PROP:qR,PROCESS_LOG_NAMES:$f,PM2_PROCESS_STATUSES:ym,CONFIG_PARAM_MAP:sm,CONFIG_PARAMS:T,HDB_CONFIG_FILE:Ff,HDB_DEFAULT_CONFIG_FILE:xf,ROLE_TYPES_ENUM:Zf,BOOT_PROP_PARAMS:FR,INSTALL_PROMPTS:xR,HDB_ROOT_DIR_NAME:Vf,CLUSTERING_PROCESSES:Qf,FOREGROUND_PID_FILE:Yf,PACKAGE_ROOT:Ke,PRE_4_0_0_VERSION:Um}});var uc=d((hB,cc)=>{"use strict";var oc=require("minimist");cc.exports=Dm;function Dm(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=_c(process.env),s=_c(oc(process.argv))):(r=process.env,s=oc(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let _=e[i];s[_]!==void 0?n[_]=s[_].toString().trim():r[_]!==void 0&&(n[_]=r[_].toString().trim())}return n}a(Dm,"assignCMDENVVariables");function _c(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(_c,"objKeysToLowerCase")});var p=d((TB,fc)=>{"use strict";var kt=require("fs-extra"),Yt=require("path"),lc=require("yaml"),dc=require("properties-reader"),z=f(),Mm=uc(),Pm=require("os"),{PACKAGE_ROOT:Ca}=f(),Oe={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},zs=Yt.join(Ca,"logs"),Lt=process.env.pm_id===void 0,Bm=Yt.join(Ca,"config/yaml/",z.HDB_DEFAULT_CONFIG_FILE),ba=process.env.PROCESS_NAME===void 0?z.PROCESS_DESCRIPTORS.INSTALL:process.env.PROCESS_NAME,Er,st,St,Ne,pa,lr;lr===void 0&&Sc();fc.exports={createLogFile:Hm,notify:qm,fatal:Fm,error:Ia,warn:xm,info:vm,debug:Gm,trace:Tc,setLogLevel:km,log_level:Ne};function Sc(){try{if(lr===void 0){let e=Vm();lr=dc(e),{level:Ne,config_log_path:pa,to_file:st,to_stream:St}=Ym(lr.get("settings_path"))}}catch(e){if(lr=void 0,e.code===z.NODE_ERROR_CODES.ENOENT){let t=Mm(Object.keys(z.CONFIG_PARAM_MAP),!0);for(let i in t){let o=z.CONFIG_PARAM_MAP[i];o&&o.toLowerCase();let _=t[i];if(o===z.CONFIG_PARAMS.LOGGING_LEVEL){Ne=_;continue}if(o===z.CONFIG_PARAMS.LOGGING_STDSTREAMS){St=_;continue}o===z.CONFIG_PARAMS.LOGGING_FILE&&(st=o)}let{default_level:r,default_to_file:s,default_to_stream:n}=$m();st=st===void 0?s:st,st=Ec(st),St=St===void 0?n:St,St=Ec(St),Ne=Ne===void 0?r:Ne,pa=zs;return}throw Ia("Error initializing log settings"),Ia(e),e}}a(Sc,"initLogSettings");function Hm(e,t){if(!Lt){Tc("createLogFile should only be used if the process is not being managed by pm2");return}lr===void 0&&Sc(),ba=t;let r;e===z.PROCESS_LOG_NAMES.INSTALL?r=zs:r=pa,st&&(Er=Yt.join(r,e),kt.ensureFileSync(Er))}a(Hm,"createLogFile");function $t(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1;for(let o=0;o<n;o++){let _=t[o];_ instanceof Error&&_.stack?s+=_.stack:typeof _=="object"?s+=JSON.stringify(_):s+=_,o<i&&(s+=" ")}return`{"process_name": "${ba}", "level": "${e}", "timestamp": "${r}", "message": "${s}"}
|
|
3
|
+
`}a($t,"createLogRecord");function hc(e){Er===void 0&&(ba=z.PROCESS_DESCRIPTORS.INSTALL,kt.ensureDirSync(zs),Er=Yt.join(zs,z.PROCESS_LOG_NAMES.INSTALL),kt.ensureFileSync(Er)),kt.appendFileSync(Er,e)}a(hc,"writeToLogFile");function js(e){st&&hc(e),St&&process.stdout.write(e)}a(js,"nonPm2LogStdOut");function La(e){st&&hc(e),St&&process.stderr.write(e)}a(La,"nonPm2LogStdErr");function vm(...e){if(Oe[Ne]<=Oe.info){let t=$t("info",e);if(Lt){js(t);return}process.stdout.write(t)}}a(vm,"info");function Tc(...e){if(Oe[Ne]<=Oe.trace){let t=$t("trace",e);if(Lt){js(t);return}process.stdout.write(t)}}a(Tc,"trace");function Ia(...e){if(Oe[Ne]<=Oe.error){let t=$t("error",e);if(Lt){La(t);return}process.stderr.write(t)}}a(Ia,"error");function Gm(...e){if(Oe[Ne]<=Oe.debug){let t=$t("debug",e);if(Lt){js(t);return}process.stdout.write(t)}}a(Gm,"debug");function qm(...e){if(Oe[Ne]<=Oe.notify){let t=$t("notify",e);if(Lt){js(t);return}process.stdout.write(t)}}a(qm,"notify");function Fm(...e){if(Oe[Ne]<=Oe.fatal){let t=$t("fatal",e);if(Lt){La(t);return}process.stderr.write(t)}}a(Fm,"fatal");function xm(...e){if(Oe[Ne]<=Oe.warn){let t=$t("warn",e);if(Lt){La(t);return}process.stderr.write(t)}}a(xm,"warn");function Vm(){let e;try{e=Pm.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Yt.join(e,z.HDB_HOME_DIR_NAME,z.BOOT_PROPS_FILE_NAME);return kt.existsSync(t)||(t=Yt.join(Ca,"utility/hdb_boot_properties.file")),t}a(Vm,"getPropsFilePath");function km(e){Ne=e}a(km,"setLogLevel");function Ec(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Ec,"autoCastBoolean");function Ym(e){try{if(e.includes("config/settings.js")){let o=dc(e);return{level:o.get(z.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Yt.dirname(o.get(z.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(z.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(z.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=lc.parseDocument(kt.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===z.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(Ym,"getLogConfig");function $m(){try{let e=lc.parseDocument(kt.readFileSync(Bm,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),s=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:s}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a($m,"getDefaultConfig")});var mc=d((fB,Rc)=>{"use strict";var Km=require("util"),Wm=require("path"),Qm=require("child_process"),Jm=Km.promisify(Qm.execFile),Xm=1e3*1e3*10;Rc.exports={findPs:Zm};async function Zm(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await Jm("ps",["wwxo",`pid,${r}`],{maxBuffer:Xm});for(let n of s.trim().split(`
|
|
4
|
+
`).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:Wm.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(Zm,"findPs")});var Se=d((RB,Nc)=>{"use strict";var zm="__dbis__",jm="__environment_name__",eA="__dbi_defintion__",tA={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"},rA=["__createdtime__","__updatedtime__"],sA="\uFFFF",Ac={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},nA=Object.values(Ac);Nc.exports={INTERNAL_DBIS_NAME:zm,DBI_DEFINITION_NAME:eA,SEARCH_TYPES:tA,TIMESTAMP_NAMES:rA,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:jm,TRANSACTIONS_DBI_NAMES_ENUM:Ac,TRANSACTIONS_DBIS:nA,OVERFLOW_MARKER:sA}});var He=d((mB,yc)=>{"use strict";var Oc=f(),gc=Se(),pc={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},Ic=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Cc={500:Ic("There was an error processing your request."),400:"Invalid request"},iA=Cc[pc.INTERNAL_SERVER_ERROR],aA={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.`},oA={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},_A={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"},cA={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 ${gc.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${gc.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"},uA={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Oc.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes.`,ATTR_NAME_NULLISH_ERR:"transaction aborted due to record(s) with an attribute name that is null, undefined or empty string",HASH_VAL_LENGTH_ERR:`transaction aborted due to record(s) with a hash value that exceeds ${Oc.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes, check log for more info`,INVALID_FORWARD_SLASH_IN_HASH_ERR:"transaction aborted due to record(s) with a hash value that contains a forward slash, check log for more info",RECORD_MISSING_HASH_ERR:"transaction aborted due to record(s) with no hash value, check log for more info"},bc={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"},EA={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."},lA={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`},dA={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"},SA={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},hA={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`},Lc={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`},wc={INVALID_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}`},TA={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."},fA={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},RA={...bc,..._A,...aA,...EA,...lA,...dA,...SA,...hA,...uA,...Lc,...wc,...TA,...fA,...oA};yc.exports={CHECK_LOGS_WRAPPER:Ic,HDB_ERROR_MSGS:RA,DEFAULT_ERROR_MSGS:Cc,DEFAULT_ERROR_RESP:iA,HTTP_STATUS_CODES:pc,LMDB_ERRORS_ENUM:cA,AUTHENTICATION_ERROR_MSGS:bc,VALIDATION_ERROR_MSGS:Lc,IPC_ERRORS:wc}});var q=d((AB,Mc)=>{"use strict";var dr=He(),mA=p(),AA=f(),Xr=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Uc),this.http_resp_code=s||dr.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(dr.DEFAULT_ERROR_MSGS[s]?dr.DEFAULT_ERROR_MSGS[s]:dr.DEFAULT_ERROR_MSGS[dr.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&&mA[n](i)}};a(Xr,"HdbError");function Uc(e,t,r,s=AA.LOG_LEVELS.ERROR,n=null,i=!1){if(Dc(e))return e;let o=new Xr(e,t,r,s,n);return i&&delete o.stack,o}a(Uc,"handleHDBError");function Dc(e){return e.__proto__.constructor.name===Xr.name}a(Dc,"isHDBError");Mc.exports={isHDBError:Dc,handleHDBError:Uc,hdb_errors:dr}});var g=d((OB,Qc)=>{"use strict";var wa=require("path"),NA=require("fs-extra"),te=p(),Pc=require("fs-extra"),OA=require("truncate-utf8-bytes"),Zr=require("os"),gA=require("net"),pA=require("recursive-iterator"),ne=f(),qc=mc(),Bc=require("papaparse"),en=require("moment"),{inspect:IA}=require("util"),Hc=require("is-number"),NB=require("lodash"),{hdb_errors:tn}=q(),Fc=require("util").promisify(setTimeout),CA=100,bA=5,LA="",wA=4,vc=255,Gc={true:!0,false:!1,undefined:null,null:null,NaN:NaN};Qc.exports={isEmpty:De,isEmptyOrZeroLength:nt,arrayHasEmptyValues:DA,arrayHasEmptyOrZeroLengthValues:MA,buildFolderPath:PA,isBoolean:xc,errorizeMessage:yA,stripFileExtension:HA,autoCast:vA,autoCastJSONDeep:ya,removeDir:qA,compareVersions:FA,isCompatibleDataVersion:xA,escapeRawValue:kc,unescapeValue:VA,stringifyProps:kA,valueConverter:YA,timeoutPromise:KA,isClusterOperation:QA,getClusterUser:ZA,sendTransactionToSocketCluster:JA,checkGlobalSchemaTable:XA,getHomeDir:Yc,getPropsFilePath:$A,promisifyPapaParse:zA,removeBOM:$c,createEventPromise:jA,checkProcessRunning:eN,checkSchemaTableExist:tN,checkSchemaExists:Kc,checkTableExists:Wc,getStartOfTomorrowInSeconds:rN,getLimitKey:sN,isObject:BA,isNotEmptyAndHasValue:UA,autoCasterIsNumberCheck:Vc,backtickASTSchemaItems:nN,isPortTaken:WA,stopProcess:iN,createForkArgs:aN,autoCastBoolean:oN,async_set_timeout:Fc,getTableHashAttribute:_N,doesSchemaExist:cN,doesTableExist:uN,stringifyObj:EN,ms_to_time:lN,PACKAGE_ROOT:ne.PACKAGE_ROOT};function yA(e){return e instanceof Error?e:new Error(e)}a(yA,"errorizeMessage");function De(e){return e==null}a(De,"isEmpty");function UA(e){return!De(e)&&(e||e===0||e===""||xc(e))}a(UA,"isNotEmptyAndHasValue");function nt(e){return De(e)||e.length===0||e.size===0}a(nt,"isEmptyOrZeroLength");function DA(e){if(De(e))return!0;for(let t=0;t<e.length;t++)if(De(e[t]))return!0;return!1}a(DA,"arrayHasEmptyValues");function MA(e){if(nt(e))return!0;for(let t=0;t<e.length;t++)if(nt(e[t]))return!0;return!1}a(MA,"arrayHasEmptyOrZeroLengthValues");function PA(...e){try{return e.join(wa.sep)}catch{console.error(e)}}a(PA,"buildFolderPath");function xc(e){return De(e)?!1:e===!0||e===!1}a(xc,"isBoolean");function BA(e){return De(e)?!1:typeof e=="object"}a(BA,"isObject");function HA(e){return nt(e)?LA:e.slice(0,-wA)}a(HA,"stripFileExtension");function vA(e){return De(e)||e===""||typeof e!="string"?e:Gc[e]!==void 0?Gc[e]:Vc(e)===!0?Number(e):e}a(vA,"autoCast");function GA(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(GA,"autoCastJSON");function ya(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=ya(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=ya(r);s!==r&&(e[t]=s)}return e}else return GA(e)}a(ya,"autoCastJSONDeep");function Vc(e){if(e.startsWith("0.")&&Hc(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Hc(e))}a(Vc,"autoCasterIsNumberCheck");async function qA(e){if(nt(e))throw new Error(`Directory path: ${e} does not exist`);try{await Pc.emptyDir(e),await Pc.remove(e)}catch(t){throw te.error(`Error removing files in ${e} -- ${t}`),t}}a(qA,"removeDir");function FA(e,t){if(nt(e)){te.info("Invalid current version sent as parameter.");return}if(nt(t)){te.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),_=i.replace(s,"").split("."),c=Math.min(o.length,_.length);for(let u=0;u<c;u++)if(r=parseInt(o[u],10)-parseInt(_[u],10),r)return r;return o.length-_.length}a(FA,"compareVersions");function xA(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(xA,"isCompatibleDataVersion");function kc(e){if(De(e))return e;let t=String(e);return t==="."?ne.UNICODE_PERIOD:t===".."?ne.UNICODE_PERIOD+ne.UNICODE_PERIOD:t.replace(ne.FORWARD_SLASH_REGEX,ne.UNICODE_FORWARD_SLASH)}a(kc,"escapeRawValue");function VA(e){if(De(e))return e;let t=String(e);return t===ne.UNICODE_PERIOD?".":t===ne.UNICODE_PERIOD+ne.UNICODE_PERIOD?"..":String(e).replace(ne.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(VA,"unescapeValue");function kA(e,t){if(De(e))return te.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+Zr.EOL}!nt(s)&&s[0]===";"?r+=" "+s+n+Zr.EOL:nt(s)||(r+=s+"="+n+Zr.EOL)}catch{te.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(kA,"stringifyProps");function YA(e){let t;try{t=typeof e=="object"?JSON.stringify(e):e}catch(n){te.error(n),t=e}let r=String(kc(t)),s=Buffer.byteLength(r)>vc?OA(r,vc)+"/blob":r;return{value:t,value_stripped:r,value_path:s}}a(YA,"valueConverter");function Yc(){let e;try{e=Zr.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Yc,"getHomeDir");function $A(){let e=wa.join(Yc(),ne.HDB_HOME_DIR_NAME,ne.BOOT_PROPS_FILE_NAME);return NA.existsSync(e)||(e=wa.join(__dirname,"../","hdb_boot_properties.file")),e}a($A,"getPropsFilePath");function KA(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(KA,"timeoutPromise");async function WA(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=gA.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(WA,"isPortTaken");function QA(e){try{return ne.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){te.error(`Error checking operation against cluster ops ${t}`)}return!1}a(QA,"isClusterOperation");function JA(e,t,r){if(global.hdb_socket_client!==void 0){te.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]=ne.ORIGINATOR_SET_VALUE),global.hdb_socket_client.publish(e,i)}}a(JA,"sendTransactionToSocketCluster");function XA(e,t){if(!global.hdb_schema[e])return tn.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return tn.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(XA,"checkGlobalSchemaTable");function ZA(e,t){if(De(t)){te.warn("No CLUSTERING_USER defined, clustering disabled");return}if(De(e)||nt(e)){te.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){te.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){te.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(ZA,"getClusterUser");function zA(){Bc.parsePromise=function(e,t){return new Promise(function(r,s){Bc.parse(e,{header:!0,transformHeader:$c,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(zA,"promisifyPapaParse");function $c(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a($c,"removeBOM");function jA(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;te.info(`Got cluster status event response: ${IA(n)}`);try{i.cancel()}catch{te.error("Error trying to cancel timeout.")}s(n)})})}a(jA,"createEventPromise");async function eN(e){let t=!0,r=0;do await Fc(CA*r++),(await qc.findPs(e)).length>0&&(t=!1);while(t&&r<bA);if(t)throw new Error(`process ${e} was not started`)}a(eN,"checkProcessRunning");function tN(e,t){let r=Kc(e);if(r)return r;let s=Wc(e,t);if(s)return s}a(tN,"checkSchemaTableExist");function Kc(e){if(!global.hdb_schema[e])return tn.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Kc,"checkSchemaExists");function Wc(e,t){if(!global.hdb_schema[e][t])return tn.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Wc,"checkTableExists");function rN(){let e=en().utc().add(1,ne.MOMENT_DAYS_TAG).startOf(ne.MOMENT_DAYS_TAG).unix(),t=en().utc().unix();return e-t}a(rN,"getStartOfTomorrowInSeconds");function sN(){return en().utc().format("DD-MM-YYYY")}a(sN,"getLimitKey");function nN(e){try{let t=new pA(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){te.error("Got an error back ticking items."),te.error(t)}}a(nN,"backtickASTSchemaItems");async function iN(e){let t=Zr.userInfo();(await qc.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),te.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(iN,"stopProcess");function aN(e){return[e]}a(aN,"createForkArgs");function oN(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(oN,"autoCastBoolean");function _N(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(_N,"getTableHashAttribute");function cN(e){return global?.hdb_schema?.[e]!==void 0}a(cN,"doesSchemaExist");function uN(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(uN,"doesTableExist");function EN(e){try{return JSON.stringify(e)}catch{return e}}a(EN,"stringifyObj");function lN(e){let t=en.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(lN,"ms_to_time")});var Kt=d((gB,Zc)=>{"use strict";var Xc=g(),Jc=f(),sn=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ua=require("joi"),rn={schema_format:{pattern:sn,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},dN=Ua.alternatives(Ua.string().min(1).max(rn.schema_length.maximum).pattern(sn).messages({"string.pattern.base":"{:#label} "+rn.schema_format.message}),Ua.number()).required();function SN(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>rn.schema_length.maximum?`'${e}' maximum of 250 characters`:sn.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(SN,"checkValidTable");function hN(e,t){return Xc.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(hN,"validateSchemaExists");function TN(e,t){let r=t.state.ancestors[0].schema;return Xc.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(TN,"validateTableExists");function fN(e,t){return e.toLowerCase()===Jc.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${Jc.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(fN,"validateSchemaName");Zc.exports={common_validators:rn,schema_regex:sn,hdb_schema_table:dN,validateSchemaExists:hN,validateTableExists:TN,validateSchemaName:fN,checkValidTable:SN}});var We=d((pB,zc)=>{"use strict";var ge=require("validate.js");ge.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||ge.validators.type.checks[t](e)?null:` must be a '${t}' value`};ge.validators.type.checks={Object:function(e){return ge.isObject(e)&&!ge.isArray(e)},Array:ge.isArray,Integer:ge.isInteger,Number:ge.isNumber,String:ge.isString,Date:ge.isDate,Boolean:function(e){return typeof e=="boolean"}};ge.validators.hasValidFileExt=function(e,t){return!ge.isString(e)||e===""||t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`};zc.exports={validateObject:RN,validateObjectAsync:mN,validateBySchema:AN};function RN(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=ge(e,t,{format:"flat"});return r?new Error(r):null}a(RN,"validateObject");async function mN(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await ge.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(mN,"validateObjectAsync");function AN(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(AN,"validateBySchema")});var Ma=d((IB,eu)=>{var{hdb_schema_table:jc}=Kt(),NN=We(),Da=require("joi"),ON={undefined:"undefined",null:"null"},gN=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||ON[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),pN=Da.object({schema:jc,table:jc,records:Da.array().items(Da.object().custom(gN)).required()});eu.exports=function(e){return NN.validateBySchema(e,pN)}});var Pa=d((CB,tu)=>{"use strict";var nn=class{createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};a(nn,"BridgeMethods");tu.exports=nn});var Wt=d((wB,iu)=>{"use strict";var ru=He().LMDB_ERRORS_ENUM,bB=require("lmdb"),IN=Se(),LB=require("buffer").Buffer,CN=require("microtime"),{OVERFLOW_MARKER:su,MAX_SEARCH_KEY_LENGTH:an}=IN,nu=["number","string","symbol","boolean","bigint"];function bN(e){if(!e)throw new Error(ru.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(ru.INVALID_ENVIRONMENT)}a(bN,"validateEnv");function LN(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(LN,"stringifyData");function wN(e){return e instanceof Date?e.valueOf():e}a(wN,"convertKeyValueToWrite");function yN(e){if(e==null)return;if(nu.includes(typeof e))return e.length>an?[e.slice(0,an)+su]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];nu.includes(typeof n)&&(n.length>an?t.push(n.slice(0,an)+su):t.push(n))}}return t}a(yN,"getIndexedValues");function UN(){let e=CN.now().toString(),t=e.length-3;return Number(e.slice(0,t)+"."+e.slice(t))}a(UN,"getMicroTime");iu.exports={validateEnv:bN,stringifyData:LN,convertKeyValueToWrite:wN,getMicroTime:UN,getIndexedValues:yN}});var ou=d((yB,au)=>{"use strict";var on=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(on,"DBIDefinition");au.exports=on});var cu=d((UB,_u)=>{"use strict";var _n=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)}};a(_n,"OpenDBIObject");_u.exports=_n});var Eu=d((DB,uu)=>{"use strict";var cn=class{constructor(t,r,s,n,i=!1,o=!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=o,_!==void 0&&(this.overlappingSync=_)}};a(cn,"OpenEnvironmentObject");uu.exports=cn});var du=d((MB,lu)=>{"use strict";var DN={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))},MN="certificate.pem",PN="privateKey.pem",BN="ca.pem";lu.exports={CERTIFICATE_VALUES:DN,CERTIFICATE_PEM_NAME:MN,PRIVATEKEY_PEM_NAME:PN,CA_PEM_NAME:BN}});var Tu=d((PB,hu)=>{"use strict";var HN=require("fs-extra"),U=require("joi"),vN=require("os"),{boolean:ie,string:Tt,number:it,array:Ba}=U.types(),Qe=require("path"),GN=p(),un=g(),ft=du(),qN=We(),ht="keys",FN=ft.CERTIFICATE_PEM_NAME,xN=ft.PRIVATEKEY_PEM_NAME,VN=ft.CA_PEM_NAME,kN=ft.CERTIFICATE_PEM_NAME,YN=ft.PRIVATEKEY_PEM_NAME,$N=ft.CA_PEM_NAME,KN=ft.CERTIFICATE_PEM_NAME,WN=ft.PRIVATEKEY_PEM_NAME,QN=ft.CA_PEM_NAME,JN="log",XN="custom_functions",ZN="Invalid logging.rotation.maxSize unit. Available units are G, M or K",zN="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",jN="rootPath config parameter is undefined",eO="clustering.enabled config parameter is undefined",wt=it.min(0).required(),En=Ba.items({host:Tt.required(),port:wt}).empty(null),pe;hu.exports={configValidator:tO,routesValidator:aO,route_constraints:En};function tO(e){if(pe=e.rootPath,un.isEmpty(pe))throw jN;let t=ie.required(),r=U.valid("production","development").required(),s=it.min(1).max(1e3).empty(null).default(iO),n=Tt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Su),i=U.custom(sO).messages({"any.custom":"{:#label} {:#error}"}).empty(null).default(Su),o=Tt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),_=e.clustering?.enabled;if(un.isEmpty(_))throw eO;let c;return _===!0?c=U.object({enabled:t,hubServer:U.object({cluster:U.object({name:U.required().empty(null),network:U.object({port:wt,routes:En}).required()}).required(),leafNodes:U.object({network:U.object({port:wt}).required()}).required(),network:U.object({port:wt}).required()}).required(),leafServer:U.object({network:U.object({port:wt,routes:En}).required()}).required(),nodeName:o,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ie.required()}),user:U.string().required()}).required():c=U.object({enabled:t,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ie.required()})}).required(),U.object({clustering:c,customFunctions:U.object({enabled:t,network:U.object({cors:ie.required(),corsAccessList:Ba.required(),headersTimeout:it.min(1).required(),https:ie.required(),keepAliveTimeout:it.min(1).required(),port:wt,timeout:it.min(1).required()}),nodeEnv:r,root:n,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),ipc:U.object({network:U.object({port:wt})}).required(),localStudio:U.object({enabled:t}).required(),logging:U.object({file:ie.required(),level:U.valid("notify","fatal","error","warn","info","debug","trace"),rotation:U.object({compress:ie.required(),dateFormat:Tt.required(),maxSize:Tt.custom(nO).required(),retain:it.min(0).required(),rotate:ie.required(),rotateInterval:Tt.required(),rotateModule:ie.required(),timezone:Tt.required(),workerInterval:it.min(1).required()}).required(),root:n,stdStreams:ie.required(),auditLog:ie.required()}).required(),operationsApi:U.object({authentication:U.object({operationTokenTimeout:U.required(),refreshTokenTimeout:U.required()}).required(),foreground:ie.required(),network:U.object({cors:ie.required(),corsAccessList:Ba.required(),headersTimeout:it.min(1).required(),https:ie.required(),keepAliveTimeout:it.min(1).required(),port:wt,timeout:it.min(1).required()}).required(),nodeEnv:r,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:Tt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:U.object({threads:s}).required(),storage:U.object({writeAsync:ie.required(),overlappingSync:ie.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(tO,"configValidator");function rO(e){return HN.existsSync(e)?null:`Specified path ${e} does not exist.`}a(rO,"doesPathExist");function sO(e,t){U.assert(e,Tt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+\.pem+$/).messages({"string.pattern.base":"must be a valid directory path and specify a .pem file"}));let r=rO(e);if(r)return t.message(r)}a(sO,"validatePemFile");function nO(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(ZN);let s=e.slice(0,-1);if(isNaN(parseInt(s)))return t.message(zN)}a(nO,"validateRotationMaxSize");function iO(e,t){let r=t.state.path.join("."),s=vN.cpus().length,n=s-1;return n<=2&&(n=2),GN.info(`Detected ${s} cores on this machine, defaulting ${r} to ${n}`),n}a(iO,"setDefaultThreads");function Su(e,t){if(!un.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(un.isEmpty(pe))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Qe.join(pe,XN);case"logging.root":return Qe.join(pe,JN);case"operationsApi.tls.certificate":return Qe.join(pe,ht,FN);case"operationsApi.tls.privateKey":return Qe.join(pe,ht,xN);case"operationsApi.tls.certificateAuthority":return Qe.join(pe,ht,VN);case"customFunctions.tls.certificate":return Qe.join(pe,ht,kN);case"customFunctions.tls.privateKey":return Qe.join(pe,ht,YN);case"customFunctions.tls.certificateAuthority":return Qe.join(pe,ht,$N);case"clustering.tls.certificate":return Qe.join(pe,ht,KN);case"clustering.tls.privateKey":return Qe.join(pe,ht,WN);case"clustering.tls.certificateAuthority":return Qe.join(pe,ht,QN);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Su,"setDefaultRoot");function aO(e){let t=U.object({routes:En});return qN.validateBySchema({routes:e},t)}a(aO,"routesValidator")});var zr=d((BB,gu)=>{"use strict";var Y=f(),ve=g(),he=p(),{configValidator:oO,routesValidator:fu}=Tu(),Je=require("fs-extra"),_O=require("yaml"),Sr=require("path"),cO=require("is-number"),Sn=require("properties-reader"),uO=require("lodash"),{handleHDBError:EO}=q(),{HTTP_STATUS_CODES:lO,HDB_ERROR_MSGS:ln}=He(),{PACKAGE_ROOT:dO}=f(),SO="Unable to get config value because config is uninitialized",hO="Config successfully initialized",TO="Error backing up config file",fO="Empty parameter sent to getConfigValue",Ru=Sr.join(dO,"config","yaml",Y.HDB_DEFAULT_CONFIG_FILE),RO="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",dn,Ie;gu.exports={createConfigFile:mO,getDefaultConfig:AO,getConfigValue:mu,initConfig:Au,flattenConfig:Qt,updateConfigValue:Nu,updateConfigObject:NO,getConfiguration:OO,setConfiguration:gO,readConfigFile:Ga,getClusteringRoutes:pO,initOldConfig:Ou,getConfigFromFile:IO};function mO(e){let t=hr(Ru);dn=Qt(t.toJSON());for(let i in e){let o=Y.CONFIG_PARAM_MAP[i.toLowerCase()];if(o!==void 0){let _=o.split("_"),c=Ha(o,e[i]);try{t.setIn([..._],c)}catch(u){he.error(u)}}}va(t);let r=t.toJSON();Ie=Qt(r);let s=t.getIn(["rootPath"]),n=Sr.join(s,Y.HDB_CONFIG_FILE);Je.createFileSync(n),Je.writeFileSync(n,String(t)),he.trace(`Config file written to ${n}`)}a(mO,"createConfigFile");function AO(e){if(dn===void 0){let r=hr(Ru);dn=Qt(r.toJSON())}let t=Y.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return dn[t.toLowerCase()]}a(AO,"getDefaultConfig");function mu(e){if(ve.isEmpty(e)){he.error(fO);return}if(Ie===void 0){he.trace(SO);return}let t=Y.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return Ie[t.toLowerCase()]}a(mu,"getConfigValue");function Au(e=!1){if(Ie===void 0||e){let t=ve.getPropsFilePath();try{Je.accessSync(t,Je.constants.F_OK|Je.constants.R_OK)}catch(o){throw he.error(o),new Error(`HarperDB properties file at path ${t} does not exist`)}let s=Sn(t).get(Y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),n;if(s.includes("config/settings.js"))try{Ou(s);return}catch(o){if(o.code!==Y.NODE_ERROR_CODES.ENOENT)throw o}try{n=hr(s)}catch(o){if(o.code===Y.NODE_ERROR_CODES.ENOENT){he.trace(`HarperDB config file not found at ${s}.
|
|
5
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw he.error(o),new Error(`Error reading HarperDB config file at ${s}`)}va(n);let i=n.toJSON();Ie=Qt(i),he.trace(hO)}}a(Au,"initConfig");function va(e){let t=e.toJSON(),r=oO(t);if(r.error)throw ln.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)}a(va,"validateConfig");function NO(e,t){Ie===void 0&&(Ie={});let r=Y.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){he.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ie[r.toLowerCase()]=t}a(NO,"updateConfigObject");function Nu(e,t,r=void 0,s=!1,n=!1){Ie===void 0&&Au();let i=mu(Y.CONFIG_PARAM_MAP.hdb_root),o=Sr.join(i,Y.HDB_CONFIG_FILE),_=hr(o);if(r===void 0){let E=Y.CONFIG_PARAM_MAP[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let l=E.split("_"),h=Ha(E,t);_.setIn([...l],h)}else for(let E in r){let l=Y.CONFIG_PARAM_MAP[E.toLowerCase()];if(l!==void 0){let h=l.split("_"),S=Ha(l,r[E]);try{_.setIn([...h],S)}catch(A){he.error(A)}}}va(_);let c=_.getIn(["rootPath"]),u=Sr.join(c,Y.HDB_CONFIG_FILE);if(s===!0)try{let E=Sr.join(c,"backup",`${Y.HDB_CONFIG_FILE}.bak`);Je.copySync(o,E),he.trace(`Config file: ${o} backed up to: ${E}`)}catch(E){he.error(TO),he.error(E)}Je.writeFileSync(u,String(_)),n&&(Ie=Qt(_.toJSON())),he.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Nu,"updateConfigValue");function Qt(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=Qt(e[r]);for(let n in s)!s.hasOwnProperty(n)||(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}a(Qt,"flattenConfig");function Ha(e,t){if(e===Y.CONFIG_PARAMS.CLUSTERING_NODENAME||e===Y.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(cO(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||ve.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 ve.autoCast(t)}a(Ha,"castConfigValue");function OO(){let e=ve.getPropsFilePath(),r=Sn(e).get(Y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return hr(r).toJSON()}a(OO,"getConfiguration");async function gO(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Nu(void 0,void 0,n,!0),RO}catch(i){throw typeof i=="string"||i instanceof String?EO(i,i,lO.BAD_REQUEST,void 0,void 0,!0):i}}a(gO,"setConfiguration");function Ga(){let e=ve.getPropsFilePath();try{Je.accessSync(e,Je.constants.F_OK|Je.constants.R_OK)}catch(n){throw he.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=Sn(e).get(Y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return hr(r).toJSON()}a(Ga,"readConfigFile");function hr(e){return _O.parseDocument(Je.readFileSync(e,"utf8"),{simpleKeys:!0})}a(hr,"parseYamlDoc");function pO(){let e=Ga(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=ve.isEmptyOrZeroLength(t)?[]:t;let r=fu(t);if(r)throw ln.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=ve.isEmptyOrZeroLength(s)?[]:s;let n=fu(s);if(n)throw ln.CONFIG_VALIDATION(n.message);if(!ve.isEmptyOrZeroLength(s)&&!ve.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(_=>_.host===o.host&&_.port===o.port));if(!ve.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw ln.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(pO,"getClusteringRoutes");function Ou(e){let t=Sn(e);Ie={};for(let r in Y.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(ve.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Y.CONFIG_PARAM_MAP[r].toLowerCase();n===Y.CONFIG_PARAMS.LOGGING_ROOT?Ie[n]=Sr.dirname(s):Ie[n]=s}return Ie}a(Ou,"initOldConfig");function IO(e){let t=Ga();return uO.get(t,e.replaceAll("_","."))}a(IO,"getConfigFromFile")});var Q=d((HB,Iu)=>{"use strict";var qa=require("fs-extra"),at=require("path"),CO=require("os"),bO=require("properties-reader"),jr=p(),Tr=g(),I=f(),hn=zr(),LO="Error initializing environment manager",Tn="BOOT_PROPS_FILE_PATH",pu=!1,wO={[I.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[I.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Rt={};Iu.exports={BOOT_PROPS_FILE_PATH:Tn,getHdbBasePath:yO,setHdbBasePath:UO,get:DO,initSync:PO,setProperty:P,initTestEnvironment:BO};function yO(){return Rt[I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(yO,"getHdbBasePath");function UO(e){Rt[I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(UO,"setHdbBasePath");function DO(e){let t=hn.getConfigValue(e);return t===void 0?Rt[e]:t}a(DO,"get");function P(e,t){wO[e]&&(Rt[e]=t),hn.updateConfigObject(e,t)}a(P,"setProperty");function MO(){let e;try{e=Tr.getPropsFilePath(),qa.accessSync(e,qa.constants.F_OK|qa.constants.R_OK),pu=!0;let t=bO(e);return Rt[I.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(I.HDB_SETTINGS_NAMES.INSTALL_USER),Rt[I.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(I.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Rt[Tn]=e,!0}catch{return jr.trace(`Environment manager found no properties file at ${e}`),!1}}a(MO,"doesPropFileExist");function PO(e=!1){try{(pu||MO())&&(hn.initConfig(e),Rt[I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=hn.getConfigValue(I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){jr.error(LO),jr.error(t),console.error(t),process.exit(1)}}a(PO,"initSync");function BO(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:_}=e,c=at.join(__dirname,"../../","unitTests");Rt[Tn]=at.join(c,"hdb_boot_properties.file"),P(I.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,at.join(c,"settings.test")),P(I.HDB_SETTINGS_NAMES.INSTALL_USER,CO.userInfo().username),P(I.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,at.join(c,"envDir","utility","keys","privateKey.pem")),P(I.HDB_SETTINGS_NAMES.CERT_KEY,at.join(c,"envDir","utility","keys","certificate.pem")),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,at.join(c,"envDir","utility","keys","privateKey.pem")),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,at.join(c,"envDir","utility","keys","certificate.pem")),P(I.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),P(I.HDB_SETTINGS_NAMES.LOG_PATH_KEY,at.join(c,"envDir","log")),P(I.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),P(I.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),P(I.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),P(I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,at.join(c,"envDir")),P(I.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Tr.isEmpty(n)?!0:n),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Tr.isEmpty(n)?!0:n),P(I.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),P(I.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Tr.isEmpty(i)?!1:i),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Tr.isEmpty(i)?!1:i),P(I.HDB_SETTINGS_NAMES.IPC_SERVER_PORT,9383),P(I.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),P(I.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),P(I.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),P(I.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),P(I.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,at.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),P(I.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Tr.isEmpty(_)?!1:_),o&&(P("CORS_ACCESSLIST",o),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(P(I.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(P(I.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(P(I.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Tn}. Please check your boot props and settings files`;jr.fatal(r),jr.error(t)}}a(BO,"initTestEnvironment")});var F=d((GB,vu)=>{"use strict";var Fa=require("lmdb"),Ge=require("fs-extra"),Xe=require("path"),Rn=Wt(),Cu=p(),ae=He().LMDB_ERRORS_ENUM,mn=ou(),xa=cu(),bu=Eu(),yt=Se(),vB=f(),es=Q();es.initSync();var Lu=es.get("STORAGE_WRITEASYNC")===!0||es.get("STORAGE_WRITEASYNC")==="true"||es.get("STORAGE_WRITEASYNC")==="TRUE",wu=es.get("STORAGE_OVERLAPPINGSYNC"),yu=1024*1024*1024,Uu=1e4,Du=1e3,Ze=yt.INTERNAL_DBIS_NAME,Mu=yt.DBI_DEFINITION_NAME,HO="data.mdb",vO="lock.mdb",ts=".mdb",GO="-lock",fn=class{constructor(t,r,s=!1){this.dbi=qe(t,r),this.key_type=this.dbi[yt.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[yt.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Fa.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(fn,"TransactionCursor");function Va(e,t){if(e===void 0)throw new Error(ae.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(ae.ENV_NAME_REQUIRED)}a(Va,"pathEnvNameValidation");async function ka(e,t,r=!0){try{await Ge.access(e)}catch(s){throw s.code==="ENOENT"?new Error(ae.INVALID_BASE_PATH):s}try{let s=Xe.join(e,t+ts);return await Ge.access(s,Ge.constants.R_OK|Ge.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Ge.access(Xe.join(e,t,HO),Ge.constants.R_OK|Ge.constants.F_OK),Xe.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(ae.INVALID_ENVIRONMENT)}else throw new Error(ae.INVALID_ENVIRONMENT);throw s}}a(ka,"validateEnvironmentPath");function An(e,t){if(Rn.validateEnv(e),t===void 0)throw new Error(ae.DBI_NAME_REQUIRED)}a(An,"validateEnvDBIName");async function qO(e,t,r=!1,s=!1){Va(e,t),t=t.toString();try{return await ka(e,t,s),Ya(e,t,r)}catch(n){if(n.message===ae.INVALID_ENVIRONMENT){let i=Xe.join(e,t);await Ge.mkdirp(s?i:e);let o=new bu(s?i:i+ts,yu,Uu,Du,!1,Lu,wu),_=Fa.open(o);_.dbis=Object.create(null);let c=new xa(!1);_.openDB(Ze,c),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=$a(e,t,r);return _[yt.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=_,_}throw n}}a(qO,"createEnvironment");async function FO(e,t,r,s=!0){let n=await Ya(e,t);if(r===void 0)throw new Error(ae.DESTINATION_PATH_REQUIRED);try{await Ge.access(Xe.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(ae.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(FO,"copyEnvironment");async function Ya(e,t,r=!1){Va(e,t),t=t.toString();let s=$a(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 ka(e,t),i=Xe.join(e,t+ts),o=n!=i,_=new bu(n,yu,Uu,Du,o,Lu,wu),c=Fa.open(_);c.dbis=Object.create(null);let u=Bu(c);for(let E=0;E<u.length;E++)qe(c,u[E]);return c[yt.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=c,c}a(Ya,"openEnvironment");async function xO(e,t,r=!1){Va(e,t),t=t.toString();let s=Xe.join(e,t+ts),n=await ka(e,t);if(global.lmdb_map!==void 0){let i=$a(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Pu(o),delete global.lmdb_map[i]}}await Ge.remove(n),await Ge.remove(n===s?n+GO:Xe.join(Xe.dirname(n),vO))}a(xO,"deleteEnvironment");async function Pu(e){Rn.validateEnv(e);let t=e[yt.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Pu,"closeEnvironment");function $a(e,t,r=!1){let n=`${Xe.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a($a,"getCachedEnvironmentName");function VO(e){Rn.validateEnv(e);let t=Object.create(null),r=qe(e,Ze);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Ze)try{t[s]=Object.assign(new mn,n)}catch{Cu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(VO,"listDBIDefinitions");function Bu(e){Rn.validateEnv(e);let t=[],r=qe(e,Ze);for(let{key:s}of r.getRange({start:!1}))s!==Ze&&t.push(s);return t}a(Bu,"listDBIs");function kO(e,t){let s=qe(e,Ze).getEntry(t),n=new mn;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{Cu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(kO,"getDBIDefinition");function Hu(e,t,r,s=!1){if(An(e,t),t=t.toString(),t===Ze)throw new Error(ae.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return qe(e,t)}catch(n){if(n.message===ae.DBI_DOES_NOT_EXIST){let i=new xa(r,s===!0),o=e.openDB(t,i),_=new mn(r===!0,s);return o[Mu]=_,qe(e,Ze).putSync(t,_),e.dbis[t]=o,o}throw n}}a(Hu,"createDBI");function qe(e,t){if(An(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Ze?r=kO(e,t):r=new mn,r===void 0)throw new Error(ae.DBI_DOES_NOT_EXIST);let s;try{let n=new xa(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(ae.DBI_DOES_NOT_EXIST):n}return s[Mu]=r,e.dbis[t]=s,s}a(qe,"openDBI");function YO(e,t){An(e,t),t=t.toString();let r=qe(e,t),s=r.getStats();return r[yt.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(YO,"statDBI");async function $O(e,t){try{let r=Xe.join(e,t+ts);return(await Ge.stat(r)).size}catch{throw new Error(ae.INVALID_ENVIRONMENT)}}a($O,"environmentDataSize");function KO(e,t){if(An(e,t),t=t.toString(),t===Ze)throw new Error(ae.CANNOT_DROP_INTERNAL_DBIS_NAME);qe(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],qe(e,Ze).removeSync(t)}a(KO,"dropDBI");function WO(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{qe(e,n)}catch(i){if(i.message===ae.DBI_DOES_NOT_EXIST)Hu(e,n,n!==t,n===t);else throw i}}}a(WO,"initializeDBIs");vu.exports={openDBI:qe,openEnvironment:Ya,createEnvironment:qO,listDBIs:Bu,listDBIDefinitions:VO,createDBI:Hu,dropDBI:KO,statDBI:YO,deleteEnvironment:xO,initializeDBIs:WO,TransactionCursor:fn,environmentDataSize:$O,copyEnvironment:FO,closeEnvironment:Pu}});var qu=d((qB,Gu)=>{"use strict";var Nn=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(Nn,"InsertRecordsResponseObject");Gu.exports=Nn});var xu=d((FB,Fu)=>{"use strict";var On=class{constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};a(On,"UpdateRecordsResponseObject");Fu.exports=On});var ku=d((xB,Vu)=>{"use strict";var gn=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(gn,"UpsertRecordsResponseObject");Vu.exports=gn});var fr=d(($B,$u)=>{"use strict";var QO=F(),JO=qu(),XO=xu(),ZO=ku(),ss=Wt(),rs=He().LMDB_ERRORS_ENUM,zO=Se(),Ut=f(),jO=g(),eg=require("uuid"),VB=require("lmdb"),{handleHDBError:tg,hdb_errors:rg}=q(),{OVERFLOW_MARKER:kB,MAX_SEARCH_KEY_LENGTH:YB}=zO,Ka=Ut.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Jt=Ut.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function sg(e,t,r,s,n=!0){Xa(e,t,r,s),Wa(e,t,r);let i=new JO,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c];Yu(u,!0,n);let E=ng(e,t,r,u),l=u[t];o.push(E),_.push(l)}return Qa(o,_,s,i)}a(sg,"insertRecords");function ng(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let _=s[o];if(typeof _=="function"){let u=_([[{}]]);Array.isArray(u)&&(_=u[0][Ut.FUNC_VAL],s[o]=_)}let c=ss.getIndexedValues(_);if(c)for(let u=0,E=c.length;u<E;u++)e.dbis[o].put(c[u],n)}e.dbis[t].put(n,s,s[Jt])})}a(ng,"insertRecord");function ig(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(ig,"removeSkippedRecords");function Yu(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[Jt]))&&(e[Jt]=s),t===!0?(r===!0||!Number.isInteger(e[Ka]))&&(e[Ka]=s):delete e[Ka]}a(Yu,"setTimestamps");function Wa(e,t,r){r.indexOf(Ut.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Ut.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Ut.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Ut.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),QO.initializeDBIs(e,t,r)}a(Wa,"initializeTransaction");async function ag(e,t,r,s,n=!0){Xa(e,t,r,s),Wa(e,t,r);let i=new XO,o=[],_=[],c=[];for(let u=0;u<s.length;u++){let E=s[u],l=E[t],h;try{h=Ja(e,t,E,l,i,!0,n)}catch{i.skipped_hashes.push(l),o.push(u);continue}_.push(h),c.push(l)}return Qa(_,c,s,i,o)}a(ag,"updateRecords");async function og(e,t,r,s,n=!0){try{Xa(e,t,r,s)}catch(c){throw tg(c,c.message,rg.HTTP_STATUS_CODES.BAD_REQUEST)}Wa(e,t,r);let i=new ZO,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c],E;jO.isEmpty(u[t])?(E=eg.v4(),u[t]=E):E=u[t];let l=Ja(e,t,u,E,i,!1,n);o.push(l),_.push(E)}return Qa(o,_,s,i)}a(og,"upsertRecords");async function Qa(e,t,r,s,n=[]){let i=await Promise.all(e);for(let o=0,_=i.length;o<_;o++)i[o]===!0?s.written_hashes.push(t[o]):(s.skipped_hashes.push(t[o]),n.push(o));return s.txn_time=ss.getMicroTime(),ig(r,n),s}a(Qa,"finalizeWrite");function Ja(e,t,r,s,n,i=!1,o=!0){let _=e.dbis[t],c=_.getEntry(s),u=c?.value,E=u;if(!u){if(i)return!1;u={}}if(Yu(r,!E,o),Number.isInteger(r[Jt])&&u[Jt]>r[Jt])return!1;E&&n.original_records.push(u);let l,h=a(()=>{for(let A in r){if(!r.hasOwnProperty(A)||A===t)continue;let N=r[A],b=e.dbis[A];if(b===void 0)continue;let Ae=u[A];if(typeof N=="function"){let W=N([[u]]);Array.isArray(W)&&(N=W[0][Ut.FUNC_VAL],r[A]=N)}if(N===Ae)continue;let v=ss.getIndexedValues(Ae);if(v)for(let W=0,$e=v.length;W<$e;W++)b.remove(v[W],s);if(v=ss.getIndexedValues(N),v)for(let W=0,$e=v.length;W<$e;W++)b.put(v[W],s)}let S=Object.assign({},u,r);_.put(s,S,S[Jt])},"do_put");return c?l=_.ifVersion(s,c.version,h):l=_.ifNoExists(s,h),l.then(S=>S?!0:Ja(e,t,r,s,n,i,o))}a(Ja,"updateUpsertRecord");function _g(e,t,r){if(ss.validateEnv(e),t===void 0)throw new Error(rs.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(rs.WRITE_ATTRIBUTES_REQUIRED):new Error(rs.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(_g,"validateBasic");function Xa(e,t,r,s){if(_g(e,t,r),!Array.isArray(s))throw s===void 0?new Error(rs.RECORDS_REQUIRED):new Error(rs.RECORDS_MUST_BE_ARRAY)}a(Xa,"validateWrite");$u.exports={insertRecords:sg,updateRecords:ag,upsertRecords:og}});var k=d((KB,Wu)=>{"use strict";var Za=f(),Rr=Q(),za=require("path");Rr.initSync();var pn,In,Cn;function Ku(){if(pn!==void 0)return pn;if(Rr.getHdbBasePath()!==void 0)return pn=za.join(Rr.getHdbBasePath(),Za.SCHEMA_DIR_NAME),pn}a(Ku,"getBaseSchemaPath");function cg(){if(In!==void 0)return In;if(Rr.getHdbBasePath()!==void 0)return In=za.join(Ku(),Za.SYSTEM_SCHEMA_NAME),In}a(cg,"getSystemSchemaPath");function ug(){if(Cn!==void 0)return Cn;if(Rr.getHdbBasePath()!==void 0)return Cn=za.join(Rr.getHdbBasePath(),Za.TRANSACTIONS_DIR_NAME),Cn}a(ug,"getTransactionAuditStorePath");Wu.exports={getBaseSchemaPath:Ku,getSystemSchemaPath:cg,getTransactionAuditStorePath:ug}});var Xt=d((WB,Eg)=>{Eg.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 bn=d((QB,Qu)=>{var{common_validators:Dt}=Kt(),ns=We(),ze="is required",G={schema:{presence:!0,format:Dt.schema_format,length:Dt.schema_length},table:{presence:!0,format:Dt.schema_format,length:Dt.schema_length},attribute:{presence:!0,format:Dt.schema_format,length:Dt.schema_length},hash_attribute:{presence:!0,format:Dt.schema_format,length:Dt.schema_length}};function is(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(is,"makeAttributesStrings");function lg(e){return e=is(e),G.schema.presence={message:ze},G.table.presence=!1,G.attribute.presence=!1,G.hash_attribute.presence=!1,ns.validateObject(e,G)}a(lg,"schema_object");function dg(e){return e=is(e),G.schema.presence={message:ze},G.table.presence={message:ze},G.attribute.presence=!1,G.hash_attribute.presence=!1,ns.validateObject(e,G)}a(dg,"table_object");function Sg(e){return e=is(e),G.schema.presence={message:ze},G.table.presence={message:ze},G.attribute.presence=!1,G.hash_attribute.presence={message:ze},ns.validateObject(e,G)}a(Sg,"create_table_object");function hg(e){return e=is(e),G.schema.presence={message:ze},G.table.presence={message:ze},G.attribute.presence={message:ze},G.hash_attribute.presence=!1,ns.validateObject(e,G)}a(hg,"attribute_object");function Tg(e){return e=is(e),G.schema.presence={message:ze},G.table.presence={message:ze},G.attribute.presence=!1,G.hash_attribute.presence=!1,ns.validateObject(e,G)}a(Tg,"describe_table");function fg(e){if(!!e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a(fg,"validateTableResidence");Qu.exports={schema_object:lg,create_table_object:Sg,table_object:dg,attribute_object:hg,describe_table:Tg,validateTableResidence:fg}});var Xu=d((JB,Ju)=>{"use strict";var Rg=require("uuid"),Ln=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Rg.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(Ln,"CreateAttributeObject");Ju.exports=Ln});var yn=d((XB,Zu)=>{"use strict";var mg=Xu(),wn=class extends mg{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(wn,"LMDBCreateAttributeObject");Zu.exports=wn});var ju=d((ZB,zu)=>{"use strict";zu.exports=Ng;var Ag="inserted";function Ng(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Ag?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Ng,"returnObject")});var Un=d((zB,tE)=>{"use strict";var Og=f(),ja=F(),gg=fr(),{getSystemSchemaPath:pg,getBaseSchemaPath:Ig}=k(),Cg=require("path"),bg=Xt(),Lg=bn(),wg=yn(),yg=ju(),{handleHDBError:Ug,hdb_errors:Dg}=q(),Mg=g(),eo=bg.hdb_attribute,eE=[];for(let e=0;e<eo.attributes.length;e++)eE.push(eo.attributes[e].attribute);var Pg="inserted";tE.exports=Bg;async function Bg(e){let t=Lg.attribute_object(e);if(t)throw Ug(new Error,t.message,Dg.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Mg.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 wg(e.schema,e.table,e.attribute,e.id);try{let n=await ja.openEnvironment(Cg.join(Ig(),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}`);ja.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await ja.openEnvironment(pg(),Og.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:o,skipped_hashes:_}=await gg.insertRecords(i,eo.hash_attribute,eE,[s]);return yg(Pg,o,{records:[s]},_)}catch(n){throw n}}a(Bg,"lmdbCreateAttribute")});var Dn=d((eH,sE)=>{"use strict";var mt=g(),rE=p(),jB=Ma();sE.exports=Hg;function Hg(e){if(mt.isEmpty(e))throw new Error("invalid update parameters defined.");if(mt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(mt.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(mt.isEmpty(t))throw new Error(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.hash_attribute,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&mt.isEmptyOrZeroLength(o[r]))throw rE.error("a valid hash attribute must be provided with update record:",o),new Error("a valid hash attribute must be provided with update record, check log for more info");if(!mt.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw rE.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Error(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!mt.isEmpty(o[r])&&o[r]!==""&&s.has(mt.autoCast(o[r]))&&(o.skip=!0),s.add(mt.autoCast(o[r]));for(let _ in o)n[_]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(Hg,"insertUpdateValidate")});var Pn=d((tH,nE)=>{"use strict";var vg=f().OPERATIONS_ENUM,Mn=class{constructor(t,r,s,n,i=void 0){this.operation=vg.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(Mn,"InsertObject");nE.exports=Mn});var Hn=d((sH,iE)=>{"use strict";var rH=Pn(),Bn=f(),ro=g(),to=p(),Gg=require("uuid"),{handleHDBError:as,hdb_errors:qg}=q(),{HDB_ERROR_MSGS:os,HTTP_STATUS_CODES:_s}=qg;iE.exports=Fg;function Fg(e,t,r){for(let n=0;n<t.length;n++)xg(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Vg(i,r,e.operation)}}a(Fg,"processRows");function xg(e){if(Buffer.byteLength(String(e))>Bn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw as(new Error,os.ATTR_NAME_LENGTH_ERR(e),_s.BAD_REQUEST,void 0,void 0,!0);if(ro.isEmptyOrZeroLength(e)||ro.isEmpty(e.trim()))throw as(new Error,os.ATTR_NAME_NULLISH_ERR,_s.BAD_REQUEST,void 0,void 0,!0)}a(xg,"validateAttribute");function Vg(e,t,r){if(!e.hasOwnProperty(t)||ro.isEmptyOrZeroLength(e[t])){if(r===Bn.OPERATIONS_ENUM.INSERT||r===Bn.OPERATIONS_ENUM.UPSERT){e[t]=Gg.v4();return}throw to.error("Update transaction aborted due to record with no hash value:",e),as(new Error,os.RECORD_MISSING_HASH_ERR,_s.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Bn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw to.error(e),as(new Error,os.HASH_VAL_LENGTH_ERR,_s.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw to.error(e),as(new Error,os.INVALID_FORWARD_SLASH_IN_HASH_ERR,_s.BAD_REQUEST,void 0,void 0,!0)}a(Vg,"validateHash")});var oE=d((nH,aE)=>{"use strict";var vn=class{constructor(t,r){this.type=t,this.message=r}};a(vn,"IPCEventObject");aE.exports=vn});var mr=d((iH,_E)=>{"use strict";var kg=p(),so=g(),Yg=f(),{IPC_ERRORS:cs}=He();_E.exports={sendIpcEvent:$g,validateEvent:Kg,SchemaEventMsg:Wg,UserEventMsg:Qg};function $g(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):kg.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}a($g,"sendIpcEvent");function Kg(e){if(typeof e!="object")return cs.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||so.isEmpty(e.type))return cs.MISSING_TYPE;if(!e.hasOwnProperty("message")||so.isEmpty(e.message))return cs.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||so.isEmpty(e.message.originator))return cs.MISSING_ORIGIN;if(Yg.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return cs.INVALID_EVENT(e.type)}a(Kg,"validateEvent");function Wg(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(Wg,"SchemaEventMsg");function Qg(e){this.originator=e}a(Qg,"UserEventMsg")});var us=d((oH,lE)=>{"use strict";var cE=f(),aH=g(),Gn=p(),uE=oE(),{sendIpcEvent:EE}=mr();function Jg(e){try{Gn.trace("signalSchemaChange called with message:",e);let t=new uE(cE.IPC_EVENT_TYPES.SCHEMA,e);EE(t)}catch(t){Gn.error(t)}}a(Jg,"signalSchemaChange");function Xg(e){try{Gn.trace("signalUserChange called with message:",e);let t=new uE(cE.IPC_EVENT_TYPES.USER,e);EE(t)}catch(t){Gn.error(t)}}a(Xg,"signalUserChange");lE.exports={signalSchemaChange:Jg,signalUserChange:Xg}});var qn=d((_H,SE)=>{"use strict";var dE=g(),Zg=f(),zg=p(),jg=Un(),ep=yn(),tp=us(),{SchemaEventMsg:rp}=mr(),sp="already exists in";SE.exports=np;async function np(e,t,r){try{if(dE.isEmptyOrZeroLength(r))return r;let s=[];dE.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 ip(e,t.schema,t.name,i)})),n}catch(s){throw s}}a(np,"lmdbCheckForNewAttributes");async function ip(e,t,r,s){let n=new ep(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await ap(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(sp))zg.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(ip,"createNewAttribute");async function ap(e){let t;try{return t=await jg(e),tp.signalSchemaChange(new rp(process.pid,Zg.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}a(ap,"createAttribute")});var Ar=d((cH,hE)=>{"use strict";var Fn=class{constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};a(Fn,"LMDBTransactionObject");hE.exports=Fn});var fE=d((uH,TE)=>{"use strict";var op=Ar(),_p=f().OPERATIONS_ENUM,xn=class extends op{constructor(t,r,s,n,i=void 0){super(_p.INSERT,r,s,n,i),this.records=t}};a(xn,"LMDBInsertTransactionObject");TE.exports=xn});var mE=d((EH,RE)=>{"use strict";var cp=Ar(),up=f().OPERATIONS_ENUM,Vn=class extends cp{constructor(t,r,s,n,i,o=void 0){super(up.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(Vn,"LMDBUpdateTransactionObject");RE.exports=Vn});var NE=d((lH,AE)=>{"use strict";var Ep=Ar(),lp=f().OPERATIONS_ENUM,kn=class extends Ep{constructor(t,r,s,n,i,o=void 0){super(lp.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(kn,"LMDBUpsertTransactionObject");AE.exports=kn});var gE=d((dH,OE)=>{"use strict";var dp=Ar(),Sp=f().OPERATIONS_ENUM,Yn=class extends dp{constructor(t,r,s,n,i=void 0){super(Sp.DELETE,s,n,t,i),this.original_records=r}};a(Yn,"LMDBDeleteTransactionObject");OE.exports=Yn});var Es=d((SH,bE)=>{"use strict";var hp=require("path"),pE=F(),Tp=fE(),fp=mE(),Rp=NE(),mp=gE(),Nr=Se(),IE=g(),{CONFIG_PARAMS:Ap}=f(),CE=Q();CE.initSync();var $n=f().OPERATIONS_ENUM,{getTransactionAuditStorePath:Np}=k();bE.exports=Op;async function Op(e,t){if(CE.get(Ap.LOGGING_AUDITLOG)===!1)return;let r=hp.join(Np(),e.schema.toString()),s=await pE.openEnvironment(r,e.table,!0),n=gp(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){pE.initializeDBIs(s,Nr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Nr.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[Nr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Nr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),IE.isEmpty(n.user_name)||s.dbis[Nr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Nr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}catch(i){throw i}}}a(Op,"writeTransaction");function gp(e,t){let r=IE.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===$n.INSERT)return new Tp(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===$n.UPDATE)return new fp(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===$n.UPSERT)return new Rp(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===$n.DELETE)return new mp(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(gp,"createTransactionObject")});var no=d((TH,LE)=>{"use strict";var pp=Dn(),hH=Pn(),Or=f(),Ip=Hn(),Cp=fr().insertRecords,bp=F(),Lp=require("path"),wp=p(),yp=qn(),{getBaseSchemaPath:Up}=k(),Dp=Es();LE.exports=Mp;async function Mp(e){try{let{schema_table:t,attributes:r}=pp(e);Ip(e,r,t.hash_attribute),e.schema!==Or.SYSTEM_SCHEMA_NAME&&(r.includes(Or.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Or.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Or.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Or.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await yp(e.hdb_auth_header,t,r),n=Lp.join(Up(),e.schema.toString()),i=await bp.openEnvironment(n,e.table),o=await Cp(i,t.hash_attribute,r,e.records,e[Or.CLUSTERING_FLAG]!==!0);try{await Dp(e,o)}catch(_){wp.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(Mp,"lmdbCreateRecords")});var UE=d((fH,yE)=>{"use strict";var wE=f(),Pp=no(),Bp=Pn(),Hp=require("fs-extra"),vp=require("path"),{getBaseSchemaPath:Gp}=k();yE.exports=qp;async function qp(e){let t=[{name:e.schema,createddate:Date.now()}],r=new Bp(wE.SYSTEM_SCHEMA_NAME,wE.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Pp(r),await Hp.mkdirp(vp.join(Gp(),e.schema.toString()))}a(qp,"lmdbCreateSchema")});var ME=d((RH,DE)=>{"use strict";var Kn=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(Kn,"DeleteRecordsResponseObject");DE.exports=Kn});var oo=d((OH,HE)=>{"use strict";var PE=F(),io=Wt(),ao=He().LMDB_ERRORS_ENUM,Fp=Se(),BE=p(),mH=g(),xp=require("lmdb"),Vp=ME(),{OVERFLOW_MARKER:AH,MAX_SEARCH_KEY_LENGTH:NH}=Fp;async function kp(e,t,r){if(io.validateEnv(e),t===void 0)throw new Error(ao.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ao.IDS_REQUIRED):new Error(ao.IDS_MUST_BE_ARRAY);try{let s=PE.listDBIs(e);PE.initializeDBIs(e,t,s);let n=new Vp,i,o=[],_=[];for(let l=0,h=r.length;l<h;l++)try{i=r[l];let S=e.dbis[t].get(i);if(!S){n.skipped.push(i);continue}let A=e.dbis[t].ifVersion(i,xp.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let N=0;N<s.length;N++){let b=s[N];if(!S.hasOwnProperty(b)||b===t)continue;let Ae=e.dbis[b],v=S[b];if(v!=null)try{let W=io.getIndexedValues(v);if(W)for(let $e=0,Ks=W.length;$e<Ks;$e++)Ae.remove(W[$e],i)}catch{BE.warn(`cannot delete from attribute: ${b}, ${v}:${i}`)}}});o.push(A),_.push(i),n.original_records.push(S)}catch(S){BE.warn(S),n.skipped.push(i)}let c=[],u=await Promise.all(o);for(let l=0,h=u.length;l<h;l++)u[l]===!0?n.deleted.push(_[l]):(n.skipped.push(_[l]),c.push(l));let E=0;for(let l=0;l<c.length;l++){let h=c[l];n.original_records.splice(h-E,1),E++}return n.txn_time=io.getMicroTime(),n}catch(s){throw s}}a(kp,"deleteRecords");HE.exports={deleteRecords:kp}});var ls=d((gH,GE)=>{"use strict";var gr=g(),Yp=oo(),$p=F(),Kp=require("path"),{getBaseSchemaPath:Wp}=k(),Qp=Es(),Jp=p();GE.exports=Xp;async function Xp(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(gr.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(gr.isEmptyOrZeroLength(e.hash_values)&&!gr.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let _=0;_<e.records.length;_++){let c=e.records[_][s];gr.isEmpty(c)||e.hash_values.push(c)}}if(gr.isEmptyOrZeroLength(e.hash_values))return vE([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(gr.isEmptyOrZeroLength(e.records)){e.records=[];for(let _=0;_<e.hash_values.length;_++)e.records[_]={[s]:e.hash_values[_]}}let n=Kp.join(Wp(),e.schema.toString()),i=await $p.openEnvironment(n,e.table),o=await Yp.deleteRecords(i,s,e.hash_values);try{t===!0&&await Qp(e,o)}catch(_){Jp.error(`unable to write transaction due to ${_.message}`)}return vE(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(Xp,"lmdbDeleteRecords");function vE(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(vE,"createDeleteResponse")});var co=d((IH,qE)=>{"use strict";var Zp=f(),pH=Wt();function _o(e,t){let r=Object.create(null);if(t.length===1&&Zp.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(_o,"parseRow");function zp(e,t,r,s){let n=_o(r,e);s.push(n)}a(zp,"searchAll");function jp(e,t,r,s){let n=_o(r,e);s[t]=n}a(jp,"searchAllToMap");function eI(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(eI,"iterateDBI");function Zt(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(Zt,"pushResults");function tI(e,t,r,s,n,i){t.toString().endsWith(e)&&Zt(t,r,s,n,i)}a(tI,"endsWith");function rI(e,t,r,s,n,i){t.toString().includes(e)&&Zt(t,r,s,n,i)}a(rI,"contains");function sI(e,t,r,s,n,i){t>e&&Zt(t,r,s,n,i)}a(sI,"greaterThanCompare");function nI(e,t,r,s,n,i){t>=e&&Zt(t,r,s,n,i)}a(nI,"greaterThanEqualCompare");function iI(e,t,r,s,n,i){t<e&&Zt(t,r,s,n,i)}a(iI,"lessThanCompare");function aI(e,t,r,s,n,i){t<=e&&Zt(t,r,s,n,i)}a(aI,"lessThanEqualCompare");qE.exports={parseRow:_o,searchAll:zp,searchAllToMap:jp,iterateDBI:eI,endsWith:tI,contains:rI,greaterThanCompare:sI,greaterThanEqualCompare:nI,lessThanCompare:iI,lessThanEqualCompare:aI,pushResults:Zt}});var pr=d((LH,$E)=>{"use strict";var Fe=F(),oI=p(),Me=Wt(),Mt=Se(),J=He().LMDB_ERRORS_ENUM,CH=g(),_I=f(),je=co(),bH=require("lmdb"),{OVERFLOW_MARKER:FE,MAX_SEARCH_KEY_LENGTH:cI}=Mt,ds={lazy:!0};function xE(e,t,r,s,n=!1,i=void 0,o=void 0){let _=Object.create(null),c=Fe.openDBI(e,r);c[Mt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let u=uo(e,t,r);for(let{key:E,value:l}of c.getRange({start:n?void 0:!1,end:n?!1:void 0,limit:i,offset:o,reverse:n}))s(u(E,l),l,_,t,r);return _}a(xE,"iterateFullIndex");function Ss(e,t,r,s,n,i=!1,o=void 0,_=void 0,c=!1,u=!1){let E=[[],[]],l=Fe.openDBI(e,r),h=uo(e,t,r);l[Mt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let S=i===!0?s:n,A=i===!0?n:s,N=i===!0?!c:!u,b=i===!0?u:c;for(let{key:Ae,value:v}of l.getRange({start:A,end:S,reverse:i,limit:o,offset:_,inclusiveEnd:N,exclusiveStart:b}))je.pushResults(h(Ae,v),v,E,t,r);return E}a(Ss,"iterateRangeBetween");function uo(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith(FE)){if(!s)if(t)s=Fe.openDBI(e,t);else{let _=Fe.listDBIs(e);for(let c=0,u=_.length;c<u&&(s=Fe.openDBI(e,_[c]),!s[Mt.DBI_DEFINITION_NAME].is_hash_attribute);c++);}n=s.get(i,ds)[r]}return n}}a(uo,"getOverflowCheck");function uI(e,t,r,s=!1,n=void 0,i=void 0){if(Me.validateEnv(e),t===void 0)throw new Error(J.HASH_ATTRIBUTE_REQUIRED);Wn(r),r=hs(e,r);let o=[],_=Fe.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}))je.searchAll(r,c,u,o);return o}a(uI,"searchAll");function EI(e,t,r,s=!1,n=void 0,i=void 0){if(Me.validateEnv(e),t===void 0)throw new Error(J.HASH_ATTRIBUTE_REQUIRED);return Wn(r),r=hs(e,r),xE(e,t,t,je.searchAllToMap.bind(null,r),s,n,i)}a(EI,"searchAllToMap");function lI(e,t,r=!1,s=void 0,n=void 0){if(Me.validateEnv(e),t===void 0)throw new Error(J.ATTRIBUTE_REQUIRED);return xE(e,void 0,t,je.iterateDBI,r,s,n)}a(lI,"iterateDBI");function dI(e,t){if(Me.validateEnv(e),t===void 0)throw new Error(J.HASH_ATTRIBUTE_REQUIRED);return Fe.statDBI(e,t).entryCount}a(dI,"countAll");function SI(e,t,r,s,n=!1,i=void 0,o=void 0){Pt(e,r,s);let _=Fe.openDBI(e,r);s=Me.convertKeyValueToWrite(s);let c=[[],[]];if(_[Mt.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=_.get(s,ds);u!==void 0&&je.pushResults(s,u,c,t,r)}else for(let u of _.getValues(s,{reverse:n,limit:i,offset:o}))je.pushResults(s,u,c,t,r);return c}a(SI,"equals");function hI(e,t,r){return Pt(e,t,r),Fe.openDBI(e,t).getValuesCount(r)}a(hI,"count");function TI(e,t,r,s,n=!1,i=void 0,o=void 0){Pt(e,r,s);let _=[[],[]],c=Fe.openDBI(e,r);c[Mt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r),s=Me.convertKeyValueToWrite(s);let u=!0;if(typeof s=="number"&&(u=!1),n===!0){let E;for(let l of c.getKeys({start:s}))if(!l.startsWith(s)){E=l;break}E!==void 0&&(Number.isInteger(o)?o++:i++);for(let{key:l,value:h}of c.getRange({start:E,end:void 0,reverse:n,limit:i,offset:o}))if(l!==E){if(l.toString().startsWith(s))je.pushResults(l,h,_,t,r);else if(u===!0)break}}else for(let{key:E,value:l}of c.getRange({start:s,reverse:n,limit:i,offset:o}))if(E.toString().startsWith(s))je.pushResults(E,l,_,t,r);else if(u===!0)break;return _}a(TI,"startsWith");function fI(e,t,r,s,n=!1,i=void 0,o=void 0){return VE(e,t,r,s,n,i,o,!0)}a(fI,"endsWith");function VE(e,t,r,s,n=!1,i=void 0,o=void 0,_=!1){Pt(e,r,s);let c=[[],[]],u=Fe.openDBI(e,r);u[Mt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let E=uo(e,t,r);o=Number.isInteger(o)?o: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(FE))for(let A of u.getValues(h)){let N=E(h,A);(_?N.endsWith(s):N.includes(s))&&l(N,A)}else if(_?S.endsWith(s):S.includes(s))if(u[Mt.DBI_DEFINITION_NAME].is_hash_attribute)l(h,h);else for(let A of u.getValues(h))l(h,A)}function l(h,S){if(o>0){o--;return}i!==0&&(je.pushResults(h,S,c,t,r),i--)}return a(l,"found_match"),c}a(VE,"contains");function RI(e,t,r,s,n=!1,i=void 0,o=void 0){Pt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),Ss(e,t,r,s,c,n,i,o,!0,!1)}a(RI,"greaterThan");function mI(e,t,r,s,n=!1,i=void 0,o=void 0){Pt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),Ss(e,t,r,s,c,n,i,o,!1,!1)}a(mI,"greaterThanEqual");function AI(e,t,r,s,n=!1,i=void 0,o=void 0){Pt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),Ss(e,t,r,c,s,n,i,o,!1,!0)}a(AI,"lessThan");function NI(e,t,r,s,n=!1,i=void 0,o=void 0){Pt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),Ss(e,t,r,c,s,n,i,o,!1,!1)}a(NI,"lessThanEqual");function OI(e,t,r,s,n,i=!1,o=void 0,_=void 0){if(Me.validateEnv(e),r===void 0)throw new Error(J.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(J.START_VALUE_REQUIRED);if(n===void 0)throw new Error(J.END_VALUE_REQUIRED);if(s=Me.convertKeyValueToWrite(s),n=Me.convertKeyValueToWrite(n),s>n)throw new Error(J.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ss(e,t,r,s,n,i,o,_)}a(OI,"between");function gI(e,t,r,s){if(Me.validateEnv(e),t===void 0)throw new Error(J.HASH_ATTRIBUTE_REQUIRED);if(Wn(r),r=hs(e,r),s===void 0)throw new Error(J.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?ds:void 0);return i&&(n=je.parseRow(i,r)),n}a(gI,"searchByHash");function pI(e,t,r){if(Me.validateEnv(e),t===void 0)throw new Error(J.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(J.ID_REQUIRED);let s=!0;return e.dbis[t].get(r,ds)===void 0&&(s=!1),s}a(pI,"checkHashExists");function II(e,t,r,s,n=[]){YE(e,t,r,s,n);let i=kE(e,t,r,s,n);return Object.values(i)}a(II,"batchSearchByHash");function CI(e,t,r,s,n=[]){return YE(e,t,r,s,n),kE(e,t,r,s,n)}a(CI,"batchSearchByHashToMap");function kE(e,t,r,s,n=[]){r=hs(e,r);let i=Object.create(null),o=r.length<3?ds:void 0;for(let _=0;_<s.length;_++){let c=s[_];try{let u=e.dbis[t].get(c,o);if(u){let E=je.parseRow(u,r);i[c]=E}else n.push(c)}catch(u){throw oI.warn(u),u}}return i}a(kE,"batchHashSearch");function YE(e,t,r,s,n){if(Me.validateEnv(e),t===void 0)throw new Error(J.HASH_ATTRIBUTE_REQUIRED);if(Wn(r),!Array.isArray(s))throw s===void 0?new Error(J.IDS_REQUIRED):new Error(J.IDS_MUST_BE_ARRAY);Array.isArray(n)||(n=[])}a(YE,"initializeBatchSearchByHash");function Wn(e){if(!Array.isArray(e))throw e===void 0?new Error(J.FETCH_ATTRIBUTES_REQUIRED):new Error(J.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Wn,"validateFetchAttributes");function Pt(e,t,r){if(Me.validateEnv(e),t===void 0)throw new Error(J.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(J.SEARCH_VALUE_REQUIRED);if(r?.length>cI)throw new Error(J.SEARCH_VALUE_TOO_LARGE)}a(Pt,"validateComparisonFunctions");function hs(e,t){return t.length===1&&_I.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Fe.listDBIs(e)),t}a(hs,"setGetWholeRowAttributes");$E.exports={searchAll:uI,searchAllToMap:EI,count:hI,countAll:dI,equals:SI,startsWith:TI,endsWith:fI,contains:VE,searchByHash:gI,setGetWholeRowAttributes:hs,batchSearchByHash:II,batchSearchByHashToMap:CI,checkHashExists:pI,iterateDBI:lI,greaterThan:RI,greaterThanEqual:mI,lessThan:AI,lessThanEqual:NI,between:OI}});var Ts=d((yH,JE)=>{var KE=require("lodash"),WE=We(),B=require("joi"),bI=g(),{hdb_schema_table:et,checkValidTable:QE}=Kt(),{handleHDBError:LI,hdb_errors:wI}=q(),{HTTP_STATUS_CODES:yI}=wI,wH=B.object({schema:et,table:et,hash_values:B.array().min(1).items(B.alternatives(B.string(),B.number())).required(),get_attributes:B.array().min(1).items(et).required()}),UI=B.object({schema:et,table:et,search_attribute:et,search_value:B.any().required(),get_attributes:B.array().min(1).items(et).required(),desc:B.bool(),limit:B.number().integer().min(1),offset:B.number().integer().min(0)}),DI=B.object({schema:et,table:et,operator:B.string().valid("and","or").default("and").lowercase(),offset:B.number().integer().min(0),limit:B.number().integer().min(1),get_attributes:B.array().min(1).items(et).required(),conditions:B.array().min(1).items(B.object({search_attribute:et,search_type:B.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:B.when("search_type",{switch:[{is:"equals",then:B.any()},{is:"between",then:B.array().items(B.alternatives([B.string(),B.number()])).length(2)}],otherwise:B.alternatives(B.string(),B.number())}).required()})).required()});JE.exports=function(e,t){let r=null;switch(t){case"value":r=WE.validateBySchema(e,UI);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(QE("schema",e.schema)),i(QE("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=WE.validateBySchema(e,DI);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=bI.checkGlobalSchemaTable(e.schema,e.table);if(n)return LI(new Error,n,yI.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,_=[...e.get_attributes];if(t==="value"&&_.push(e.search_attribute),t==="conditions")for(let u=0,E=e.conditions.length;u<E;u++){let l=e.conditions[u];_.push(l.search_attribute)}let c=KE.filter(_,u=>u!=="*"&&u.attribute!=="*"&&!KE.some(o,E=>E===u||E.attribute===u||E.attribute===u.attribute));if(c&&c.length>0){let u=c.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var Eo=d((UH,XE)=>{"use strict";var MI=F(),PI=Ts(),BI=require("path"),{getBaseSchemaPath:HI}=k();XE.exports=vI;function vI(e){let t=PI(e,"hashes");if(t)throw t;let r=BI.join(HI(),e.schema.toString());return MI.openEnvironment(r,e.table)}a(vI,"initialize")});var lo=d((DH,ZE)=>{"use strict";var GI=pr(),qI=Eo();ZE.exports=FI;async function FI(e){try{let t=await qI(e),r=global.hdb_schema[e.schema][e.table];return GI.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(FI,"lmdbGetDataByHash")});var fs=d((MH,zE)=>{"use strict";var Qn=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(Qn,"SearchByHashObject");zE.exports=Qn});var el=d((BH,jE)=>{"use strict";var PH=fs(),xI=pr(),VI=Eo();jE.exports=kI;async function kI(e){try{let t=await VI(e),r=global.hdb_schema[e.schema][e.table];return xI.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(kI,"lmdbSearchByHash")});var At=d((HH,tl)=>{"use strict";var Jn=class{constructor(t,r,s,n,i,o,_,c=!1,u=void 0,E=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=_,this.reverse=c,this.limit=u,this.offset=E}};a(Jn,"SearchObject");tl.exports=Jn});var Xn=d((vH,al)=>{"use strict";var Te=pr(),YI=F(),$I=require("path"),KI=g(),O=Se(),zt=f(),{getBaseSchemaPath:WI}=k(),QI=Xt(),rl=He().LMDB_ERRORS_ENUM,{compareKeys:Ir}=require("ordered-binary"),Nt=zt.SEARCH_WILDCARDS;async function JI(e,t,r){let s;e.schema===zt.SYSTEM_SCHEMA_NAME?s=QI[e.table]:s=global.hdb_schema[e.schema][e.table];let n=il(e,s.hash_attribute,r,t);return sl(e,n,s.hash_attribute,r)}a(JI,"prepSearch");async function sl(e,t,r,s){let n=$I.join(WI(),e.schema.toString()),i=await YI.openEnvironment(n,e.table),o=nl(i,e,t,r);if([O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,O.SEARCH_TYPES.SEARCH_ALL,O.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(zI(e,r)===!1)return s===!0?ZI(o):o[1];let c=o[0];return s===!0?Te.batchSearchByHashToMap(i,r,e.get_attributes,c):Te.batchSearchByHash(i,r,e.get_attributes,c)}a(sl,"executeSearch");function nl(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:_,offset:c}=t;switch(o=typeof o=="boolean"?o:!1,_=Number.isInteger(_)?_:void 0,c=Number.isInteger(c)?c:void 0,r){case O.SEARCH_TYPES.EQUALS:n=Te.equals(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.CONTAINS:n=Te.contains(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.ENDS_WITH:case O.SEARCH_TYPES._ENDS_WITH:n=Te.endsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.STARTS_WITH:case O.SEARCH_TYPES._STARTS_WITH:n=Te.startsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Te.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Te.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case O.SEARCH_TYPES.SEARCH_ALL:return Te.searchAll(e,s,t.get_attributes,o,_,c);case O.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Te.searchAllToMap(e,s,t.get_attributes,o,_,c);case O.SEARCH_TYPES.BETWEEN:n=Te.between(e,i,t.search_attribute,t.search_value,t.end_value,o,_,c);break;case O.SEARCH_TYPES.GREATER_THAN:case O.SEARCH_TYPES._GREATER_THAN:n=Te.greaterThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.GREATER_THAN_EQUAL:case O.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Te.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.LESS_THAN:case O.SEARCH_TYPES._LESS_THAN:n=Te.lessThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.LESS_THAN_EQUAL:case O.SEARCH_TYPES._LESS_THAN_EQUAL:n=Te.lessThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;default:return Object.create(null)}return n}a(nl,"searchByType");function XI(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case O.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case O.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case O.SEARCH_TYPES.ENDS_WITH:case O.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case O.SEARCH_TYPES.STARTS_WITH:case O.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case O.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return Ir(i,s[0])>=0&&Ir(i,s[1])<=0};case O.SEARCH_TYPES.GREATER_THAN:case O.SEARCH_TYPES._GREATER_THAN:return n=>Ir(n[r],s)>0;case O.SEARCH_TYPES.GREATER_THAN_EQUAL:case O.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>Ir(n[r],s)>=0;case O.SEARCH_TYPES.LESS_THAN:case O.SEARCH_TYPES._LESS_THAN:return n=>Ir(n[r],s)<0;case O.SEARCH_TYPES.LESS_THAN_EQUAL:case O.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>Ir(n[r],s)<=0;default:return Object.create(null)}}a(XI,"filterByType");function ZI(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}a(ZI,"createMapFromArrays");function zI(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(zI,"checkToFetchMore");function il(e,t,r,s){if(KI.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),_=!1;if(e.search_attribute===t&&(_=!0),Nt.indexOf(n)>-1)return r===!0?O.SEARCH_TYPES.SEARCH_ALL_TO_MAP:O.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Nt[0])<0&&n.indexOf(Nt[1])<0)return _===!0?r===!0?O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:O.SEARCH_TYPES.EQUALS;if(Nt.indexOf(i)>=0&&Nt.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),O.SEARCH_TYPES.CONTAINS;if(Nt.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),O.SEARCH_TYPES.ENDS_WITH;if(Nt.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),O.SEARCH_TYPES.STARTS_WITH;if(n.includes(Nt[0])||n.includes(Nt[1]))return O.SEARCH_TYPES.EQUALS;throw new Error(rl.UNKNOWN_SEARCH_TYPE)}else switch(s){case zt.VALUE_SEARCH_COMPARATORS.BETWEEN:return O.SEARCH_TYPES.BETWEEN;case zt.VALUE_SEARCH_COMPARATORS.GREATER:return O.SEARCH_TYPES.GREATER_THAN;case zt.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return O.SEARCH_TYPES.GREATER_THAN_EQUAL;case zt.VALUE_SEARCH_COMPARATORS.LESS:return O.SEARCH_TYPES.LESS_THAN;case zt.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return O.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(rl.UNKNOWN_SEARCH_TYPE)}}a(il,"createSearchTypeFromSearchObject");al.exports={executeSearch:sl,createSearchTypeFromSearchObject:il,prepSearch:JI,searchByType:nl,filterByType:XI}});var _l=d((qH,ol)=>{"use strict";var GH=At(),jI=Ts(),eC=g(),tC=f(),rC=Xn();ol.exports=sC;async function sC(e,t){if(!eC.isEmpty(t)&&tC.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=jI(e,"value");if(s)throw s;let n=!0;try{return await rC.prepSearch(e,t,n)}catch(i){throw i}}a(sC,"lmdbGetDataByValue")});var Cr=d((xH,cl)=>{"use strict";var FH=At(),nC=Ts(),iC=g(),aC=f(),oC=Xn();cl.exports=_C;async function _C(e,t){if(!iC.isEmpty(t)&&aC.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=nC(e,"value");if(s)throw s;let n=!1;try{return await oC.prepSearch(e,t,n)}catch(i){throw i}}a(_C,"lmdbSearchByValue")});var El=d((kH,ul)=>{"use strict";var VH=Se(),Zn=class{constructor(t,r,s,n,i=void 0,o=void 0,_="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=_}};a(Zn,"SearchByConditionsObject");var zn=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(zn,"SearchCondition");var jn=class{constructor(t,r){this.attribute=t,this.desc=r}};a(jn,"SortAttribute");ul.exports={SearchByConditionsObject:Zn,SearchCondition:zn,SortAttribute:jn}});var fl=d(($H,Tl)=>{"use strict";var YH=El().SearchByConditionsObject,cC=At(),uC=Ts(),So=pr(),ei=Se(),hl=Xn(),EC=co(),ll=require("lodash"),{getBaseSchemaPath:lC}=k(),dC=require("path"),SC=F(),{handleHDBError:dl,hdb_errors:hC}=q(),{HTTP_STATUS_CODES:TC}=hC,fC=1e8,RC={lazy:!0};Tl.exports=mC;async function mC(e){try{let t=uC(e,"conditions");if(t)throw dl(t,t.message,TC.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=dC.join(lC(),e.schema.toString()),s=await SC.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=ll.sortBy(e.conditions,o=>{if(o.estimated_count===void 0){let _=o.search_type;_===ei.SEARCH_TYPES.EQUALS?o.estimated_count=So.count(s,o.search_attribute,o.search_value):_===ei.SEARCH_TYPES.CONTAINS||_===ei.SEARCH_TYPES.ENDS_WITH?o.estimated_count=1/0:o.estimated_count=fC}return o.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[o]=await Sl(s,e,i[0],n.hash_attribute),_=s.dbis[n.hash_attribute],c=i.slice(1).map(hl.filterByType),u=c.length,E=[],l=So.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 o){let N=_.get(A,RC);for(let b=0;b<u;b++)if(!c[b](N))continue e;if(h>0){h--;continue}if(S<=0)break;S--,E.push(EC.parseRow(N,l))}return E}else{let o=[],_=[];for(let c of i){let[u]=await Sl(s,e,c,n.hash_attribute);_.push(u)}if(o=ll.union(..._),e.limit>0||e.offset>0){let c=Number.isInteger(e.limit)?e.limit:o.length;o=o.splice(e.offset,c)}return So.batchSearchByHash(s,n.hash_attribute,e.get_attributes,o)}}catch(t){throw dl(t)}}a(mC,"lmdbSearchByConditions");async function Sl(e,t,r,s){let n=new cC(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===ei.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,hl.searchByType(e,n,i,s)}a(Sl,"executeConditionSearch")});var Rs=d((KH,Rl)=>{"use strict";var AC=f().OPERATIONS_ENUM,ti=class{constructor(t,r,s,n=void 0){this.operation=AC.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(ti,"DeleteObject");Rl.exports=ti});var ho=d((WH,ml)=>{"use strict";var ri=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(ri,"DropAttributeObject");ml.exports=ri});var fo=d((JH,Al)=>{"use strict";var NC=At(),OC=Rs(),QH=ho(),ot=f(),gC=g(),To=F(),pC=Xt(),IC=Cr(),CC=ls(),{getBaseSchemaPath:bC}=k(),LC=require("path");Al.exports=wC;async function wC(e,t=!0){let r;e.schema===ot.SYSTEM_SCHEMA_NAME?r=pC[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await UC(e),n=LC.join(bC(),e.schema.toString()),i=await To.openEnvironment(n,e.table);return t===!0&&await yC(e,i,r.hash_attribute),To.dropDBI(i,e.attribute),s}a(wC,"lmdbDropAttribute");async function yC(e,t,r){let s=To.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:_,version:c}of s.getRange({start:!1,versions:!0})){let u={};for(let E in _)E!==i&&(u[E]=_[E]);n=t.dbis[r].put(o,u,c)}await n}a(yC,"removeAttributeFromAllObjects");async function UC(e){let t=new NC(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ot.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ot.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ot.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=(await IC(t)).filter(o=>o[ot.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(gC.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[ot.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new OC(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return CC(i)}a(UC,"dropAttributeFromSystem")});var pl=d((XH,gl)=>{"use strict";var DC=fo(),MC=ho(),Nl=g(),Ol=p(),PC=He().LMDB_ERRORS_ENUM;gl.exports=BC;async function BC(e){if(Nl.isEmpty(global.hdb_schema[e.schema])||Nl.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 MC(e.schema,e.table,r);try{await DC(n,!1)}catch(i){i.message!==PC.DBI_DOES_NOT_EXIST&&Ol.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw Ol.error(`Error dropping attribute ${r}`),s}}a(BC,"lmdbDropAllAttributes")});var Ro=d((zH,Ml)=>{"use strict";var wl=At(),yl=Rs(),Ul=Cr(),Dl=ls(),ZH=pl(),Ce=f(),Il=g(),Cl=F(),{getBaseSchemaPath:HC,getTransactionAuditStorePath:vC}=k(),bl=require("path"),Ll=p();Ml.exports=GC;async function GC(e){try{if(Il.isEmpty(global.hdb_schema[e.schema])||Il.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await qC(e),await FC(e);let t=bl.join(HC(),e.schema.toString());try{await Cl.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Ll.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=bl.join(vC(),e.schema.toString());await Cl.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Ll.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(GC,"lmdbDropTable");async function qC(e){let t=new wl(Ce.SYSTEM_SCHEMA_NAME,Ce.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ce.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ce.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=await Ul(t),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new yl(Ce.SYSTEM_SCHEMA_NAME,Ce.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Dl(n)}a(qC,"deleteAttributesFromSystem");async function FC(e){let t=new wl(Ce.SYSTEM_SCHEMA_NAME,Ce.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ce.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ce.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ce.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ce.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=await Ul(t)}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new yl(Ce.SYSTEM_SCHEMA_NAME,Ce.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Dl(n)}catch(i){throw i}}a(FC,"dropTableFromSystem")});var Bl=d((ev,Pl)=>{"use strict";var xC=require("fs-extra"),VC=At(),kC=fs(),YC=Rs(),$C=Ro(),KC=ls(),WC=lo(),QC=Cr(),Ot=f(),jH=g(),JC=require("path"),{getBaseSchemaPath:XC}=k(),{handleHDBError:ZC,hdb_errors:zC}=q(),{HDB_ERROR_MSGS:jC,HTTP_STATUS_CODES:eb}=zC;Pl.exports=tb;async function tb(e){let t;try{t=await rb(e.schema);let r=new VC(Ot.SYSTEM_SCHEMA_NAME,Ot.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ot.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Ot.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=await QC(r);for(let o=0;o<s.length;o++){let _={schema:t,table:s[o].name};try{await $C(_)}catch(c){if(c.message!=="invalid environment")throw c}}let n=new YC(Ot.SYSTEM_SCHEMA_NAME,Ot.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await KC(n);let i=JC.join(XC(),t.toString());await xC.remove(i)}catch(r){throw r}}a(tb,"lmdbDropSchema");async function rb(e){let t=new kC(Ot.SYSTEM_SCHEMA_NAME,Ot.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Ot.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=await WC(t)}catch(n){throw n}for(let n in r)r[n].name===e&&(s=e);if(!s)throw ZC(new Error,jC.SCHEMA_NOT_FOUND(e),eb.NOT_FOUND,void 0,void 0,!0);return s}a(rb,"validateDropSchema")});var mo=d((tv,Hl)=>{"use strict";var si=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(si,"CreateTableObject");Hl.exports=si});var Gl=d((sv,vl)=>{"use strict";var sb=require("path"),nb=require("fs-extra"),ni=F(),{getTransactionAuditStorePath:ib}=k(),Ao=Se(),rv=mo();vl.exports=ab;async function ab(e){let t;try{let r=sb.join(ib(),e.schema.toString());await nb.mkdirp(r),t=await ni.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{ni.createDBI(t,Ao.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),ni.createDBI(t,Ao.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),ni.createDBI(t,Ao.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(ab,"createTransactionsAuditEnvironment")});var Vl=d((nv,xl)=>{"use strict";var No=f(),ql=F(),ob=fr(),_b=require("path"),{getSystemSchemaPath:cb,getBaseSchemaPath:ub}=k(),Eb=Xt(),lb=Un(),Oo=yn(),db=p(),Sb=Gl(),po=Eb.hdb_table,Fl=[];for(let e=0;e<po.attributes.length;e++)Fl.push(po.attributes[e].attribute);xl.exports=hb;async function hb(e,t){let r=_b.join(ub(),t.schema.toString()),s=new Oo(t.schema,t.table,No.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Oo(t.schema,t.table,No.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Oo(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await ql.createEnvironment(r,t.table),e!==void 0){let o=await ql.openEnvironment(cb(),No.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await ob.insertRecords(o,po.hash_attribute,Fl,[e]),await go(s),await go(n),await go(i)}await Sb(t)}catch(o){throw o}}a(hb,"lmdbCreateTable");async function go(e){try{await lb(e)}catch(t){db.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(go,"createAttribute")});var Yl=d((iv,kl)=>{"use strict";var Tb=Dn(),fb=Hn(),Rb=qn(),br=f(),mb=fr().updateRecords,Ab=F(),Nb=require("path"),{getBaseSchemaPath:Ob}=k(),gb=Es(),pb=p();kl.exports=Ib;async function Ib(e){try{let{schema_table:t,attributes:r}=Tb(e);fb(e,r,t.hash_attribute),e.schema!==br.SYSTEM_SCHEMA_NAME&&(r.includes(br.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(br.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(br.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(br.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Rb(e.hdb_auth_header,t,r),n=Nb.join(Ob(),e.schema.toString()),i=await Ab.openEnvironment(n,e.table),o=await mb(i,t.hash_attribute,r,e.records,e[br.CLUSTERING_FLAG]!==!0);try{await gb(e,o)}catch(_){pb.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(Ib,"lmdbUpdateRecords")});var Kl=d((av,$l)=>{"use strict";var Cb=f().OPERATIONS_ENUM,ii=class{constructor(t,r,s,n=void 0){this.operation=Cb.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(ii,"UpsertObject");$l.exports=ii});var Ql=d((_v,Wl)=>{"use strict";var ov=Kl(),bb=Dn(),Lb=Hn(),wb=qn(),Lr=f(),yb=fr().upsertRecords,Ub=F(),Db=require("path"),{getBaseSchemaPath:Mb}=k(),Pb=Es(),Bb=p(),{handleHDBError:Hb,hdb_errors:vb}=q();Wl.exports=Gb;async function Gb(e){let t;try{t=bb(e)}catch(c){throw Hb(c,c.message,vb.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;Lb(e,s,r.hash_attribute),e.schema!==Lr.SYSTEM_SCHEMA_NAME&&(s.includes(Lr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Lr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Lr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Lr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await wb(e.hdb_auth_header,r,s),i=Db.join(Mb(),e.schema.toString()),o=await Ub.openEnvironment(i,e.table),_=await yb(o,r.hash_attribute,s,e.records,e[Lr.CLUSTERING_FLAG]!==!0);try{await Pb(e,_)}catch(c){Bb.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:_.written_hashes,schema_table:r,new_attributes:n,txn_time:_.txn_time}}a(Gb,"lmdbUpsertRecords")});var ed=d((cv,jl)=>{"use strict";var qb=At(),Jl=g(),Xl=p(),Fb=Cr(),Zl=f(),xb=oo().deleteRecords,Vb=F(),kb=require("path"),{getBaseSchemaPath:Yb}=k(),{promisify:$b}=require("util"),Kb=$b(setTimeout),zl=1e4,Wb=10;jl.exports=Qb;async function Qb(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(Jl.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 qb(e.schema,e.table,Zl.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await Fb(n,Zl.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw Xl.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return Jl.isEmptyOrZeroLength(s)?(Xl.trace("No records found to delete"),{message:"No records found to delete"}):await Jb(e,s,t)}a(Qb,"lmdbDeleteRecordsBefore");async function Jb(e,t,r){let s=kb.join(Yb(),e.schema.toString()),n=await Vb.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,_=t.length;o<_;o+=zl){let c=t.slice(o,o+zl),u=[];for(let E=0,l=c.length;E<l;E++)u.push(c[E][r]);try{let E=await xb(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(E.deleted),i.skipped_hashes=i.skipped_hashes.concat(E.skipped)}catch(E){throw E}await Kb(Wb)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(Jb,"chunkDeletes")});var rd=d((uv,td)=>{"use strict";var ai=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(ai,"DeleteBeforeObject");td.exports=ai});var nd=d((Ev,sd)=>{"use strict";var oi=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(oi,"DeleteAuditLogsBeforeResults");sd.exports=oi});var od=d((dv,ad)=>{"use strict";var Io=F(),{getTransactionAuditStorePath:Xb}=k(),lv=rd(),Zb=require("path"),ms=Se(),zb=g(),id=nd(),jb=require("util").promisify,eL=jb(setTimeout),tL=1e4,rL=100;ad.exports=sL;async function sL(e){let t=Zb.join(Xb(),e.schema),r=await Io.openEnvironment(t,e.table,!0),s=Io.listDBIs(r);Io.initializeDBIs(r,ms.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new id;do n=await nL(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 eL(rL);while(n.transactions_deleted>0);return i}a(sL,"deleteAuditLogsBefore");async function nL(e,t){let r=new id;try{let s=e.dbis[ms.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let _=o[ms.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];zb.isEmpty(_)||(n=e.dbis[ms.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(_,i));for(let c=0;c<o.hash_values.length;c++)n=e.dbis[ms.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[c],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>tL)break}return await n,r}catch(s){throw s}}a(nL,"deleteTransactions")});var Sd=d((Sv,dd)=>{"use strict";var Co=F(),wr=Se(),_d=Wt(),bo=f(),cd=g(),{getTransactionAuditStorePath:iL}=k(),aL=require("path"),oL=pr(),_i=Ar(),_L=p();dd.exports=cL;async function cL(e){let t=aL.join(iL(),e.schema),r=await Co.openEnvironment(t,e.table,!0),s=Co.listDBIs(r);Co.initializeDBIs(r,wr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case bo.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return ud(r,e.search_values);case bo.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,EL(r,e.search_values,n);case bo.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return uL(r,e.search_values);default:return ud(r)}}a(cL,"readAuditLog");function ud(e,t=[0,_d.getMicroTime()]){cd.isEmpty(t[0])&&(t[0]=0),cd.isEmpty(t[1])&&(t[1]=_d.getMicroTime());let r=[];try{let s=e.dbis[wr.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 o=Object.assign(new _i,i);r.push(o)}return r}catch(s){throw s}}a(ud,"searchTransactionsByTimestamp");function uL(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[wr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,ld(e,i))}return Object.fromEntries(r)}a(uL,"searchTransactionsByUsername");function EL(e,t,r){let s=new Map;for(let _=0,c=t.length;_<c;_++){let u=t[_],E=oL.equals(e,wr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,wr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let l=0,h=E[0].length;l<h;l++){let S=E[0][l],A=Number(S);s.has(A)?s.get(A).push(u.toString()):s.set(A,[u.toString()])}}let n=Array.from(s.keys()),i=ld(e,n),o=new Map;for(let _=0;_<i.length;_++){let c=i[_],u=c.timestamp,E=s.get(u);Ed(c,"records",r,E,o),Ed(c,"original_records",r,E,o)}return Object.fromEntries(o)}a(EL,"searchTransactionsByHashValues");function Ed(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let _=e[t][o],c=_[r].toString();if(s.indexOf(c)>=0)if(n.has(c)){let u=n.get(c),E=u[u.length-1];if(E.timestamp===i)E[t]=[_];else{let l=new _i(e.operation,e.user_name,i,void 0);l[t]=[_],u.push(l)}}else{let u=new _i(e.operation,e.user_name,i,void 0);u[t]=[_],n.set(c,[u])}}}a(Ed,"loopRecords");function ld(e,t){let r=[];try{let s=e.dbis[wr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new _i,i);r.push(o)}}catch(i){_L.warn(i)}return r}catch(s){throw s}}a(ld,"batchSearchTransactions")});var Td=d((hv,hd)=>{"use strict";var lL=require("path"),{getBaseSchemaPath:dL}=k(),SL=F();hd.exports={writeTransaction:hL};async function hL(e,t,r){let s=lL.join(dL(),e);return(await SL.openEnvironment(s,t)).transaction(r)}a(hL,"writeTransaction")});var Rd=d((Tv,fd)=>{"use strict";var TL=require("path"),{getBaseSchemaPath:fL}=k(),RL=F();fd.exports={flush:mL};async function mL(e,t){let r=TL.join(fL(),e.toString());return(await RL.openEnvironment(r,t.toString())).flushed}a(mL,"flush")});var Ad=d((fv,md)=>{"use strict";var j=p(),{handleHDBError:AL}=q(),NL=Pa(),OL=Un(),gL=no(),pL=UE(),IL=ls(),CL=lo(),bL=el(),LL=_l(),wL=Cr(),yL=fl(),UL=Bl(),DL=Vl(),ML=Yl(),PL=Ql(),BL=ed(),HL=od(),vL=Ro(),GL=fo(),qL=Sd(),FL=Td(),xL=Rd(),ci=class extends NL{async searchByConditions(t){try{return yL(t)}catch(r){throw j.error(r),r}}async getDataByHash(t){try{return await CL(t)}catch(r){throw j.error(r),r}}async searchByHash(t){try{return await bL(t)}catch(r){throw j.error(r),r}}async getDataByValue(t,r){try{return await LL(t,r)}catch(s){throw j.error(s),s}}async searchByValue(t){try{return await wL(t)}catch(r){throw j.error(r),r}}async createSchema(t){try{return await pL(t)}catch(r){throw j.error(r),r}}async dropSchema(t){try{return await UL(t)}catch(r){throw j.error(r),r}}async createTable(t,r){try{return await DL(t,r)}catch(s){throw j.error(s),s}}async dropTable(t){try{return await vL(t)}catch(r){throw j.error(r),r}}async createAttribute(t){try{return await OL(t)}catch(r){throw j.error(r),r}}async createRecords(t){try{return await gL(t)}catch(r){throw j.error(r),r}}async updateRecords(t){try{return await ML(t)}catch(r){throw j.error(r),r}}async upsertRecords(t){try{return await PL(t)}catch(r){throw AL(r,null,null,j.ERR,r)}}async deleteRecords(t){try{return await IL(t)}catch(r){throw j.error(r),r}}async deleteRecordsBefore(t){try{return await BL(t)}catch(r){throw j.error(r),r}}async dropAttribute(t){try{return await GL(t)}catch(r){throw j.error(r),r}}async deleteAuditLogsBefore(t){try{return await HL(t)}catch(r){throw j.error(r),r}}async readAuditLog(t){try{return await qL(t)}catch(r){throw j.error(r),r}}writeTransaction(t,r,s){return FL.writeTransaction(t,r,s)}flush(t,r){return xL.flush(t,r)}};a(ci,"LMDBBridge");md.exports=ci});var jt=d((Rv,Od)=>{"use strict";var VL=Ad(),kL=Pa(),YL=Q();YL.initSync();var Nd;function $L(){return Nd instanceof kL?Nd:new VL}a($L,"getBridge");Od.exports=$L()});var Bd=d((Av,Pd)=>{"use strict";var Lo=require("recursive-iterator"),KL=require("alasql"),wo=require("clone"),gd=g(),{handleHDBError:pd,hdb_errors:WL}=q(),{HDB_ERROR_MSGS:Id,HTTP_STATUS_CODES:Cd}=WL,QL=["DISTINCT_ARRAY"],bd=Symbol("validateTables"),yo=Symbol("validateTable"),mv=Symbol("getAllColumns"),Ld=Symbol("validateAllColumns"),ui=Symbol("findColumn"),wd=Symbol("validateOrderBy"),As=Symbol("validateSegment"),Uo=Symbol("validateColumn"),yd=Symbol("setColumnsForTable"),Ud=Symbol("checkColumnsForAsterisk"),Dd=Symbol("validateGroupBy"),Md=Symbol("hasColumns"),Ei=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[bd](),this[Ud](),this[Ld]()}[bd](){if(this[Md]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[yo](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[yo](t.table)})}}[Md](){let t=!1,r=new Lo(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[yo](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw pd(new Error,Id.SCHEMA_NOT_FOUND(t.databaseid),Cd.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw pd(new Error,Id.TABLE_NOT_FOUND(t.databaseid,t.tableid),Cd.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=wo(s);n.table=wo(t),this.attributes.push(n)})}[ui](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)}[Ud](){let t=new Lo(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[yd](r.tableid)}[yd](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new KL.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Ld](){this[As](this.statement.columns,!1),this[As](this.statement.joins,!1),this[As](this.statement.where,!1),this[Dd](this.statement.group,!1),this[As](this.statement.order,!0)}[As](t,r){if(!t)return;let s=new Lo(t),n=[];for(let{node:i,path:o}of s)!gd.isEmpty(i)&&!gd.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[wd](i):n.push(this[Uo](i)));return n}[Dd](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&QL.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=wo(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[ui](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[ui](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,_)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(_,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[wd](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[Uo](t)}[Uo](t){let r=this[ui](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};a(Ei,"SelectValidator");Pd.exports=Ei});var qd=d((Nv,Gd)=>{"use strict";var Hd=require("lodash"),Ns=require("mathjs"),JL=require("jsonata"),vd=g();Gd.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Hd.uniqWith(e,Hd.isEqual):e,searchJSON:XL,mad:Os.bind(null,Ns.mad),mean:Os.bind(null,Ns.mean),mode:Os.bind(null,Ns.mode),prod:Os.bind(null,Ns.prod),median:Os.bind(null,Ns.median)};function Os(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Os,"aggregateFunction");function XL(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(vd.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),vd.isEmpty(this.__ala__.res[r])){let s=JL(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(XL,"searchJSON")});var xd=d((Ov,Fd)=>{"use strict";var Z=require("moment"),Do="YYYY-MM-DDTHH:mm:ss.SSSZZ";Z.suppressDeprecationWarnings=!0;Fd.exports={current_date:()=>Z().utc().format("YYYY-MM-DD"),current_time:()=>Z().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Z(e).utc().format("YYYY");case"month":return Z(e).utc().format("MM");case"day":return Z(e).utc().format("DD");case"hour":return Z(e).utc().format("HH");case"minute":return Z(e).utc().format("mm");case"second":return Z(e).utc().format("ss");case"millisecond":return Z(e).utc().format("SSS");default:break}},date:e=>Z(e).utc().format(Do),date_format:(e,t)=>Z(e).utc().format(t),date_add:(e,t,r)=>Z(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Z(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=Z(e).utc(),n=Z(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>Z().utc().valueOf(),get_server_time:()=>Z().format(Do),offset_utc:(e,t)=>Z(e).utc().utcOffset(t).format(Do)}});var $d=d((gv,Yd)=>{"use strict";var ZL=require("@turf/area"),zL=require("@turf/length"),jL=require("@turf/circle"),ew=require("@turf/difference"),tw=require("@turf/distance"),rw=require("@turf/boolean-contains"),sw=require("@turf/boolean-equal"),nw=require("@turf/boolean-disjoint"),iw=require("@turf/helpers"),Vd=f(),D=g();Yd.exports={geoArea:aw,geoLength:ow,geoCircle:_w,geoDifference:cw,geoDistance:kd,geoNear:uw,geoContains:Ew,geoEqual:lw,geoCrosses:dw,geoConvert:Sw};var Mo="geo1 is required",Po="geo2 is required";function aw(e){if(D.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=D.autoCast(e)),ZL.default(e)}a(aw,"geoArea");function ow(e,t){if(D.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=D.autoCast(e)),zL.default(e,{units:t||"kilometers"})}a(ow,"geoLength");function _w(e,t,r){if(D.isEmpty(e))throw new Error("point is required");if(D.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=D.autoCast(e)),jL.default(e,t,{units:r||"kilometers"})}a(_w,"geoCircle");function cw(e,t){if(D.isEmpty(e))throw new Error("poly1 is required");if(D.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),ew(e,t)}a(cw,"geoDifference");function kd(e,t,r){if(D.isEmpty(e))throw new Error("point1 is required");if(D.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),tw.default(e,t,{units:r||"kilometers"})}a(kd,"geoDistance");function uw(e,t,r,s){if(D.isEmpty(e))throw new Error("point1 is required");if(D.isEmpty(t))throw new Error("point2 is required");if(D.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),isNaN(r))throw new Error("distance must be a number");return kd(e,t,s)<=r}a(uw,"geoNear");function Ew(e,t){if(D.isEmpty(e))throw new Error(Mo);if(D.isEmpty(e))throw new Error(Po);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),rw.default(e,t)}a(Ew,"geoContains");function lw(e,t){if(D.isEmpty(e))throw new Error(Mo);if(D.isEmpty(e))throw new Error(Po);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),sw.default(e,t)}a(lw,"geoEqual");function dw(e,t){if(D.isEmpty(e))throw new Error(Mo);if(D.isEmpty(e))throw new Error(Po);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),!nw.default(e,t)}a(dw,"geoCrosses");function Sw(e,t,r){if(D.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(D.isEmpty(t))throw new Error("geo_type is required");if(D.isEmpty(Vd.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Vd.GEO_CONVERSION_ENUM).join(",")}`);return iw[t](e,r)}a(Sw,"geoConvert")});var Wd=d((pv,Kd)=>{var er=qd(),Pe=xd(),_t=$d();Kd.exports=e=>{e.aggr.mad=e.aggr.MAD=er.mad,e.aggr.mean=e.aggr.MEAN=er.mean,e.aggr.mode=e.aggr.MODE=er.mode,e.aggr.prod=e.aggr.PROD=er.prod,e.aggr.median=e.aggr.MEDIAN=er.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=er.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=er.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Pe.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Pe.current_time,e.fn.extract=e.fn.EXTRACT=Pe.extract,e.fn.date=e.fn.DATE=Pe.date,e.fn.date_format=e.fn.DATE_FORMAT=Pe.date_format,e.fn.date_add=e.fn.DATE_ADD=Pe.date_add,e.fn.date_sub=e.fn.DATE_SUB=Pe.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Pe.date_diff,e.fn.now=e.fn.NOW=Pe.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Pe.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Pe.get_server_time,e.fn.getdate=e.fn.GETDATE=Pe.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Pe.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=_t.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=_t.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=_t.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=_t.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=_t.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=_t.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=_t.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=_t.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=_t.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=_t.geoNear}});var Xd=d((Iv,Jd)=>{"use strict";var gs=require("lodash"),oe=require("alasql");oe.options.cache=!1;var hw=Wd(),Qd=require("clone"),li=require("recursive-iterator"),L=p(),y=g(),yr=jt(),Tw=f(),{hdb_errors:fw}=q(),Rw="IS NULL",ps="There was a problem performing this search. Please check the logs and try again.";hw(oe);var di=class{constructor(t,r){if(y.isEmpty(t))throw L.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(),y.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!y.isEmptyOrZeroLength(s))return L.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw L.error("Error thrown from checkEmptySQL in SQLSearch class method search."),L.error(s),new Error(ps)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw L.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),L.error(s),new Error(ps)}if(Object.keys(this.data).length===0)return L.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw L.error("Error thrown from processJoins in SQLSearch class method search."),L.error(s),new Error(ps)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw L.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),L.error(s),new Error(ps)}try{return t=await this._finalSQL(),t}catch(s){throw L.error("Error thrown from finalSQL in SQLSearch class method search."),L.error(s),new Error(ps)}}_getColumns(){let t=new li(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(Qd(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=gs.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(y.isEmpty(this.statement.where)){L.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new li(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!y.isEmpty(r)&&r.right)if(y.isNotEmptyAndHasValue(r.right.value)){let s=y.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new oe.yy.LogicValue({value:s}):r.right instanceof oe.yy.StringValue&&!y.isEmpty(s)&&y.autoCasterIsNumberCheck(s.toString())&&(r.right=new oe.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=y.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new oe.yy.LogicValue({value:i}):s instanceof oe.yy.StringValue&&y.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new oe.yy.NumValue({value:i}))});if(t){L.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new li(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!y.isEmpty(Tw.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(y.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(y.isEmptyOrZeroLength(r.left.columnid)||y.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(y.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let _=!1;switch(r.op){case"=":!y.isEmpty(r.right.value)||!y.isEmpty(r.left.value)?s.add(y.isEmpty(r.right.value)?r.left.value:r.right.value):_=!0;break;case"IN":let c=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<c.length;u++)if(c[u].value)s.add(c[u].value);else{_=!0;break}break;default:_=!0;break}this.exact_search_values[o].ignore=_,_?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(y.isEmptyOrZeroLength(this.all_table_attributes)&&y.isEmptyOrZeroLength(this.statement.from)&&y.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&&gs.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(y.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);y.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(y.isEmptyOrZeroLength(this.all_table_attributes)&&!y.isEmptyOrZeroLength(this.columns.columns))return t;if(y.isEmptyOrZeroLength(this.all_table_attributes)&&y.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await oe.promise(r)}catch(r){throw L.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),L.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(Qd(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(y.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(Rw)>-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=gs.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,_=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,_)),i.attribute!==_&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,_={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},c=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(c=!0),!y.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!y.isEmptyOrZeroLength(this.exact_search_values[u].values))if(c)try{_.hash_values=Array.from(this.exact_search_values[u].values);let E=await yr.getDataByHash(_);for(let l of _.hash_values)l in E&&!this.data[i].__merged_data[l]&&(this.data[i].__merged_data[l]=[...s[i]],this._setMergedHashAttribute(i,l))}catch(E){L.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),L.error(E)}else try{_.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async E=>{let l=Object.assign({},_);l.search_value=E;let h=await yr.getDataByValue(l);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,y.autoCast(S)))}))}catch(E){L.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),L.error(E)}else if(!y.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!y.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let E=this.comparator_search_values[u].comparators;for(let l=0,h=E.length;l<h;l++){let S=E[l];_.search_attribute=S.attribute,_.search_value=S.search_value;let A=await yr.getDataByValue(_,S.operation);if(c)for(let N in A)this.data[i].__merged_data[N]||(this.data[i].__merged_data[N]=[...s[i]],this._setMergedHashAttribute(i,y.autoCast(N)));else for(let N in A)this.data[i].__merged_data[N]?this._updateMergedAttribute(i,N,n.attribute,A[N][n.attribute]):(this.data[i].__merged_data[N]=[...s[i]],this._updateMergedAttribute(i,N,n.attribute,A[N][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(N)))}}catch(E){L.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),L.error(E)}else try{_.search_attribute=n.attribute,_.search_value="*";let E=await yr.getDataByValue(_);if(c)for(let l in E)this.data[i].__merged_data[l]||(this.data[i].__merged_data[l]=[...s[i]],this._setMergedHashAttribute(i,y.autoCast(l)));else for(let l in E)this.data[i].__merged_data[l]?this._updateMergedAttribute(i,l,n.attribute,E[l][n.attribute]):(this.data[i].__merged_data[l]=[...s[i]],this._updateMergedAttribute(i,l,n.attribute,E[l][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(l)))}catch(E){L.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),L.error(E)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof oe.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new oe.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new oe.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new oe.yy.FuncValue:new oe.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(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 o=[],_={};n.forEach(S=>{let A=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__hash_name,N=S.as?S.as_orig:S.tableid_orig;o.push({key:`'${N}.${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 "${N}.${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 E="",l="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(E=this.statement.limit?"LIMIT "+this.statement.limit:"",l=this.statement.offset?"OFFSET "+this.statement.offset:"");let h=[];try{let S=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${c} ${u} ${E} ${l}`,A=this._convertColumnsToIndexes(S,n);h=await oe.promise(A,t),t=null}catch(S){throw L.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),L.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 N=h[S];o.forEach(b=>{N[b.key]!==null&&N[b.key]!==void 0&&b.keys.add(N[b.key])})}o.forEach(S=>{let A=Object.keys(this.data[`${S.schema}_${S.table}`].__merged_data),N=gs.difference(A,[...S.keys].map(b=>b.toString()));for(let b=0,Ae=N.length;b<Ae;b++){let v=N[b];delete this.data[`${S.schema}_${S.table}`].__merged_data[v]}})}return{existing_attributes:_,joined_length:h?h.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new li(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let _=o.table.as?o.table.as:o.table.tableid;(!t[_]||t[_].indexOf(o.attribute)<0)&&s.push(o)}}s=gs.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){L.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),L.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,o=[];for(let E in i)o.push(i[E][0]);this.data[s].__merged_attributes.push(...n.columns);let _={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},c=await yr.getDataByHash(_),u=n.columns.length;for(let E=0,l=o.length;E<l;E++){let h=o[E],S=c[h];for(let A=0;A<u;A++){let N=n.columns[A],b=S[N]===void 0?null:S[N];this.data[s].__merged_data[h].push(b)}}}}catch(r){throw L.error("Error thrown from getDataByHash function in SQLSearch class method getData."),L.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let _=o.aggregatorid?o.expression:o,c=o.aggregatorid?o.as_orig:_.as_orig;return n.expression.tableid?_.columnid_orig===n.expression.columnid_orig&&_.tableid_orig===n.expression.tableid_orig:_.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===c}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();L.trace(`Final SQL: ${n}`),s=await oe.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),L.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw L.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),L.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 L.error(fw.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),L.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=n[i],u=new RegExp(`${c}.\`${o}\``,"g"),E=`${c}.[${_}]`;s=s.replace(u,E)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=new RegExp(`\`${o}\``,"g"),u=`[${_}]`;s=s.replace(c,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await yr.getDataByValue(i);for(let _ in o)this.data[n].__merged_data[_]||(this.data[n].__merged_data[_]=Object.assign({},r[n])),this.data[n].__merged_data[_][t[s.attribute]]=o[_][s.attribute]}catch(o){L.error("There was an error when processing this SQL operation. Check your logs"),L.error(o)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(di,"SQLSearch");Jd.exports=di});var Is=d((Cv,zd)=>{"use strict";var mw=Bd();zd.exports={searchByConditions:gw,searchByHash:pw,searchByValue:Iw,search:Cw};var Bo=jt(),Zd=require("util"),Aw=Zd.callbackify(Bo.searchByHash),Nw=Zd.callbackify(Bo.searchByValue),Ow=Xd();async function gw(e){return Bo.searchByConditions(e)}a(gw,"searchByConditions");function pw(e,t){try{Aw(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(pw,"searchByHash");function Iw(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),Nw(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(Iw,"searchByValue");function Cw(e,t){try{let r=new mw(e);r.validate(),new Ow(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(Cw,"search")});var bs=d((bv,rS)=>{"use strict";var Cs=require("crypto"),eS="aes-256-cbc",bw=32,Lw=16,Ho=64,tS=32,ww=Ho+tS,jd=new Map;rS.exports={encrypt:yw,decrypt:Uw,createNatsTableStreamName:Dw};function yw(e){let t=Cs.randomBytes(bw),r=Cs.randomBytes(Lw),s=Cs.createCipheriv(eS,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),_=n.toString("hex");return i+o+_}a(yw,"encrypt");function Uw(e){let t=e.substr(0,Ho),r=e.substr(Ho,tS),s=e.substr(ww,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Cs.createDecipheriv(eS,Buffer.from(t,"hex"),n),_=o.update(i);return _=Buffer.concat([_,o.final()]),_.toString()}a(Uw,"decrypt");function Dw(e,t){let r=`${e}.${t}`,s=jd.get(r);return s||(s=Cs.createHash("md5").update(`${e}.${t}`).digest("hex"),jd.set(r,s)),s}a(Dw,"createNatsTableStreamName")});var fi=d((Lv,cS)=>{"use strict";var nS=Is(),Bt=p(),iS=bn(),Mw=require("lodash"),Pw=require("path"),Bw=bs(),vo=g(),{promisify:aS}=require("util"),x=f(),{handleHDBError:Si,hdb_errors:Hw}=q(),{HDB_ERROR_MSGS:hi,HTTP_STATUS_CODES:oS}=Hw,vw=Q();vw.initSync();var sS=F(),Gw=k(),Ls=aS(nS.searchByValue),qw=aS(nS.searchByHash),Ur="name",_S="hash_attribute",Go="schema",Fw="schema_table",xw="attribute";cS.exports={describeAll:Vw,describeTable:Ti,describeSchema:Yw};async function Vw(e){try{let t=vo.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:Ur,search_value:x.WILDCARD_SEARCH_VALUE,get_attributes:[Ur]},i=await Ls(n);if(vo.isEmptyOrZeroLength(i))return{};let o={},_={};for(let h in i)o[i[h].name]=!0,!t&&!s&&(_[i[h].name]=r[i[h].name].describe);let c={schema:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:x.ID_ATTRIBUTE_STRING,search_value:x.WILDCARD_SEARCH_VALUE,get_attributes:[_S,x.ID_ATTRIBUTE_STRING,Ur,Go]},u=await Ls(c),E=[];for(let h of u)try{let S;if(t||s)S=await Ti({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 Ti({schema:h.schema,table:h.name},A)}S&&E.push(S)}catch(S){Bt.error(S)}let l={};for(let h in E)t||s?(l[E[h].schema]==null&&(l[E[h].schema]={}),l[E[h].schema][E[h].name]=E[h],o[E[h].schema]&&delete o[E[h].schema]):_[E[h].schema]&&(l[E[h].schema]==null&&(l[E[h].schema]={}),l[E[h].schema][E[h].name]=E[h],o[E[h].schema]&&delete o[E[h].schema]);for(let h in o)t||s?l[h]={}:_[h]&&(l[h]={});return l}catch(t){return Bt.error("Got an error in describeAll"),Bt.error(t),Si(new Error,hi.DESCRIBE_ALL_ERR)}}a(Vw,"describeAll");async function Ti(e,t){let{schema:r,table:s}=e;r=r.toString(),s=s.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i={},o=iS.describe_table(e);if(o)throw o;if(r===x.SYSTEM_SCHEMA_NAME)return global.hdb_schema[x.SYSTEM_SCHEMA_NAME][s];let _={schema:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:x.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Ur,search_value:s,hash_values:[],get_attributes:[x.WILDCARD_SEARCH_VALUE]},c=await Ls(_);if(!c||c.length===0)throw Si(new Error,hi.TABLE_NOT_FOUND(e.schema,e.table),oS.NOT_FOUND);for await(let u of c)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw Si(new Error,hi.INVALID_TABLE_ERR(i));let E={schema:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:x.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:Fw,search_value:r+"."+s,get_attributes:[xw]},l=await Ls(E);l=Mw.uniqBy(l,h=>h.attribute),n&&n.length>0&&(l=kw(n)),i.attributes=l,i.clustering_stream_name=Bw.createNatsTableStreamName(u.schema,u.name);try{let h=Pw.join(Gw.getBaseSchemaPath(),i.schema.toString()),S=await sS.openEnvironment(h,i.name),A=sS.statDBI(S,i.hash_attribute);i.record_count=A.entryCount}catch(h){Bt.warn(`unable to stat table dbi due to ${h}`)}}catch(E){Bt.error(`There was an error getting attributes for table '${u.name}'`),Bt.error(E)}return i}a(Ti,"descTable");function kw(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(kw,"getAttrsByPerms");async function Yw(e){let t=iS.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:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:x.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Go,search_value:s,hash_values:[],get_attributes:[_S,x.ID_ATTRIBUTE_STRING,Ur,Go]},i=await Ls(n);if(i&&i.length<1){let o={schema:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:x.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[Ur]},_=await qw(o);if(_&&_.length<1)throw Si(new Error,hi.SCHEMA_NOT_FOUND(e.schema),oS.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async _=>{try{let c;if(r&&r.tables[_.name]&&(c=r.tables[_.name]),vo.isEmpty(c)||c.describe){let u=await Ti({schema:e.schema,table:_.name},c?c.attribute_permissions:null);u&&(o[u.name]=u)}}catch(c){Bt.error(`Error describing schema table '${e.schema}.${_}'`),Bt.error(c)}})),o}}a(Yw,"describeSchema")});var Ri=d((Uv,SS)=>{var wv=require("async"),Dr=Xt(),yv=p(),{callbackify:lS,promisify:$w}=require("util");SS.exports={setSchemaDataToGlobal:uS,getTableSchema:Qw,getSystemSchema:Xw,setSchemaDataToGlobalAsync:$w(uS)};var dS=fi(),Kw=lS(dS.describeAll),Ww=lS(dS.describeTable);function uS(e){Kw(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Dr),global.hdb_schema=r,e(null,null)})}a(uS,"setSchemaDataToGlobal");function ES(e,t){return e==="system"?Dr[t]:global.hdb_schema[e][t]}a(ES,"returnSchema");function Qw(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?Jw(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,ES(e,t))}):r(null,ES(e,t))}a(Qw,"getTableSchema");function Jw(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=Dr:global.hdb_schema={system:Dr},r();return}Ww(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:Dr}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(Jw,"setTableDataToGlobal");function Xw(){return Dr}a(Xw,"getSystemSchema")});var Oi=d((Dv,fS)=>{"use strict";var Ai=Ma(),xe=g(),Zw=require("util"),Ni=jt(),zw=Ri(),qo=p(),{handleHDBError:Ht,hdb_errors:jw}=q(),{HTTP_STATUS_CODES:tr}=jw,ey=Zw.promisify(zw.getTableSchema),ty="updated",hS="inserted",TS="upserted";fS.exports={insert:sy,update:ny,upsert:iy,validation:ry,flush:ay};async function ry(e){if(xe.isEmpty(e))throw new Error("invalid update parameters defined.");if(xe.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(xe.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await ey(e.schema,e.table),r=Ai(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(_=>{if(o&&xe.isEmptyOrZeroLength(_[s]))throw qo.error("a valid hash attribute must be provided with update record:",_),new Error("a valid hash attribute must be provided with update record");if(!xe.isEmptyOrZeroLength(_[s])&&(_[s]==="null"||_[s]==="undefined"))throw qo.error(`a valid hash value must be provided with ${e.operation} record:`,_),new Error(`"${_[s]}" is not a valid hash attribute value`);!xe.isEmpty(_[s])&&_[s]!==""&&n.has(xe.autoCast(_[s]))&&(_.skip=!0),n.add(xe.autoCast(_[s]));for(let c in _)i[c]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(ry,"validation");async function sy(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Ai(e);if(t)throw Ht(new Error,t.message,tr.BAD_REQUEST);let r=xe.checkSchemaTableExist(e.schema,e.table);if(r)throw Ht(new Error,r,tr.BAD_REQUEST);try{let s=await Ni.createRecords(e);return mi(hS,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}a(sy,"insertData");async function ny(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Ai(e);if(t)throw Ht(new Error,t.message,tr.BAD_REQUEST);let r=xe.checkSchemaTableExist(e.schema,e.table);if(r)throw Ht(new Error,r,tr.BAD_REQUEST);try{let s=await Ni.updateRecords(e);return xe.isEmpty(s.existing_rows)?mi(ty,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):mi(s.update_action,[],e,s.hashes,void 0,s.txn_time)}catch(s){throw s}}a(ny,"updateData");async function iy(e){if(e.operation!=="upsert")throw Ht(new Error,"invalid operation, must be upsert",tr.INTERNAL_SERVER_ERROR);let t=Ai(e);if(t)throw Ht(new Error,t.message,tr.BAD_REQUEST);let r=xe.checkSchemaTableExist(e.schema,e.table);if(r)throw Ht(new Error,r,tr.BAD_REQUEST);try{let s=await Ni.upsertRecords(e);return mi(TS,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw Ht(s,null,null,qo.ERR,n)}}a(iy,"upsertData");function mi(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===hS?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===TS?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(mi,"returnObject");function ay(e){return Ni.flush(e.schema,e.table)}a(ay,"flush")});var mS=d((Mv,RS)=>{var oy=We(),_y={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};RS.exports=function(e){return oy.validateObject(e,_y)}});var gS=d((Pv,OS)=>{var cy=We(),Fo=require("joi"),{hdb_schema_table:AS}=Kt(),NS={schema:AS,table:AS},uy={date:Fo.date().iso().required()},Ey={timestamp:Fo.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};OS.exports=function(e,t){let r=t==="timestamp"?{...NS,...Ey}:{...NS,...uy},s=Fo.object(r);return cy.validateBySchema(e,s)}});var bS=d((Bv,CS)=>{var ly=We(),pS=require("joi"),{hdb_schema_table:IS}=Kt(),dy=pS.object({schema:IS,table:IS,hash_values:pS.array().required()});CS.exports=function(e){return ly.validateBySchema(e,dy)}});var wS=d((Hv,LS)=>{"use strict";var gi=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(gi,"InsertObject");var pi=class{constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}};a(pi,"NoSQLSeachObject");var Ii=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(Ii,"DeleteResponseObject");LS.exports={InsertObject:gi,NoSQLSeachObject:pi,DeleteResponseObject:Ii}});var ko=d((vv,PS)=>{"use strict";var US=gS(),Sy=bS(),Ci=g(),yS=require("moment"),DS=p(),{promisify:hy,callbackify:Ty}=require("util"),rr=f(),fy=Ri(),xo=hy(fy.getTableSchema),Vo=jt(),{DeleteResponseObject:Ry}=wS(),{handleHDBError:vt,hdb_errors:my}=q(),{HDB_ERROR_MSGS:bi,HTTP_STATUS_CODES:Gt}=my,Ay="records successfully deleted",Ny=Ty(MS);PS.exports={delete:Ny,deleteRecord:MS,deleteFilesBefore:Oy,deleteAuditLogsBefore:gy};async function Oy(e){let t=US(e,"date");if(t)throw vt(t,t.message,Gt.BAD_REQUEST,void 0,void 0,!0);if(!yS(e.date,yS.ISO_8601).isValid())throw vt(new Error,bi.INVALID_DATE,Gt.BAD_REQUEST,rr.LOG_LEVELS.ERROR,bi.INVALID_DATE,!0);let s=Ci.checkSchemaTableExist(e.schema,e.table);if(s)throw vt(new Error,s,Gt.NOT_FOUND,rr.LOG_LEVELS.ERROR,s,!0);try{let n=await Vo.deleteRecordsBefore(e);if(await xo(e.schema,e.table),DS.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}a(Oy,"deleteFilesBefore");async function gy(e){let t=US(e,"timestamp");if(t)throw vt(t,t.message,Gt.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw vt(new Error,bi.INVALID_VALUE("Timestamp"),Gt.BAD_REQUEST,rr.LOG_LEVELS.ERROR,bi.INVALID_VALUE("Timestamp"),!0);let r=Ci.checkSchemaTableExist(e.schema,e.table);if(r)throw vt(new Error,r,Gt.NOT_FOUND,rr.LOG_LEVELS.ERROR,r,!0);try{let s=await Vo.deleteAuditLogsBefore(e);return await xo(e.schema,e.table),DS.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}a(gy,"deleteAuditLogsBefore");async function MS(e){let t=Sy(e);if(t)throw vt(t,t.message,Gt.BAD_REQUEST,void 0,void 0,!0);let r=Ci.checkSchemaTableExist(e.schema,e.table);if(r)throw vt(new Error,r,Gt.NOT_FOUND,rr.LOG_LEVELS.ERROR,r,!0);try{await xo(e.schema,e.table);let s=await Vo.deleteRecords(e);return Ci.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${Ay}`),s}catch(s){if(s.message===rr.SEARCH_NOT_FOUND_MESSAGE){let n=new Ry;return n.message=rr.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(MS,"deleteRecord")});var Li=d((Gv,vS)=>{var py=require("crypto"),BS=9;function Iy(e){let t=by(BS),r=HS(e+t);return t+r}a(Iy,"createHash");function Cy(e,t){let r=e.substr(0,BS),s=r+HS(t+r);return e===s}a(Cy,"validateHash");function by(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(by,"generateSalt");function HS(e){return py.createHash("md5").update(e).digest("hex")}a(HS,"md5");vS.exports={hash:Iy,validate:Cy}});var qS=d((qv,GS)=>{var Yo=We(),fe={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 Ly(e){return fe.password.presence=!0,fe.username.presence=!0,fe.role.presence=!0,fe.active.presence=!0,Yo.validateObject(e,fe)}a(Ly,"addUserValidation");function wy(e){return fe.password.presence=!1,fe.username.presence=!0,fe.role.presence=!1,fe.active.presence=!1,Yo.validateObject(e,fe)}a(wy,"alterUserValidation");function yy(e){return fe.password.presence=!1,fe.username.presence=!0,fe.role.presence=!1,fe.active.presence=!1,Yo.validateObject(e,fe)}a(yy,"dropUserValidation");GS.exports={addUserValidation:Ly,alterUserValidation:wy,dropUserValidation:yy}});var Re=d((xv,xS)=>{"use strict";var{platform:Fv}=require("os"),Uy="nats-server.zip",$o="nats-server",Dy=process.platform==="win32"?`${$o}.exe`:$o,Ko="HDB",My=/^[^\s.,*>]+$/,FS="__request__",Py=a(e=>`${e}.${FS}`,"REQUEST_SUBJECT"),By={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Hy={HUB:"hub.pid",LEAF:"leaf.pid"},vy={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Gy={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Ko,deliver_subject:"__HDB__.WORKQUEUE"},qy={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Ko,deliver_subject:"HDB.SCHEMAQUEUE"},Fy={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Ko,deliver_subject:"HDB.USERQUEUE"},xy={SUCCESS:"success",ERROR:"error"},Vy={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},ky={TXN:"txn",MSGID:"msgid"};xS.exports={NATS_SERVER_ZIP:Uy,NATS_SERVER_NAME:$o,NATS_BINARY_NAME:Dy,PID_FILES:Hy,NATS_CONFIG_FILES:By,SERVER_SUFFIX:vy,WORK_QUEUE_CONSUMER_NAMES:Gy,SCHEMA_QUEUE_CONSUMER_NAMES:qy,USER_QUEUE_CONSUMER_NAMES:Fy,NATS_TERM_CONSTRAINTS_RX:My,REQUEST_SUFFIX:FS,UPDATE_REMOTE_RESPONSE_STATUSES:xy,CLUSTER_STATUS_STATUSES:Vy,REQUEST_SUBJECT:Py,SUBJECT_PREFIXES:ky}});var kS=d((Vv,VS)=>{"use strict";var qt=f(),ws=class{constructor(t=0,r=qt.STORAGE_TYPES_ENUM.LMDB,s=qt.LICENSE_VALUES.API_CALL_DEFAULT,n=qt.RAM_ALLOCATION_ENUM.DEFAULT,i=qt.LICENSE_VALUES.VERSION_DEFAULT,o){this.exp_date=t,this.storage_type=r,this.api_call=s,this.ram_allocation=n,this.version=i,this.fingerprint=o}};a(ws,"BaseLicense");var wi=class extends ws{constructor(t=0,r=qt.STORAGE_TYPES_ENUM.LMDB,s=qt.LICENSE_VALUES.API_CALL_DEFAULT,n=qt.RAM_ALLOCATION_ENUM.DEFAULT,i=qt.LICENSE_VALUES.VERSION_DEFAULT,o,_=!1){super(t,r,s,n,i,o),this.enterprise=_}};a(wi,"ExtendedLicense");VS.exports={BaseLicense:ws,ExtendedLicense:wi}});var Zo=d((kv,JS)=>{"use strict";var Pr=require("fs-extra"),YS=Li(),$S=require("crypto"),Yy=require("moment"),$y=require("uuid").v4,me=p(),Qo=require("path"),Ky=g(),Be=f(),Wy=kS().ExtendedLicense,Mr="invalid license key format",Qy="061183",Jy="mofi25",Xy="aes-256-cbc",Zy=16,zy=32,KS=Q();KS.initSync();var Wo;JS.exports={validateLicense:WS,generateFingerPrint:eU,licenseSearch:QS,getLicense:sU};function Jo(){return Qo.join(KS.getHdbBasePath(),Be.LICENSE_KEY_DIR_NAME,Be.LICENSE_FILE_NAME)}a(Jo,"getLicenseDirPath");function jy(){let e=Jo();return Qo.join(e,Be.LICENSE_FILE_NAME)}a(jy,"getLicenseFilePath");function Xo(){let e=Jo();return Qo.join(e,Be.REG_KEY_FILE_NAME)}a(Xo,"getFingerPrintFilePath");async function eU(){let e=Xo();try{return await Pr.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await tU();throw me.error(`Error writing fingerprint file to ${e}`),me.error(t),new Error("There was an error generating the fingerprint")}}a(eU,"generateFingerPrint");async function tU(){let e=$y(),t=YS.hash(e),r=Xo();try{await Pr.mkdirp(Jo()),await Pr.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}a(tU,"writeFingerprint");function WS(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Be.STORAGE_TYPES_ENUM.LMDB,api_call:Be.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Be.RAM_ALLOCATION_ENUM.DEFAULT,version:Be.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return me.error("empty license key passed to validate."),r;let s=Xo(),n=!1;try{n=Pr.statSync(s)}catch(i){me.error(i)}if(n){let i;try{i=Pr.readFileSync(s,"utf8")}catch{me.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(Jy),_=o[1];_=Buffer.concat([Buffer.from(_)],Zy);let c=Buffer.concat([Buffer.from(i)],zy),u=$S.createDecipheriv(Xy,c,_);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let E=null;try{E=u.update(o[0],"hex","utf8"),E.trim(),E+=u.final("utf8")}catch{let S=rU(o[0],i);if(S)E=S;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Mr),me.error(Mr),new Error(Mr)}let l;if(isNaN(E))try{l=JSON.parse(E),r.api_call=l.api_call,r.version=l.version,r.storage_type=l.storage_type,r.exp_date=l.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),l.ram_allocation&&(r.ram_allocation=l.ram_allocation)}catch{throw console.error(Mr),me.error(Mr),new Error(Mr)}else r.exp_date=E;r.exp_date<Yy().valueOf()&&(r.valid_date=!1),YS.validate(o[1],`${Qy}${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}a(WS,"validateLicense");function rU(e,t){try{let r=$S.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{me.warn("Check old license failed")}}a(rU,"checkOldLicense");function QS(){let e=new Wy;e.api_call=0;let t=[];try{t=Pr.readFileSync(jy(),"utf-8").split(Be.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(Ky.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=WS(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=Be.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Be.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Be.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Be.LICENSE_VALUES.API_CALL_DEFAULT),Wo=e,e}a(QS,"licenseSearch");async function sU(){return Wo||await QS(),Wo}a(sU,"getLicense")});var Us=d((Yv,ch)=>{"use strict";var jS="username is required",eh="nothing to update, must supply active, role or password to update",th="password cannot be an empty string",rh="If role is specified, it cannot be empty.",sh="active must be true or false";ch.exports={addUser:EU,alterUser:lU,dropUser:SU,userInfo:hU,listUsers:Ui,listUsersExternal:TU,setUsersToGlobal:ys,findAndValidateUser:mU,getClusterUser:AU,USERNAME_REQUIRED:jS,ALTERUSER_NOTHING_TO_UPDATE:eh,EMPTY_PASSWORD:th,EMPTY_ROLE:rh,ACTIVE_BOOLEAN:sh};var nh=Oi(),nU=ko(),jo=Li(),ih=qS(),ah=Is(),e_=us(),re=g(),oh=require("validate.js"),w=p(),{promisify:t_}=require("util"),r_=bs(),sr=f(),XS=Re(),iU=zr(),s_=Q(),aU=Zo(),oU=Xt(),{handleHDBError:ct,hdb_errors:_U}=q(),{HTTP_STATUS_CODES:ut,AUTHENTICATION_ERROR_MSGS:zo,HDB_ERROR_MSGS:Br}=_U,{UserEventMsg:n_}=mr(),ZS=require("lodash"),_h={username:!0,active:!0,role:!0,password:!0},zS=new Map,yi=t_(ah.searchByValue),cU=t_(ah.searchByHash),uU=t_(nU.delete);async function EU(e){let t=oh.cleanAttributes(e,_h),r=ih.addUserValidation(t);if(r)throw ct(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 yi(s)}catch(u){throw w.error("There was an error searching for a role in add user"),w.error(u),u}if(!n||n.length<1)throw ct(new Error,Br.ROLE_NAME_NOT_FOUND(t.role),ut.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw ct(new Error,Br.DUP_ROLES_FOUND(t.role),ut.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=r_.encrypt(t.password)),t.password=jo.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await nh.insert(i)}catch(u){throw w.error("There was an error searching for a user."),w.error(u),u}w.debug(o);try{await ys()}catch(u){throw w.error("Got an error setting users to global"),w.error(u),u}if(o.skipped_hashes.length===1)throw ct(new Error,Br.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=_,re.sendTransactionToSocketCluster(sr.INTERNAL_SC_CHANNELS.ADD_USER,c,s_.get(sr.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),e_.signalUserChange(new n_(process.pid)),`${_.username} successfully added`}a(EU,"addUser");async function lU(e){let t=oh.cleanAttributes(e,_h);if(re.isEmptyOrZeroLength(t.username))throw new Error(jS);if(re.isEmptyOrZeroLength(t.password)&&re.isEmptyOrZeroLength(t.role)&&re.isEmptyOrZeroLength(t.active))throw new Error(eh);if(!re.isEmpty(t.password)&&re.isEmptyOrZeroLength(t.password.trim()))throw new Error(th);if(!re.isEmpty(t.active)&&!re.isBoolean(t.active))throw new Error(sh);let r=dU(t.username);if(!re.isEmpty(t.password)&&!re.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=r_.encrypt(t.password)),t.password=jo.hash(t.password)),t.role==="")throw new Error(rh);if(t.role){let o={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},_;try{_=await yi(o)}catch(c){throw w.error("Got an error searching for a role."),w.error(c),c}if(!_||_.length===0){let c=Br.ALTER_USER_ROLE_NOT_FOUND(t.role);throw w.error(c),ct(new Error,c,ut.NOT_FOUND,void 0,void 0,!0)}if(_.length>1){let c=Br.ALTER_USER_DUP_ROLES(t.role);throw w.error(c),ct(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 nh.update(s)}catch(o){throw w.error("Error during update."),w.error(o),o}try{await ys()}catch(o){throw w.error("Got an error setting users to global"),w.error(o),o}let i={user:null};return i.user=t,re.sendTransactionToSocketCluster(sr.INTERNAL_SC_CHANNELS.ALTER_USER,i,s_.get(sr.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),e_.signalUserChange(new n_(process.pid)),n}a(lU,"alterUser");function dU(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(dU,"isClusterUser");async function SU(e){try{let t=ih.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(re.isEmpty(global.hdb_users.get(e.username)))throw ct(new Error,Br.USER_NOT_EXIST(e.username),ut.NOT_FOUND,void 0,void 0,!0);let s;try{s=await uU(r)}catch(i){throw w.error("Got an error deleting a user."),w.error(i),i}w.debug(s);try{await ys()}catch(i){throw w.error("Got an error setting users to global."),w.error(i),i}let n={user:null};return n.user=e,re.sendTransactionToSocketCluster(sr.INTERNAL_SC_CHANNELS.DROP_USER,n,s_.get(sr.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),e_.signalUserChange(new n_(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(SU,"dropUser");async function hU(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 cU(r)}catch(n){throw w.error("Got an error searching for a role."),w.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw w.error(r),r}return t}a(hU,"userInfo");async function TU(){let e;try{e=await Ui()}catch(t){throw w.error("Got an error listing users."),w.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(TU,"listUsersExternal");async function Ui(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=ZS.cloneDeep(await yi(e))}catch(r){throw w.error("Got an error searching for roles."),w.error(r),r}if(!re.isEmptyOrZeroLength(t)){let r={};for(let o in t)r[t[o].id]=t[o];let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=ZS.cloneDeep(await yi(s))}catch(o){throw w.error("Got an error searching for users."),w.error(o),o}let i=new Map;for(let o in n){let _=n[o];_.role=r[n[o].role],fU(_.role),i.set(_.username,_)}return(await aU.getLicense()).enterprise?i:RU(i)}}catch(e){throw w.error("got an error listing users"),w.error(e),re.errorizeMessage(e)}return null}a(Ui,"listUsers");function fU(e){try{if(!e){w.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(oU)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){w.error("Got an error trying to set system permissions."),w.error(t)}}a(fU,"appendSystemTablesToRole");function RU(e){try{if(w.info("No enterprise license found. System is limited to 1 clustering role and 1 user role"),!e)return new Map;let t=Object.create(null),r=new Map;e.forEach((n,i)=>{n.role.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?(w.error("No roles found with active users. This is bad."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return w.error("error filtering users."),w.error(t),new Map}}a(RU,"nonEnterpriseFilter");async function ys(){try{let e=await Ui();global.hdb_users=e}catch(e){throw w.error(e),e}}a(ys,"setUsersToGlobal");async function mU(e,t,r=!0){global.hdb_users||await ys();let s=global.hdb_users.get(e);if(!s)throw ct(new Error,zo.GENERIC_AUTH_FAIL,ut.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw ct(new Error,zo.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(zS.get(t)===s.password)return n;if(jo.validate(s.password,t))zS.set(t,s.password);else throw ct(new Error,zo.GENERIC_AUTH_FAIL,ut.UNAUTHORIZED,void 0,void 0,!0)}return n}a(mU,"findAndValidateUser");async function AU(){let e=await Ui(),t=iU.getConfigFromFile(sr.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!re.isEmpty(r))return r.decrypt_hash=r_.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+XS.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+XS.SERVER_SUFFIX.ADMIN,r}a(AU,"getClusterUser")});var Eh=d(($v,uh)=>{"use strict";var NU=f().OPERATIONS_ENUM,Di=class{constructor(t,r,s,n=void 0){this.operation=NU.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Di,"UpdateObject");uh.exports=Di});var dh=d((Kv,lh)=>{"use strict";var OU={OPERATION:"operation",REFRESH:"refresh"},Mi=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(Mi,"JWTTokens");var Pi=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(Pi,"JWTRSAKeys");lh.exports={JWTTokens:Mi,TOKEN_TYPE_ENUM:OU,JWTRSAKeys:Pi}});var Rh=d((Wv,fh)=>{"use strict";var Ms=require("jsonwebtoken"),i_=require("fs-extra"),a_=g(),Ve=f(),{handleHDBError:be,hdb_errors:gU}=q(),{HTTP_STATUS_CODES:Le,AUTHENTICATION_ERROR_MSGS:we}=gU,Ds=p(),Sh=Li(),c_=Us(),pU=Oi().update,IU=Eh(),CU=us(),{UserEventMsg:bU}=mr(),Ft=Q();Ft.initSync();var o_=require("path"),{JWTTokens:LU,JWTRSAKeys:wU,TOKEN_TYPE_ENUM:Bi}=dh(),yU=Ft.get(Ve.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Ft.get(Ve.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",UU=Ft.get(Ve.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Ft.get(Ve.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Hi="RS256",__;fh.exports={createTokens:DU,validateOperationToken:PU,refreshOperationToken:MU,validateRefreshToken:Th};async function DU(e){if(a_.isEmpty(e)||typeof e!="object")throw be(new Error,we.INVALID_AUTH_OBJECT,Le.BAD_REQUEST,void 0,void 0,!0);if(a_.isEmpty(e.username))throw be(new Error,we.USERNAME_REQUIRED,Le.BAD_REQUEST,void 0,void 0,!0);if(a_.isEmpty(e.password))throw be(new Error,we.PASSWORD_REQUIRED,Le.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await c_.findAndValidateUser(e.username,e.password),!t)throw be(new Error,we.INVALID_CREDENTIALS,Le.UNAUTHORIZED,void 0,void 0,!0)}catch(h){throw Ds.error(h),be(new Error,we.INVALID_CREDENTIALS,Le.UNAUTHORIZED,void 0,void 0,!0)}let r=await vi(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await hh(i,r.private_key,r.passphrase),_=await Ms.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:UU,algorithm:Hi,subject:Bi.REFRESH}),c=Sh.hash(_),u=new IU(Ve.SYSTEM_SCHEMA_NAME,Ve.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:c}]),E,l;try{E=await pU(u)}catch(h){Ds.error(h),l=h}if(l!==void 0||E.skipped_hashes.length>0)throw be(new Error,we.REFRESH_TOKEN_SAVE_FAILED,Le.INTERNAL_SERVER_ERROR);return CU.signalUserChange(new bU(process.pid)),new LU(o,_)}a(DU,"createTokens");async function hh(e,t,r){return await Ms.sign(e,{key:t,passphrase:r},{expiresIn:yU,algorithm:Hi,subject:Bi.OPERATION})}a(hh,"signOperationToken");async function vi(){if(__===void 0)try{let e=o_.join(Ft.getHdbBasePath(),Ve.LICENSE_KEY_DIR_NAME,Ve.JWT_ENUM.JWT_PASSPHRASE_NAME),t=o_.join(Ft.getHdbBasePath(),Ve.LICENSE_KEY_DIR_NAME,Ve.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=o_.join(Ft.getHdbBasePath(),Ve.LICENSE_KEY_DIR_NAME,Ve.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await i_.readFile(e)).toString(),n=(await i_.readFile(t)).toString(),i=(await i_.readFile(r)).toString();__=new wU(i,n,s)}catch(e){throw Ds.error(e),be(new Error,we.NO_ENCRYPTION_KEYS,Le.INTERNAL_SERVER_ERROR)}return __}a(vi,"getJWTRSAKeys");async function MU(e){if(!e)throw be(new Error,we.INVALID_BODY,Le.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw be(new Error,we.REFRESH_TOKEN_REQUIRED,Le.BAD_REQUEST,void 0,void 0,!0);await Th(e.refresh_token);let t=await vi(),r=await Ms.decode(e.refresh_token);return{operation_token:await hh({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(MU,"refreshOperationToken");async function PU(e){try{let t=await vi(),r=await Ms.verify(e,t.public_key,{algorithms:Hi,subject:Bi.OPERATION});return await c_.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Ds.warn(t),t.name&&t.name==="TokenExpiredError"?be(new Error,we.TOKEN_EXPIRED,Le.FORBIDDEN):be(new Error,we.INVALID_TOKEN,Le.UNAUTHORIZED)}}a(PU,"validateOperationToken");async function Th(e){let t;try{let r=await vi(),s=await Ms.verify(e,r.public_key,{algorithms:Hi,subject:Bi.REFRESH});t=await c_.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Ds.warn(r),r.name&&r.name==="TokenExpiredError"?be(new Error,we.TOKEN_EXPIRED,Le.FORBIDDEN):be(new Error,we.INVALID_TOKEN,Le.UNAUTHORIZED)}if(!Sh.validate(t.refresh_token,e))throw be(new Error,we.INVALID_TOKEN,Le.UNAUTHORIZED);return t}a(Th,"validateRefreshToken")});var Oh=d((Jv,Nh)=>{"use strict";var BU=mS(),Hr=require("passport"),HU=require("passport-local").Strategy,vU=require("passport-http").BasicStrategy,GU=require("util"),qU=Us(),Ah=GU.callbackify(qU.findAndValidateUser),Qv=He(),FU=f(),mh=Rh();Hr.use(new HU(function(e,t,r){Ah(e,t,r)}));Hr.use(new vU(function(e,t,r){Ah(e,t,r)}));Hr.serializeUser(function(e,t){t(null,e)});Hr.deserializeUser(function(e,t){t(null,e)});function xU(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,_){return o?r(o):_?r(null,_):r("User not found")}switch(a(i,"handleResponse"),s){case"Basic":Hr.authenticate("basic",{session:!1},(o,_)=>{i(o,_)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===FU.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?mh.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):mh.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Hr.authenticate("local",{session:!1},function(o,_){i(o,_)})(e,t,r);break}}a(xU,"authorize");function VU(e,t){let r=BU(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n||!n.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let _ in o)e.attributes.indexOf(o[_].attribute_name)>-1&&!o[_][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[_].attribute_name} `))}return t(null,s)}a(VU,"checkPermissions");Nh.exports={authorize:xU,checkPermissions:VU}});var Ps=d((Xv,gh)=>{"use strict";var Gi=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(Gi,"Node");var qi=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(qi,"NodeSubscription");gh.exports={Node:Gi,NodeSubscription:qi}});var Ih=d((Zv,ph)=>{"use strict";var kU=f().OPERATIONS_ENUM,Fi=class{constructor(t,r,s,n=void 0){this.operation=kU.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Fi,"UpsertObject");ph.exports=Fi});var Bs=d((zv,Ch)=>{"use strict";var xi=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(xi,"RemotePayloadObject");var Vi=class{constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o}};a(Vi,"RemotePayloadSubscription");Ch.exports={RemotePayloadObject:xi,RemotePayloadSubscription:Vi}});var Lh=d((jv,bh)=>{"use strict";var ki=class{constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};a(ki,"TableSizeObject");bh.exports=ki});var Dh=d((eG,Uh)=>{"use strict";var YU=Lh(),wh=require("path"),yh=k(),$U=Se(),vr=F(),KU=p();Uh.exports=WU;async function WU(e){let t=new YU;try{let r=wh.join(yh.getBaseSchemaPath(),e.schema.toString()),s=await vr.openEnvironment(r,e.name),n=vr.statDBI(s,e.hash_attribute),i=wh.join(yh.getTransactionAuditStorePath(),e.schema.toString()),o=await vr.openEnvironment(i,e.name,!0),_=vr.statDBI(o,$U.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),c=await vr.environmentDataSize(r,e.name),u=await vr.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){KU.warn(`unable to stat table dbi due to ${r}`)}return t}a(WU,"lmdbGetTableSize")});var Ph=d((tG,Mh)=>{"use strict";var QU=f(),Yi=class{constructor(t){this.operator=QU.OPERATIONS_ENUM.SYSTEM_INFORMATION,this.attributes=t}};a(Yi,"SystemInformationOperation");Mh.exports=Yi});var Hh=d((rG,Bh)=>{"use strict";var $i=class{constructor(t,r,s,n,i,o,_){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=_}};a($i,"SystemInformationObject");Bh.exports=$i});var Gh=d((nG,vh)=>{"use strict";var _e=require("systeminformation"),Gr=p(),JU=f(),XU=Dh(),ZU=fi(),zU=Q();zU.initSync();var sG=Ph(),jU=Hh(),Ki;vh.exports={getHDBProcessInfo:d_,getNetworkInfo:h_,getDiskInfo:S_,getMemoryInfo:l_,getCPUInfo:E_,getTimeInfo:u_,getSystemInformation:T_,systemInformation:eD,getTableSize:f_};function u_(){return _e.time()}a(u_,"getTimeInfo");async function E_(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:_,socket:c,cache:u,...E}=await _e.cpu();E.cpu_speed=await _e.cpuCurrentSpeed();let{raw_currentload:l,raw_currentload_idle:h,raw_currentload_irq:S,raw_currentload_nice:A,raw_currentload_system:N,raw_currentload_user:b,cpus:Ae,...v}=await _e.currentLoad();return v.cpus=[],Ae.forEach(W=>{let{raw_load:$e,raw_load_idle:Ks,raw_load_irq:$_,raw_load_nice:K_,raw_load_system:W_,raw_load_user:Ws,...Ct}=W;v.cpus.push(Ct)}),E.current_load=v,E}catch(e){return Gr.error(`error in getCPUInfo: ${e}`),{}}}a(E_,"getCPUInfo");async function l_(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await _e.mem();return n}catch(e){return Gr.error(`error in getMemoryInfo: ${e}`),{}}}a(l_,"getMemoryInfo");async function d_(){let e={core:[],clustering:[]};try{return(await _e.processes()).list.forEach(r=>{r.params.includes(JU.HDB_PROC_NAME)?e.core.push(r):r.params.includes("socketcluster")&&e.clustering.push(r)}),e}catch(t){return Gr.error(`error in getHDBProcessInfo: ${t}`),e}}a(d_,"getHDBProcessInfo");async function S_(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await _e.disksIO();e.io=i;let{rx_sec:o,tx_sec:_,wx_sec:c,...u}=await _e.fsStats();return e.read_write=u,e.size=await _e.fsSize(),e}catch(t){return Gr.error(`error in getDiskInfo: ${t}`),e}}a(S_,"getDiskInfo");async function h_(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await _e.networkInterfaceDefault(),e.latency=await _e.inetChecksite("google.com"),(await _e.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:_,dnsSuffix:c,ieee8021xAuth:u,ieee8021xState:E,carrier_changes:l,...h}=s;e.interfaces.push(h)}),(await _e.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,..._}=s;e.stats.push(_)}),e.connections=await _e.networkConnections(),e}catch(t){return Gr.error(`error in getNetworkInfo: ${t}`),e}}a(h_,"getNetworkInfo");async function T_(){if(Ki!==void 0)return Ki;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,..._}=await _e.osInfo();e=_;let c=await _e.versions("node, npm");return e.node_version=c.node,e.npm_version=c.npm,Ki=e,Ki}catch(t){return Gr.error(`error in getSystemInformation: ${t}`),e}}a(T_,"getSystemInformation");async function f_(){let e=[],t=await ZU.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await XU(s));return e}a(f_,"getTableSize");async function eD(e){let t=new jU;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await T_(),t.time=u_(),t.cpu=await E_(),t.memory=await l_(),t.disk=await S_(),t.network=await h_(),t.harperdb_processes=await d_(),t.table_size=await f_(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await T_();break;case"time":t.time=u_();break;case"cpu":t.cpu=await E_();break;case"memory":t.memory=await l_();break;case"disk":t.disk=await S_();break;case"network":t.network=await h_();break;case"harperdb_processes":t.harperdb_processes=await d_();break;case"table_size":t.table_size=await f_();break;default:break}return t}a(eD,"systemInformation")});var R_=d((iG,tD)=>{tD.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 Fh=d((_G,qh)=>{"use strict";var aG=require("fs-extra"),oG=p();qh.exports={version:rD,printVersion:nD,nodeVersion:sD};var xt=R_();function rD(){if(xt)return xt.version}a(rD,"version");function sD(){if(xt&&xt.engines&&xt.engines["preferred-node"])return xt.engines["preferred-node"]}a(sD,"nodeVersion");function nD(){xt&&console.log(`HarperDB Version ${xt.version}`)}a(nD,"printVersion")});var qr=d((EG,Yh)=>{"use strict";var iD=Oi(),m_=g(),A_=require("util"),nr=f(),xh=Q();xh.initSync();var aD=Oh(),Vh=Is(),{Node:cG,NodeSubscription:uG}=Ps(),oD=fs(),_D=Ih(),{RemotePayloadObject:cD,RemotePayloadSubscription:uD}=Bs(),{handleHDBError:ED,hdb_errors:lD}=q(),{HTTP_STATUS_CODES:dD,HDB_ERROR_MSGS:SD}=lD,hD=At(),TD=Gh(),fD=Fh(),RD=A_.promisify(aD.authorize),mD=A_.promisify(Vh.searchByHash),AD=A_.promisify(Vh.searchByValue);Yh.exports={authHeaderToUser:ND,isEmpty:OD,getNodeRecord:gD,upsertNodeRecord:pD,buildNodePayloads:ID,checkClusteringEnabled:CD,getAllNodeRecords:bD,getSystemInfo:LD,reverseSubscription:kh};async function ND(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await RD(t,null),e}a(ND,"authHeaderToUser");function OD(e){return e==null}a(OD,"isEmpty");async function gD(e){let t=new oD(nr.SYSTEM_SCHEMA_NAME,nr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return mD(t)}a(gD,"getNodeRecord");async function pD(e){let t=new _D(nr.SYSTEM_SCHEMA_NAME,nr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return iD.upsert(t)}a(pD,"upsertNodeRecord");function kh(e){if(m_.isEmpty(e.subscribe)||m_.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(kh,"reverseSubscription");function ID(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let _=e[i],{schema:c,table:u}=_,E=m_.getTableHashAttribute(c,u),{subscribe:l,publish:h}=kh(_),S=new uD(c,u,E,h,l,_.start_time);n.push(S)}return new cD(r,t,n,s)}a(ID,"buildNodePayloads");function CD(){if(!xh.get(nr.CONFIG_PARAMS.CLUSTERING_ENABLED))throw ED(new Error,SD.CLUSTERING_NOT_ENABLED,dD.BAD_REQUEST,void 0,void 0,!0)}a(CD,"checkClusteringEnabled");async function bD(){let e=new hD(nr.SYSTEM_SCHEMA_NAME,nr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return AD(e)}a(bD,"getAllNodeRecords");async function LD(){let e=await TD.getSystemInformation();return{hdb_version:fD.version(),node_version:e.node_version,platform:e.platform}}a(LD,"getSystemInfo")});var Kh=d((lG,$h)=>{"use strict";var wD=jt();$h.exports={writeTransaction:yD};function yD(e,t,r){return wD.writeTransaction(e,t,r)}a(yD,"writeTransaction")});var Vt=d((gG,lT)=>{"use strict";var Et=Q();Et.initSync();var UD=require("fs-extra"),DD=require("semver"),Fs=require("path"),{monotonicFactory:MD}=require("ulidx"),PD=MD(),Qh=require("util"),Jh=require("child_process"),BD=Qh.promisify(Jh.exec),HD=Jh.spawn,V=Re(),$=f(),C_=g(),gt=p(),Wi=bs(),vD=Kh(),Hs=zr(),{encode:g_,decode:Xh}=require("msgpackr"),{isEmpty:ir}=C_,Zh=Us(),dG=fs(),GD=Is(),SG=Qh.promisify(GD.searchByHash),{connect:qD,StorageType:zh,RetentionPolicy:jh,AckPolicy:eT,DeliverPolicy:p_,NatsConnection:hG,JetStreamManager:TG,JetStreamClient:fG,StringCodec:RG,JSONCodec:FD,createInbox:b_,StreamSource:mG,headers:xD,toJsMsg:VD,nuid:AG,JetStreamOptions:NG,ErrorCode:Wh,nanos:OG}=require("nats"),{PACKAGE_ROOT:kD}=f(),YD=R_(),tT=FD(),$D="clustering",KD=YD.engines[V.NATS_SERVER_NAME],WD=Fs.join(kD,"dependencies"),I_=Fs.join(WD,`${process.platform}-${process.arch}`,V.NATS_BINARY_NAME),N_,O_,vs,Gs,qs,tt;lT.exports={runCommand:rT,checkNATSServerInstalled:QD,createConnection:L_,getConnection:Qi,getJetStreamManager:Fr,getJetStream:sT,getNATSReferences:ke,getServerList:XD,createLocalStream:w_,listStreams:nT,deleteLocalStream:ZD,getServerConfig:xs,listRemoteStreams:zD,viewStream:jD,publishToStream:eM,createWorkQueueStream:tM,addSourceToWorkStream:iT,request:rM,removeSourceFromWorkStream:oT,reloadNATS:y_,reloadNATSHub:sM,reloadNATSLeaf:nM,extractServerName:aT,requestErrorHandler:iM,updateWorkStream:aM,createLocalTableStream:cT,createTableStreams:oM,purgeTableStream:uT,purgeSchemaTableStreams:_M,getStreamInfo:cM,updateNodeNameLocalStreams:uM,closeConnection:JD};async function rT(e,t=void 0){let{stdout:r,stderr:s}=await BD(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
6
6
|
`,""));return r.replace(`
|
|
7
|
-
`,"")}a(rT,"runCommand");async function QD(){try{await UD.access(I_)}catch{return!1}let e=await rT(`${I_} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return DD.eq(t,KD)}a(QD,"checkNATSServerInstalled");async function L_(e,t,r,s=!0,n="127.0.0.1"){return qD({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:Et.get($.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Et.get($.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Et.get($.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),insecure:Et.get($.CONFIG_PARAMS.CLUSTERING_TLS_INSECURE)}})}a(L_,"createConnection");async function JD(){tt&&(await tt.close(),tt=void 0)}a(JD,"closeConnection");async function Qi(){if(!tt){let e=await Zh.getClusterUser();if(ir(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=Et.get($.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);tt=await L_(t,e.username,e.decrypt_hash)}return tt}a(Qi,"getConnection");async function Fr(){if(Gs)return Gs;ir(tt)&&await Qi();let{domain:e}=xs($.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ir(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Gs=await tt.jetstreamManager({domain:e}),Gs}a(Fr,"getJetStreamManager");async function sT(){if(qs)return qs;ir(tt)&&await Qi();let{domain:e}=xs($.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ir(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return qs=tt.jetstream({domain:e}),qs}a(sT,"getJetStream");async function ke(){let e=tt||await Qi(),t=Gs||await Fr(),r=qs||await sT();return{connection:e,jsm:t,js:r}}a(ke,"getNATSReferences");async function XD(){let e=Et.get($.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),{sys_name:t,decrypt_hash:r}=await Zh.getClusterUser(),s=await L_(e,t,r),n=b_(),i=s.subscribe(n),o=[],_=(async()=>{for await(let c of i)o.push(tT.decode(c.data))})();return await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:n}),await s.flush(),await C_.async_set_timeout(50),await i.drain(),await s.close(),await _,o}a(XD,"getServerList");async function w_(e,t){let{jsm:r}=await ke();await r.streams.add({name:e,storage:zh.File,retention:jh.Limits,subjects:t})}a(w_,"createLocalStream");async function nT(){let{jsm:e}=await ke(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(nT,"listStreams");async function ZD(e){let{jsm:t}=await ke();await t.streams.delete(e)}a(ZD,"deleteLocalStream");async function zD(e){let{connection:t}=await ke(),r=[],s=b_(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(tT.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(zD,"listRemoteStreams");async function jD(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await ke(),i=PD(),o=[],_={ack_policy:eT.None,durable_name:i,deliver_subject:i,deliver_policy:p_.All};t&&(_.deliver_policy=p_.StartTime,_.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,_);let c={timeout:2e3};r&&(c.max=r);let u=await n.subscribe(i,c);for await(let E of u){let l=VD(E),h=Xh(l.data),S={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:h,originators:[]},A=[];if(l.headers){let N=l.headers.get("originators");N&&(A=N.split(","),S.originators=A)}o.push(S),u.getPending()===1&&l.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),o}catch(c){if(await s.consumers.delete(e,i),c.code==="TIMEOUT")return o;throw c}}a(jD,"viewStream");async function eM(e,t,r=[],s=[]){gt.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,r,"originators:",s);let{connection:n,js:i}=await ke(),o=await Ji(),_=`${e}.${o}`,c=xD();s.push(o),c.append("originators",s.join());for(let u=0,E=r.length;u<E;u++)try{gt.trace(`publishToStream publishing to subject: ${_}, data:`,r[u]),await i.publish(_,g_(r[u]),{headers:c})}catch(l){if(l.code&&l.code.toString()==="503")gt.trace(`publishToStream creating stream: ${t}`),await w_(t,[_]),await i.publish(_,g_(r[u]),{headers:c});else throw l}}a(eM,"publishToStream");function xs(e){e=e.toLowerCase();let t=Fs.join(Et.get($.CONFIG_PARAMS.ROOTPATH),$D);if(e===$.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ir(O_)&&(O_={port:Hs.getConfigFromFile($.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Hs.getConfigFromFile($.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.HUB,config_file:V.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Fs.join(t,V.PID_FILES.HUB),hdb_nats_path:t}),O_;if(e===$.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ir(N_)&&(N_={port:Hs.getConfigFromFile($.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Hs.getConfigFromFile($.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,config_file:V.NATS_CONFIG_FILES.LEAF_SERVER,domain:Hs.getConfigFromFile($.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,pid_file_path:Fs.join(t,V.PID_FILES.LEAF),hdb_nats_path:t}),N_;gt.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(xs,"getServerConfig");async function tM(e){let{jsm:t}=await ke(),r=await Ji();try{await t.streams.add({name:e.stream_name,storage:zh.File,retention:jh.Workqueue,subjects:[`${V.SUBJECT_PREFIXES.MSGID}.${r}`,`${V.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:eT.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:p_.All,max_ack_pending:1e4,deliver_group:e.deliver_group,filter_subject:`${V.SUBJECT_PREFIXES.TXN}.>`});else throw s}}a(tM,"createWorkQueueStream");async function iT(e,t,r){let{jsm:s}=await ke(),n=await s.streams.info(t),i=aT(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:_,table:c}=r,u=Wi.createNatsTableStreamName(_,c),E=i===e,l,h,S=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let N=0,b=n.config.sources.length;N<b;N++)if(l=n.config.sources[N],h=N,E&&l.name===u||!E&&l.name===u&&l.external&&l.external.api===`$JS.${e}.API`){S=!0;break}if(S===!0){if(l.opt_start_time===o)return;await _T(_,c,l,t),n.config.sources.splice(h,1),await s.streams.update(t,n.config)}let A={name:u,opt_start_time:o,filter_subject:`${V.SUBJECT_PREFIXES.TXN}.>`};E||(A.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(A),await s.streams.update(t,n.config)}a(iT,"addSourceToWorkStream");function aT(e){return e.split(".")[1]}a(aT,"extractServerName");async function oT(e,t,r){let{schema:s,table:n}=r,i=Wi.createNatsTableStreamName(s,n),{jsm:o}=await ke(),_=await o.streams.info(t);if(!Array.isArray(_.config.sources)||_.config.sources.length===0)return;let c=_.config.sources.length,u;for(;c--;)if(u=_.config.sources[c],u.name===i&&u.external.api===`$JS.${e}.API`){_.config.sources.splice(c,1);break}await o.streams.update(t,_.config),await _T(s,n,u,t)}a(oT,"removeSourceFromWorkStream");async function _T(e,t,r,s){let n=await Fr(),i;try{i=ET(e,t,r.external.api.split(".")[1]),await n.streams.purge(s,{filter:i})}catch{gt.error("Error purging source subject",i,"from work stream",s)}}a(_T,"purgeSourceFromWorkStream");async function rM(e,t,r=2e3,s=b_()){if(!C_.isObject(t))throw new Error("data param must be an object");let n=g_(t),{connection:i}=await ke(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let _=await i.request(e,n,o);return Xh(_.data)}a(rM,"request");function y_(e){return new Promise(async(t,r)=>{let s=HD(I_,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(y_,"reloadNATS");async function sM(){let{pid_file_path:e}=xs($.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await y_(e)}a(sM,"reloadNATSHub");async function nM(){let{pid_file_path:e}=xs($.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await y_(e)}a(nM,"reloadNATSLeaf");function iM(e,t,r){let s;switch(e.code){case Wh.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case Wh.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(iM,"requestErrorHandler");async function aM(e,t){let r=t+V.SERVER_SUFFIX.LEAF;await vD.writeTransaction($.SYSTEM_SCHEMA_NAME,$.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await iT(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await oT(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(aM,"updateWorkStream");async function cT(e,t){let r=Wi.createNatsTableStreamName(e,t),s=await Ji(),n=ET(e,t,s);await w_(r,[n])}a(cT,"createLocalTableStream");async function oM(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await cT(s,n)}}a(oM,"createTableStreams");async function uT(e,t){if(Et.get($.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Wi.createNatsTableStreamName(e,t),{jsm:s}=await ke();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")gt.warn(r);else throw r}}a(uT,"purgeTableStream");async function _M(e,t){if(Et.get($.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await uT(e,t[r])}a(_M,"purgeSchemaTableStreams");async function cM(e){return(await Fr()).streams.info(e)}a(cM,"getStreamInfo");function ET(e,t,r){return`${V.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(ET,"createSubjectName");async function Ji(){if(vs)return vs;if(vs=(await Fr())?.nc?.info?.server_name,vs===void 0)throw new Error("Unable to get jetstream manager server name");return vs}a(Ji,"getJsmServerName");async function uM(){let e=await Fr(),t=await Ji(),r=await nT();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=i.split(".");if(o[o.length-1]!==t){if(n.name===V.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let c=`${V.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;gt.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c}else if(n.name===V.WORK_QUEUE_CONSUMER_NAMES.stream_name){let c=`${V.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;gt.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c,await e.consumers.update(V.WORK_QUEUE_CONSUMER_NAMES.stream_name,V.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${V.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let c=i.split(".");c[c.length-1]=t;let u=c.join(".");gt.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}await e.streams.update(n.name,n)}}}a(uM,"updateNodeNameLocalStreams")});var mT=d((gG,RT)=>{"use strict";var D_=qr(),EM=Vt(),hT=Q(),Xi=f(),ar=Re(),lM=g(),U_=p(),{RemotePayloadObject:dM}=Bs(),{ErrorCode:dT}=require("nats"),ST=hT.get(Xi.CONFIG_PARAMS.CLUSTERING_ENABLED),TT=hT.get(Xi.CONFIG_PARAMS.CLUSTERING_NODENAME);RT.exports={clusterStatus:SM,buildNodeStatus:fT};async function SM(){let e={node_name:TT,is_enabled:ST,connections:[]};if(!ST)return e;let t=await D_.getAllNodeRecords();if(lM.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(fT(t[s],e.connections));return await Promise.allSettled(r),e}a(SM,"clusterStatus");async function fT(e,t){let r=e.name,s=new dM(Xi.OPERATIONS_ENUM.CLUSTER_STATUS,TT,void 0,await D_.getSystemInfo()),n,i,o=ar.CLUSTER_STATUS_STATUSES.OPEN;try{let c=Date.now();n=await EM.request(ar.REQUEST_SUBJECT(r),s),i=Date.now()-c,n.status===ar.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ar.CLUSTER_STATUS_STATUSES.CLOSED,U_.error(`Error getting node status from ${r} `,n))}catch(c){U_.warn(`Error getting node status from ${r}`,c),c.code===dT.NoResponders?o=ar.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:c.code===dT.Timeout?o=ar.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ar.CLUSTER_STATUS_STATUSES.CLOSED}let _=new hM(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let c={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==Xi.PRE_4_0_0_VERSION&&await D_.upsertNodeRecord(c)}catch(c){U_.error("Cluster status encountered an error updating system info for node:",r,c)}t.push(_)}a(fT,"buildNodeStatus");function hM(e,t,r,s,n,i,o,_){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=_}a(hM,"NodeStatusObject")});var gT=d((CG,OT)=>{"use strict";var M_=require("joi"),{string:Zi,boolean:AT,date:TM}=M_.types(),fM=We(),{validateSchemaExists:pG,validateTableExists:IG,validateSchemaName:RM}=Kt(),mM=f(),AM=Re(),NM=Q(),OM=Zi.invalid(NM.get(mM.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(AM.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null).required(),NT={operation:Zi.valid("add_node","update_node"),node_name:OM,subscriptions:M_.array().items({table:Zi.required(),schema:Zi.custom(RM).required(),subscribe:AT.required(),publish:AT.required().custom(pM),start_time:TM.iso()}).min(1).required()};function gM(e){return fM.validateBySchema(e,M_.object(NT))}a(gM,"addUpdateNodeValidator");function pM(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(pM,"checkForFalsy");OT.exports={addUpdateNodeValidator:gM,validation_schema:NT}});var CT=d((bG,IT)=>{"use strict";var B_=fi(),{hdb_errors:P_}=q();IT.exports={checkSchemaExists:pT,checkSchemaTableExists:IM,schema_describe:B_};async function pT(e){if(!global.hdb_schema[e])try{let t=await B_.describeSchema({schema:e});global.hdb_schema[e]=t}catch{return P_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}}a(pT,"checkSchemaExists");async function IM(e,t){let r=await pT(e);if(r)return r;if(!global.hdb_schema[e][t])try{let s=await B_.describeTable({schema:e,table:t});if(!s||Object.keys(s).length===0)return P_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t);global.hdb_schema[e][t]=s}catch{return P_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}}a(IM,"checkSchemaTableExists")});var DT=d((wG,UT)=>{"use strict";var xr=bn(),or=CT(),bT=p(),CM=require("uuid").v4,LG=require("clone"),kr=us(),_r=f(),bM=require("util"),cr=jt(),{handleHDBError:ce,hdb_errors:LM}=q(),{HDB_ERROR_MSGS:Vr,HTTP_STATUS_CODES:ue}=LM,{SchemaEventMsg:Yr}=mr(),LT=Vt();UT.exports={createSchema:wM,createSchemaStructure:wT,createTable:yM,createTableStructure:yT,createAttribute:BM,dropSchema:UM,dropTable:DM,dropAttribute:MM};async function wM(e){try{let t=await wT(e);return kr.signalSchemaChange(new Yr(process.pid,e.operation,e.schema)),t}catch(t){throw t}}a(wM,"createSchema");async function wT(e){let t=xr.schema_object(e);if(t)throw ce(t,t.message,ue.BAD_REQUEST,void 0,void 0,!0);if(!await or.checkSchemaExists(e.schema))throw ce(new Error,Vr.SCHEMA_EXISTS_ERR(e.schema),ue.BAD_REQUEST,_r.LOG_LEVELS.ERROR,Vr.SCHEMA_EXISTS_ERR(e.schema),!0);try{return await cr.createSchema(e),`schema '${e.schema}' successfully created`}catch(r){throw r}}a(wT,"createSchemaStructure");async function yM(e){try{let t=await yT(e);return kr.signalSchemaChange(new Yr(process.pid,e.operation,e.schema,e.table)),t}catch(t){throw t}}a(yM,"createTable");async function yT(e){let t=xr.create_table_object(e);if(t)throw ce(t,t.message,ue.BAD_REQUEST,void 0,void 0,!0);xr.validateTableResidence(e.residence);let r=await or.checkSchemaExists(e.schema);if(r)throw ce(new Error,r,ue.NOT_FOUND,_r.LOG_LEVELS.ERROR,r,!0);if(!await or.checkSchemaTableExists(e.schema,e.table))throw ce(new Error,Vr.TABLE_EXISTS_ERR(e.schema,e.table),ue.BAD_REQUEST,_r.LOG_LEVELS.ERROR,Vr.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:CM(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await cr.createTable(n,e);else throw ce(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",ue.BAD_REQUEST);else await cr.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(i){throw i}}a(yT,"createTableStructure");async function UM(e){let t=xr.schema_object(e);if(t)throw ce(t,t.message,ue.BAD_REQUEST,void 0,void 0,!0);let r=await or.checkSchemaExists(e.schema);if(r)throw ce(new Error,r,ue.NOT_FOUND,_r.LOG_LEVELS.ERROR,r,!0);let s=await or.schema_describe.describeSchema({schema:e.schema});global.hdb_schema[e.schema]=s;let n=Object.keys(global.hdb_schema[e.schema]);return await cr.dropSchema(e),kr.signalSchemaChange(new Yr(process.pid,e.operation,e.schema)),delete global.hdb_schema[e.schema],await LT.purgeSchemaTableStreams(e.schema,n),`successfully deleted schema '${e.schema}'`}a(UM,"dropSchema");async function DM(e){let t=xr.table_object(e);if(t)throw ce(t,t.message,ue.BAD_REQUEST,void 0,void 0,!0);let r=await or.checkSchemaTableExists(e.schema,e.table);if(r)throw ce(new Error,r,ue.NOT_FOUND,_r.LOG_LEVELS.ERROR,r,!0);return await cr.dropTable(e),kr.signalSchemaChange(new Yr(process.pid,e.operation,e.schema,e.table)),await LT.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(DM,"dropTable");async function MM(e){let t=xr.attribute_object(e);if(t)throw ce(t,t.message,ue.BAD_REQUEST,void 0,void 0,!0);let r=await or.checkSchemaTableExists(e.schema,e.table);if(r)throw ce(new Error,r,ue.NOT_FOUND,_r.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw ce(new Error,"You cannot drop a hash attribute",ue.BAD_REQUEST,void 0,void 0,!0);if(_r.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw ce(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,ue.BAD_REQUEST,void 0,void 0,!0);try{return await cr.dropAttribute(e),PM(e),kr.signalSchemaChange(new Yr(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw bT.error(`Got an error deleting attribute ${bM.inspect(e)}.`),s}}a(MM,"dropAttribute");function PM(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(PM,"dropAttributeFromGlobal");async function BM(e){if(!global.hdb_schema[e.schema])throw ce(new Error,Vr.SCHEMA_NOT_FOUND(e.schema),ue.NOT_FOUND,void 0,void 0,!0);if(!global.hdb_schema[e.schema][e.table])throw ce(new Error,Vr.TABLE_NOT_FOUND(e.schema,e.table),ue.NOT_FOUND,void 0,void 0,!0);try{return await cr.createAttribute(e),kr.signalSchemaChange(new Yr(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}catch(t){throw bT.error(t),t}}a(BM,"createAttribute")});var qT=d((yG,GT)=>{"use strict";var H_=Vt(),MT=g(),PT=Re(),HM=f(),zi=p(),BT=DT(),vM=mo(),{RemotePayloadObject:GM}=Bs(),{handleHDBError:HT,hdb_errors:qM}=q(),{HTTP_STATUS_CODES:vT}=qM,{NodeSubscription:FM}=Ps();GT.exports=xM;async function xM(e,t){let r;try{r=await H_.request(`${t}.${PT.REQUEST_SUFFIX}`,new GM(HM.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),zi.trace("Response from remote describe all request:",r)}catch(o){zi.error(`addNode received error from describe all request to remote node: ${o}`);let _=H_.requestErrorHandler(o,"add_node",t);throw HT(new Error,_,vT.INTERNAL_SERVER_ERROR,"error",_)}if(r.status===PT.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw HT(new Error,o,vT.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:_,table:c}=o,u=MT.doesSchemaExist(_),E=s[_]!==void 0,l=MT.doesTableExist(_,c),h=s?.[_]?.[c]!==void 0;if(!u&&!E||!l&&!h){n.push(o);continue}if(!u&&E&&(zi.trace(`addNode creating schema: ${_}`),await BT.createSchema({operation:"create_schema",schema:_})),!l&&h){zi.trace(`addNode creating table: ${c} in schema: ${_}`);let A=new vM(_,c,s[_][c].hash_attribute);await BT.createTable(A)}await H_.createLocalTableStream(_,c);let S=new FM(_,c,o.publish,o.subscribe);S.start_time=o.start_time,i.push(S)}return{added:i,skipped:n}}a(xM,"reviewSubscriptions")});var kT=d((UG,VT)=>{"use strict";var{handleHDBError:ji,hdb_errors:VM}=q(),{HTTP_STATUS_CODES:ea}=VM,{addUpdateNodeValidator:kM}=gT(),Vs=p(),xT=f(),FT=Re(),YM=g(),v_=Vt(),ks=qr(),$M=Q(),KM=qT(),{Node:WM,NodeSubscription:QM}=Ps(),JM="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",XM="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",ZM=$M.get(xT.CONFIG_PARAMS.CLUSTERING_NODENAME);VT.exports=zM;async function zM(e,t=!1){Vs.trace("addNode called with:",e),ks.checkClusteringEnabled();let r=kM(e);if(r)throw ji(r,r.message,ea.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let l=await ks.getNodeRecord(s);if(!YM.isEmptyOrZeroLength(l))throw ji(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,ea.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await KM(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=JM,o;let _=ks.buildNodePayloads(n,ZM,xT.OPERATIONS_ENUM.ADD_NODE,await ks.getSystemInfo());Vs.trace("addNode sending remote payload:",_);let c;try{c=await v_.request(`${s}.${FT.REQUEST_SUFFIX}`,_)}catch(l){Vs.error(`addNode received error from request: ${l}`);let h=v_.requestErrorHandler(l,"add_node",s);throw ji(new Error,h,ea.INTERNAL_SERVER_ERROR,"error",h)}if(c.status===FT.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${s}: ${c.message}`;throw ji(new Error,l,ea.INTERNAL_SERVER_ERROR,"error",l)}Vs.trace(c);let u=[];for(let l=0,h=n.length;l<h;l++){let S=n[l];Vs.trace("Add node updating work stream for node:",s,"subscriptions:",S),await v_.updateWorkStream(S,s),n[l].start_time===void 0&&delete n[l].start_time,u.push(new QM(S.schema,S.table,S.publish,S.subscribe))}let E=new WM(s,u,c.system_info);return await ks.upsertNodeRecord(E),i.length>0?o.message=XM:o.message=`Successfully added '${s}' to manifest`,o}a(zM,"addNode")});var $T=d((DG,YT)=>{"use strict";var jM=Re(),ta=class{constructor(t,r,s,n,i,o,_,c,u,E,l,h,S){this.port=t,this.server_name=r+jM.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:_},this.leafnodes={port:c,tls:{cert_file:n,key_file:i,ca_file:o,insecure:_}},this.cluster={name:u,port:E,routes:l,tls:{cert_file:n,key_file:i,ca_file:o,insecure:_}},this.accounts={SYS:{users:h},HDB:{users:S}},this.system_account="SYS"}};a(ta,"HubConfigObject");YT.exports=ta});var QT=d((MG,WT)=>{"use strict";var KT=Re(),ra=class{constructor(t,r,s,n,i,o,_,c,u,E,l,h){this.port=t,this.server_name=r+KT.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+KT.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:E,ca_file:l,insecure:h},this.leafnodes={remotes:[{tls:{ca_file:l,insecure:h},urls:i,account:"SYS"},{tls:{ca_file:l,insecure:h},urls:o,account:"HDB"}]},this.accounts={SYS:{users:_},HDB:{users:c,jetstream:"enabled"}},this.system_account="SYS"}};a(ra,"LeafConfigObject");WT.exports=ra});var XT=d((PG,JT)=>{"use strict";var sa=class{constructor(t,r){this.user=t,this.password=r}};a(sa,"HdbUserObject");JT.exports=sa});var zT=d((BG,ZT)=>{"use strict";var eP=Re(),na=class{constructor(t,r){this.user=t+eP.SERVER_SUFFIX.ADMIN,this.password=r}};a(na,"SysUserObject");ZT.exports=na});var rf=d((HG,tf)=>{"use strict";var $r=require("path"),_a=require("fs-extra"),tP=$T(),rP=QT(),sP=XT(),nP=zT(),G_=Us(),Wr=g(),Ye=zr(),oa=f(),ia=Re(),{CONFIG_PARAMS:se}=oa,ca=p(),ua=Q(),jT=bs(),q_=Vt(),Kr="clustering",iP=1e4,ef=5;tf.exports={generateNatsConfig:aP,removeNatsConfig:oP};async function aP(e=!1,t=void 0){ua.initSync();let r=ua.get(se.ROOTPATH),s=$r.join(r,Kr,ia.PID_FILES.HUB),n=$r.join(r,Kr,ia.PID_FILES.LEAF),i=$r.join(r,Kr,"leaf"),o=$r.join(r,Kr,ia.NATS_CONFIG_FILES.HUB_SERVER),_=$r.join(r,Kr,ia.NATS_CONFIG_FILES.LEAF_SERVER),c=Ye.getConfigFromFile(se.CLUSTERING_TLS_CERTIFICATE),u=Ye.getConfigFromFile(se.CLUSTERING_TLS_PRIVATEKEY),E=Ye.getConfigFromFile(se.CLUSTERING_TLS_CERT_AUTH),l=Ye.getConfigFromFile(se.CLUSTERING_TLS_INSECURE),h=Ye.getConfigFromFile(se.CLUSTERING_NODENAME),S=Ye.getConfigFromFile(se.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await q_.checkNATSServerInstalled()||Ea("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let A=await G_.listUsers(),N=Ye.getConfigFromFile(se.CLUSTERING_USER),b=await G_.getClusterUser();(Wr.isEmpty(b)||b.active!==!0)&&Ea(`invalid cluster user '${N}'`),e||(await aa(se.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await aa(se.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await aa(se.CLUSTERING_HUBSERVER_NETWORK_PORT),await aa(se.CLUSTERING_LEAFSERVER_NETWORK_PORT));let Ae=[],v=[];for(let[Ws,Ct]of A.entries())Ct.role.role===oa.ROLE_TYPES_ENUM.CLUSTER_USER&&Ct.active&&(Ae.push(new nP(Ct.username,jT.decrypt(Ct.hash))),v.push(new sP(Ct.username,jT.decrypt(Ct.hash))));let W=[],{hub_routes:$e}=Ye.getClusteringRoutes();if(!Wr.isEmptyOrZeroLength($e))for(let Ws of $e)W.push(`tls://${b.sys_name_encoded}:${b.uri_encoded_d_hash}@${Ws.host}:${Ws.port}`);let Ks=new tP(Ye.getConfigFromFile(se.CLUSTERING_HUBSERVER_NETWORK_PORT),h,s,c,u,E,l,S,Ye.getConfigFromFile(se.CLUSTERING_HUBSERVER_CLUSTER_NAME),Ye.getConfigFromFile(se.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),W,Ae,v);t=Wr.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===oa.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await _a.writeJson(o,Ks),ca.trace(`Hub server config written to ${o}`));let $_=`tls://${b.sys_name_encoded}:${b.uri_encoded_d_hash}@0.0.0.0:${S}`,K_=`tls://${b.uri_encoded_name}:${b.uri_encoded_d_hash}@0.0.0.0:${S}`,W_=new rP(Ye.getConfigFromFile(se.CLUSTERING_LEAFSERVER_NETWORK_PORT),h,n,i,[$_],[K_],Ae,v,c,u,E,l);(t===void 0||t===oa.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await _a.writeJson(_,W_),ca.trace(`Leaf server config written to ${_}`))}a(aP,"generateNatsConfig");async function aa(e){let t=ua.get(e);Wr.isEmpty(t)&&Ea(`port undefined for '${e}'`),await Wr.isPortTaken(t)&&Ea(`'${e}' port '${t}' is unavailable`)}a(aa,"isPortAvailable");function Ea(e){let t=`Error generating clustering config: ${e}`;ca.error(t),console.error(t),process.exit(1)}a(Ea,"generateNatsConfigError");async function oP(e){let{port:t,config_file:r}=q_.getServerConfig(e),{username:s,decrypt_hash:n}=await G_.getClusterUser(),i=0,o=500;for(;i<ef;){try{let u=await q_.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){ca.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=ef)throw new Error(`removeNatsConfig timed out waiting to connect to ${e}`);await Wr.async_set_timeout(o*i)}let _="0".repeat(iP),c=$r.join(ua.get(se.ROOTPATH),Kr,r);await _a.writeFile(c,_),await _a.remove(c)}a(oP,"removeNatsConfig")});var x_=d((vG,uf)=>{"use strict";var K=Q(),sf=Zo(),m=f(),F_=Re(),ee=require("path"),{PACKAGE_ROOT:la}=f(),X="/dev/null",Qr=ee.join(la,"launchServiceScripts"),nf=ee.join(la,"utility/scripts"),_P=ee.join(nf,m.HDB_RESTART_SCRIPT),af=ee.resolve(la,"dependencies",`${process.platform}-${process.arch}`,F_.NATS_BINARY_NAME),Ee,le;function lt(){(Ee===void 0||le===void 0)&&(K.initSync(),Ee=K.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),le=K.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY))}a(lt,"initLogConfig");function of(){lt();let e=ee.join(le,m.PROCESS_LOG_NAMES.IPC),t={name:m.PROCESS_DESCRIPTORS.IPC,exec_mode:"fork",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.IPC},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:m.SERVICE_SERVERS_CWD.IPC};return Ee||(t.out_file=X,t.error_file=X),{...t,script:m.SERVICE_SERVERS.IPC}}a(of,"generateIPCServerConfig");function _f(){lt(),K.initSync(),Ee=K.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),le=K.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=ee.join(le,m.PROCESS_LOG_NAMES.HDB),t=sf.licenseSearch(),r=t.ram_allocation?m.MEM_SETTING_KEY+t.ram_allocation:m.MEM_SETTING_KEY+m.RAM_ALLOCATION_ENUM.DEFAULT,s={name:m.PROCESS_DESCRIPTORS.HDB,script:m.LAUNCH_SERVICE_SCRIPTS.HDB,exec_mode:"cluster",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.HDB},merge_logs:!0,out_file:e,error_file:e,instances:K.get(m.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Qr};return Ee||(s.out_file=X,s.error_file=X),s}a(_f,"generateHDBServerConfig");function cf(){lt(),K.initSync(),Ee=K.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),le=K.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=ee.join(le,m.PROCESS_LOG_NAMES.CUSTOM_FUNCTIONS),t=sf.licenseSearch(),r=t.ram_allocation?m.MEM_SETTING_KEY+t.ram_allocation:m.MEM_SETTING_KEY+m.RAM_ALLOCATION_ENUM.DEFAULT,s={name:m.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS,script:m.LAUNCH_SERVICE_SCRIPTS.CUSTOM_FUNCTIONS,exec_mode:"cluster",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS},merge_logs:!0,out_file:e,error_file:e,instances:K.get(m.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Qr};return Ee||(s.out_file=X,s.error_file=X),s}a(cf,"generateCFServerConfig");function cP(){lt(),K.initSync(),Ee=K.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),le=K.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=K.get(m.CONFIG_PARAMS.ROOTPATH),t=ee.join(e,"clustering",F_.NATS_CONFIG_FILES.HUB_SERVER),r=ee.join(le,m.PROCESS_LOG_NAMES.CLUSTERING_HUB),s={name:m.PROCESS_DESCRIPTORS.CLUSTERING_HUB,script:af,args:`-c ${t}`,exec_mode:"fork",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Ee||(s.out_file=X,s.error_file=X),s}a(cP,"generateNatsHubServerConfig");function uP(){lt(),K.initSync(),Ee=K.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),le=K.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=K.get(m.CONFIG_PARAMS.ROOTPATH),t=ee.join(e,"clustering",F_.NATS_CONFIG_FILES.LEAF_SERVER),r=ee.join(le,m.PROCESS_LOG_NAMES.CLUSTERING_LEAF),s={name:m.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,script:af,args:`-c ${t}`,exec_mode:"fork",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Ee||(s.out_file=X,s.error_file=X),s}a(uP,"generateNatsLeafServerConfig");function EP(){lt(),K.initSync();let e=ee.join(le,m.PROCESS_LOG_NAMES.CLUSTERING_INGEST_SERVICE),t={name:m.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,script:m.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,exec_mode:"cluster",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Qr};return Ee||(t.out_file=X,t.error_file=X),t}a(EP,"generateNatsIngestServiceConfig");function lP(){lt(),K.initSync();let e=ee.join(le,m.PROCESS_LOG_NAMES.CLUSTERING_REPLY_SERVICE),t={name:m.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE,script:m.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,exec_mode:"cluster",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Qr};return Ee||(t.out_file=X,t.error_file=X),t}a(lP,"generateNatsReplyServiceConfig");function dP(){lt(),K.initSync();let e=ee.join(le,m.PROCESS_LOG_NAMES.CLUSTERING_UPGRADE),t={name:m.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:m.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Qr,autorestart:!1};return Ee||(t.out_file=X,t.error_file=X),t}a(dP,"generateClusteringUpgradeV4ServiceConfig");function SP(){lt();let e=ee.join(le,m.PROCESS_LOG_NAMES.PM2),t={name:m.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.RESTART_HDB},merge_logs:!0,out_file:e,error_file:e,instances:1,autorestart:!1,cwd:nf};return Ee||(t.out_file=X,t.error_file=X),{...t,script:_P}}a(SP,"generateRestart");function hP(e){lt();let t=ee.join(le,m.PROCESS_LOG_NAMES.JOBS),r=ee.join(la,"server/jobs"),s={name:`JOB-${e}`,exec_mode:"fork",env:{[m.PROCESS_NAME_ENV_PROP]:`JOB-${e}`},merge_logs:!0,out_file:t,error_file:t,instances:1,cwd:Qr,autorestart:!1};return Ee||(s.out_file=X,s.error_file=X),{...s,script:ee.join(r,"jobProcess.js")}}a(hP,"generateJobConfig");function TP(){return{apps:[of(),_f(),cf()]}}a(TP,"generateAllServiceConfigs");uf.exports={generateAllServiceConfigs:TP,generateIPCServerConfig:of,generateHDBServerConfig:_f,generateCFServerConfig:cf,generateRestart:SP,generateNatsHubServerConfig:cP,generateNatsLeafServerConfig:uP,generateNatsIngestServiceConfig:EP,generateNatsReplyServiceConfig:lP,generateClusteringUpgradeV4ServiceConfig:dP,generateJobConfig:hP}});var Of=d((GG,Nf)=>{"use strict";var C=f(),da=g(),Ys=rf(),Sa=Vt(),fP=Re(),M=require("pm2"),RP=require("fs-extra"),pt=x_(),ye=Q(),It=p(),mP=x_(),AP=qr(),NP=require("util"),lf=NP.promisify(require("child_process").exec),df=require("path");Nf.exports={start:ur,stop:Ta,reload:hf,restart:Tf,list:k_,describe:fa,connect:dt,kill:Rf,startAllServices:UP,startService:ha,getUniqueServicesList:Y_,restartAllServices:DP,stopAllServices:MP,isServiceRegistered:mf,reloadStopStart:V_,restartHdb:ff,deleteProcess:wP,configureLogRotate:HP,startClustering:Af,isHdbRestartRunning:yP,isClusteringRunning:GP,stopClustering:vP,reloadClustering:qP};var{PACKAGE_ROOT:OP}=f(),gP="2.7.0",Sf=df.join(OP,"node_modules/pm2/bin/pm2"),pP="Log rotate installed.",IP="Error installing log rotate.",CP="Log rotate updated.",bP="Error updating log rotate.",LP="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 dt(){return new Promise((e,t)=>{M.connect((r,s)=>{r&&t(r),e(s)})})}a(dt,"connect");function ur(e){return new Promise(async(t,r)=>{try{await dt()}catch(s){r(s)}M.start(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(ur,"start");function Ta(e){return new Promise(async(t,r)=>{try{await dt()}catch(s){r(s)}M.stop(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.delete(e,(i,o)=>{i&&(M.disconnect(),r(s)),M.disconnect(),t(o)})})})}a(Ta,"stop");function hf(e){return new Promise(async(t,r)=>{try{await dt()}catch(s){r(s)}M.reload(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(hf,"reload");function Tf(e){return new Promise(async(t,r)=>{try{await dt()}catch(s){r(s)}M.restart(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(Tf,"restart");function wP(e){return new Promise(async(t,r)=>{try{await dt()}catch(s){r(s)}M.delete(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(wP,"deleteProcess");async function ff(){await ur(mP.generateRestart())}a(ff,"restartHdb");async function yP(){let e=await k_();for(let t in e)if(e[t].name===C.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(yP,"isHdbRestartRunning");function k_(){return new Promise(async(e,t)=>{try{await dt()}catch(r){t(r)}M.list((r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(k_,"list");function fa(e){return new Promise(async(t,r)=>{try{await dt()}catch(s){r(s)}M.describe(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(fa,"describe");function Rf(){return new Promise(async(e,t)=>{try{await dt()}catch(r){t(r)}M.killDaemon((r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(Rf,"kill");async function UP(){try{await Af(),await ur(pt.generateAllServiceConfigs())}catch(e){throw M.disconnect(),e}}a(UP,"startAllServices");async function ha(e){try{let t;switch(e=e.toLowerCase(),e){case C.PROCESS_DESCRIPTORS.IPC.toLowerCase():t=pt.generateIPCServerConfig();break;case C.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=pt.generateHDBServerConfig();break;case C.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase():t=pt.generateCFServerConfig();break;case C.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=pt.generateNatsIngestServiceConfig();break;case C.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=pt.generateNatsReplyServiceConfig();break;case C.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=pt.generateNatsHubServerConfig(),await ur(t),await Ys.removeNatsConfig(e);return;case C.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=pt.generateNatsLeafServerConfig(),await ur(t),await Ys.removeNatsConfig(e);return;case C.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=pt.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await ur(t)}catch(t){throw M.disconnect(),t}}a(ha,"startService");async function Y_(){try{let e=await k_(),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 M.disconnect(),e}}a(Y_,"getUniqueServicesList");async function DP(e=[]){try{let t=!1,r=await Y_();for(let s=0,n=Object.values(r).length;s<n;s++){let i=Object.values(r)[s],o=i.name;e.includes(o)||(i.exec_mode==="cluster_mode"?o===C.PROCESS_DESCRIPTORS.HDB?t=!0:await V_(o):await Tf(o))}t&&await V_(C.PROCESS_DESCRIPTORS.HDB)}catch(t){throw M.disconnect(),t}}a(DP,"restartAllServices");async function MP(){try{let e=await Y_();for(let t=0,r=Object.values(e).length;t<r;t++){let s=Object.values(e)[t];await Ta(s.name)}if(await Rf(),ye.get(C.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND)===!0){let t=(await RP.readFile(df.join(ye.get(C.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),C.FOREGROUND_PID_FILE))).toString();try{process.kill(t,"SIGTERM")}catch(r){It.warn(`Error terminating foreground process: ${r}`)}}}catch(e){throw M.disconnect(),e}}a(MP,"stopAllServices");async function mf(e){return!da.isEmptyOrZeroLength(await fa(e))}a(mf,"isServiceRegistered");async function V_(e){let t=e===C.PROCESS_DESCRIPTORS.HDB?ye.get(C.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):ye.get(C.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await fa(e),s=da.isEmptyOrZeroLength(r)?0:r.length;t!==s?e===C.PROCESS_DESCRIPTORS.HDB?It.error(LP):(await Ta(e),await ha(e)):e===C.PROCESS_DESCRIPTORS.HDB?await ff():await hf(e)}a(V_,"reloadStopStart");function PP(){return new Promise(async(e,t)=>{try{await dt()}catch(r){t(r)}M.stop(C.PROCESS_DESCRIPTORS.PM2_LOGROTATE,(r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(PP,"stopLogrotate");async function BP(){let{stdout:e,stderr:t}=await lf(`${process.platform==="win32"?"node":""} ${Sf} install pm2-logrotate@${gP}`);if(It.debug(`loadLogRotate stdout: ${e}`),t)throw It.error(IP),t;It.info(pP)}a(BP,"installLogRotate");async function Ef(){let e={max_size:ye.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_MAX_SIZE),retain:ye.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_RETAIN),compress:ye.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_COMPRESS),dateFormat:ye.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_DATE_FORMAT),rotateModule:ye.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_MODULE),workerInterval:ye.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_WORKER_INTERVAL),rotateInterval:ye.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_INTERVAL),TZ:ye.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_TIMEZONE)},t="";for(let n in e)t+=`${process.platform==="win32"?"node":""} ${Sf} set pm2-logrotate:${n} ${e[n]}`,n!=="TZ"&&(t+=" && ");let{stdout:r,stderr:s}=await lf(t);if(It.debug(`updateLogRotateConfig stdout: ${r}`),s)throw It.error(bP),s;It.info(CP)}a(Ef,"updateLogRotateConfig");async function HP(){ye.initSync();let e=da.autoCastBoolean(ye.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE)),t=await fa(C.PROCESS_DESCRIPTORS.PM2_LOGROTATE),r,s=!1;if(da.isEmptyOrZeroLength(t)||(s=!0,r=t[0].pm2_env.status),e&&!s){await BP(),await Ef();return}if(e&&s){await ur(C.PROCESS_DESCRIPTORS.PM2_LOGROTATE),await Ef();return}!e&&r===C.PM2_PROCESS_STATUSES.ONLINE&&await PP()}a(HP,"configureLogRotate");async function Af(){for(let t in C.CLUSTERING_PROCESSES){let r=C.CLUSTERING_PROCESSES[t];await ha(r)}await Sa.createWorkQueueStream(fP.WORK_QUEUE_CONSUMER_NAMES),await Sa.updateNodeNameLocalStreams();let e=await AP.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===C.PRE_4_0_0_VERSION){It.info("Starting clustering upgrade 4.0.0 process"),await ha(C.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0);break}}a(Af,"startClustering");async function vP(){for(let e in C.CLUSTERING_PROCESSES){let t=C.CLUSTERING_PROCESSES[e];await Ta(t)}}a(vP,"stopClustering");async function GP(){for(let e in C.CLUSTERING_PROCESSES){let t=C.CLUSTERING_PROCESSES[e];if(await mf(t)===!1)return!1}return!0}a(GP,"isClusteringRunning");async function qP(){await Ys.generateNatsConfig(!0),await Sa.reloadNATSHub(),await Sa.reloadNATSLeaf(),await Ys.removeNatsConfig(C.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ys.removeNatsConfig(C.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(qP,"reloadClustering")});var bf=d((qG,Cf)=>{"use strict";var If=require("joi"),{string:gf}=If.types(),FP=We(),pf=f(),xP=Q(),VP=Re();Cf.exports=kP;function kP(e){let t=gf.invalid(xP.get(pf.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(VP.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=If.object({operation:gf.valid(pf.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return FP.validateBySchema(e,r)}a(kP,"removeNodeValidator")});var Pf=d((FG,Mf)=>{"use strict";var{handleHDBError:Lf,hdb_errors:YP}=q(),{HTTP_STATUS_CODES:wf}=YP,$P=bf(),$s=p(),yf=qr(),KP=g(),Ra=f(),Uf=Re(),Df=Vt(),WP=Q(),{RemotePayloadObject:QP}=Bs(),{NodeSubscription:JP}=Ps(),XP=Rs(),ZP=ko(),zP=WP.get(Ra.CONFIG_PARAMS.CLUSTERING_NODENAME);Mf.exports=jP;async function jP(e){$s.trace("removeNode called with:",e),yf.checkClusteringEnabled();let t=$P(e);if(t)throw Lf(t,t.message,wf.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await yf.getNodeRecord(r);if(KP.isEmptyOrZeroLength(s))throw Lf(new Error,`Node '${r}' was not found.`,wf.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new QP(Ra.OPERATIONS_ENUM.REMOVE_NODE,zP,[]),i,o=!1;try{i=await Df.request(`${r}.${Uf.REQUEST_SUFFIX}`,n),$s.trace("Remove node reply from remote node:",r,i)}catch(c){$s.error("removeNode received error from request:",c),o=!0}for(let c=0,u=s.subscriptions.length;c<u;c++){let E=s.subscriptions[c];$s.trace(`Remove node removing subscription: ${E.schema}.${E.table} for node: ${r}`);let l=new JP(E.schema,E.table,!1,!1);await Df.updateWorkStream(l,r)}let _=new XP(Ra.SYSTEM_SCHEMA_NAME,Ra.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await ZP.deleteRecord(_),i?.status===Uf.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?($s.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(jP,"removeNode")});var Hf=d((xG,Bf)=>{"use strict";var ma=f(),eB=g(),tB=qr(),rt=p(),rB=mT(),sB=kT(),nB=Of(),iB=Ri(),aB=Pf(),oB=3e4,_B=7;Bf.exports=cB;async function cB(){try{rt.notify("Starting update nodes. This process will attempt to update any node connections the need to be reestablished after a 4.0.0 upgrade"),await iB.setSchemaDataToGlobalAsync();let e=await tB.getAllNodeRecords(),t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];n.system_info.hdb_version===ma.PRE_4_0_0_VERSION&&t.push(uB(n))}await Promise.allSettled(t),rt.notify("Shutting down 4.0.0 clustering upgrade process"),await nB.deleteProcess(ma.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0)}catch(e){throw rt.error(e),e}}a(cB,"updateAllNodes");async function uB(e){try{let{name:t,subscriptions:r}=e;rt.notify("Running 4.0.0 update on node:",t);let s=!1,n=0;for(;n<_B;){let i=[];if(await rB.buildNodeStatus(e,i),rt.trace("Received status:",i[0].status,"from node:",t),i[0].status==="open"&&i[0].system_info.hdb_version==="4.0.0"){rt.notify("Received open status from node:",t,"calling add node");let o={operation:ma.OPERATIONS_ENUM.ADD_NODE,node_name:t,subscriptions:r};await sB(o,!0),rt.notify("Successfully added node",t),s=!0;break}n=(Date.now()-e.__updatedtime__)/(1e3*60*60*24),rt.trace("Update node has been running for",n,"days. Calling node status again for node:",t),await eB.async_set_timeout(oB)}s||(rt.error("4.0.0 node update was unable to update connection to node:",t),rt.error("Removing following node record from hdb_nodes",e),await aB({operation:ma.OPERATIONS_ENUM.REMOVE_NODE,node_name:t}))}catch(t){throw rt.error(t),t}}a(uB,"updateNode")});var EB=Hf();(async()=>{try{await EB()}catch(e){console.error("Error launching 4.0.0 node update"),console.error(e),process.exit(1)}})();
|
|
7
|
+
`,"")}a(rT,"runCommand");async function QD(){try{await UD.access(I_)}catch{return!1}let e=await rT(`${I_} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return DD.eq(t,KD)}a(QD,"checkNATSServerInstalled");async function L_(e,t,r,s=!0,n="127.0.0.1"){return qD({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:Et.get($.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Et.get($.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Et.get($.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),insecure:Et.get($.CONFIG_PARAMS.CLUSTERING_TLS_INSECURE)}})}a(L_,"createConnection");async function JD(){tt&&(await tt.close(),tt=void 0)}a(JD,"closeConnection");async function Qi(){if(!tt){let e=await Zh.getClusterUser();if(ir(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=Et.get($.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);tt=await L_(t,e.username,e.decrypt_hash)}return tt}a(Qi,"getConnection");async function Fr(){if(Gs)return Gs;ir(tt)&&await Qi();let{domain:e}=xs($.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ir(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Gs=await tt.jetstreamManager({domain:e}),Gs}a(Fr,"getJetStreamManager");async function sT(){if(qs)return qs;ir(tt)&&await Qi();let{domain:e}=xs($.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ir(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return qs=tt.jetstream({domain:e}),qs}a(sT,"getJetStream");async function ke(){let e=tt||await Qi(),t=Gs||await Fr(),r=qs||await sT();return{connection:e,jsm:t,js:r}}a(ke,"getNATSReferences");async function XD(){let e=Et.get($.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),{sys_name:t,decrypt_hash:r}=await Zh.getClusterUser(),s=await L_(e,t,r),n=b_(),i=s.subscribe(n),o=[],_=(async()=>{for await(let c of i)o.push(tT.decode(c.data))})();return await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:n}),await s.flush(),await C_.async_set_timeout(50),await i.drain(),await s.close(),await _,o}a(XD,"getServerList");async function w_(e,t){let{jsm:r}=await ke();await r.streams.add({name:e,storage:zh.File,retention:jh.Limits,subjects:t})}a(w_,"createLocalStream");async function nT(){let{jsm:e}=await ke(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(nT,"listStreams");async function ZD(e){let{jsm:t}=await ke();await t.streams.delete(e)}a(ZD,"deleteLocalStream");async function zD(e){let{connection:t}=await ke(),r=[],s=b_(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(tT.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(zD,"listRemoteStreams");async function jD(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await ke(),i=PD(),o=[],_={ack_policy:eT.None,durable_name:i,deliver_subject:i,deliver_policy:p_.All};t&&(_.deliver_policy=p_.StartTime,_.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,_);let c={timeout:2e3};r&&(c.max=r);let u=await n.subscribe(i,c);for await(let E of u){let l=VD(E),h=Xh(l.data),S={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:h,originators:[]},A=[];if(l.headers){let N=l.headers.get("originators");N&&(A=N.split(","),S.originators=A)}o.push(S),u.getPending()===1&&l.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),o}catch(c){if(await s.consumers.delete(e,i),c.code==="TIMEOUT")return o;throw c}}a(jD,"viewStream");async function eM(e,t,r=[],s=[]){gt.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,r,"originators:",s);let{connection:n,js:i}=await ke(),o=await Ji(),_=`${e}.${o}`,c=xD();s.push(o),c.append("originators",s.join());for(let u=0,E=r.length;u<E;u++)try{gt.trace(`publishToStream publishing to subject: ${_}, data:`,r[u]),await i.publish(_,g_(r[u]),{headers:c})}catch(l){if(l.code&&l.code.toString()==="503")gt.trace(`publishToStream creating stream: ${t}`),await w_(t,[_]),await i.publish(_,g_(r[u]),{headers:c});else throw l}}a(eM,"publishToStream");function xs(e){e=e.toLowerCase();let t=Fs.join(Et.get($.CONFIG_PARAMS.ROOTPATH),$D);if(e===$.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ir(O_)&&(O_={port:Hs.getConfigFromFile($.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Hs.getConfigFromFile($.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.HUB,config_file:V.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Fs.join(t,V.PID_FILES.HUB),hdb_nats_path:t}),O_;if(e===$.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ir(N_)&&(N_={port:Hs.getConfigFromFile($.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Hs.getConfigFromFile($.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,config_file:V.NATS_CONFIG_FILES.LEAF_SERVER,domain:Hs.getConfigFromFile($.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,pid_file_path:Fs.join(t,V.PID_FILES.LEAF),hdb_nats_path:t}),N_;gt.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(xs,"getServerConfig");async function tM(e){let{jsm:t}=await ke(),r=await Ji();try{await t.streams.add({name:e.stream_name,storage:zh.File,retention:jh.Workqueue,subjects:[`${V.SUBJECT_PREFIXES.MSGID}.${r}`,`${V.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:eT.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:p_.All,max_ack_pending:1e4,deliver_group:e.deliver_group,filter_subject:`${V.SUBJECT_PREFIXES.TXN}.>`});else throw s}}a(tM,"createWorkQueueStream");async function iT(e,t,r){let{jsm:s}=await ke(),n=await s.streams.info(t),i=aT(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:_,table:c}=r,u=Wi.createNatsTableStreamName(_,c),E=i===e,l,h,S=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let N=0,b=n.config.sources.length;N<b;N++)if(l=n.config.sources[N],h=N,E&&l.name===u||!E&&l.name===u&&l.external&&l.external.api===`$JS.${e}.API`){S=!0;break}if(S===!0){if(l.opt_start_time===o)return;await _T(_,c,l,t),n.config.sources.splice(h,1),await s.streams.update(t,n.config)}let A={name:u,opt_start_time:o,filter_subject:`${V.SUBJECT_PREFIXES.TXN}.>`};E||(A.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(A),await s.streams.update(t,n.config)}a(iT,"addSourceToWorkStream");function aT(e){return e.split(".")[1]}a(aT,"extractServerName");async function oT(e,t,r){let{schema:s,table:n}=r,i=Wi.createNatsTableStreamName(s,n),{jsm:o}=await ke(),_=await o.streams.info(t);if(!Array.isArray(_.config.sources)||_.config.sources.length===0)return;let c=_.config.sources.length,u;for(;c--;)if(u=_.config.sources[c],u.name===i&&u.external.api===`$JS.${e}.API`){_.config.sources.splice(c,1);break}await o.streams.update(t,_.config),await _T(s,n,u,t)}a(oT,"removeSourceFromWorkStream");async function _T(e,t,r,s){let n=await Fr(),i;try{i=ET(e,t,r.external.api.split(".")[1]),await n.streams.purge(s,{filter:i})}catch{gt.error("Error purging source subject",i,"from work stream",s)}}a(_T,"purgeSourceFromWorkStream");async function rM(e,t,r=2e3,s=b_()){if(!C_.isObject(t))throw new Error("data param must be an object");let n=g_(t),{connection:i}=await ke(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let _=await i.request(e,n,o);return Xh(_.data)}a(rM,"request");function y_(e){return new Promise(async(t,r)=>{let s=HD(I_,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(y_,"reloadNATS");async function sM(){let{pid_file_path:e}=xs($.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await y_(e)}a(sM,"reloadNATSHub");async function nM(){let{pid_file_path:e}=xs($.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await y_(e)}a(nM,"reloadNATSLeaf");function iM(e,t,r){let s;switch(e.code){case Wh.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case Wh.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(iM,"requestErrorHandler");async function aM(e,t){let r=t+V.SERVER_SUFFIX.LEAF;await vD.writeTransaction($.SYSTEM_SCHEMA_NAME,$.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await iT(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await oT(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(aM,"updateWorkStream");async function cT(e,t){let r=Wi.createNatsTableStreamName(e,t),s=await Ji(),n=ET(e,t,s);await w_(r,[n])}a(cT,"createLocalTableStream");async function oM(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await cT(s,n)}}a(oM,"createTableStreams");async function uT(e,t){if(Et.get($.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Wi.createNatsTableStreamName(e,t),{jsm:s}=await ke();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")gt.warn(r);else throw r}}a(uT,"purgeTableStream");async function _M(e,t){if(Et.get($.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await uT(e,t[r])}a(_M,"purgeSchemaTableStreams");async function cM(e){return(await Fr()).streams.info(e)}a(cM,"getStreamInfo");function ET(e,t,r){return`${V.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(ET,"createSubjectName");async function Ji(){if(vs)return vs;if(vs=(await Fr())?.nc?.info?.server_name,vs===void 0)throw new Error("Unable to get jetstream manager server name");return vs}a(Ji,"getJsmServerName");async function uM(){let e=await Fr(),t=await Ji(),r=await nT();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=i.split(".");if(o[o.length-1]!==t){if(n.name===V.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let c=`${V.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;gt.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c}else if(n.name===V.WORK_QUEUE_CONSUMER_NAMES.stream_name){let c=`${V.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;gt.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c,await e.consumers.update(V.WORK_QUEUE_CONSUMER_NAMES.stream_name,V.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${V.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let c=i.split(".");c[c.length-1]=t;let u=c.join(".");gt.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}await e.streams.update(n.name,n)}}}a(uM,"updateNodeNameLocalStreams")});var mT=d((pG,RT)=>{"use strict";var D_=qr(),EM=Vt(),hT=Q(),Xi=f(),ar=Re(),lM=g(),U_=p(),{RemotePayloadObject:dM}=Bs(),{ErrorCode:dT}=require("nats"),ST=hT.get(Xi.CONFIG_PARAMS.CLUSTERING_ENABLED),TT=hT.get(Xi.CONFIG_PARAMS.CLUSTERING_NODENAME);RT.exports={clusterStatus:SM,buildNodeStatus:fT};async function SM(){let e={node_name:TT,is_enabled:ST,connections:[]};if(!ST)return e;let t=await D_.getAllNodeRecords();if(lM.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(fT(t[s],e.connections));return await Promise.allSettled(r),e}a(SM,"clusterStatus");async function fT(e,t){let r=e.name,s=new dM(Xi.OPERATIONS_ENUM.CLUSTER_STATUS,TT,void 0,await D_.getSystemInfo()),n,i,o=ar.CLUSTER_STATUS_STATUSES.OPEN;try{let c=Date.now();n=await EM.request(ar.REQUEST_SUBJECT(r),s),i=Date.now()-c,n.status===ar.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ar.CLUSTER_STATUS_STATUSES.CLOSED,U_.error(`Error getting node status from ${r} `,n))}catch(c){U_.warn(`Error getting node status from ${r}`,c),c.code===dT.NoResponders?o=ar.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:c.code===dT.Timeout?o=ar.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ar.CLUSTER_STATUS_STATUSES.CLOSED}let _=new hM(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let c={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==Xi.PRE_4_0_0_VERSION&&await D_.upsertNodeRecord(c)}catch(c){U_.error("Cluster status encountered an error updating system info for node:",r,c)}t.push(_)}a(fT,"buildNodeStatus");function hM(e,t,r,s,n,i,o,_){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=_}a(hM,"NodeStatusObject")});var gT=d((bG,OT)=>{"use strict";var M_=require("joi"),{string:Zi,boolean:AT,date:TM}=M_.types(),fM=We(),{validateSchemaExists:IG,validateTableExists:CG,validateSchemaName:RM}=Kt(),mM=f(),AM=Re(),NM=Q(),OM=Zi.invalid(NM.get(mM.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(AM.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null).required(),NT={operation:Zi.valid("add_node","update_node"),node_name:OM,subscriptions:M_.array().items({table:Zi.required(),schema:Zi.custom(RM).required(),subscribe:AT.required(),publish:AT.required().custom(pM),start_time:TM.iso()}).min(1).required()};function gM(e){return fM.validateBySchema(e,M_.object(NT))}a(gM,"addUpdateNodeValidator");function pM(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(pM,"checkForFalsy");OT.exports={addUpdateNodeValidator:gM,validation_schema:NT}});var CT=d((LG,IT)=>{"use strict";var B_=fi(),{hdb_errors:P_}=q();IT.exports={checkSchemaExists:pT,checkSchemaTableExists:IM,schema_describe:B_};async function pT(e){if(!global.hdb_schema[e])try{let t=await B_.describeSchema({schema:e});global.hdb_schema[e]=t}catch{return P_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}}a(pT,"checkSchemaExists");async function IM(e,t){let r=await pT(e);if(r)return r;if(!global.hdb_schema[e][t])try{let s=await B_.describeTable({schema:e,table:t});if(!s||Object.keys(s).length===0)return P_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t);global.hdb_schema[e][t]=s}catch{return P_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}}a(IM,"checkSchemaTableExists")});var DT=d((yG,UT)=>{"use strict";var xr=bn(),or=CT(),bT=p(),CM=require("uuid").v4,wG=require("clone"),kr=us(),_r=f(),bM=require("util"),cr=jt(),{handleHDBError:ce,hdb_errors:LM}=q(),{HDB_ERROR_MSGS:Vr,HTTP_STATUS_CODES:ue}=LM,{SchemaEventMsg:Yr}=mr(),LT=Vt();UT.exports={createSchema:wM,createSchemaStructure:wT,createTable:yM,createTableStructure:yT,createAttribute:BM,dropSchema:UM,dropTable:DM,dropAttribute:MM};async function wM(e){try{let t=await wT(e);return kr.signalSchemaChange(new Yr(process.pid,e.operation,e.schema)),t}catch(t){throw t}}a(wM,"createSchema");async function wT(e){let t=xr.schema_object(e);if(t)throw ce(t,t.message,ue.BAD_REQUEST,void 0,void 0,!0);if(!await or.checkSchemaExists(e.schema))throw ce(new Error,Vr.SCHEMA_EXISTS_ERR(e.schema),ue.BAD_REQUEST,_r.LOG_LEVELS.ERROR,Vr.SCHEMA_EXISTS_ERR(e.schema),!0);try{return await cr.createSchema(e),`schema '${e.schema}' successfully created`}catch(r){throw r}}a(wT,"createSchemaStructure");async function yM(e){try{let t=await yT(e);return kr.signalSchemaChange(new Yr(process.pid,e.operation,e.schema,e.table)),t}catch(t){throw t}}a(yM,"createTable");async function yT(e){let t=xr.create_table_object(e);if(t)throw ce(t,t.message,ue.BAD_REQUEST,void 0,void 0,!0);xr.validateTableResidence(e.residence);let r=await or.checkSchemaExists(e.schema);if(r)throw ce(new Error,r,ue.NOT_FOUND,_r.LOG_LEVELS.ERROR,r,!0);if(!await or.checkSchemaTableExists(e.schema,e.table))throw ce(new Error,Vr.TABLE_EXISTS_ERR(e.schema,e.table),ue.BAD_REQUEST,_r.LOG_LEVELS.ERROR,Vr.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:CM(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await cr.createTable(n,e);else throw ce(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",ue.BAD_REQUEST);else await cr.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(i){throw i}}a(yT,"createTableStructure");async function UM(e){let t=xr.schema_object(e);if(t)throw ce(t,t.message,ue.BAD_REQUEST,void 0,void 0,!0);let r=await or.checkSchemaExists(e.schema);if(r)throw ce(new Error,r,ue.NOT_FOUND,_r.LOG_LEVELS.ERROR,r,!0);let s=await or.schema_describe.describeSchema({schema:e.schema});global.hdb_schema[e.schema]=s;let n=Object.keys(global.hdb_schema[e.schema]);return await cr.dropSchema(e),kr.signalSchemaChange(new Yr(process.pid,e.operation,e.schema)),delete global.hdb_schema[e.schema],await LT.purgeSchemaTableStreams(e.schema,n),`successfully deleted schema '${e.schema}'`}a(UM,"dropSchema");async function DM(e){let t=xr.table_object(e);if(t)throw ce(t,t.message,ue.BAD_REQUEST,void 0,void 0,!0);let r=await or.checkSchemaTableExists(e.schema,e.table);if(r)throw ce(new Error,r,ue.NOT_FOUND,_r.LOG_LEVELS.ERROR,r,!0);return await cr.dropTable(e),kr.signalSchemaChange(new Yr(process.pid,e.operation,e.schema,e.table)),await LT.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(DM,"dropTable");async function MM(e){let t=xr.attribute_object(e);if(t)throw ce(t,t.message,ue.BAD_REQUEST,void 0,void 0,!0);let r=await or.checkSchemaTableExists(e.schema,e.table);if(r)throw ce(new Error,r,ue.NOT_FOUND,_r.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw ce(new Error,"You cannot drop a hash attribute",ue.BAD_REQUEST,void 0,void 0,!0);if(_r.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw ce(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,ue.BAD_REQUEST,void 0,void 0,!0);try{return await cr.dropAttribute(e),PM(e),kr.signalSchemaChange(new Yr(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw bT.error(`Got an error deleting attribute ${bM.inspect(e)}.`),s}}a(MM,"dropAttribute");function PM(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(PM,"dropAttributeFromGlobal");async function BM(e){if(!global.hdb_schema[e.schema])throw ce(new Error,Vr.SCHEMA_NOT_FOUND(e.schema),ue.NOT_FOUND,void 0,void 0,!0);if(!global.hdb_schema[e.schema][e.table])throw ce(new Error,Vr.TABLE_NOT_FOUND(e.schema,e.table),ue.NOT_FOUND,void 0,void 0,!0);try{return await cr.createAttribute(e),kr.signalSchemaChange(new Yr(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}catch(t){throw bT.error(t),t}}a(BM,"createAttribute")});var qT=d((UG,GT)=>{"use strict";var H_=Vt(),MT=g(),PT=Re(),HM=f(),zi=p(),BT=DT(),vM=mo(),{RemotePayloadObject:GM}=Bs(),{handleHDBError:HT,hdb_errors:qM}=q(),{HTTP_STATUS_CODES:vT}=qM,{NodeSubscription:FM}=Ps();GT.exports=xM;async function xM(e,t){let r;try{r=await H_.request(`${t}.${PT.REQUEST_SUFFIX}`,new GM(HM.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),zi.trace("Response from remote describe all request:",r)}catch(o){zi.error(`addNode received error from describe all request to remote node: ${o}`);let _=H_.requestErrorHandler(o,"add_node",t);throw HT(new Error,_,vT.INTERNAL_SERVER_ERROR,"error",_)}if(r.status===PT.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw HT(new Error,o,vT.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:_,table:c}=o,u=MT.doesSchemaExist(_),E=s[_]!==void 0,l=MT.doesTableExist(_,c),h=s?.[_]?.[c]!==void 0;if(!u&&!E||!l&&!h){n.push(o);continue}if(!u&&E&&(zi.trace(`addNode creating schema: ${_}`),await BT.createSchema({operation:"create_schema",schema:_})),!l&&h){zi.trace(`addNode creating table: ${c} in schema: ${_}`);let A=new vM(_,c,s[_][c].hash_attribute);await BT.createTable(A)}await H_.createLocalTableStream(_,c);let S=new FM(_,c,o.publish,o.subscribe);S.start_time=o.start_time,i.push(S)}return{added:i,skipped:n}}a(xM,"reviewSubscriptions")});var kT=d((DG,VT)=>{"use strict";var{handleHDBError:ji,hdb_errors:VM}=q(),{HTTP_STATUS_CODES:ea}=VM,{addUpdateNodeValidator:kM}=gT(),Vs=p(),xT=f(),FT=Re(),YM=g(),v_=Vt(),ks=qr(),$M=Q(),KM=qT(),{Node:WM,NodeSubscription:QM}=Ps(),JM="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",XM="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",ZM=$M.get(xT.CONFIG_PARAMS.CLUSTERING_NODENAME);VT.exports=zM;async function zM(e,t=!1){Vs.trace("addNode called with:",e),ks.checkClusteringEnabled();let r=kM(e);if(r)throw ji(r,r.message,ea.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let l=await ks.getNodeRecord(s);if(!YM.isEmptyOrZeroLength(l))throw ji(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,ea.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await KM(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=JM,o;let _=ks.buildNodePayloads(n,ZM,xT.OPERATIONS_ENUM.ADD_NODE,await ks.getSystemInfo());Vs.trace("addNode sending remote payload:",_);let c;try{c=await v_.request(`${s}.${FT.REQUEST_SUFFIX}`,_)}catch(l){Vs.error(`addNode received error from request: ${l}`);let h=v_.requestErrorHandler(l,"add_node",s);throw ji(new Error,h,ea.INTERNAL_SERVER_ERROR,"error",h)}if(c.status===FT.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${s}: ${c.message}`;throw ji(new Error,l,ea.INTERNAL_SERVER_ERROR,"error",l)}Vs.trace(c);let u=[];for(let l=0,h=n.length;l<h;l++){let S=n[l];Vs.trace("Add node updating work stream for node:",s,"subscriptions:",S),await v_.updateWorkStream(S,s),n[l].start_time===void 0&&delete n[l].start_time,u.push(new QM(S.schema,S.table,S.publish,S.subscribe))}let E=new WM(s,u,c.system_info);return await ks.upsertNodeRecord(E),i.length>0?o.message=XM:o.message=`Successfully added '${s}' to manifest`,o}a(zM,"addNode")});var $T=d((MG,YT)=>{"use strict";var jM=Re(),ta=class{constructor(t,r,s,n,i,o,_,c,u,E,l,h,S){this.port=t,this.server_name=r+jM.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:_},this.leafnodes={port:c,tls:{cert_file:n,key_file:i,ca_file:o,insecure:_}},this.cluster={name:u,port:E,routes:l,tls:{cert_file:n,key_file:i,ca_file:o,insecure:_}},this.accounts={SYS:{users:h},HDB:{users:S}},this.system_account="SYS"}};a(ta,"HubConfigObject");YT.exports=ta});var QT=d((PG,WT)=>{"use strict";var KT=Re(),ra=class{constructor(t,r,s,n,i,o,_,c,u,E,l,h){this.port=t,this.server_name=r+KT.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+KT.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:E,ca_file:l,insecure:h},this.leafnodes={remotes:[{tls:{ca_file:l,insecure:h},urls:i,account:"SYS"},{tls:{ca_file:l,insecure:h},urls:o,account:"HDB"}]},this.accounts={SYS:{users:_},HDB:{users:c,jetstream:"enabled"}},this.system_account="SYS"}};a(ra,"LeafConfigObject");WT.exports=ra});var XT=d((BG,JT)=>{"use strict";var sa=class{constructor(t,r){this.user=t,this.password=r}};a(sa,"HdbUserObject");JT.exports=sa});var zT=d((HG,ZT)=>{"use strict";var eP=Re(),na=class{constructor(t,r){this.user=t+eP.SERVER_SUFFIX.ADMIN,this.password=r}};a(na,"SysUserObject");ZT.exports=na});var rf=d((vG,tf)=>{"use strict";var $r=require("path"),_a=require("fs-extra"),tP=$T(),rP=QT(),sP=XT(),nP=zT(),G_=Us(),Wr=g(),Ye=zr(),oa=f(),ia=Re(),{CONFIG_PARAMS:se}=oa,ca=p(),ua=Q(),jT=bs(),q_=Vt(),Kr="clustering",iP=1e4,ef=5;tf.exports={generateNatsConfig:aP,removeNatsConfig:oP};async function aP(e=!1,t=void 0){ua.initSync();let r=ua.get(se.ROOTPATH),s=$r.join(r,Kr,ia.PID_FILES.HUB),n=$r.join(r,Kr,ia.PID_FILES.LEAF),i=$r.join(r,Kr,"leaf"),o=$r.join(r,Kr,ia.NATS_CONFIG_FILES.HUB_SERVER),_=$r.join(r,Kr,ia.NATS_CONFIG_FILES.LEAF_SERVER),c=Ye.getConfigFromFile(se.CLUSTERING_TLS_CERTIFICATE),u=Ye.getConfigFromFile(se.CLUSTERING_TLS_PRIVATEKEY),E=Ye.getConfigFromFile(se.CLUSTERING_TLS_CERT_AUTH),l=Ye.getConfigFromFile(se.CLUSTERING_TLS_INSECURE),h=Ye.getConfigFromFile(se.CLUSTERING_NODENAME),S=Ye.getConfigFromFile(se.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await q_.checkNATSServerInstalled()||Ea("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let A=await G_.listUsers(),N=Ye.getConfigFromFile(se.CLUSTERING_USER),b=await G_.getClusterUser();(Wr.isEmpty(b)||b.active!==!0)&&Ea(`invalid cluster user '${N}'`),e||(await aa(se.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await aa(se.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await aa(se.CLUSTERING_HUBSERVER_NETWORK_PORT),await aa(se.CLUSTERING_LEAFSERVER_NETWORK_PORT));let Ae=[],v=[];for(let[Ws,Ct]of A.entries())Ct.role.role===oa.ROLE_TYPES_ENUM.CLUSTER_USER&&Ct.active&&(Ae.push(new nP(Ct.username,jT.decrypt(Ct.hash))),v.push(new sP(Ct.username,jT.decrypt(Ct.hash))));let W=[],{hub_routes:$e}=Ye.getClusteringRoutes();if(!Wr.isEmptyOrZeroLength($e))for(let Ws of $e)W.push(`tls://${b.sys_name_encoded}:${b.uri_encoded_d_hash}@${Ws.host}:${Ws.port}`);let Ks=new tP(Ye.getConfigFromFile(se.CLUSTERING_HUBSERVER_NETWORK_PORT),h,s,c,u,E,l,S,Ye.getConfigFromFile(se.CLUSTERING_HUBSERVER_CLUSTER_NAME),Ye.getConfigFromFile(se.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),W,Ae,v);t=Wr.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===oa.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await _a.writeJson(o,Ks),ca.trace(`Hub server config written to ${o}`));let $_=`tls://${b.sys_name_encoded}:${b.uri_encoded_d_hash}@0.0.0.0:${S}`,K_=`tls://${b.uri_encoded_name}:${b.uri_encoded_d_hash}@0.0.0.0:${S}`,W_=new rP(Ye.getConfigFromFile(se.CLUSTERING_LEAFSERVER_NETWORK_PORT),h,n,i,[$_],[K_],Ae,v,c,u,E,l);(t===void 0||t===oa.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await _a.writeJson(_,W_),ca.trace(`Leaf server config written to ${_}`))}a(aP,"generateNatsConfig");async function aa(e){let t=ua.get(e);Wr.isEmpty(t)&&Ea(`port undefined for '${e}'`),await Wr.isPortTaken(t)&&Ea(`'${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.`)}a(aa,"isPortAvailable");function Ea(e){let t=`Error generating clustering config: ${e}`;ca.error(t),console.error(t),process.exit(1)}a(Ea,"generateNatsConfigError");async function oP(e){let{port:t,config_file:r}=q_.getServerConfig(e),{username:s,decrypt_hash:n}=await G_.getClusterUser(),i=0,o=500;for(;i<ef;){try{let u=await q_.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){ca.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=ef)throw new Error(`removeNatsConfig timed out waiting to connect to ${e}`);await Wr.async_set_timeout(o*i)}let _="0".repeat(iP),c=$r.join(ua.get(se.ROOTPATH),Kr,r);await _a.writeFile(c,_),await _a.remove(c)}a(oP,"removeNatsConfig")});var x_=d((GG,uf)=>{"use strict";var K=Q(),sf=Zo(),m=f(),F_=Re(),ee=require("path"),{PACKAGE_ROOT:la}=f(),X="/dev/null",Qr=ee.join(la,"launchServiceScripts"),nf=ee.join(la,"utility/scripts"),_P=ee.join(nf,m.HDB_RESTART_SCRIPT),af=ee.resolve(la,"dependencies",`${process.platform}-${process.arch}`,F_.NATS_BINARY_NAME),Ee,le;function lt(){(Ee===void 0||le===void 0)&&(K.initSync(),Ee=K.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),le=K.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY))}a(lt,"initLogConfig");function of(){lt();let e=ee.join(le,m.PROCESS_LOG_NAMES.IPC),t={name:m.PROCESS_DESCRIPTORS.IPC,exec_mode:"fork",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.IPC},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:m.SERVICE_SERVERS_CWD.IPC};return Ee||(t.out_file=X,t.error_file=X),{...t,script:m.SERVICE_SERVERS.IPC}}a(of,"generateIPCServerConfig");function _f(){lt(),K.initSync(),Ee=K.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),le=K.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=ee.join(le,m.PROCESS_LOG_NAMES.HDB),t=sf.licenseSearch(),r=t.ram_allocation?m.MEM_SETTING_KEY+t.ram_allocation:m.MEM_SETTING_KEY+m.RAM_ALLOCATION_ENUM.DEFAULT,s={name:m.PROCESS_DESCRIPTORS.HDB,script:m.LAUNCH_SERVICE_SCRIPTS.HDB,exec_mode:"cluster",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.HDB},merge_logs:!0,out_file:e,error_file:e,instances:K.get(m.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Qr};return Ee||(s.out_file=X,s.error_file=X),s}a(_f,"generateHDBServerConfig");function cf(){lt(),K.initSync(),Ee=K.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),le=K.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=ee.join(le,m.PROCESS_LOG_NAMES.CUSTOM_FUNCTIONS),t=sf.licenseSearch(),r=t.ram_allocation?m.MEM_SETTING_KEY+t.ram_allocation:m.MEM_SETTING_KEY+m.RAM_ALLOCATION_ENUM.DEFAULT,s={name:m.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS,script:m.LAUNCH_SERVICE_SCRIPTS.CUSTOM_FUNCTIONS,exec_mode:"cluster",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS},merge_logs:!0,out_file:e,error_file:e,instances:K.get(m.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Qr};return Ee||(s.out_file=X,s.error_file=X),s}a(cf,"generateCFServerConfig");function cP(){lt(),K.initSync(),Ee=K.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),le=K.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=K.get(m.CONFIG_PARAMS.ROOTPATH),t=ee.join(e,"clustering",F_.NATS_CONFIG_FILES.HUB_SERVER),r=ee.join(le,m.PROCESS_LOG_NAMES.CLUSTERING_HUB),s={name:m.PROCESS_DESCRIPTORS.CLUSTERING_HUB,script:af,args:`-c ${t}`,exec_mode:"fork",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Ee||(s.out_file=X,s.error_file=X),s}a(cP,"generateNatsHubServerConfig");function uP(){lt(),K.initSync(),Ee=K.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),le=K.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=K.get(m.CONFIG_PARAMS.ROOTPATH),t=ee.join(e,"clustering",F_.NATS_CONFIG_FILES.LEAF_SERVER),r=ee.join(le,m.PROCESS_LOG_NAMES.CLUSTERING_LEAF),s={name:m.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,script:af,args:`-c ${t}`,exec_mode:"fork",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Ee||(s.out_file=X,s.error_file=X),s}a(uP,"generateNatsLeafServerConfig");function EP(){lt(),K.initSync();let e=ee.join(le,m.PROCESS_LOG_NAMES.CLUSTERING_INGEST_SERVICE),t={name:m.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,script:m.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,exec_mode:"cluster",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Qr};return Ee||(t.out_file=X,t.error_file=X),t}a(EP,"generateNatsIngestServiceConfig");function lP(){lt(),K.initSync();let e=ee.join(le,m.PROCESS_LOG_NAMES.CLUSTERING_REPLY_SERVICE),t={name:m.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE,script:m.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,exec_mode:"cluster",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Qr};return Ee||(t.out_file=X,t.error_file=X),t}a(lP,"generateNatsReplyServiceConfig");function dP(){lt(),K.initSync();let e=ee.join(le,m.PROCESS_LOG_NAMES.CLUSTERING_UPGRADE),t={name:m.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:m.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Qr,autorestart:!1};return Ee||(t.out_file=X,t.error_file=X),t}a(dP,"generateClusteringUpgradeV4ServiceConfig");function SP(){lt();let e=ee.join(le,m.PROCESS_LOG_NAMES.PM2),t={name:m.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.RESTART_HDB},merge_logs:!0,out_file:e,error_file:e,instances:1,autorestart:!1,cwd:nf};return Ee||(t.out_file=X,t.error_file=X),{...t,script:_P}}a(SP,"generateRestart");function hP(e){lt();let t=ee.join(le,m.PROCESS_LOG_NAMES.JOBS),r=ee.join(la,"server/jobs"),s={name:`JOB-${e}`,exec_mode:"fork",env:{[m.PROCESS_NAME_ENV_PROP]:`JOB-${e}`},merge_logs:!0,out_file:t,error_file:t,instances:1,cwd:Qr,autorestart:!1};return Ee||(s.out_file=X,s.error_file=X),{...s,script:ee.join(r,"jobProcess.js")}}a(hP,"generateJobConfig");function TP(){return{apps:[of(),_f(),cf()]}}a(TP,"generateAllServiceConfigs");uf.exports={generateAllServiceConfigs:TP,generateIPCServerConfig:of,generateHDBServerConfig:_f,generateCFServerConfig:cf,generateRestart:SP,generateNatsHubServerConfig:cP,generateNatsLeafServerConfig:uP,generateNatsIngestServiceConfig:EP,generateNatsReplyServiceConfig:lP,generateClusteringUpgradeV4ServiceConfig:dP,generateJobConfig:hP}});var Of=d((qG,Nf)=>{"use strict";var C=f(),da=g(),Ys=rf(),Sa=Vt(),fP=Re(),M=require("pm2"),RP=require("fs-extra"),pt=x_(),ye=Q(),It=p(),mP=x_(),AP=qr(),NP=require("util"),lf=NP.promisify(require("child_process").exec),df=require("path");Nf.exports={start:ur,stop:Ta,reload:hf,restart:Tf,list:k_,describe:fa,connect:dt,kill:Rf,startAllServices:UP,startService:ha,getUniqueServicesList:Y_,restartAllServices:DP,stopAllServices:MP,isServiceRegistered:mf,reloadStopStart:V_,restartHdb:ff,deleteProcess:wP,configureLogRotate:HP,startClustering:Af,isHdbRestartRunning:yP,isClusteringRunning:GP,stopClustering:vP,reloadClustering:qP};var{PACKAGE_ROOT:OP}=f(),gP="2.7.0",Sf=df.join(OP,"node_modules/pm2/bin/pm2"),pP="Log rotate installed.",IP="Error installing log rotate.",CP="Log rotate updated.",bP="Error updating log rotate.",LP="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 dt(){return new Promise((e,t)=>{M.connect((r,s)=>{r&&t(r),e(s)})})}a(dt,"connect");function ur(e){return new Promise(async(t,r)=>{try{await dt()}catch(s){r(s)}M.start(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(ur,"start");function Ta(e){return new Promise(async(t,r)=>{try{await dt()}catch(s){r(s)}M.stop(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.delete(e,(i,o)=>{i&&(M.disconnect(),r(s)),M.disconnect(),t(o)})})})}a(Ta,"stop");function hf(e){return new Promise(async(t,r)=>{try{await dt()}catch(s){r(s)}M.reload(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(hf,"reload");function Tf(e){return new Promise(async(t,r)=>{try{await dt()}catch(s){r(s)}M.restart(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(Tf,"restart");function wP(e){return new Promise(async(t,r)=>{try{await dt()}catch(s){r(s)}M.delete(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(wP,"deleteProcess");async function ff(){await ur(mP.generateRestart())}a(ff,"restartHdb");async function yP(){let e=await k_();for(let t in e)if(e[t].name===C.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(yP,"isHdbRestartRunning");function k_(){return new Promise(async(e,t)=>{try{await dt()}catch(r){t(r)}M.list((r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(k_,"list");function fa(e){return new Promise(async(t,r)=>{try{await dt()}catch(s){r(s)}M.describe(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(fa,"describe");function Rf(){return new Promise(async(e,t)=>{try{await dt()}catch(r){t(r)}M.killDaemon((r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(Rf,"kill");async function UP(){try{await Af(),await ur(pt.generateAllServiceConfigs())}catch(e){throw M.disconnect(),e}}a(UP,"startAllServices");async function ha(e){try{let t;switch(e=e.toLowerCase(),e){case C.PROCESS_DESCRIPTORS.IPC.toLowerCase():t=pt.generateIPCServerConfig();break;case C.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=pt.generateHDBServerConfig();break;case C.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase():t=pt.generateCFServerConfig();break;case C.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=pt.generateNatsIngestServiceConfig();break;case C.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=pt.generateNatsReplyServiceConfig();break;case C.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=pt.generateNatsHubServerConfig(),await ur(t),await Ys.removeNatsConfig(e);return;case C.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=pt.generateNatsLeafServerConfig(),await ur(t),await Ys.removeNatsConfig(e);return;case C.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=pt.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await ur(t)}catch(t){throw M.disconnect(),t}}a(ha,"startService");async function Y_(){try{let e=await k_(),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 M.disconnect(),e}}a(Y_,"getUniqueServicesList");async function DP(e=[]){try{let t=!1,r=await Y_();for(let s=0,n=Object.values(r).length;s<n;s++){let i=Object.values(r)[s],o=i.name;e.includes(o)||(i.exec_mode==="cluster_mode"?o===C.PROCESS_DESCRIPTORS.HDB?t=!0:await V_(o):await Tf(o))}t&&await V_(C.PROCESS_DESCRIPTORS.HDB)}catch(t){throw M.disconnect(),t}}a(DP,"restartAllServices");async function MP(){try{let e=await Y_();for(let t=0,r=Object.values(e).length;t<r;t++){let s=Object.values(e)[t];await Ta(s.name)}if(await Rf(),ye.get(C.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND)===!0){let t=(await RP.readFile(df.join(ye.get(C.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),C.FOREGROUND_PID_FILE))).toString();try{process.kill(t,"SIGTERM")}catch(r){It.warn(`Error terminating foreground process: ${r}`)}}}catch(e){throw M.disconnect(),e}}a(MP,"stopAllServices");async function mf(e){return!da.isEmptyOrZeroLength(await fa(e))}a(mf,"isServiceRegistered");async function V_(e){let t=e===C.PROCESS_DESCRIPTORS.HDB?ye.get(C.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):ye.get(C.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await fa(e),s=da.isEmptyOrZeroLength(r)?0:r.length;t!==s?e===C.PROCESS_DESCRIPTORS.HDB?It.error(LP):(await Ta(e),await ha(e)):e===C.PROCESS_DESCRIPTORS.HDB?await ff():await hf(e)}a(V_,"reloadStopStart");function PP(){return new Promise(async(e,t)=>{try{await dt()}catch(r){t(r)}M.stop(C.PROCESS_DESCRIPTORS.PM2_LOGROTATE,(r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(PP,"stopLogrotate");async function BP(){let{stdout:e,stderr:t}=await lf(`${process.platform==="win32"?"node":""} ${Sf} install pm2-logrotate@${gP}`);if(It.debug(`loadLogRotate stdout: ${e}`),t)throw It.error(IP),t;It.info(pP)}a(BP,"installLogRotate");async function Ef(){let e={max_size:ye.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_MAX_SIZE),retain:ye.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_RETAIN),compress:ye.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_COMPRESS),dateFormat:ye.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_DATE_FORMAT),rotateModule:ye.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_MODULE),workerInterval:ye.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_WORKER_INTERVAL),rotateInterval:ye.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_INTERVAL),TZ:ye.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_TIMEZONE)},t="";for(let n in e)t+=`${process.platform==="win32"?"node":""} ${Sf} set pm2-logrotate:${n} ${e[n]}`,n!=="TZ"&&(t+=" && ");let{stdout:r,stderr:s}=await lf(t);if(It.debug(`updateLogRotateConfig stdout: ${r}`),s)throw It.error(bP),s;It.info(CP)}a(Ef,"updateLogRotateConfig");async function HP(){ye.initSync();let e=da.autoCastBoolean(ye.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE)),t=await fa(C.PROCESS_DESCRIPTORS.PM2_LOGROTATE),r,s=!1;if(da.isEmptyOrZeroLength(t)||(s=!0,r=t[0].pm2_env.status),e&&!s){await BP(),await Ef();return}if(e&&s){await ur(C.PROCESS_DESCRIPTORS.PM2_LOGROTATE),await Ef();return}!e&&r===C.PM2_PROCESS_STATUSES.ONLINE&&await PP()}a(HP,"configureLogRotate");async function Af(){for(let t in C.CLUSTERING_PROCESSES){let r=C.CLUSTERING_PROCESSES[t];await ha(r)}await Sa.createWorkQueueStream(fP.WORK_QUEUE_CONSUMER_NAMES),await Sa.updateNodeNameLocalStreams();let e=await AP.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===C.PRE_4_0_0_VERSION){It.info("Starting clustering upgrade 4.0.0 process"),await ha(C.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0);break}}a(Af,"startClustering");async function vP(){for(let e in C.CLUSTERING_PROCESSES){let t=C.CLUSTERING_PROCESSES[e];await Ta(t)}}a(vP,"stopClustering");async function GP(){for(let e in C.CLUSTERING_PROCESSES){let t=C.CLUSTERING_PROCESSES[e];if(await mf(t)===!1)return!1}return!0}a(GP,"isClusteringRunning");async function qP(){await Ys.generateNatsConfig(!0),await Sa.reloadNATSHub(),await Sa.reloadNATSLeaf(),await Ys.removeNatsConfig(C.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ys.removeNatsConfig(C.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(qP,"reloadClustering")});var bf=d((FG,Cf)=>{"use strict";var If=require("joi"),{string:gf}=If.types(),FP=We(),pf=f(),xP=Q(),VP=Re();Cf.exports=kP;function kP(e){let t=gf.invalid(xP.get(pf.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(VP.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=If.object({operation:gf.valid(pf.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return FP.validateBySchema(e,r)}a(kP,"removeNodeValidator")});var Pf=d((xG,Mf)=>{"use strict";var{handleHDBError:Lf,hdb_errors:YP}=q(),{HTTP_STATUS_CODES:wf}=YP,$P=bf(),$s=p(),yf=qr(),KP=g(),Ra=f(),Uf=Re(),Df=Vt(),WP=Q(),{RemotePayloadObject:QP}=Bs(),{NodeSubscription:JP}=Ps(),XP=Rs(),ZP=ko(),zP=WP.get(Ra.CONFIG_PARAMS.CLUSTERING_NODENAME);Mf.exports=jP;async function jP(e){$s.trace("removeNode called with:",e),yf.checkClusteringEnabled();let t=$P(e);if(t)throw Lf(t,t.message,wf.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await yf.getNodeRecord(r);if(KP.isEmptyOrZeroLength(s))throw Lf(new Error,`Node '${r}' was not found.`,wf.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new QP(Ra.OPERATIONS_ENUM.REMOVE_NODE,zP,[]),i,o=!1;try{i=await Df.request(`${r}.${Uf.REQUEST_SUFFIX}`,n),$s.trace("Remove node reply from remote node:",r,i)}catch(c){$s.error("removeNode received error from request:",c),o=!0}for(let c=0,u=s.subscriptions.length;c<u;c++){let E=s.subscriptions[c];$s.trace(`Remove node removing subscription: ${E.schema}.${E.table} for node: ${r}`);let l=new JP(E.schema,E.table,!1,!1);await Df.updateWorkStream(l,r)}let _=new XP(Ra.SYSTEM_SCHEMA_NAME,Ra.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await ZP.deleteRecord(_),i?.status===Uf.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?($s.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(jP,"removeNode")});var Hf=d((VG,Bf)=>{"use strict";var ma=f(),eB=g(),tB=qr(),rt=p(),rB=mT(),sB=kT(),nB=Of(),iB=Ri(),aB=Pf(),oB=require("semver/functions/gte"),_B=3e4,cB=7;Bf.exports=uB;async function uB(){try{rt.notify("Starting update nodes. This process will attempt to update any node connections the need to be reestablished after a 4.0.0 upgrade"),await iB.setSchemaDataToGlobalAsync();let e=await tB.getAllNodeRecords(),t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];n.system_info.hdb_version===ma.PRE_4_0_0_VERSION&&t.push(EB(n))}await Promise.allSettled(t),rt.notify("Shutting down 4.0.0 clustering upgrade process"),await nB.deleteProcess(ma.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0)}catch(e){throw rt.error(e),e}}a(uB,"updateAllNodes");async function EB(e){try{let{name:t,subscriptions:r}=e;rt.notify("Running 4.0.0 update on node:",t);let s=!1,n=0;for(;n<cB;){let i=[];if(await rB.buildNodeStatus(e,i),rt.trace("Received status:",i[0].status,"from node:",t),i[0].status==="open"&&oB(i[0].system_info.hdb_version,"4.0.0")){rt.notify("Received open status from node:",t,"calling add node");let o={operation:ma.OPERATIONS_ENUM.ADD_NODE,node_name:t,subscriptions:r};await sB(o,!0),rt.notify("Successfully added node",t),s=!0;break}n=(Date.now()-e.__updatedtime__)/(1e3*60*60*24),rt.trace("Update node has been running for",n,"days. Calling node status again for node:",t),await eB.async_set_timeout(_B)}s||(rt.error("4.0.0 node update was unable to update connection to node:",t),rt.error("Removing following node record from hdb_nodes",e),await aB({operation:ma.OPERATIONS_ENUM.REMOVE_NODE,node_name:t}))}catch(t){throw rt.error(t),t}}a(EB,"updateNode")});var lB=Hf();(async()=>{try{await lB()}catch(e){console.error("Error launching 4.0.0 node update"),console.error(e),process.exit(1)}})();
|